#!/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/" 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 metric = ? AND spec_id = ?;""" metrics_common = ['execution_time', 'arm,vexpress-energy A7 Jcore', 'arm,vexpress-energy A15 Jcore'] metrics_bbench = ['Performance'] 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() for mode_row in modes_cursor.execute(modes_prepares_statement): metrics_local = deepcopy(metrics_common) if 'bbench' in mode_row[0]: metrics_local = metrics_local + metrics_bbench for metric in metrics_local: params = (metric, mode_row[0]) metric_values = [] metric_cursor = conn.cursor() units = "" for metric_row in metric_cursor.execute(metric_prepared_statement, params): metric_values.append(float(metric_row[2])) units = metric_row[3] print "%s_%s Measurement:%s Units:%s Result:pass" % ( mode_row[0], metric.replace(" ", "_").replace(",", "_"), mean(array(metric_values)), units) metric_cursor.close() modes_cursor.close() conn.close()