X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=testsuites%2Fvstf%2Fvstf_scripts%2Fvstf%2Fcontroller%2Fdatabase%2Fdbinterface.py;fp=testsuites%2Fvstf%2Fvstf_scripts%2Fvstf%2Fcontroller%2Fdatabase%2Fdbinterface.py;h=0000000000000000000000000000000000000000;hb=fb9e1a726d3a598494fd38330848ef676219a47a;hp=a2aad9e8b3785ce17c7b34f1ba6c0556b86ecf3e;hpb=6dff90faee27dc5569255f5cb6ba72ae5e22b924;p=bottlenecks.git diff --git a/testsuites/vstf/vstf_scripts/vstf/controller/database/dbinterface.py b/testsuites/vstf/vstf_scripts/vstf/controller/database/dbinterface.py deleted file mode 100644 index a2aad9e8..00000000 --- a/testsuites/vstf/vstf_scripts/vstf/controller/database/dbinterface.py +++ /dev/null @@ -1,718 +0,0 @@ -############################################################################## -# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -import os -import logging - -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker -from sqlalchemy import and_ -import vstf.controller.database.tables as table -from vstf.controller.database import constants as const - -LOG = logging.getLogger(__name__) - -""" -@event.listens_for(Engine, "before_cursor_execute") -def before_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - conn.info.setdefault('query_start_time', []).append(time.time()) - logging.debug("Start Query: %s", statement) -@event.listens_for(Engine, "after_cursor_execute") -def after_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - total = time.time() - conn.info['query_start_time'].pop(-1) - logging.debug("Query Complete!") - logging.debug("Total Time: %f", total)""" - - -class DbManage(object): - - def __init__(self, db_name=const.DBPATH): - db_exists = os.path.exists(db_name) - try: - self._engine = create_engine('sqlite:///%s' % db_name, echo=False) - db_session = sessionmaker(bind=self._engine) - self._session = db_session() - except Exception as e: - raise e - - # if the db is new , create all tables and init static tables - if not db_exists: - self.create_tables() - self.init_tables() - - def __delete__(self): - self._engine.close_all() - - def create_tables(self): - table.Base.metadata.create_all(self._engine) - self._session.commit() - - def drop_tables(self): - table.Base.metadata.drop_all(self._engine) - self._session.commit() - - def init_tables(self): - self.init_casetable() - self.init_scenario_table() - self._session.commit() - - def init_scenario_table(self): - items = [] - for values in const.SCENARIO_INFO_LIST: - item = table.TblScenarioInfo(ScenarioName=values[0], - FigurePath=values[1], - Description=values[2]) - items.append(item) - self._session.add_all(items) - - # Single TblCaseInfo API - def init_casetable(self): - items = [] - for values in const.CASE_INFO_LIST: - item = table.TblCaseInfo(CaseTag=values[0], - ScenarioName=values[1], - CaseName=values[2], - FigurePath=values[3], - Description=values[4], - Direction=values[5], - Directiontag=values[6], - Configure=values[7]) - items.append(item) - self._session.add_all(items) - - def query_caseinfo(self): - query = self._session.query(table.TblCaseInfo.ScenarioName, - table.TblCaseInfo.CaseTag, - table.TblCaseInfo.CaseName, - table.TblCaseInfo.Direction, - table.TblCaseInfo.Configure) - return query.all() - - def query_case(self, casetag): - query = self._session.query(table.TblCaseInfo.ScenarioName, - table.TblCaseInfo.Directiontag) - return query.first() - - # Single TblTaskList API - def get_last_taskid(self): - query = self._session.query(table.TblTaskList.TaskID) - if query: - return query.all()[-1][0] - else: - return 0 - - def query_tasklist(self): - query = self._session.query(table.TblTaskList) - return query.all() - - def query_taskdate(self, taskid): - query = self._session.query(table.TblTaskList.Date).filter(and_( - table.TblTaskList.TaskID == taskid)) - result = "" - if query: - result += query.first()[0] - return result - - def query_taskname(self, taskid): - query = self._session.query(table.TblTaskList.TaskName).filter(and_( - table.TblTaskList.TaskID == taskid)) - result = "" - if query: - result += query.first()[0] - return result - - def create_task(self, name, date, desc): - try: - item = table.TblTaskList(name, date, desc) - self._session.add(item) - self._session.commit() - except Exception: - return -1 - - return self.get_last_taskid() - - # Single TblHostInfo API - def add_host_2task(self, taskid, name, machine, cpu, men, nic, os): - """All var except task must be string""" - item = table.TblHostInfo(taskid, name, machine, cpu, men, nic, os) - - self._session.add(item) - self._session.commit() - - def query_task_host_list(self, taskid): - query = self._session.query(table.TblHostInfo.HostName, - table.TblHostInfo.Server, - table.TblHostInfo.CPU, - table.TblHostInfo.MEM, - table.TblHostInfo.NIC, - table.TblHostInfo.OS).filter( - table.TblHostInfo.TaskID == taskid) - return query.all() - - # Single TblTestList API - def get_last_testid(self): - query = self._session.query(table.TblTestList.TestID) - print query.all() - if query: - return query.all()[-1][0] - else: - return 0 - - def add_test_2task( - self, - task, - case, - protocol, - typ, - switch, - provider, - tool): - try: - item = table.TblTestList( - task, case, protocol, typ, switch, provider, tool) - self._session.add(item) - self._session.commit() - except Exception: - return -1 - - return self.get_last_testid() - - def get_test_type(self, testid): - query = self._session.query(table.TblTestList.Type).filter( - table.TblTestList.TestID == testid) - return query.first() - - def add_extent_2task(self, task, name, content, description): - item = table.TblEXTInfo(task, name, content, description) - self._session.add(item) - self._session.commit() - - def add_data_2test(self, testid, data): - """ - :data example {'64':{ - 'AvgFrameSize':0 - 'OfferedLoad':0 - 'PercentLoss':0 - 'Bandwidth':0 - 'MinimumLatency':0 - 'MaximumLatency':0 - 'AverageLatency':0 - 'TxFrameCount':0 - 'RxFrameCount':0 - 'Duration':0 - 'CPU':0 - 'MppspGhz':0 - }} - """ - ptype = self.get_test_type(testid) - instance_map = { - 'throughput': table.TblThroughput, - 'frameloss': table.TblFrameloss, - 'latency': table.TblLatency - } - - if ptype and ptype[0] not in instance_map: - print "cant find this test(id=%d)" % (testid) - return False - - test_table_instance = instance_map[ptype[0]] - for pktlen in data.iterkeys(): - args = data.get(pktlen) - query = self._session.query(test_table_instance).filter(and_( - test_table_instance.TestID == testid, - test_table_instance.AvgFrameSize == pktlen)) - if query.all(): - data_dict = {} - for key, value in data.items(): - if key in test_table_instance.__dict__: - data_dict[test_table_instance.__dict__[key]] = value - query.update(data_dict) - else: - print args - tester = test_table_instance(testid, pktlen, **args) - self._session.add(tester) - self._session.commit() - - def query_tasks(self): - result = [] - ret = self._session.query(table.TblTaskList) - if ret: - for tmp in ret.all(): - result.append( - [tmp.TaskID, tmp.TaskName, tmp.Date, tmp.EXTInfo]) - return result - - def query_all_task_id(self): - query = self._session.query(table.TblTaskList.TaskID) - if query: - return query.all() - else: - return [] - - def get_caseinfo(self): - query = self._session.query(table.TblCaseInfo.ScenarioName, - table.TblCaseInfo.CaseTag, - table.TblCaseInfo.CaseName, - table.TblCaseInfo.Direction, - table.TblCaseInfo.Configure) - return query.all() - - def query_scenario(self, casetag): - query = self._session.query( - table.TblCaseInfo.ScenarioName).filter( - table.TblCaseInfo.CaseTag == casetag) - ret = "" - if query and query.first(): - ret = query.first()[0] - return ret - - def query_casefigure(self, casetag, tools): - query = self._session.query(table.TblCaseInfo.FigurePath).filter(and_( - table.TblCaseInfo.CaseTag == casetag)) - result = "" - if query: - result += query.first()[0] - print tools, casetag - result += tools + '/' + casetag + '.jpg' - return result - - def query_casename(self, casetag): - query = self._session.query(table.TblCaseInfo.CaseName).filter(and_( - table.TblCaseInfo.CaseTag == casetag)) - result = "" - if query: - result += query.first()[0] - return result - - # Single TblTestList API - - def query_caselist(self, taskid, scenario): - query = self._session.query( - table.TblTestList.CaseTag).filter( - and_( - table.TblTestList.CaseTag == table.TblCaseInfo.CaseTag, - table.TblCaseInfo.ScenarioName == scenario, - table.TblTestList.TaskID == taskid)).group_by( - table.TblCaseInfo.CaseTag) - return query.all() - - def query_testlist(self, taskid, scenario): - """ - - :rtype : object - """ - query = self._session.query(table.TblTestList).filter(and_( - table.TblTestList.CaseTag == table.TblCaseInfo.CaseTag, - table.TblCaseInfo.ScenarioName == scenario, - table.TblTestList.TaskID == taskid)) - return query.all() - - def query_casetool(self, taskid, casetag, provider, ptype): - query = self._session.query(table.TblTestList.Tools).filter(and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype)) - return query.all() - - def query_casetools(self, taskid, casetag): - query = self._session.query( - table.TblTestList.Tools).filter( - and_( - table.TblTestList.CaseTag == casetag, - table.TblTestList.TaskID == taskid)).group_by( - table.TblTestList.Tools) - return query.all() - - def query_scenariolist(self, taskid): - query = self._session.query( - table.TblCaseInfo.ScenarioName).filter( - and_( - table.TblTestList.CaseTag == table.TblCaseInfo.CaseTag, - table.TblTestList.TaskID == taskid)).group_by( - table.TblCaseInfo.ScenarioName) - return query.all() - - def query_throughput_load(self, taskid, casetag, provider): - ptype = 'throughput' - query = self._session.query( - table.TblThroughput.AvgFrameSize, - table.TblThroughput.OfferedLoad).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblThroughput.TestID)) - return query.all() - - def query_throughput_bandwidth(self, taskid, casetag, provider): - ptype = 'throughput' - query = self._session.query( - table.TblThroughput.AvgFrameSize, - table.TblThroughput.Bandwidth).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblThroughput.TestID)) - return query.all() - - def query_throughput_table(self, taskid, casetag, provider): - ptype = 'throughput' - query = self._session.query( - table.TblThroughput.AvgFrameSize, - table.TblThroughput.Bandwidth, - table.TblThroughput.OfferedLoad, - table.TblThroughput.CPU, - table.TblThroughput.MppspGhz, - table.TblThroughput.MinimumLatency, - table.TblThroughput.MaximumLatency, - table.TblThroughput.AverageLatency, - ).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblThroughput.TestID)) - return query.all() - - def query_throughput_simpletable(self, taskid, casetag, provider): - ptype = 'throughput' - query = self._session.query( - table.TblThroughput.AvgFrameSize, - table.TblThroughput.Bandwidth, - table.TblThroughput.OfferedLoad, - table.TblThroughput.CPU, - table.TblThroughput.MppspGhz, - table.TblThroughput.AverageLatency, - ).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblThroughput.TestID)) - return query.all() - - def query_testdata(self, testid, ptype): - obj = getattr(table, "Tbl%s" % (ptype.title())) - query = self._session.query(obj).filter(obj.TestID == testid) - return query.all() - - def query_throughput_avg(self, taskid, casetag, provider): - ptype = 'throughput' - query = self._session.query( - table.TblThroughput.AvgFrameSize, - table.TblThroughput.AverageLatency).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblThroughput.TestID)) - return query.all() - - def query_frameloss_bandwidth(self, taskid, casetag, provider): - ptype = 'frameloss' - query = self._session.query( - table.TblFrameloss.AvgFrameSize, - table.TblFrameloss.Bandwidth).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblFrameloss.TestID)) - return query.all() - - def query_frameloss_load(self, taskid, casetag, provider): - ptype = 'frameloss' - query = self._session.query( - table.TblFrameloss.AvgFrameSize, - table.TblFrameloss.OfferedLoad).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblFrameloss.TestID)) - return query.all() - - def query_frameloss_table(self, taskid, casetag, provider): - ptype = 'frameloss' - query = self._session.query( - table.TblFrameloss.AvgFrameSize, - table.TblFrameloss.Bandwidth, - table.TblFrameloss.OfferedLoad, - table.TblFrameloss.CPU, - table.TblFrameloss.MppspGhz, - table.TblFrameloss.MinimumLatency, - table.TblFrameloss.MaximumLatency, - table.TblFrameloss.AverageLatency).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblFrameloss.TestID)) - return query.all() - - def query_frameloss_simpletable(self, taskid, casetag, provider): - ptype = 'frameloss' - query = self._session.query( - table.TblFrameloss.AvgFrameSize, - table.TblFrameloss.Bandwidth, - table.TblFrameloss.OfferedLoad, - table.TblFrameloss.CPU, - table.TblFrameloss.MppspGhz, - table.TblFrameloss.AverageLatency).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblFrameloss.TestID)) - return query.all() - - def query_frameloss_avg(self, taskid, casetag, provider): - ptype = 'frameloss' - query = self._session.query( - table.TblFrameloss.AvgFrameSize, - table.TblFrameloss.AverageLatency).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblFrameloss.TestID)) - return query.all() - - def query_latency_avg(self, taskid, casetag, provider): - ptype = 'latency' - query = self._session.query( - table.TblLatency.AvgFrameSize, - table.TblLatency.AverageLatency).filter( - and_( - table.TblTestList.TaskID == taskid, - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.Type == ptype, - table.TblTestList.TestID == table.TblLatency.TestID)) - return query.all() - - def query_summary_table(self, taskid, casetag, provider, ptype): - if ptype in ['throughput', 'frameloss']: - qfunc = getattr(self, "query_%s_table" % (ptype)) - return qfunc(taskid, casetag, provider) - return [] - - def query_summary_simpletable(self, taskid, casetag, provider, ptype): - if ptype in ['throughput', 'frameloss']: - qfunc = getattr(self, "query_%s_simpletable" % (ptype)) - return qfunc(taskid, casetag, provider) - return [] - - def query_bandwidth(self, taskid, casetag, provider, ptype): - if ptype in ['throughput', 'frameloss']: - qfunc = getattr(self, "query_%s_bandwidth" % (ptype)) - return qfunc(taskid, casetag, provider) - return [] - - def query_load(self, taskid, casetag, provider, ptype): - if ptype in ['throughput', 'frameloss']: - qfunc = getattr(self, "query_%s_load" % (ptype)) - return qfunc(taskid, casetag, provider) - return [] - - def query_avglatency(self, taskid, casetag, provider, ptype): - if ptype in ['throughput', 'frameloss', 'latency']: - qfunc = getattr(self, "query_%s_avg" % (ptype)) - return qfunc(taskid, casetag, provider) - return [] - - def query_throughput_provider(self, taskid, casetag, provider): - query = self._session.query( - table.TblThroughput).filter( - and_( - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.TaskID == taskid, - table.TblTestList.TestID == table.TblThroughput.TestID)) - return query.all() - - def query_frameloss_provider(self, taskid, casetag, provider): - query = self._session.query( - table.TblFrameloss).filter( - and_( - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.TaskID == taskid, - table.TblTestList.TestID == table.TblFrameloss.TestID)) - return query.all() - - def query_latency_provider(self, taskid, casetag, provider): - query = self._session.query( - table.TblLatency).filter( - and_( - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.TaskID == taskid, - table.TblTestList.TestID == table.TblLatency.TestID)) - return query.all() - - def query_case_type_count(self, taskid, casetag, ptype): - query = self._session.query( - table.TblTestList).filter( - and_( - table.TblTestList.CaseTag == casetag, - table.TblTestList.Type == ptype, - table.TblTestList.TaskID == taskid)) - - return query.count() - - def query_case_provider_count(self, taskid, casetag, provider): - query = self._session.query( - table.TblTestList).filter( - and_( - table.TblTestList.CaseTag == casetag, - table.TblTestList.Provider == provider, - table.TblTestList.TaskID == taskid)) - return query.count() - - def query_case_type_provider_count(self, taskid, casetag, provider, ptype): - query = self._session.query( - table.TblTestList).filter( - and_( - table.TblTestList.CaseTag == casetag, - table.TblTestList.Type == ptype, - table.TblTestList.Provider == provider, - table.TblTestList.TaskID == taskid)) - - return query.count() - - def query_exten_info(self, taskid): - query = self._session.query( - table.TblEXTInfo.EXTName, - table.TblEXTInfo.EXTContent, - table.TblEXTInfo.Description).filter( - table.TblEXTInfo.TaskID == taskid) - return query.all() - - -def unit_test(): - import time - dbase = DbManage() - - taskid = dbase.create_task("test", str( - time.ctime()), "this is a unit test") - dbase.add_host_2task( - taskid, - "hosta", - "hw82576", - "xxx", - "x", - "82599", - "ubuntu") - dbase.add_extent_2task(taskid, "CETH", "driver", "version 2.0") - dbase.add_extent_2task(taskid, "EVS", "switch", "version 3.0") - - testid = dbase.add_test_2task( - taskid, - "Tn-1", - 'udp', - "throughput", - "ovs", - None, - "netperf") - data = { - '64': { - 'OfferedLoad': 2, - 'PercentLoss': 3, - 'Bandwidth': 4, - 'MinimumLatency': 5, - 'MaximumLatency': 6, - 'AverageLatency': 7, - 'TxFrameCount': 8, - 'RxFrameCount': 9, - 'Duration': 10, - 'CPU': 11, - 'MppspGhz': 12, - } - } - dbase.add_data_2test(testid, data) - - testid = dbase.add_test_2task( - taskid, - "Tn-1", - 'udp', - "frameloss", - "ovs", - None, - "netperf") - data = { - '64': { - 'OfferedLoad': 2, - 'PercentLoss': 3, - 'Bandwidth': 4, - 'MinimumLatency': 5, - 'MaximumLatency': 6, - 'AverageLatency': 7, - 'TxFrameCount': 8, - 'RxFrameCount': 9, - 'Duration': 10, - 'CPU': 11, - 'MppspGhz': 12, - } - } - dbase.add_data_2test(testid, data) - - testid = dbase.add_test_2task( - taskid, - "Tn-1", - 'udp', - "latency", - "ovs", - None, - "netperf") - data = { - 64: { - 'MaximumLatency': 0.0, - 'AverageLatency': 0.0, - 'MinimumLatency': 0.0, - 'OfferedLoad': 0.0}, - 128: { - 'MaximumLatency': 0.0, - 'AverageLatency': 0.0, - 'MinimumLatency': 0.0, - 'OfferedLoad': 0.0}, - 512: { - 'MaximumLatency': 0.0, - 'AverageLatency': 0.0, - 'MinimumLatency': 0.0, - 'OfferedLoad': 0.0}, - 1024: { - 'MaximumLatency': 0.0, - 'AverageLatency': 0.0, - 'MinimumLatency': 0.0, - 'OfferedLoad': 0.0}} - dbase.add_data_2test(testid, data) - query = dbase.query_testlist(1, "Tn") - for item in query: - print item.Protocol - - query = dbase.query_testdata(1, "throughput") - print query - -if __name__ == '__main__': - unit_test()