Skip to content
Snippets Groups Projects
Commit 391e83c6 authored by Rowan Powell's avatar Rowan Powell
Browse files

Added cpu & mem line protocol functions, simulated using new Node() class

parent 580b42f0
No related branches found
No related tags found
No related merge requests found
......@@ -95,6 +95,14 @@
###############################################################################
# INPUTS #
###############################################################################
# Read metrics about cpu usage
[[inputs.cpu]]
## Whether to report per-cpu stats or not
percpu = true
## Whether to report total system cpu stats or not
totalcpu = true
## If true, collect raw CPU time metrics.
collect_cpu_time = false
# # Influx HTTP write listener
[[inputs.http_listener]]
......@@ -110,4 +118,5 @@
#tls_key = "/etc/telegraf/key.pem"
## MTLS
#tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
\ No newline at end of file
#tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
\ No newline at end of file
......@@ -137,6 +137,43 @@ def _configure_service_function(state, max_connected_clients):
return result
# Simulating telegraf reporting
def generate_CPU_report(time):
# Measurement
result = 'cpu'
# meta tag
# We are simulating the summed CPUs, individual CPUs would have cpu=cpuNumber instead
result += ',cpu="cpu-total"'
result += ' '
# field
steal = randint(0, 50)
system = randint(0, 100-steal)
idle = 100-(system+steal)
result += 'usage_steal='+str(steal/100)
result += ',usage_system='+str(system/100)
result += ',usage_idle='+str(idle/100)
result += ' '
# Time
result += str(_getNSTime(time))
print(result)
return result
def generate_mem_report(total_mem, time):
# Measurement
result = 'mem'
result += ' '
# field
used = randint(30, 80)
available = 100-used
result += 'available_percent='+str(available)
result += ',used_percent='+str(used)
result += ',total='+str(total_mem)
result += ' '
# Time
result += str(_getNSTime(time))
print(result)
return result
def quote_wrap(str):
return "\"" + str + "\""
......
No preview for this file type
......@@ -102,7 +102,7 @@ class DemoClient(object):
# Return the _partial_ InfluxDB statement (server will complete the rest)
return result
# Used to tell influx to launch or teardown a database (DB name overwritten by telegraf)
class DatabaseManager():
def __init__(self, influx_url, db_name):
self.influx_url = influx_url
......@@ -126,6 +126,7 @@ class DatabaseManager():
req = urllib.request.Request(self.influx_url + '/query ', query)
urllib.request.urlopen(req)
# Used to allocate clients to servers
class ClientManager():
def __init__(self, servers):
self.servers = servers
......@@ -137,6 +138,28 @@ class ClientManager():
server.assign_client(DemoClient())
assigned_count += 1
# Simulates nodes not connected directly to clients (e.g. telegraf)
class Node():
def __init__(self, influxurl, influxdb, input_cpu):
self.influx_url = influxurl
self.influx_db = influxdb
self.report_cpu = input_cpu
def iterateService(self):
if self.report_cpu:
self._sendInfluxData(lp.generate_CPU_report(0))
self._sendInfluxData(lp.generate_mem_report(10, 0))
# Private Methods
# ________________________________________________________________
# This is duplicated from DemoServer, should probably be refactored
def _sendInfluxData(self, data):
data = data.encode()
header = {'Content-Type': 'application/octet-stream'}
req = urllib.request.Request(self.influx_url + '/write?db=' + self.influx_db, data, header)
urllib.request.urlopen(req)
# DemoServer is the class that simulates the behaviour of the MPEG-DASH server
class DemoServer(object):
def __init__(self, cc, si, db_url, db_name, server_id, server_location):
......@@ -216,7 +239,7 @@ class DemoServer(object):
# Record request, if it was generated
cReq = client.iterateRequest()
if (cReq != None):
if cReq is not None:
clientsRequesting.append(client)
requestBlock.append(lp._generateClientRequest(cReq, self.id, self.currentTime))
......@@ -383,6 +406,7 @@ time.sleep(2)
# configure servers
demoServer_southampton = DemoServer(clients, iterations, 'http://localhost:8186', 'testDB', "Server1", "Southampton")
demoServer_bristol = DemoServer(clients, iterations, 'http://localhost:8186', 'testDB', "Server2", "Bristol")
telegraf_node = Node('http://localhost:8186', 'testDB', True)
server_list = [demoServer_southampton, demoServer_bristol]
client_manager = ClientManager(server_list)
client_manager.generate_new_clients(20)
......@@ -392,6 +416,7 @@ print("Starting simulation")
while True:
for server in server_list:
itCount = server.iterateService()
telegraf_node.iterateService()
pcDone = round((itCount / iterations) * 100)
print("Simulation remaining (%): " + str(pcDone) + " \r", end='')
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment