diff options
author | Mark Beierl <mark.beierl@emc.com> | 2016-05-04 22:53:07 -0400 |
---|---|---|
committer | Mark Beierl <mark.beierl@emc.com> | 2016-05-05 14:58:39 -0400 |
commit | 05e863781ce6746fabec176d1fc5f7454f2cdd73 (patch) | |
tree | 0ff7f2aa9e55b33c3f95c0521bbd3991a9e4e2c0 /storperf/storperf_master.py | |
parent | 1e0544d70dabed4f33e0624cb4a7cde4c8c6b691 (diff) |
Add Stats report and Swagger UI
Add Swagger web ui at /swagger
Add ability to fetch read/write latency status via ReST ui
Can now delete where stack was removed from OpenStack but not from the
storperf DB
Change to use Floating IPs instead of private IP
Fix delete bug where there was no dependency on resources in
the resource group.
JIRA: STORPERF-19
JIRA: STORPERF-20
Change-Id: I0a4b3386789c38d6745906ba896b8ff851dc122f
Signed-off-by: Mark Beierl <mark.beierl@emc.com>
Diffstat (limited to 'storperf/storperf_master.py')
-rw-r--r-- | storperf/storperf_master.py | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/storperf/storperf_master.py b/storperf/storperf_master.py index c684ce6..2a03753 100644 --- a/storperf/storperf_master.py +++ b/storperf/storperf_master.py @@ -7,7 +7,9 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +from storperf.db.graphite_db import GraphiteDB from threading import Thread +from time import sleep import logging import os import subprocess @@ -97,20 +99,20 @@ class StorPerfMaster(object): value) @property - def agent_network(self): + def public_network(self): return self.configuration_db.get_configuration_value( 'stack', - 'agent_network') + 'public_network') - @agent_network.setter - def agent_network(self, value): + @public_network.setter + def public_network(self, value): if (self.stack_id is not None): raise ParameterError( - "ERROR: Cannot change agent network after stack is created") + "ERROR: Cannot change public network after stack is created") self.configuration_db.set_configuration_value( 'stack', - 'agent_network', + 'public_network', value) @property @@ -190,7 +192,8 @@ class StorPerfMaster(object): raise ParameterError("ERROR: Stack has already been created") self._attach_to_openstack() - if (self.agent_count > self.volume_quota): + volume_quota = self.volume_quota + if (volume_quota > 0 and self.agent_count > volume_quota): message = "ERROR: Volume quota too low: " + \ str(self.agent_count) + " > " + str(self.volume_quota) raise ParameterError(message) @@ -205,7 +208,8 @@ class StorPerfMaster(object): def validate_stack(self): self._attach_to_openstack() - if (self.agent_count > self.volume_quota): + volume_quota = self.volume_quota + if (volume_quota > 0 and self.agent_count > volume_quota): message = "ERROR: Volume quota too low: " + \ str(self.agent_count) + " > " + str(self.volume_quota) self.logger.error(message) @@ -218,18 +222,24 @@ class StorPerfMaster(object): parameters=self._make_parameters()) return True - def wait_for_stack_creation(self): - - pass - def delete_stack(self): if (self.stack_id is None): raise ParameterError("ERROR: Stack does not exist") self._attach_to_openstack() - - self._heat_client.stacks.delete(stack_id=self.stack_id) - self.stack_id = None + while True: + stack = self._heat_client.stacks.get(self.stack_id) + status = getattr(stack, 'stack_status') + self.logger.debug("Stack status=%s" % (status,)) + if (status == u'CREATE_COMPLETE'): + self._heat_client.stacks.delete(stack_id=self.stack_id) + if (status == u'DELETE_COMPLETE'): + self.stack_id = None + return True + if (status == u'DELETE_FAILED'): + sleep(5) + self._heat_client.stacks.delete(stack_id=self.stack_id) + sleep(2) def execute_workloads(self): if (self.stack_id is None): @@ -257,6 +267,10 @@ class StorPerfMaster(object): def terminate_workloads(self): return self._test_executor.terminate() + def fetch_results(self, job_id): + graphite_db = GraphiteDB() + return graphite_db.fetch_averages(job_id) + def _setup_slave(self, slave): logger = logging.getLogger(__name__ + ":" + slave) @@ -316,7 +330,7 @@ class StorPerfMaster(object): def _make_parameters(self): heat_parameters = {} - heat_parameters['agent_network'] = self.agent_network + heat_parameters['public_network'] = self.public_network heat_parameters['agent_count'] = self.agent_count heat_parameters['volume_size'] = self.volume_size return heat_parameters |