#!/usr/bin/env python3 # coding: utf-8 # -*- coding: utf-8 -*- import os import requests from src.db import DB from src.logs import Logger from src.notifications import Notifications from src.settings import Settings class OVHTracker: def __init__(self, config): self.settings = Settings().get(config) self.logger = Logger( self.settings["log"]["level"], self.settings["log"]["path"] ) if os.path.isfile(self.settings["db"]): self.logger.info("DB already created") else: self.logger.warning("DB not created") DB(self.settings["db"], self.settings).create() self.db = DB(self.settings["db"], self.settings) self.logger.info("App loaded") self.main() def main(self): self.getStock() self.findServer() def getStock(self): url = self.settings["main"]["api_url"] self.logger.info("Getting {}".format(url)) try: resp = requests.get(url) except requests.exceptions.RequestException as e: raise SystemExit(e) if resp.json is not None: self.stock = resp.json() def findServer(self): for server in self.stock: for wantedServer in self.settings["main"]["id_server"]: if wantedServer == server["hardware"]: for dc in server["datacenters"]: for wantedDatacenter in self.settings["main"]["datacenter"]: if wantedDatacenter in dc["datacenter"]: if dc["availability"] not in ("unavailable", "unknown"): if ( self.db.isServerExist( wantedServer, wantedDatacenter ) is False ): self.db.insertServer( wantedServer, wantedDatacenter ) if self.db.isNotified( wantedServer, wantedDatacenter, 1 ): self.logger.info("Already notified") else: self.db.updateAvailable( wantedServer, wantedDatacenter, 1 ) self.logger.info( "{} is available in {}".format( wantedServer, wantedDatacenter ) ) refOfServer = Settings().get( "config/refToName.yml" ) self.notify( "✅ Le serveur {} est disponible au datacenter de {}".format( refOfServer[wantedServer], wantedDatacenter, ) ), self.db.updateNotified( wantedServer, wantedDatacenter, 1 ) else: if self.db.isServerExist( wantedServer, wantedDatacenter ): if self.db.isNotified( wantedServer, wantedDatacenter, 0 ): self.logger.info("Already notified") else: self.db.updateNotified( wantedServer, wantedDatacenter, 0 ) self.db.updateAvailable( wantedServer, wantedDatacenter, 0 ) refOfServer = Settings().get( "config/refToName.yml" ) self.notify( "⛔ Le serveur {} est indisponible au datacenter de {}".format( refOfServer[wantedServer], wantedDatacenter, ) ) self.db.updateNotified( wantedServer, wantedDatacenter, 1 ) def notify(self, message): Notifications(self.settings).run(message)