Skip to content
Snippets Groups Projects
Commit f017582c authored by Simon Crowle's avatar Simon Crowle
Browse files

Adds media component state configuration throughout simulation

Also fixes field validation for unspecified metric data
parent 0605d6d3
Branches
No related tags found
No related merge requests found
...@@ -96,18 +96,18 @@ def _getNSTime(time): ...@@ -96,18 +96,18 @@ def _getNSTime(time):
def generate_mc_service_config( mcMeasurement, stateTimeStats, time ): def generate_mc_service_config( mcMeasurement, stateTimeStats, time ):
stateTimeStats = validate_state_time_stats( stateTimeStats ) validStats = validate_state_time_stats( stateTimeStats )
result = [{ "measurement" : mcMeasurement, result = [{ "measurement" : mcMeasurement,
"fields" : "fields" :
{ "stopped" : stateTimeStats['stopped'], { "stopped" : validStats['stopped'],
"avg_stopped" : stateTimeStats['avg_stopped'], "avg_stopped" : validStats['avg_stopped'],
"starting" : stateTimeStats['starting'], "starting" : validStats['starting'],
"avg_starting" : stateTimeStats['avg_starting'], "avg_starting" : validStats['avg_starting'],
"running" : stateTimeStats['running'], "running" : validStats['running'],
"avg_running" : stateTimeStats['avg_running'], "avg_running" : validStats['avg_running'],
"stopping" : stateTimeStats['stopping'], "stopping" : validStats['stopping'],
"avg_stopping" : stateTimeStats['avg_stopping'] "avg_stopping" : validStats['avg_stopping']
}, },
"time" : _getNSTime(time) }] "time" : _getNSTime(time) }]
...@@ -116,25 +116,28 @@ def generate_mc_service_config( mcMeasurement, stateTimeStats, time ): ...@@ -116,25 +116,28 @@ def generate_mc_service_config( mcMeasurement, stateTimeStats, time ):
def validate_state_time_stats( stateTimeStats ): def validate_state_time_stats( stateTimeStats ):
if ( not 'stopped' in stateTimeStats ): if ( not 'stopped' in stateTimeStats ):
stateTimeStats['stopped'] = 0 stateTimeStats['stopped'] = 0.0
if ( not 'avg_stopped' in stateTimeStats ): if ( not 'avg_stopped' in stateTimeStats ):
stateTimeStats['avg_stopped'] = 0 stateTimeStats['avg_stopped'] = 0.0
if ( not 'starting' in stateTimeStats ): if ( not 'starting' in stateTimeStats ):
stateTimeStats['starting'] = 0 stateTimeStats['starting'] = 0.0
if ( not 'avg_starting' in stateTimeStats ): if ( not 'avg_starting' in stateTimeStats ):
stateTimeStats['avg_starting'] = 0 stateTimeStats['avg_starting'] = 0.0
if ( not 'running' in stateTimeStats ): if ( not 'running' in stateTimeStats ):
stateTimeStats['running'] = 0 stateTimeStats['running'] = 0.0
if ( not 'avg_running' in stateTimeStats ):
stateTimeStats['avg_running'] = 0.0
if ( not 'stopping' in stateTimeStats ): if ( not 'stopping' in stateTimeStats ):
stateTimeStats['stopping'] = 0 stateTimeStats['stopping'] = 0.0
if ( not 'avg_stopping' in stateTimeStats ): if ( not 'avg_stopping' in stateTimeStats ):
stateTimeStats['avg_stopping'] = 0 stateTimeStats['avg_stopping'] = 0.0
return stateTimeStats return stateTimeStats
......
...@@ -193,9 +193,29 @@ class Sim(object): ...@@ -193,9 +193,29 @@ class Sim(object):
# remove requests processed off the queue # remove requests processed off the queue
ip_endpoint['request_queue'] -= int(requests_processed) ip_endpoint['request_queue'] -= int(requests_processed)
# update media component state # update media component state (continuously 'running')
state_stats = {}
state_stats['running'] = float(TICK_TIME)
state_stats['avg_running'] = float(TICK_TIME)
agent_db_client.write_points(lp.generate_mc_service_config("mpegdash_service_config",state_stats,sim_time))
sim_time += TICK_TIME sim_time += TICK_TIME
# Simulate tear-down of media components
# move mpegdash_service endpoints state through from 'running' to 'stopped'
max_delay = 0
for ip_endpoint in ip_endpoints:
agent_url = urllib.parse.urlparse(ip_endpoint["agent_url"])
agent_db_client = InfluxDBClient(host=agent_url.hostname, port=agent_url.port, database=self.influx_db_name, timeout=10)
delay_avg = mc_config_delay_dist['stopping'][0]
delay_std = delay_avg * mc_config_delay_dist['stopping'][1]
delay_time = self._changeMCState(agent_db_client, sim_time, "mpegdash_service_config", delay_avg, delay_std, 0.7, 'stopping', 'stopped')
max_delay = max(delay_time, max_delay)
sim_time += max_delay
# End simulation
end_time = sim_time end_time = sim_time
print("Simulation Finished. Start time {0}. End time {1}. Total time {2}".format(start_time, end_time, print("Simulation Finished. Start time {0}. End time {1}. Total time {2}".format(start_time, end_time,
end_time - start_time)) end_time - start_time))
......
...@@ -21,9 +21,9 @@ class TestSimulation(object): ...@@ -21,9 +21,9 @@ class TestSimulation(object):
{"time": "1970-01-01T00:00:00Z", "count_cpu": 12, "count_memory": 12, "count_storage": 12}), {"time": "1970-01-01T00:00:00Z", "count_cpu": 12, "count_memory": 12, "count_storage": 12}),
('SELECT count(*) FROM "CLMCMetrics"."autogen"."mpegdash_service_config" WHERE ipendpoint=\'adaptive_streaming_I1_apache1\'', ('SELECT count(*) FROM "CLMCMetrics"."autogen"."mpegdash_service_config" WHERE ipendpoint=\'adaptive_streaming_I1_apache1\'',
{"time" : "1970-01-01T00:00:00Z", "count_avg_running" : 1, "count_avg_starting" : 1, "count_avg_stopped" : 1, "count_avg_stopping" : 1, "count_running" : 1, "count_starting" : 1, "count_stopped" : 1, "count_stopping" : 1}), {"time" : "1970-01-01T00:00:00Z", "count_avg_running" : 3602, "count_avg_starting" : 3602, "count_avg_stopped" : 3602, "count_avg_stopping" : 3602, "count_running" : 3602, "count_starting" : 3602, "count_stopped" : 3602, "count_stopping" : 3602}),
('SELECT count(*) FROM "CLMCMetrics"."autogen"."mpegdash_service_config" WHERE ipendpoint=\'adaptive_streaming_I1_apache2\'', ('SELECT count(*) FROM "CLMCMetrics"."autogen"."mpegdash_service_config" WHERE ipendpoint=\'adaptive_streaming_I1_apache2\'',
{"time" : "1970-01-01T00:00:00Z", "count_avg_running" : 1, "count_avg_starting" : 1, "count_avg_stopped" : 1, "count_avg_stopping" : 1, "count_running" : 1, "count_starting" : 1, "count_stopped" : 1, "count_stopping" : 1}), {"time" : "1970-01-01T00:00:00Z", "count_avg_running" : 3602, "count_avg_starting" : 3602, "count_avg_stopped" : 3602, "count_avg_stopping" : 3602, "count_running" : 3602, "count_starting" : 3602, "count_stopped" : 3602, "count_stopping" : 3602}),
]) ])
def test_simulation(self, query, expected_result, get_db_client, run_simulation_fixture): def test_simulation(self, query, expected_result, get_db_client, run_simulation_fixture):
""" """
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment