From 52a51fef2e82879944eee89e59434cb463c3a303 Mon Sep 17 00:00:00 2001 From: Rowan Powell <rp17@it-innovation.soton.ac.uk> Date: Fri, 12 Jan 2018 13:59:36 +0000 Subject: [PATCH] New sim as per michael spec --- src/mediaServiceSim/LineProtocolGenerator.py | 214 +++++++++++------- .../LineProtocolGenerator.cpython-36.pyc | Bin 4053 -> 6021 bytes src/mediaServiceSim/serviceSim.py | 13 +- 3 files changed, 142 insertions(+), 85 deletions(-) diff --git a/src/mediaServiceSim/LineProtocolGenerator.py b/src/mediaServiceSim/LineProtocolGenerator.py index da8ba0d..1f55222 100644 --- a/src/mediaServiceSim/LineProtocolGenerator.py +++ b/src/mediaServiceSim/LineProtocolGenerator.py @@ -4,6 +4,95 @@ import uuid from random import random, randint + +# Reports TX and RX, scaling on requested quality +def generate_network_report(recieved_bytes, sent_bytes, time): + # Measurement + result = 'net_port_io' + # Tags + result += ',port_id=enps03 ' + # Fields + result += 'RX_BYTES_PORT_M=' + str(recieved_bytes) + "," + result += 'TX_BYTES_PORT_M=' + str(sent_bytes) + # Timestamp + result += ' ' + str(_getNSTime(time)) + + # Measurement + # print('network'+result) + return result + + +# Formats VM config +def generate_vm_config(state, cpu, mem, storage, time): + # metric + result = 'vm_res_alloc' + # Tags + result += ',vm_state=' + quote_wrap(state) + result += ' ' + # Fields + result += 'cpu=' + str(cpu) + result += ',memory=' + quote_wrap(mem) + result += ',storage=' + quote_wrap(storage) + + # Time + result += ' ' + str(_getNSTime(time)) + + print(result) + return result + + +# Reports cpu usage, scaling on requests +def generate_cpu_report(loc, sfc, sfc_i, sf_package, sf_i, cpu_useage, cpu_usage_system, time): + result = 'vm_host_cpu_usage' + # Tag + result += ',location='+quote_wrap(loc) + result += ',sfc='+quote_wrap(sfc) + result += ',sfc_i='+quote_wrap(sfc_i) + result += ',sf_package='+quote_wrap(sf_package) + result += ',sf_i='+quote_wrap(sf_i) + result += ' ' + # field + result += 'cpu_usage='+str(cpu_useage) + result += ',cpu_usage_system='+str(cpu_usage_system) + result += ' ' + # Time + result += str(_getNSTime(time)) + print(result) + return result + + +# Reports response times, scaling on number of requests +def generate_mpegdash_report(resource, requests, avg_response_time, peak_response_time, time): + # Measurement + result = 'mpegdash_service ' + # Tags + # None + # Fields + result += 'cont_nav=\"' + str(resource) + "\"," + # result += 'cont_rep=' + str(quality) + ',' + result += 'requests=' + str(requests) + ',' + result += 'avg_response_time=' + str(avg_response_time) + ',' + result += 'peak_response_time=' + str(peak_response_time) + # Timestamp + 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 + "\"" + + +# InfluxDB likes to have time-stamps in nanoseconds +def _getNSTime(time): + # Convert to nano-seconds + return 1000000 * time + +# DEPRICATED +# ____________________________________________________________________________ + +# DEPRICATED: old structure, not part of new spec def _generateClientRequest(cReq, id, time): # Tags first result = 'sid="' + str(id) + '",' + cReq @@ -19,6 +108,7 @@ def _generateClientRequest(cReq, id, time): # Method to create a full InfluxDB response statement +# DEPRECATED: old structure, not part of new spec def _generateServerResponse(reqID, quality, time, cpuUsage, qualityDifference): # Tags first result = ' ' @@ -38,42 +128,8 @@ def _generateServerResponse(reqID, quality, time, cpuUsage, qualityDifference): return 'response' + result -def _generateNetworkReport(sum_of_client_quality, time): - # Measurement - result = 'net_port_io' - # Tags - result += ',port_id=enps03 ' - # Fields - result += 'RX_BYTES_PORT_M=' + str(sum_of_client_quality * 32) + "," - result += 'TX_BYTES_PORT_M=' + str(sum_of_client_quality * 1024) - # Timestamp - result += ' ' + str(_getNSTime(time)) - - # Measurement - # print('network'+result) - return result - - -def _generateMpegDashReport(resource, quality, time): - # Measurement - result = 'mpegdash_service ' - # Tags - #None - # Fields - requests = randint(10, 30) - avg_response_time = 50 + randint(0, 100) + randint(0, 10 * quality) - peak_response_time = avg_response_time + randint(30, 60) + randint(5, 10) * quality - result += 'cont_nav=\"' + str(resource) + "\"," - result += 'cont_rep=' + str(quality) + ',' - result += 'requests=' + str(requests) + ',' - result += 'avg_response_time=' + str(avg_response_time) + ',' - result += 'peak_response_time=' + str(peak_response_time) - # Timestamp - result += ' ' + str(_getNSTime(time)) - #print(result) - return result - +# Formats server config def _generateServerConfig(ID, location, cpu, mem, storage, time): # metric result = 'host_resource' @@ -93,24 +149,8 @@ def _generateServerConfig(ID, location, cpu, mem, storage, time): return result -def _generateVMConfig(state, cpu, mem, storage, time): - # metric - result = 'vm_res_alloc' - # Tags - result += ',vm_state=' + quote_wrap(state) - result += ' ' - # Fields - result += 'cpu=' + str(cpu) - result += ',memory=' + quote_wrap(mem) - result += ',storage=' + quote_wrap(storage) - - # Time - result += ' ' + str(_getNSTime(time)) - - print(result) - return result - +# Format port config def _configure_port(port_id, state, rate, time): # metric result = 'net_port_config ' @@ -126,6 +166,8 @@ def _configure_port(port_id, state, rate, time): print(result) return result + +# Format service function config def _configure_service_function(state, max_connected_clients): # measurement result = 'mpegdash_service_config' @@ -137,33 +179,15 @@ def _configure_service_function(state, max_connected_clients): return result -# Simulating telegraf reporting -def generate_CPU_report(requests, 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 - 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) - result += ',usage_idle='+str(idle/100) - result += ' ' - # Time - result += str(_getNSTime(time)) - print(result) - return result -def generate_mem_report(total_mem, time): + +# Reports memory usage, scaling on requests +def generate_mem_report(requests, total_mem, time): # Measurement result = 'mem' result += ' ' # field - used = randint(30, 80) + used = randint(0, min(100,5*requests)) available = 100-used result += 'available_percent='+str(available) result += ',used_percent='+str(used) @@ -174,6 +198,8 @@ def generate_mem_report(total_mem, time): print(result) return result + +# Formats compute node config def generate_compute_node_config(slice_id, location, node_id, cpus, mem, storage, time): # Measurement result = 'compute_node_config' @@ -193,6 +219,8 @@ def generate_compute_node_config(slice_id, location, node_id, cpus, mem, storage print(result) return result + +# Formats network resource config def generate_network_resource_config(slice_id, network_id, bandwidth, time): # Measurement result = 'network_resource_config' @@ -209,6 +237,8 @@ def generate_network_resource_config(slice_id, network_id, bandwidth, time): print(result) return result + +# Formats network interface config def generate_network_interface_config(slice_id, comp_node_id, port_id, rx_constraint, tx_constraint, time): # Measurement result = 'network_interface_config' @@ -228,15 +258,37 @@ def generate_network_interface_config(slice_id, comp_node_id, port_id, rx_constr return result +# Format SF instance config +def generate_sf_instance_surrogate_config(loc, sfc, sfc_i, sf_package, sf_i, cpus, mem, storage, time): + # Measurement + result = 'sf_instance_surrogate_config' + # Meta Tag + result += ',location'+quote_wrap(loc) + result += ',sfc'+quote_wrap(sfc) + result += ',sfc_i'+quote_wrap(sfc_i) + result += ',sf_package'+quote_wrap(sf_package) + result += ',sf_i'+quote_wrap(sf_i) + result += ' ' + # field + result += 'cpus='+str(cpus) + result += ',memory='+str(mem) + result += ',storage='+str(storage) + result += ' ' + # Time + result += str(_getNSTime(time)) + print(result) + return result +# Formats context container as part of other line protocol generators +def service_function_measurement(measurement, service_function_context): + result = measurement + result += ',sfc'+quote_wrap(service_function_context.sfc) + result += ',sfc_i'+quote_wrap(service_function_context.sfc_i) + result += ',sf_package'+quote_wrap(service_function_context.sf_package) + result += ',sf_i'+quote_wrap(service_function_context.sf_i) + + return result -# Influx needs strings to be quoted, this provides a utility interface to do this -def quote_wrap(str): - return "\"" + str + "\"" -# InfluxDB likes to have time-stamps in nanoseconds -def _getNSTime(time): - # Convert to nano-seconds - return 1000000 * time diff --git a/src/mediaServiceSim/__pycache__/LineProtocolGenerator.cpython-36.pyc b/src/mediaServiceSim/__pycache__/LineProtocolGenerator.cpython-36.pyc index e393358e419e0611903d1c5e4bcb264fabfcb884..b8bb4785ef85f853c379898f7b6b17715734a63b 100644 GIT binary patch literal 6021 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 literal 4053 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 U%iHnxy`I-cyNCNt-1R*7e_-Bj@c;k- diff --git a/src/mediaServiceSim/serviceSim.py b/src/mediaServiceSim/serviceSim.py index 8ad5baa..2cdc993 100644 --- a/src/mediaServiceSim/serviceSim.py +++ b/src/mediaServiceSim/serviceSim.py @@ -102,8 +102,9 @@ 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(): +class DatabaseManager: def __init__(self, influx_url, db_name): self.influx_url = influx_url self.influx_db = db_name @@ -126,8 +127,9 @@ class DatabaseManager(): req = urllib.request.Request(self.influx_url + '/query ', query) urllib.request.urlopen(req) + # Used to allocate clients to servers -class ClientManager(): +class ClientManager: def __init__(self, servers): self.servers = servers def generate_new_clients(self, amount): @@ -138,8 +140,9 @@ class ClientManager(): server.assign_client(DemoClient()) assigned_count += 1 + # Simulates nodes not connected directly to clients (e.g. telegraf) -class Node(): +class Node: def __init__(self, influxurl, influxdb, input_cpu): self.influx_url = influxurl self.influx_db = influxdb @@ -159,6 +162,8 @@ class Node(): req = urllib.request.Request(self.influx_url + '/write?db=' + self.influx_db, data, header) urllib.request.urlopen(req) +# Container for common SF tags, used as part of generating SF usage reports + # DemoServer is the class that simulates the behaviour of the MPEG-DASH server class DemoServer(object): @@ -203,7 +208,7 @@ class DemoServer(object): server_conf_block.append(lp._configure_port()) self._sendInfluxDataBlock(server_conf_block) - def shutdown_VMs(self): + def shutdown_VM(self): print("Shutting down VM nodes") VM_conf_block = [] self._generateVMS('stopping', 10, VM_conf_block) -- GitLab