Commit 5b1fdf66 by Nagy Gergő

Critical values loaded from environmental variables.

Added frequency setup to config file.
parent 237c564b
[Client]
Frequency = 5
Debug = True
[Server]
Address = 10.7.0.96
Port = 5672
[AMQP]
Queue = monitor
User = cloud
Pass = password
Vhost = monitor
[Metrics]
cpuUsage = True
memoryUsage = True
userCount = True
swapUsage = True
systemBootTime = True
packageTraffic = True
dataTraffic = True
cpuUsage = 5
memoryUsage = 5
userCount = 30
swapUsage = 10
systemBootTime = 60
packageTraffic = 5
dataTraffic = 5
#!/usr/bin/python
import platform, collections, time, socket, pika, struct
import platform, collections, time, socket, pika, struct, os
import logging
logging.basicConfig()
......@@ -8,21 +8,18 @@ class Client:
def __init__(self, config):
"""
Constructor of the client requires a configuration provided by cnfparse
modul. It is a dictionary: {server_address, server_port, frequency,
debugMode, amqp_user, amqp_pass, amqp_queue}.
"""
hostname = socket.gethostname().split('.')
hostname.reverse()
self.name = "circle." + ".".join(hostname)
self.server_address = str(config["server_address"])
self.server_port = int(config["server_port"])
self.delay = int(config["frequency"])
self.server_address = str(os.getenv("GRAPHITE_SERVER_ADDRESS"))
self.server_port = int(os.getenv("GRAPHITE_SERVER_PORT"))
self.amqp_user = str(os.getenv("AMQP_USER"))
self.amqp_pass = str(os.getenv("AMQP_PASS"))
self.amqp_queue = str(os.getenv("AMQP_QUEUE"))
self.amqp_virtual_host = str(os.getenv("AMQP_VIRTUAL_HOST"))
self.beat = 1
self.debugMode = config["debugMode"]
self.amqp_user = str(config["amqp_user"])
self.amqp_pass = str(config["amqp_pass"])
self.amqp_queue = str(config["amqp_queue"])
self.amqp_virtual_host = str(config["amqp_virtual_host"])
def __connect(self):
"""
......@@ -64,7 +61,8 @@ class Client:
"""
metrics = []
for collector in metricCollectors:
stat = collector()
if (collector[1] % self.beat) is 0:
stat = collector[0]()
metrics.append((
self.name + "." + stat.name +
" %d" % (stat.value) +
......@@ -72,6 +70,13 @@ class Client:
))
return metrics
def __getMaxBeat(self, metricCollectors = []):
max = 0
for item in metricCollectors:
if max < item[1]:
max = item[1]
return max
def startReporting(self, metricCollectors = [], debugMode = False):
"""
Call this method to start reporting to the server, it needs the
......@@ -87,12 +92,16 @@ class Client:
(self.server_address, self.server_port, self.delay, self.name)
)
try:
max_beat = self.__getMaxBeat(metricCollectors)
while True:
metrics = self.__collectFromNode(metricCollectors)
if self.debugMode == "True":
print(metrics)
self.__send(metrics)
time.sleep(self.delay)
time.sleep(1)
self.beat++
if self.beat > max_beat:
self.beat = 1
except KeyboardInterrupt:
print("Reporting has stopped by the user. Exiting...")
finally:
......
......@@ -6,14 +6,7 @@ def importConf(path_to_file):
config.read(path_to_file)
params = {}
metrics = {}
params["frequency"] = config.get("Client" , "Frequency")
params["debugMode"] = config.get("Client" , "Debug")
params["server_address"] = config.get("Server" , "Address")
params["server_port"] = config.get("Server" , "Port")
params["amqp_queue"] = config.get("AMQP" , "Queue")
params["amqp_user"] = config.get("AMQP" , "User")
params["amqp_pass"] = config.get("AMQP" , "Pass")
params["amqp_virtual_host"] = config.get("AMQP" , "Vhost")
metrics["cpu.usage"] = config.get("Metrics", "cpuUsage")
metrics["memory.usage"] = config.get("Metrics", "memoryUsage")
metrics["user.count"] = config.get("Metrics", "userCount")
......
......@@ -33,11 +33,11 @@ class collectables:
@staticmethod
def provide(requests = []):
valid_keys = collectables.listKeys()
reqs = [request for request, value in requests.items() if value=="True"]
reqs = [request for request, value in requests.items() if int(value)>0]
collectors = []
for request in reqs:
for item in collectables.__collectables[request]:
collectors.append(item.harvest)
collectors.append([item.harvest,value])
seen = set()
seen_add = seen.add
return [ x for x in collectors if x not in seen and not seen_add(x)]
......
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