summaryrefslogtreecommitdiffstats
path: root/storperf/storperf_master.py
diff options
context:
space:
mode:
authorMark Beierl <mark.beierl@emc.com>2016-05-04 22:53:07 -0400
committerMark Beierl <mark.beierl@emc.com>2016-05-05 14:58:39 -0400
commit05e863781ce6746fabec176d1fc5f7454f2cdd73 (patch)
tree0ff7f2aa9e55b33c3f95c0521bbd3991a9e4e2c0 /storperf/storperf_master.py
parent1e0544d70dabed4f33e0624cb4a7cde4c8c6b691 (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.py46
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