115 lines
5.3 KiB
Python
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
|
|
)
|
|
self.db.updateAvailable(
|
|
wantedServer, wantedDatacenter, 1
|
|
)
|
|
|
|
self.logger.info(
|
|
"{} is available in {}".format(
|
|
wantedServer, wantedDatacenter
|
|
)
|
|
)
|
|
if self.db.isNotified(
|
|
wantedServer, wantedDatacenter, 1
|
|
):
|
|
self.logger.info("Already notified")
|
|
else:
|
|
refOfServer = Settings().get(
|
|
"config/refToName.yml"
|
|
)
|
|
self.notify(
|
|
"✅ Le serveur {} 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 de nouveau indisponible au datacenter de {}".format(
|
|
refOfServer[wantedServer],
|
|
wantedDatacenter,
|
|
)
|
|
)
|
|
self.db.updateNotified(
|
|
wantedServer, wantedDatacenter, 1
|
|
)
|
|
|
|
def notify(self, message):
|
|
Notifications(self.settings).run(message)
|