mirror of
https://github.com/GNS3/gns3-server
synced 2024-12-26 00:38:10 +00:00
Send compute usage via in the compute.updated notification
Ref https://github.com/GNS3/gns3-gui/issues/1261
This commit is contained in:
parent
66959ee4e9
commit
543b423e03
@ -89,6 +89,8 @@ class Compute:
|
|||||||
self._set_auth(user, password)
|
self._set_auth(user, password)
|
||||||
self._session = aiohttp.ClientSession()
|
self._session = aiohttp.ClientSession()
|
||||||
self._version = None
|
self._version = None
|
||||||
|
self._cpu_usage_percent = None
|
||||||
|
self._memory_usage_percent = None
|
||||||
self.name = name
|
self.name = name
|
||||||
# Websocket for notifications
|
# Websocket for notifications
|
||||||
self._ws = None
|
self._ws = None
|
||||||
@ -228,6 +230,14 @@ class Compute:
|
|||||||
def password(self, value):
|
def password(self, value):
|
||||||
self._set_auth(self._user, value)
|
self._set_auth(self._user, value)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cpu_usage_percent(self):
|
||||||
|
return self._cpu_usage_percent
|
||||||
|
|
||||||
|
@property
|
||||||
|
def memory_usage_percent(self):
|
||||||
|
return self._memory_usage_percent
|
||||||
|
|
||||||
def __json__(self, topology_dump=False):
|
def __json__(self, topology_dump=False):
|
||||||
"""
|
"""
|
||||||
:param topology_dump: Filter to keep only properties require for saving on disk
|
:param topology_dump: Filter to keep only properties require for saving on disk
|
||||||
@ -247,7 +257,9 @@ class Compute:
|
|||||||
"host": self._host,
|
"host": self._host,
|
||||||
"port": self._port,
|
"port": self._port,
|
||||||
"user": self._user,
|
"user": self._user,
|
||||||
"connected": self._connected
|
"connected": self._connected,
|
||||||
|
"cpu_usage_percent": self._cpu_usage_percent,
|
||||||
|
"memory_usage_percent": self._memory_usage_percent
|
||||||
}
|
}
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
@ -307,7 +319,13 @@ class Compute:
|
|||||||
msg = json.loads(response.data)
|
msg = json.loads(response.data)
|
||||||
action = msg.pop("action")
|
action = msg.pop("action")
|
||||||
event = msg.pop("event")
|
event = msg.pop("event")
|
||||||
self._controller.notification.dispatch(action, event, compute_id=self.id)
|
|
||||||
|
if action == "ping":
|
||||||
|
self._cpu_usage_percent = event["cpu_usage_percent"]
|
||||||
|
self._memory_usage_percent = event["memory_usage_percent"]
|
||||||
|
self._controller.notification.emit("compute.updated", self.__json__())
|
||||||
|
else:
|
||||||
|
self._controller.notification.dispatch(action, event, compute_id=self.id)
|
||||||
yield from self._ws.close()
|
yield from self._ws.close()
|
||||||
self._ws = None
|
self._ws = None
|
||||||
|
|
||||||
|
@ -90,6 +90,18 @@ COMPUTE_OBJECT_SCHEMA = {
|
|||||||
"description": "Whether the controller is connected to the compute server or not",
|
"description": "Whether the controller is connected to the compute server or not",
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
|
"cpu_usage_percent": {
|
||||||
|
"description": "CPU usage of the compute. Read only",
|
||||||
|
"type": ["number", "null"],
|
||||||
|
"maximum": 100,
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"memory_usage_percent": {
|
||||||
|
"description": "RAM usage of the compute. Read only",
|
||||||
|
"type": ["number", "null"],
|
||||||
|
"maximum": 100,
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
"version": {
|
"version": {
|
||||||
"description": "Version of the GNS3 remote compute server",
|
"description": "Version of the GNS3 remote compute server",
|
||||||
"type": ["string", "null"]
|
"type": ["string", "null"]
|
||||||
|
@ -194,6 +194,43 @@ def test_connectNotification(compute, async_run):
|
|||||||
assert compute._connected is False
|
assert compute._connected is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_connectNotificationPing(compute, async_run):
|
||||||
|
"""
|
||||||
|
When we receive a ping from a compute we update
|
||||||
|
the compute memory and CPU usage
|
||||||
|
"""
|
||||||
|
ws_mock = AsyncioMagicMock()
|
||||||
|
|
||||||
|
call = 0
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def receive():
|
||||||
|
nonlocal call
|
||||||
|
call += 1
|
||||||
|
if call == 1:
|
||||||
|
response = MagicMock()
|
||||||
|
response.data = '{"action": "ping", "event": {"cpu_usage_percent": 35.7, "memory_usage_percent": 80.7}}'
|
||||||
|
response.tp = aiohttp.MsgType.text
|
||||||
|
return response
|
||||||
|
else:
|
||||||
|
response = MagicMock()
|
||||||
|
response.tp = aiohttp.MsgType.closed
|
||||||
|
return response
|
||||||
|
|
||||||
|
compute._controller._notification = MagicMock()
|
||||||
|
compute._session = AsyncioMagicMock(return_value=ws_mock)
|
||||||
|
compute._session.ws_connect = AsyncioMagicMock(return_value=ws_mock)
|
||||||
|
ws_mock.receive = receive
|
||||||
|
async_run(compute._connect_notification())
|
||||||
|
|
||||||
|
assert not compute._controller.notification.dispatch.called
|
||||||
|
assert compute.cpu_usage_percent == 35.7
|
||||||
|
assert compute.memory_usage_percent == 80.7
|
||||||
|
args, _ = compute._controller.notification.emit.call_args
|
||||||
|
assert args[0] == "compute.updated"
|
||||||
|
assert args[1]["memory_usage_percent"] == 80.7
|
||||||
|
|
||||||
|
|
||||||
def test_json(compute):
|
def test_json(compute):
|
||||||
compute.user = "test"
|
compute.user = "test"
|
||||||
assert compute.__json__() == {
|
assert compute.__json__() == {
|
||||||
@ -203,6 +240,8 @@ def test_json(compute):
|
|||||||
"host": "example.com",
|
"host": "example.com",
|
||||||
"port": 84,
|
"port": 84,
|
||||||
"user": "test",
|
"user": "test",
|
||||||
|
"cpu_usage_percent": None,
|
||||||
|
"memory_usage_percent": None,
|
||||||
"connected": True
|
"connected": True
|
||||||
}
|
}
|
||||||
assert compute.__json__(topology_dump=True) == {
|
assert compute.__json__(topology_dump=True) == {
|
||||||
|
@ -67,7 +67,9 @@ def test_load(controller, controller_config_path, async_run):
|
|||||||
"port": 8000,
|
"port": 8000,
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
"user": "admin",
|
"user": "admin",
|
||||||
"name": "http://admin@localhost:8000"
|
"name": "http://admin@localhost:8000",
|
||||||
|
"cpu_usage_percent": None,
|
||||||
|
"memory_usage_percent": None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -127,8 +127,9 @@ def test_compute_list(http_controller, controller):
|
|||||||
'port': 84,
|
'port': 84,
|
||||||
'protocol': 'http',
|
'protocol': 'http',
|
||||||
'user': 'julien',
|
'user': 'julien',
|
||||||
'name': 'My super server'
|
'name': 'My super server',
|
||||||
|
'cpu_usage_percent': None,
|
||||||
|
'memory_usage_percent': None
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user