#!/usr/bin/env python # # Workload Automation v2 for LAVA # # Copyright (C) 2014, Linaro Limited. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # Author: Milosz Wasilewski # import sqlite3 from copy import deepcopy from numpy import array, mean from optparse import OptionParser SQLITE_DB_GLOBAL_PATH = "/root/db_results/" VALUE = 'value' UNIT = 'unit' modes_prepares_statement = "select distinct(id) from workload_specs;" metric_prepared_statement = """ SELECT label as workload, metric, value, units, wsr.spec_id FROM metrics AS m INNER JOIN ( SELECT ws.OID as spec_oid, ws.id as spec_id, uuid, label FROM workload_specs AS ws INNER JOIN runs AS r ON ws.run_oid = r.OID ) AS wsr ON wsr.spec_oid = m.spec_oid WHERE spec_id = ?;""" if __name__ == '__main__': usage = "usage: %prog [OPTIONS]" parser = OptionParser(usage=usage) parser.add_option("-n", "--job-name", dest="job_name", help="Job name to be used as db name in agenda file") (options, args) = parser.parse_args() if not options.job_name: parser.error("Job name missing") conn = sqlite3.connect(SQLITE_DB_GLOBAL_PATH + options.job_name + ".db") modes_cursor = conn.cursor() metrics = {} for mode_row in modes_cursor.execute(modes_prepares_statement): metric_cursor = conn.cursor() metrics[mode_row[0]] = {} for metric_row in metric_cursor.execute( metric_prepared_statement, (mode_row[0], )): print metric_row if metric_row[1] in metrics[mode_row[0]]: metrics[mode_row[0]][metric_row[1]][VALUE].append( float(metric_row[2])) else: metrics[mode_row[0]][metric_row[1]] = { VALUE: [float(metric_row[2])], UNIT: metric_row[3]} metric_cursor.close() modes_cursor.close() conn.close() for key in metrics.iterkeys(): for metric in metrics[key].iterkeys(): print "%s_%s Measurement:%s Units:%s Result:pass" % ( key, metric.replace(" ", "_").replace(",", "_"), mean(array(metrics[key][metric][VALUE])), metrics[key][metric][UNIT])