diff --git a/clmctest/monitoring/LineProtocolGenerator.py b/clmctest/monitoring/LineProtocolGenerator.py index 16fb13dc19c1fb84779e0722080b74f015e76549..692405ef04d261039d4c00d6cbf0367a4d286bf1 100644 --- a/clmctest/monitoring/LineProtocolGenerator.py +++ b/clmctest/monitoring/LineProtocolGenerator.py @@ -125,18 +125,18 @@ def _getNSTime(time): def generate_mc_service_config( mcMeasurement, stateTimeStats, time ): - stateTimeStats = validate_state_time_stats( stateTimeStats ) + validStats = validate_state_time_stats( stateTimeStats ) result = [{ "measurement" : mcMeasurement, "fields" : - { "stopped" : stateTimeStats['stopped'], - "avg_stopped" : stateTimeStats['avg_stopped'], - "starting" : stateTimeStats['starting'], - "avg_starting" : stateTimeStats['avg_starting'], - "running" : stateTimeStats['running'], - "avg_running" : stateTimeStats['avg_running'], - "stopping" : stateTimeStats['stopping'], - "avg_stopping" : stateTimeStats['avg_stopping'] + { "stopped" : validStats['stopped'], + "avg_stopped" : validStats['avg_stopped'], + "starting" : validStats['starting'], + "avg_starting" : validStats['avg_starting'], + "running" : validStats['running'], + "avg_running" : validStats['avg_running'], + "stopping" : validStats['stopping'], + "avg_stopping" : validStats['avg_stopping'] }, "time" : _getNSTime(time) }] @@ -145,25 +145,28 @@ def generate_mc_service_config( mcMeasurement, stateTimeStats, time ): def validate_state_time_stats( stateTimeStats ): if ( not 'stopped' in stateTimeStats ): - stateTimeStats['stopped'] = 0 + stateTimeStats['stopped'] = 0.0 if ( not 'avg_stopped' in stateTimeStats ): - stateTimeStats['avg_stopped'] = 0 + stateTimeStats['avg_stopped'] = 0.0 if ( not 'starting' in stateTimeStats ): - stateTimeStats['starting'] = 0 + stateTimeStats['starting'] = 0.0 if ( not 'avg_starting' in stateTimeStats ): - stateTimeStats['avg_starting'] = 0 + stateTimeStats['avg_starting'] = 0.0 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 ): - stateTimeStats['stopping'] = 0 + stateTimeStats['stopping'] = 0.0 if ( not 'avg_stopping' in stateTimeStats ): - stateTimeStats['avg_stopping'] = 0 + stateTimeStats['avg_stopping'] = 0.0 return stateTimeStats diff --git a/clmctest/monitoring/StreamingSim.py b/clmctest/monitoring/StreamingSim.py index 5a995ccf40b4f6619de88750456c31651866d0d7..242fe83a5eace6e918702b09a80ba1d234cc3706 100644 --- a/clmctest/monitoring/StreamingSim.py +++ b/clmctest/monitoring/StreamingSim.py @@ -193,9 +193,29 @@ class Sim(object): # remove requests processed off the queue 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 + + # 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 print("Simulation Finished. Start time {0}. End time {1}. Total time {2}".format(start_time, end_time, end_time - start_time)) @@ -267,7 +287,7 @@ class Sim(object): mc_states[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 diff --git a/clmctest/monitoring/test_simresults.py b/clmctest/monitoring/test_simresults.py index 7468594ff007cc6e20c88f36b130c44f9709261e..73d984a1a852ab988a782ce780b4b85d1993cfe6 100644 --- a/clmctest/monitoring/test_simresults.py +++ b/clmctest/monitoring/test_simresults.py @@ -21,9 +21,9 @@ class TestSimulation(object): {"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\'', - {"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\'', - {"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): """