12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import json
- import MySQLdb
- import traceback
- from colorama import Fore
- from toolset.utils.output_helper import log
- from toolset.databases.abstract_database import AbstractDatabase
- class Database(AbstractDatabase):
- margin = 1.015
- @classmethod
- def get_connection(cls, config):
- return MySQLdb.connect(config.database_host, "benchmarkdbuser",
- "benchmarkdbpass", "hello_world")
- @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))))
- db.close()
- except Exception:
- tb = traceback.format_exc()
- log("ERROR: Unable to load current MySQL 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):
- db = cls.get_connection(config)
- cursor = db.cursor()
- cursor.execute("Show global status where Variable_name in ('Com_select','Com_update')")
- res = 0
- records = cursor.fetchall()
- for row in records:
- res = res + int(row[1])
- return res
- @classmethod
- def get_rows(cls, config):
- db = cls.get_connection(config)
- cursor = db.cursor()
- cursor.execute("""SELECT r.variable_value-u.variable_value FROM
- (SELECT variable_value FROM PERFORMANCE_SCHEMA.SESSION_STATUS where Variable_name like 'Innodb_rows_read') r,
- (SELECT variable_value FROM PERFORMANCE_SCHEMA.SESSION_STATUS where Variable_name like 'Innodb_rows_updated') u""")
- record = cursor.fetchone()
- return int(int(record[0]) * cls.margin) #Mysql lowers the number of rows read
- @classmethod
- def get_rows_updated(cls, config):
- db = cls.get_connection(config)
- cursor = db.cursor()
- cursor.execute("show session status like 'Innodb_rows_updated'")
- record = cursor.fetchone()
- return int(int(record[1]) * cls.margin) #Mysql lowers the number of rows updated
- @classmethod
- def reset_cache(cls, config):
- #No more Cache in Mysql 8.0
- #cursor = self.db.cursor()
- #cursor.execute("RESET QUERY CACHE")
- #self.db.commit()
- return
|