OVH-server-tracker/src/core.py

115 lines
5.3 KiB
Python

#!/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)