mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-16 20:08:09 +00:00
add proxy_state_updated events (#908)
This commit is contained in:
@ -37,6 +37,7 @@ Each event will be submitted via HTTP POST to the user provided URL.
|
|||||||
* [proxy_created](#proxy_created)
|
* [proxy_created](#proxy_created)
|
||||||
* [proxy_deleted](#proxy_deleted)
|
* [proxy_deleted](#proxy_deleted)
|
||||||
* [proxy_failed](#proxy_failed)
|
* [proxy_failed](#proxy_failed)
|
||||||
|
* [proxy_state_updated](#proxy_state_updated)
|
||||||
* [regression_reported](#regression_reported)
|
* [regression_reported](#regression_reported)
|
||||||
* [scaleset_created](#scaleset_created)
|
* [scaleset_created](#scaleset_created)
|
||||||
* [scaleset_deleted](#scaleset_deleted)
|
* [scaleset_deleted](#scaleset_deleted)
|
||||||
@ -1411,6 +1412,61 @@ Each event will be submitted via HTTP POST to the user provided URL.
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### proxy_state_updated
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"proxy_id": "00000000-0000-0000-0000-000000000000",
|
||||||
|
"region": "eastus",
|
||||||
|
"state": "init"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Schema
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"definitions": {
|
||||||
|
"VmState": {
|
||||||
|
"description": "An enumeration.",
|
||||||
|
"enum": [
|
||||||
|
"init",
|
||||||
|
"extensions_launch",
|
||||||
|
"extensions_failed",
|
||||||
|
"vm_allocation_failed",
|
||||||
|
"running",
|
||||||
|
"stopping",
|
||||||
|
"stopped"
|
||||||
|
],
|
||||||
|
"title": "VmState"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": {
|
||||||
|
"proxy_id": {
|
||||||
|
"format": "uuid",
|
||||||
|
"title": "Proxy Id",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"region": {
|
||||||
|
"title": "Region",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"$ref": "#/definitions/VmState"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"region",
|
||||||
|
"proxy_id",
|
||||||
|
"state"
|
||||||
|
],
|
||||||
|
"title": "EventProxyStateUpdated",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### regression_reported
|
### regression_reported
|
||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
@ -4963,6 +5019,29 @@ Each event will be submitted via HTTP POST to the user provided URL.
|
|||||||
"title": "EventProxyFailed",
|
"title": "EventProxyFailed",
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
"EventProxyStateUpdated": {
|
||||||
|
"properties": {
|
||||||
|
"proxy_id": {
|
||||||
|
"format": "uuid",
|
||||||
|
"title": "Proxy Id",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"region": {
|
||||||
|
"title": "Region",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"$ref": "#/definitions/VmState"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"region",
|
||||||
|
"proxy_id",
|
||||||
|
"state"
|
||||||
|
],
|
||||||
|
"title": "EventProxyStateUpdated",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"EventRegressionReported": {
|
"EventRegressionReported": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"container": {
|
"container": {
|
||||||
@ -5248,6 +5327,7 @@ Each event will be submitted via HTTP POST to the user provided URL.
|
|||||||
"proxy_created",
|
"proxy_created",
|
||||||
"proxy_deleted",
|
"proxy_deleted",
|
||||||
"proxy_failed",
|
"proxy_failed",
|
||||||
|
"proxy_state_updated",
|
||||||
"scaleset_created",
|
"scaleset_created",
|
||||||
"scaleset_deleted",
|
"scaleset_deleted",
|
||||||
"scaleset_failed",
|
"scaleset_failed",
|
||||||
@ -5858,6 +5938,19 @@ Each event will be submitted via HTTP POST to the user provided URL.
|
|||||||
},
|
},
|
||||||
"title": "UserInfo",
|
"title": "UserInfo",
|
||||||
"type": "object"
|
"type": "object"
|
||||||
|
},
|
||||||
|
"VmState": {
|
||||||
|
"description": "An enumeration.",
|
||||||
|
"enum": [
|
||||||
|
"init",
|
||||||
|
"extensions_launch",
|
||||||
|
"extensions_failed",
|
||||||
|
"vm_allocation_failed",
|
||||||
|
"running",
|
||||||
|
"stopping",
|
||||||
|
"stopped"
|
||||||
|
],
|
||||||
|
"title": "VmState"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -5899,6 +5992,9 @@ Each event will be submitted via HTTP POST to the user provided URL.
|
|||||||
{
|
{
|
||||||
"$ref": "#/definitions/EventProxyDeleted"
|
"$ref": "#/definitions/EventProxyDeleted"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"$ref": "#/definitions/EventProxyStateUpdated"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"$ref": "#/definitions/EventScalesetFailed"
|
"$ref": "#/definitions/EventScalesetFailed"
|
||||||
},
|
},
|
||||||
|
@ -11,7 +11,12 @@ from uuid import UUID, uuid4
|
|||||||
|
|
||||||
from azure.mgmt.compute.models import VirtualMachine
|
from azure.mgmt.compute.models import VirtualMachine
|
||||||
from onefuzztypes.enums import ErrorCode, VmState
|
from onefuzztypes.enums import ErrorCode, VmState
|
||||||
from onefuzztypes.events import EventProxyCreated, EventProxyDeleted, EventProxyFailed
|
from onefuzztypes.events import (
|
||||||
|
EventProxyCreated,
|
||||||
|
EventProxyDeleted,
|
||||||
|
EventProxyFailed,
|
||||||
|
EventProxyStateUpdated,
|
||||||
|
)
|
||||||
from onefuzztypes.models import (
|
from onefuzztypes.models import (
|
||||||
Authentication,
|
Authentication,
|
||||||
Error,
|
Error,
|
||||||
@ -81,7 +86,7 @@ class Proxy(ORMMixin):
|
|||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self.save_proxy_config()
|
self.save_proxy_config()
|
||||||
self.state = VmState.extensions_launch
|
self.set_state(VmState.extensions_launch)
|
||||||
else:
|
else:
|
||||||
result = vm.create()
|
result = vm.create()
|
||||||
if isinstance(result, Error):
|
if isinstance(result, Error):
|
||||||
@ -115,8 +120,7 @@ class Proxy(ORMMixin):
|
|||||||
EventProxyFailed(region=self.region, proxy_id=self.proxy_id, error=error)
|
EventProxyFailed(region=self.region, proxy_id=self.proxy_id, error=error)
|
||||||
)
|
)
|
||||||
self.error = error
|
self.error = error
|
||||||
self.state = VmState.stopping
|
self.set_state(VmState.stopping)
|
||||||
self.save()
|
|
||||||
|
|
||||||
def extensions_launch(self) -> None:
|
def extensions_launch(self) -> None:
|
||||||
vm = self.get_vm()
|
vm = self.get_vm()
|
||||||
@ -146,7 +150,7 @@ class Proxy(ORMMixin):
|
|||||||
self.set_failed(result)
|
self.set_failed(result)
|
||||||
return
|
return
|
||||||
elif result:
|
elif result:
|
||||||
self.state = VmState.running
|
self.set_state(VmState.running)
|
||||||
|
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
@ -298,3 +302,16 @@ class Proxy(ORMMixin):
|
|||||||
def delete(self) -> None:
|
def delete(self) -> None:
|
||||||
super().delete()
|
super().delete()
|
||||||
send_event(EventProxyDeleted(region=self.region, proxy_id=self.proxy_id))
|
send_event(EventProxyDeleted(region=self.region, proxy_id=self.proxy_id))
|
||||||
|
|
||||||
|
def set_state(self, state: VmState) -> None:
|
||||||
|
if self.state == state:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.state = state
|
||||||
|
self.save()
|
||||||
|
|
||||||
|
send_event(
|
||||||
|
EventProxyStateUpdated(
|
||||||
|
region=self.region, proxy_id=self.proxy_id, state=self.state
|
||||||
|
)
|
||||||
|
)
|
||||||
|
@ -41,8 +41,7 @@ def main(mytimer: func.TimerRequest, dashboard: func.Out[str]) -> None: # noqa:
|
|||||||
)
|
)
|
||||||
if not proxy.is_used():
|
if not proxy.is_used():
|
||||||
logging.info("stopping one proxy in %s.", proxy.region)
|
logging.info("stopping one proxy in %s.", proxy.region)
|
||||||
proxy.state = VmState.stopping
|
proxy.set_state(VmState.stopping)
|
||||||
proxy.save()
|
|
||||||
|
|
||||||
scalesets = Scaleset.search()
|
scalesets = Scaleset.search()
|
||||||
for scaleset in scalesets:
|
for scaleset in scalesets:
|
||||||
|
@ -21,7 +21,7 @@ def main(mytimer: func.TimerRequest, dashboard: func.Out[str]) -> None: # noqa:
|
|||||||
logging.error(
|
logging.error(
|
||||||
PROXY_LOG_PREFIX + "alive check failed, stopping: %s", proxy.region
|
PROXY_LOG_PREFIX + "alive check failed, stopping: %s", proxy.region
|
||||||
)
|
)
|
||||||
proxy.state = VmState.stopping
|
proxy.set_state(VmState.stopping)
|
||||||
proxy.save()
|
proxy.save()
|
||||||
else:
|
else:
|
||||||
proxy.save_proxy_config()
|
proxy.save_proxy_config()
|
||||||
|
@ -16,6 +16,7 @@ from onefuzztypes.enums import (
|
|||||||
ScalesetState,
|
ScalesetState,
|
||||||
TaskState,
|
TaskState,
|
||||||
TaskType,
|
TaskType,
|
||||||
|
VmState,
|
||||||
)
|
)
|
||||||
from onefuzztypes.events import (
|
from onefuzztypes.events import (
|
||||||
Event,
|
Event,
|
||||||
@ -33,6 +34,7 @@ from onefuzztypes.events import (
|
|||||||
EventProxyCreated,
|
EventProxyCreated,
|
||||||
EventProxyDeleted,
|
EventProxyDeleted,
|
||||||
EventProxyFailed,
|
EventProxyFailed,
|
||||||
|
EventProxyStateUpdated,
|
||||||
EventRegressionReported,
|
EventRegressionReported,
|
||||||
EventScalesetCreated,
|
EventScalesetCreated,
|
||||||
EventScalesetDeleted,
|
EventScalesetDeleted,
|
||||||
@ -163,6 +165,11 @@ def main() -> None:
|
|||||||
proxy_id=UUID(int=0),
|
proxy_id=UUID(int=0),
|
||||||
error=Error(code=ErrorCode.PROXY_FAILED, errors=["example error message"]),
|
error=Error(code=ErrorCode.PROXY_FAILED, errors=["example error message"]),
|
||||||
),
|
),
|
||||||
|
EventProxyStateUpdated(
|
||||||
|
region=Region("eastus"),
|
||||||
|
proxy_id=UUID(int=0),
|
||||||
|
state=VmState.init,
|
||||||
|
),
|
||||||
EventPoolCreated(
|
EventPoolCreated(
|
||||||
pool_name=PoolName("example"),
|
pool_name=PoolName("example"),
|
||||||
os=OS.linux,
|
os=OS.linux,
|
||||||
|
@ -10,7 +10,15 @@ from uuid import UUID, uuid4
|
|||||||
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
from .enums import OS, Architecture, NodeState, ScalesetState, TaskState, TaskType
|
from .enums import (
|
||||||
|
OS,
|
||||||
|
Architecture,
|
||||||
|
NodeState,
|
||||||
|
ScalesetState,
|
||||||
|
TaskState,
|
||||||
|
TaskType,
|
||||||
|
VmState,
|
||||||
|
)
|
||||||
from .models import (
|
from .models import (
|
||||||
AutoScaleConfig,
|
AutoScaleConfig,
|
||||||
Error,
|
Error,
|
||||||
@ -135,6 +143,12 @@ class EventProxyFailed(BaseEvent):
|
|||||||
error: Error
|
error: Error
|
||||||
|
|
||||||
|
|
||||||
|
class EventProxyStateUpdated(BaseEvent):
|
||||||
|
region: Region
|
||||||
|
proxy_id: UUID
|
||||||
|
state: VmState
|
||||||
|
|
||||||
|
|
||||||
class EventNodeCreated(BaseEvent):
|
class EventNodeCreated(BaseEvent):
|
||||||
machine_id: UUID
|
machine_id: UUID
|
||||||
scaleset_id: Optional[UUID]
|
scaleset_id: Optional[UUID]
|
||||||
@ -198,6 +212,7 @@ Event = Union[
|
|||||||
EventProxyFailed,
|
EventProxyFailed,
|
||||||
EventProxyCreated,
|
EventProxyCreated,
|
||||||
EventProxyDeleted,
|
EventProxyDeleted,
|
||||||
|
EventProxyStateUpdated,
|
||||||
EventScalesetFailed,
|
EventScalesetFailed,
|
||||||
EventScalesetCreated,
|
EventScalesetCreated,
|
||||||
EventScalesetDeleted,
|
EventScalesetDeleted,
|
||||||
@ -225,6 +240,7 @@ class EventType(Enum):
|
|||||||
proxy_created = "proxy_created"
|
proxy_created = "proxy_created"
|
||||||
proxy_deleted = "proxy_deleted"
|
proxy_deleted = "proxy_deleted"
|
||||||
proxy_failed = "proxy_failed"
|
proxy_failed = "proxy_failed"
|
||||||
|
proxy_state_updated = "proxy_state_updated"
|
||||||
scaleset_created = "scaleset_created"
|
scaleset_created = "scaleset_created"
|
||||||
scaleset_deleted = "scaleset_deleted"
|
scaleset_deleted = "scaleset_deleted"
|
||||||
scaleset_failed = "scaleset_failed"
|
scaleset_failed = "scaleset_failed"
|
||||||
@ -253,6 +269,7 @@ EventTypeMap = {
|
|||||||
EventType.proxy_created: EventProxyCreated,
|
EventType.proxy_created: EventProxyCreated,
|
||||||
EventType.proxy_deleted: EventProxyDeleted,
|
EventType.proxy_deleted: EventProxyDeleted,
|
||||||
EventType.proxy_failed: EventProxyFailed,
|
EventType.proxy_failed: EventProxyFailed,
|
||||||
|
EventType.proxy_state_updated: EventProxyStateUpdated,
|
||||||
EventType.scaleset_created: EventScalesetCreated,
|
EventType.scaleset_created: EventScalesetCreated,
|
||||||
EventType.scaleset_deleted: EventScalesetDeleted,
|
EventType.scaleset_deleted: EventScalesetDeleted,
|
||||||
EventType.scaleset_failed: EventScalesetFailed,
|
EventType.scaleset_failed: EventScalesetFailed,
|
||||||
|
Reference in New Issue
Block a user