Skip to content
Snippets Groups Projects
Commit a881c846 authored by Nikolay Stanchev's avatar Nikolay Stanchev
Browse files

Merge branch 'mediaComponentConfig' of...

Merge branch 'mediaComponentConfig' of https://gitlab.it-innovation.soton.ac.uk/FLAME/flame-clmc into endpointConfig
parents eed244b1 f017582c
No related branches found
No related tags found
No related merge requests found
...@@ -125,18 +125,18 @@ def _getNSTime(time): ...@@ -125,18 +125,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) }]
...@@ -145,25 +145,28 @@ def generate_mc_service_config( mcMeasurement, stateTimeStats, time ): ...@@ -145,25 +145,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))
...@@ -267,7 +287,7 @@ class Sim(object): ...@@ -267,7 +287,7 @@ class Sim(object):
mc_states[next_state] = next_state_time mc_states[next_state] = next_state_time
mc_states["avg_" +next_state] = next_state_time mc_states["avg_" +next_state] = next_state_time
agent_db_client.write_points(lp.generate_mc_service_config(mc_measurement, mc_states, sim_time )) agent_db_client.write_points(lp.generate_mc_service_config(mc_measurement, mc_states, sim_time))
return total_delay_time return total_delay_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.
Finish editing this message first!
Please register or to comment