| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | import jsonimport psycopg2import tracebackfrom colorama import Forefrom toolset.utils.output_helper import logfrom toolset.databases.abstract_database import AbstractDatabaseclass Database(AbstractDatabase):    @classmethod    def get_connection(cls, config):        db = psycopg2.connect(                host=config.database_host,                port="5432",                user="benchmarkdbuser",                password="benchmarkdbpass",                database="hello_world")        cursor = db.cursor()        cursor.execute("CREATE EXTENSION IF NOT EXISTS pg_stat_statements")        return db    @classmethod    def get_current_world_table(cls, config):        results_json = []        try:            db = cls.get_connection(config)            cursor = db.cursor()            cursor.execute("SELECT * FROM \"World\"")            results = cursor.fetchall()            results_json.append(json.loads(json.dumps(dict(results))))            cursor = db.cursor()            cursor.execute("SELECT * FROM \"world\"")            results = cursor.fetchall()            results_json.append(json.loads(json.dumps(dict(results))))            db.close()        except Exception:            tb = traceback.format_exc()            log("ERROR: Unable to load current Postgres World table.",                color=Fore.RED)            log(tb)        return results_json    @classmethod    def test_connection(cls, config):        try:            db = cls.get_connection(config)            cursor = db.cursor()            cursor.execute("SELECT 1")            cursor.fetchall()            db.close()            return True        except:            return False    @classmethod    def get_queries(cls, config):        return cls.__exec_and_fetchone(config, "SELECT SUM(calls) FROM pg_stat_statements WHERE query ~* '[[:<:]]%s[[:>:]]'" % cls.tbl_name)    @classmethod    def get_rows(cls, config):        return cls.__exec_and_fetchone(config, "SELECT SUM(rows) FROM pg_stat_statements WHERE query ~* '[[:<:]]%s[[:>:]]' AND query ~* 'select'" % cls.tbl_name)    @classmethod    def get_rows_updated(cls, config):        return cls.__exec_and_fetchone(config, "SELECT SUM(rows) FROM pg_stat_statements WHERE query ~* '[[:<:]]%s[[:>:]]' AND query ~* 'update'" % cls.tbl_name)    @classmethod    def reset_cache(cls, config):#        To fix: DISCARD ALL cannot run inside a transaction block#        cursor = self.db.cursor()#        cursor.execute("END;DISCARD ALL;")#        self.db.commit()        return    @classmethod    def __exec_and_fetchone(cls, config, query):        db = cls.get_connection(config)        cursor = db.cursor()        cursor.execute(query)        record = cursor.fetchone()        return record[0]
 |