class MetroApiOperations: #Fecth version information and build the URL accordingly if version has changed since the previous check def __init__(self): self.mongoconnection = MongoConnection() dataDB = self.mongoconnection.find_one('store_info') req = requests.get(***STORE_URL***) dataAPI = req.json() # See if Store Version has been updated if dataDB["storeHash"] == dataAPI["storeHash"] and dataDB["storeVersion"] == dataAPI["version"]: self.d = dataDB else: store_url = '***BASE METADATA URL***'.format(dataAPI["storeHash"], dataAPI["version"]) req = requests.get(store_url) self.d = self.build_app_dict(req.json(), dataAPI["storeHash"], dataAPI["version"], store_url) self.mongoconnection.insert_one('store_info', self.d) #Structure Data to be stored def build_app_dict(self, appStoreData, storeHash, storeVersion, store_url): d = defaultdict(dict) inner_d = defaultdict(dict) nb_of_category = len(appStoreData[1]["data"]) i = 0 y = 0 while i < nb_of_category: for cat_d in appStoreData[1]["data"][i]["data"]: inner_d[str(y)]["name"] = cat_d["name"] inner_d[str(y)]["url"] = 'https:{}'.format(cat_d["url"]) y += 1 i += 1 d["storeHash"] = storeHash d["storeVersion"] = storeVersion d["storePath"] = store_url d["store_last_check"] = datetime.now() d["data"] = inner_d return d # Test URL status code for the entire Apps Dictionnary and write status code in DB def test_response(self): del self.d["_id"] for i in self.d["data"]: url = self.d["data"][i]["url"] req = requests.get(url) resp_code = req.status_code self.d["data"][i]["status"] = resp_code self.d["data"][i]["last_check"] = int(time.time() * 1000) # Epoch time in MS req. by Grafana self.d["insert_time"] = datetime.now() self.mongoconnection.insert_one('http_response', self.d) return self.d["data"]
class TestMongoConnection(unittest.TestCase): def test_should_get_collection_using_default_values(self): self.mongo = MongoConnection(FileProperties(None)) collection = self.mongo.getCollection() self.assertEqual(collection.full_name, "default_database_name.default_collection") def test_should_get_collection_from_parameter(self): configFile = os.path.dirname( os.path.realpath(__file__)) + "/mongo-connection-test.json" self.mongo = MongoConnection(FileProperties(configFile)) collection = self.mongo.getCollection() self.assertEqual(collection.full_name, "test_database.test_collection")
def __init__(self): self.mongoconnection = MongoConnection() dataDB = self.mongoconnection.find_one('store_info') req = requests.get(***STORE_URL***) dataAPI = req.json() # See if Store Version has been updated if dataDB["storeHash"] == dataAPI["storeHash"] and dataDB["storeVersion"] == dataAPI["version"]: self.d = dataDB else: store_url = '***BASE METADATA URL***'.format(dataAPI["storeHash"], dataAPI["version"]) req = requests.get(store_url) self.d = self.build_app_dict(req.json(), dataAPI["storeHash"], dataAPI["version"], store_url) self.mongoconnection.insert_one('store_info', self.d)
class Reader: def __init__(self, start=0, end=None, size=0, configFile=None): self.start = start self.end = end self.size = size self.configFile = FileProperties(configFile) def run(self): self.mongo = MongoConnection(self.configFile) collection = self.mongo.getCollection() self.end = self.mongo.collectionSize(collection, self.end) self.read(collection) def read(self, collection): limit = min(self.size, self.end) skip = self.start while skip < self.end: documents = collection.find({}).skip(skip).limit(limit) for document in documents: print(self.mongo.dump(document)) skip = skip + limit
def structure_data(self): mongoco = MongoConnection() now = datetime.now() date = datetime.now() - timedelta( days=30) # placeholder, define date of data to poll (and display on Grafana) Tweak to extend/shrink date range in return response d = defaultdict(dict) y = 0 for doc in mongoco.find_time_range('http_response', date, now): for i in doc["data"]: d["data"][str(y)] = doc["data"][str(i)] y += 1 i = 0 rows = '' while i < len(d["data"]): time = d["data"][str(i)]["last_check"] app_name = d["data"][str(i)]["name"] status = d["data"][str(i)]["status"] if i + 1 == len(d["data"]): row = '[{},"{}",{}]'.format(time, app_name, status) else: row = '[{},"{}",{}],\n'.format(time, app_name, status) rows += row i += 1 grafana_json = '''[ { \"columns\":[ {\"text\":\"Time\",\"type\":\"time\"}, {\"text\":\"App\",\"type\":\"string\"}, {\"text\":\"Status\",\"type\":\"number\"} ], \"rows\":[ ''' + rows + ''' ], \"type\":\"table\" } ]''' return grafana_json
def run(self): self.mongo = MongoConnection(self.configFile) collection = self.mongo.getCollection() self.end = self.mongo.collectionSize(collection, self.end) self.read(collection)
self.units[i].steps_to_create = unit.steps_to_create self.seller[i] = player self.time_exist[i] = 5 break player.units.remove(unit) # отправляет деньги владельцу юнита # обнуляет все данные о юните, расположенном на i-той позиции def send_money(self, cost, position): self.seller[position].value[self.seller[position].id] += round( cost * game.new_rate[self.seller[position].id]) self.seller[position] = None # проверка на уже залежавшиеся юниты # если таковые имеются, то они удаляются def check(self): for i in range(len(self.units)): if self.time_exist[i] <= 0: self.time_exist[i] = 1 self.units[i] = None self.seller[i] = None pg_conn = PostgresConnection() mongo_conn = MongoConnection() game = Game() server = TcpServer() server.run_()
def test_should_get_collection_using_default_values(self): self.mongo = MongoConnection(FileProperties(None)) collection = self.mongo.getCollection() self.assertEqual(collection.full_name, "default_database_name.default_collection")
def test_should_get_collection_from_parameter(self): configFile = os.path.dirname( os.path.realpath(__file__)) + "/mongo-connection-test.json" self.mongo = MongoConnection(FileProperties(configFile)) collection = self.mongo.getCollection() self.assertEqual(collection.full_name, "test_database.test_collection")
from bottle import static_file from docvec import DocVec import runtime from mongo import MongoConnection from tools import APP_PATH, rpc kontext_app = bottle.Bottle() bottle.TEMPLATE_PATH.insert(0, os.path.join(APP_PATH, 'templates', '')) bottle.TEMPLATE_PATH.insert(1, os.path.join(APP_PATH, 'static', '')) bottle.BaseRequest.MEMFILE_MAX = 5 * 1024 * 1024 runtime.mongo_wrapper = MongoConnection() runtime.mongo_wrapper.set_collection('texts2') runtime.dv = DocVec() @kontext_app.route("/about") def about(): return bottle.template("about", version="0.01", user_id=0, config="yea") @kontext_app.route("/") def index(): return "Go to /loader or directly /ask"