Commit 0dd53d40 by Gregory Nagy

pep8 namingconvention + cpu_usage, ram_usage

parent 2b8a9a59
...@@ -3,6 +3,7 @@ import os ...@@ -3,6 +3,7 @@ import os
class GraphiteHandler: class GraphiteHandler:
def __init__(self): def __init__(self):
if os.getenv("NODE_MONITOR_SERVER") is "": if os.getenv("NODE_MONITOR_SERVER") is "":
raise RuntimeError raise RuntimeError
...@@ -16,19 +17,15 @@ class GraphiteHandler: ...@@ -16,19 +17,15 @@ class GraphiteHandler:
def put(self, query): def put(self, query):
self.__queries.append(query) self.__queries.append(query)
def cleanUpQueries(self): def cleanUpQueries(self):
self.__queries = [] self.__queries = []
def cleanUpResponses(self): def cleanUpResponses(self):
self.__responses = [] self.__responses = []
def isEmpty(self): def isEmpty(self):
return len(self.__queries) is 0 return len(self.__queries) is 0
def generateAll(self): def generateAll(self):
""" """
Regenerate the queries before sending. Regenerate the queries before sending.
...@@ -36,7 +33,6 @@ class GraphiteHandler: ...@@ -36,7 +33,6 @@ class GraphiteHandler:
for query in self.__queries: for query in self.__queries:
query.generate() query.generate()
def send(self): def send(self):
""" """
Generates the corrent query for the Graphite webAPI and flush all the Generates the corrent query for the Graphite webAPI and flush all the
...@@ -54,7 +50,6 @@ class GraphiteHandler: ...@@ -54,7 +50,6 @@ class GraphiteHandler:
self.__responses.append(response) self.__responses.append(response)
self.cleanUpQueries() self.cleanUpQueries()
def pop(self): def pop(self):
""" """
Pop the first query has got from the server. Pop the first query has got from the server.
...@@ -66,6 +61,7 @@ class GraphiteHandler: ...@@ -66,6 +61,7 @@ class GraphiteHandler:
class Query: class Query:
def __init__(self): def __init__(self):
""" """
Query initializaion: Query initializaion:
......
...@@ -16,6 +16,9 @@ from firewall.models import Host ...@@ -16,6 +16,9 @@ from firewall.models import Host
from ..tasks import vm_tasks from ..tasks import vm_tasks
from .common import Trait from .common import Trait
from monitor.calvin import Query
from monitor.calvin import GraphiteHandler
logger = getLogger(__name__) logger = getLogger(__name__)
...@@ -60,6 +63,7 @@ class Node(TimeStampedModel): ...@@ -60,6 +63,7 @@ class Node(TimeStampedModel):
def num_cores(self): def num_cores(self):
"""Number of CPU threads available to the virtual machines. """Number of CPU threads available to the virtual machines.
""" """
return self.remote_query(vm_tasks.get_core_num) return self.remote_query(vm_tasks.get_core_num)
@property @property
...@@ -93,13 +97,11 @@ class Node(TimeStampedModel): ...@@ -93,13 +97,11 @@ class Node(TimeStampedModel):
def get_remote_queue_name(self, queue_id): def get_remote_queue_name(self, queue_id):
return self.host.hostname + "." + queue_id return self.host.hostname + "." + queue_id
def remote_query(self, task, timeout=1, raise_=False, default=None): def remote_query(self, task, timeout=30, raise_=False, default=None):
"""Query the given task, and get the result. """Query the given task, and get the result.
If the result is not ready in timeout secs, return default value or If the result is not ready in timeout secs, return default value or
raise a TimeoutError.""" raise a TimeoutError."""
if task != vm_tasks.ping and not self.online:
return default
r = task.apply_async( r = task.apply_async(
queue=self.get_remote_queue_name('vm'), expires=timeout + 60) queue=self.get_remote_queue_name('vm'), expires=timeout + 60)
try: try:
...@@ -110,6 +112,35 @@ class Node(TimeStampedModel): ...@@ -110,6 +112,35 @@ class Node(TimeStampedModel):
else: else:
return default return default
def get_monitor_info(self):
query = Query()
handler = GraphiteHandler()
query.setTarget(self.host.hostname + ".circle")
query.setFormat("json")
query.setRelativeStart(5, "minutes")
metrics = ["cpu.usage", "memory.usage", "network.bytes_sent",
"network.bytes_received"]
collected = {}
for metric in metrics:
query.setMetric(metric)
query.generate()
handler.put(query)
handler.send()
for metric in metrics:
response = query.pop()
length = len(response[0]["datapoints"])
cache = response[0]["datapoints"][length - 1][0]
if cache is None:
cache = 0
collected[metric] = cache
return collected
def cpu_usage(self):
return self.get_monitor_info()["cpu.usage"]
def ram_usage(self):
return self.get_monitor_info()["memory.usage"]
def update_vm_states(self): def update_vm_states(self):
domains = {} domains = {}
for i in self.remote_query(vm_tasks.list_domains_info, timeout=5): for i in self.remote_query(vm_tasks.list_domains_info, timeout=5):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment