123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import pymongo
- import traceback
- from colorama import Fore
- from toolset.utils.output_helper import log
- from toolset.databases.abstract_database import AbstractDatabase
- class Database(AbstractDatabase):
- @classmethod
- def get_connection(cls, config):
- return pymongo.MongoClient(host = config.database_host)
- @classmethod
- def get_current_world_table(cls, config):
- results_json = []
- try:
- worlds_json = {}
- print("DATABASE_HOST: %s" % config.database_host)
- connection = cls.get_connection(config)
- db = connection.hello_world
- for world in db.world.find():
- if "randomNumber" in world:
- if "id" in world:
- worlds_json[str(int(world["id"]))] = int(
- world["randomNumber"])
- elif "_id" in world:
- worlds_json[str(int(world["_id"]))] = int(
- world["randomNumber"])
- results_json.append(worlds_json)
- connection.close()
- except Exception:
- tb = traceback.format_exc()
- log("ERROR: Unable to load current MongoDB World table.",
- color=Fore.RED)
- log(tb)
- return results_json
- @classmethod
- def test_connection(cls, config):
- try:
- connection = cls.get_connection(config)
- db = connection.hello_world
- db.world.find()
- db.close()
- return True
- except:
- return False
- @classmethod
- def get_queries(cls, config):
- co = cls.get_connection(config)
- status = co.admin.command(pymongo.son_manipulator.SON([('serverStatus', 1)]))
- return int(status["opcounters"]["query"]) + int(status["opcounters"]["update"]) #get_queries returns all the queries
- @classmethod
- def get_rows(cls, config):
- co = cls.get_connection(config)
- status = co.admin.command(pymongo.son_manipulator.SON([('serverStatus', 1)]))
- return int(status["opcounters"]["query"]) * cls.get_rows_per_query(co)
- @classmethod
- def get_rows_updated(cls, config):
- co = cls.get_connection(config)
- status = co.admin.command(pymongo.son_manipulator.SON([('serverStatus', 1)]))
- return int(status["opcounters"]["update"]) * cls.get_rows_per_query(co)
- @classmethod
- def reset_cache(cls, config):
- co = cls.get_connection(config)
- co.admin.command({"planCacheClear": "world"})
- co.admin.command({"planCacheClear": "fortune"})
- @classmethod
- def get_rows_per_query(cls, co):
- rows_per_query = 1
- if cls.tbl_name == "fortune":
- rows_per_query = co["hello_world"][cls.tbl_name].count_documents({})
- return rows_per_query
|