'Write Latency (ms)')
writechart = chart.to_base64_image()
+ metadata = "<table>"
+ for key, value in params.iteritems():
+ metadata += "<TR><TD>" + key + "<TD>" + value + "</TR>"
+ metadata += "</table>"
+
html = """<html><body>%s <BR>
Number of VMs: %s <BR>
Cinder volume size per VM: %s (GB) <BR>
+ Metadata: <BR>
+ %s<BR>
<center>Read Latency Report <BR>
<img src="data:image/png;base64,%s"/>
<center>Write Latency Report <BR>
</body></html>""" % (job_id,
params['agent_count'],
params['volume_size'],
+ metadata,
readchart,
writechart,
)
self.logger = logging.getLogger(__name__)
@swagger.operation(
- notes='Fetch the average latency of the specified workload',
+ notes='Fetch the metrics of the specified workload',
parameters=[
{
"name": "id",
"type": "string",
"allowMultiple": False,
"paramType": "query"
+ },
+ {
+ "name": "type",
+ "description": "The type of metrics to report. May be "
+ "metrics (default), or metadata",
+ "required": False,
+ "type": "string",
+ "allowMultiple": False,
+ "paramType": "query"
}
],
responseMessages=[
{
"code": 200,
- "message": "Wordload ID found, response in JSON format"
+ "message": "Workload ID found, response in JSON format"
},
{
"code": 404,
]
)
def get(self):
+
+ type = "metrics"
+ if request.args.get('type'):
+ type = request.args.get('type')
+
workload_id = request.args.get('id')
- print workload_id
- return jsonify(storperf.fetch_results(workload_id))
+
+ if type == "metrics":
+ return jsonify(storperf.fetch_results(workload_id))
+
+ if type == "metadata":
+ return jsonify(storperf.fetch_metadata(workload_id))
@swagger.operation(
parameters=[
storperf.workloads = request.json['workload']
else:
storperf.workloads = None
+ if ('metadata' in request.json):
+ metadata = request.json['metadata']
+ else:
+ metadata = {}
- job_id = storperf.execute_workloads()
+ job_id = storperf.execute_workloads(metadata)
return jsonify({'job_id': job_id})
self._heat_client.stacks.delete(stack_id=self.stack_id)
sleep(2)
- def execute_workloads(self):
+ def execute_workloads(self, metadata={}):
if (self.stack_id is None):
raise ParameterError("ERROR: Stack does not exist")
self._test_executor.slaves = slaves
job_id = self._test_executor.execute()
- params = {}
+
+ params = metadata
params['agent_count'] = self.agent_count
params['public_network'] = self.public_network
params['volume_size'] = self.volume_size
self.job_db.record_workload_params(job_id, params)
+
return job_id
def terminate_workloads(self):
graphite_db = GraphiteDB()
return graphite_db.fetch_averages(job_id)
+ def fetch_metadata(self, job_id):
+ return self.job_db.fetch_workload_params(job_id)
+
def _setup_slave(self, slave):
logger = logging.getLogger(__name__ + ":" + slave)
def _attach_to_openstack(self):
time_since_last_auth = datetime.now() - self._last_openstack_auth
- print time_since_last_auth.total_seconds()
+
if (self._cinder_client is None or
time_since_last_auth.total_seconds() > 600):
self._last_openstack_auth = datetime.now()