From 50493d12e4ffac3198cb96601d6aac17a1a46a1b Mon Sep 17 00:00:00 2001
From: Rowan Powell <rp17@it-innovation.soton.ac.uk>
Date: Fri, 12 Jan 2018 11:26:20 +0000
Subject: [PATCH] cpu usage function scales on requests

---
 src/mediaServiceSim/LineProtocolGenerator.py | 64 +++++++++++++++++++-
 src/mediaServiceSim/serviceSim.py            | 17 +++---
 2 files changed, 71 insertions(+), 10 deletions(-)

diff --git a/src/mediaServiceSim/LineProtocolGenerator.py b/src/mediaServiceSim/LineProtocolGenerator.py
index bde8d4c..da8ba0d 100644
--- a/src/mediaServiceSim/LineProtocolGenerator.py
+++ b/src/mediaServiceSim/LineProtocolGenerator.py
@@ -138,7 +138,7 @@ def _configure_service_function(state, max_connected_clients):
     return result
 
 # Simulating telegraf reporting
-def generate_CPU_report(time):
+def generate_CPU_report(requests, time):
     # Measurement
     result = 'cpu'
     # meta tag
@@ -146,8 +146,8 @@ def generate_CPU_report(time):
     result += ',cpu="cpu-total"'
     result += ' '
     # field
-    steal = randint(0, 50)
-    system = randint(0, 100-steal)
+    system = randint(0, min(100, requests*5))
+    steal = randint(0, 100-system)
     idle = 100-(system+steal)
     result += 'usage_steal='+str(steal/100)
     result += ',usage_system='+str(system/100)
@@ -174,6 +174,64 @@ def generate_mem_report(total_mem, time):
     print(result)
     return result
 
+def generate_compute_node_config(slice_id, location, node_id, cpus, mem, storage, time):
+    # Measurement
+    result = 'compute_node_config'
+    # CommonContext Tag
+    result += ',slide_id='+quote_wrap(slice_id)
+    # Tag
+    result += ',location='+quote_wrap(location)
+    result += ',comp_node_id='+quote_wrap(node_id)
+    result += ' '
+    # field
+    result += 'cpus='+str(cpus)
+    result += ',memory='+str(mem)
+    result += ',storage='+str(storage)
+    result += ' '
+    # Time
+    result += str(_getNSTime(time))
+    print(result)
+    return result
+
+def generate_network_resource_config(slice_id, network_id, bandwidth, time):
+    # Measurement
+    result = 'network_resource_config'
+    # Meta Tag
+    result += ',slice_id='+quote_wrap(slice_id)
+    # Tag
+    result += 'network_id='+quote_wrap(network_id)
+    result += ' '
+    # field
+    result += 'bandwidth='+str(bandwidth)
+    result += ' '
+    # Time
+    result += str(_getNSTime(time))
+    print(result)
+    return result
+
+def generate_network_interface_config(slice_id, comp_node_id, port_id, rx_constraint, tx_constraint, time):
+    # Measurement
+    result = 'network_interface_config'
+    # Meta Tag
+    result += ',slice_id'+quote_wrap(slice_id)
+    # Tags
+    result += ',comp_node_id='+quote_wrap(comp_node_id)
+    result += ',port_id='+quote_wrap(port_id)
+    result += ' '
+    # field
+    result += 'rx_constraint='+str(rx_constraint)
+    result += ',tx_constraint='+str(tx_constraint)
+    result += ' '
+    # Time
+    result += str(_getNSTime(time))
+    print(result)
+    return result
+
+
+
+
+
+# Influx needs strings to be quoted, this provides a utility interface to do this
 def quote_wrap(str):
     return "\"" + str + "\""
 
diff --git a/src/mediaServiceSim/serviceSim.py b/src/mediaServiceSim/serviceSim.py
index d559cc0..8ad5baa 100644
--- a/src/mediaServiceSim/serviceSim.py
+++ b/src/mediaServiceSim/serviceSim.py
@@ -162,10 +162,9 @@ class Node():
 
 # 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):
+    def __init__(self, si, db_url, db_name, server_id, server_location):
         self.influxDB = db_name  # InfluxDB database name
         self.id = uuid.uuid4()  # MPEG-DASH server ID
-        self.clientCount = cc  # Number of clients to simulate
         self.simIterations = si  # Number of iterations to make for this simulation
         self.influxURL = db_url  # InfluxDB connection URL
         self.currentTime = int(round(time.time() * 1000))  # The current time
@@ -290,11 +289,11 @@ class DemoServer(object):
         print("Configuring")
         self.configure_VM('starting')
         self.configure_VM('running')
-        time.sleep(0.1)
+        #time.sleep(0.1)
         self.configure_server(server_id, server_location)
         self._sendInfluxData(lp._configure_port('01', 'running', '1GB/s', self.currentTime))
         self._sendInfluxData(lp._configure_service_function('starting', 100))
-        time.sleep(0.1)
+        #time.sleep(0.1)
         self._sendInfluxData(lp._configure_service_function('running', 100))
 
     def _cpuUsage(self, clientCount):
@@ -393,10 +392,11 @@ class DemoServer(object):
 # Entry point
 # -----------------------------------------------------------------------------------------------
 print("Preparing simulation")
-clients = 10
+# Iterations is time in seconds for each server to simulate
 iterations = 3000
 # port 8086: Direct to DB specified
 # port 8186: To telegraf, telegraf specifies DB
+start_time = time.localtime()
 database_manager = DatabaseManager('http://localhost:8186', 'testDB')
 # Set up InfluxDB (need to wait a little while)
 database_manager.database_teardown()
@@ -404,8 +404,8 @@ time.sleep(2)
 database_manager.database_up()
 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")
+demoServer_southampton = DemoServer(iterations, 'http://localhost:8186', 'testDB', "Server1", "Southampton")
+demoServer_bristol = DemoServer(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)
@@ -427,3 +427,6 @@ while True:
 for server in server_list:
     server.shutdown()
 print("\nFinished")
+end_time = time.localtime()
+print("Started at {0} ended at {1}, total run time {2}".format(start_time,end_time,(end_time-start_time)))
+
-- 
GitLab