Tri alphabétique
This commit is contained in:
12
.env
12
.env
@@ -1,4 +1,14 @@
|
|||||||
|
#Connexion base de données
|
||||||
DB_HOST=54.36.188.119
|
DB_HOST=54.36.188.119
|
||||||
DB_USER=commun
|
DB_USER=commun
|
||||||
DB_PASSWORD=4cs8Ro6GVnJFkhUI
|
DB_PASSWORD=4cs8Ro6GVnJFkhUI
|
||||||
DB_NAME=Commun
|
DB_NAME=Commun
|
||||||
|
|
||||||
|
# connexion OVH pour les SMS
|
||||||
|
OVH_APP_KEY=f725d07b2f98a195
|
||||||
|
OVH_APP_SECRET=5ca392a0a728e2395edd426bb1e11ad6
|
||||||
|
OVH_CONSUMER_KEY=305f2e8611e58b83930de84ee65c99f9
|
||||||
|
OVH_SMS_ACCOUNT=sms-jm164396-1
|
||||||
|
OVH_SMS_SENDER=DOMO91FR
|
||||||
|
SMS_RECIPIENT=+33635164680
|
||||||
|
OVH_ENDPOINT=ovh-eu
|
||||||
4
.idea/dictionaries/project.xml
generated
4
.idea/dictionaries/project.xml
generated
@@ -3,6 +3,10 @@
|
|||||||
<words>
|
<words>
|
||||||
<w>acces</w>
|
<w>acces</w>
|
||||||
<w>curdate</w>
|
<w>curdate</w>
|
||||||
|
<w>delims</w>
|
||||||
|
<w>endlocal</w>
|
||||||
|
<w>popd</w>
|
||||||
|
<w>pushd</w>
|
||||||
<w>setlocal</w>
|
<w>setlocal</w>
|
||||||
</words>
|
</words>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
|
|||||||
@@ -22,3 +22,18 @@ copy /Y "%PROD_DIR%\Ratio_prod.xlsm" "%INSTALL_CLIENT%\Ratio_prod.xlsm"
|
|||||||
echo.
|
echo.
|
||||||
echo ✔️ Mise à jour complète effectuée (archive, prod, client)
|
echo ✔️ Mise à jour complète effectuée (archive, prod, client)
|
||||||
pause
|
pause
|
||||||
|
echo Nettoyage des anciennes archives (on garde les 5 plus récentes)...
|
||||||
|
|
||||||
|
pushd "%PROD_DIR%"
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
set count=0
|
||||||
|
|
||||||
|
for /f "delims=" %%f in ('dir /b /o-d "Ratio_prod_????_??_??.xlsm"') do (
|
||||||
|
set /a count+=1
|
||||||
|
if !count! gtr 5 (
|
||||||
|
echo Suppression de l'ancienne archive : %%f
|
||||||
|
del "%%f"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
endlocal
|
||||||
|
popd
|
||||||
115
sms_alert.py
Normal file
115
sms_alert.py
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
import os
|
||||||
|
import mysql.connector
|
||||||
|
import ovh
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
# 📍 Liste des numéros de téléphone par site
|
||||||
|
PHONE_NUMBERS_BY_SITE = {
|
||||||
|
"Roissy": ["+336XXXXXXXX"],
|
||||||
|
"Meudon": ["+336XXXXXXXX"],
|
||||||
|
"Saclay": ["+336XXXXXXXX"]
|
||||||
|
}
|
||||||
|
|
||||||
|
STATE_FILE = "last_ids.txt"
|
||||||
|
|
||||||
|
# ✅ Lecture des derniers IDs connus
|
||||||
|
def load_last_ids():
|
||||||
|
if not os.path.exists(STATE_FILE):
|
||||||
|
return {}
|
||||||
|
with open(STATE_FILE, "r") as f:
|
||||||
|
return dict(line.strip().split(":") for line in f)
|
||||||
|
|
||||||
|
# ✅ Sauvegarde des derniers IDs
|
||||||
|
def save_last_ids(ids):
|
||||||
|
with open(STATE_FILE, "w") as f:
|
||||||
|
for site, id_val in ids.items():
|
||||||
|
f.write(f"{site}:{id_val}\n")
|
||||||
|
|
||||||
|
# ✅ Fonction SMS via OVH
|
||||||
|
def send_sms(message: str, site: str) -> None:
|
||||||
|
phone_numbers = PHONE_NUMBERS_BY_SITE.get(site)
|
||||||
|
if not phone_numbers or phone_numbers == ['']:
|
||||||
|
print(f"[!] Aucun numéro défini pour le site {site}. SMS non envoyé.")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
client = ovh.Client(
|
||||||
|
endpoint=os.getenv("OVH_ENDPOINT"),
|
||||||
|
application_key=os.getenv("OVH_APP_KEY"),
|
||||||
|
application_secret=os.getenv("OVH_APP_SECRET"),
|
||||||
|
consumer_key=os.getenv("OVH_CONSUMER_KEY"),
|
||||||
|
)
|
||||||
|
|
||||||
|
sender = os.getenv("OVH_SMS_SENDER")
|
||||||
|
account = os.getenv("OVH_SMS_ACCOUNT")
|
||||||
|
|
||||||
|
result = client.post(f"/sms/{account}/jobs",
|
||||||
|
sender=sender,
|
||||||
|
message=message,
|
||||||
|
receivers=phone_numbers,
|
||||||
|
priority='high',
|
||||||
|
noStopClause=True,
|
||||||
|
charset='UTF-8',
|
||||||
|
class_='phoneDisplay',
|
||||||
|
coding='7bit',
|
||||||
|
senderForResponse=False,
|
||||||
|
validityPeriod=2880)
|
||||||
|
|
||||||
|
print(f"[✓] SMS envoyé à {phone_numbers} pour {site}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[!] Erreur envoi SMS OVH : {e}")
|
||||||
|
|
||||||
|
# ✅ Connexion à la base Commun pour lire les identifiants des sites
|
||||||
|
def get_db_connections():
|
||||||
|
conn = mysql.connector.connect(
|
||||||
|
host=os.getenv("DB_HOST"),
|
||||||
|
user=os.getenv("DB_USER"),
|
||||||
|
password=os.getenv("DB_PASSWORD"),
|
||||||
|
database=os.getenv("DB_NAME")
|
||||||
|
)
|
||||||
|
cursor = conn.cursor(dictionary=True)
|
||||||
|
cursor.execute("SELECT BDD, UID, PWD FROM Connexions")
|
||||||
|
connexions = cursor.fetchall()
|
||||||
|
cursor.close()
|
||||||
|
conn.close()
|
||||||
|
return connexions
|
||||||
|
|
||||||
|
# ✅ Vérifie chaque site pour nouvelle ligne
|
||||||
|
def check_new_logs():
|
||||||
|
last_ids = load_last_ids()
|
||||||
|
connexions = get_db_connections()
|
||||||
|
|
||||||
|
for conn_info in connexions:
|
||||||
|
site = conn_info['BDD']
|
||||||
|
try:
|
||||||
|
conn = mysql.connector.connect(
|
||||||
|
host=os.getenv("DB_HOST"),
|
||||||
|
user=conn_info['UID'],
|
||||||
|
password=conn_info['PWD'],
|
||||||
|
database=site
|
||||||
|
)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute("SELECT MAX(Id) FROM Log_Inventaires")
|
||||||
|
result = cursor.fetchone()
|
||||||
|
latest_id = result[0] or 0
|
||||||
|
old_id = int(last_ids.get(site, 0))
|
||||||
|
|
||||||
|
print(f"{site} → dernier ID enregistré : {old_id}, ID actuel : {latest_id}")
|
||||||
|
|
||||||
|
if latest_id > old_id:
|
||||||
|
message = f"🔔 Nouveau log dans {site} (Id: {latest_id})"
|
||||||
|
send_sms(message, site)
|
||||||
|
last_ids[site] = str(latest_id)
|
||||||
|
|
||||||
|
cursor.close()
|
||||||
|
conn.close()
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[{site}] Erreur : {e}")
|
||||||
|
|
||||||
|
save_last_ids(last_ids)
|
||||||
|
|
||||||
|
# ✅ Point d'entrée principal
|
||||||
|
if __name__ == "__main__":
|
||||||
|
check_new_logs()
|
||||||
33
test_sms_ovh.py
Normal file
33
test_sms_ovh.py
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
def send_sms(message: str, site: str) -> None:
|
||||||
|
phone_numbers = PHONE_NUMBERS_BY_SITE.get(site)
|
||||||
|
if not phone_numbers or phone_numbers == ['']:
|
||||||
|
print(f"[!] Aucun numéro défini pour le site {site}. SMS non envoyé.")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
client = ovh.Client(
|
||||||
|
endpoint=os.getenv("OVH_ENDPOINT"),
|
||||||
|
application_key=os.getenv("OVH_APP_KEY"),
|
||||||
|
application_secret=os.getenv("OVH_APP_SECRET"),
|
||||||
|
consumer_key=os.getenv("OVH_CONSUMER_KEY"),
|
||||||
|
)
|
||||||
|
|
||||||
|
sender = os.getenv("OVH_SMS_SENDER")
|
||||||
|
account = os.getenv("OVH_SMS_ACCOUNT")
|
||||||
|
|
||||||
|
result = client.post(f"/sms/{account}/jobs",
|
||||||
|
sender=sender,
|
||||||
|
message=message,
|
||||||
|
receivers=phone_numbers,
|
||||||
|
priority='high',
|
||||||
|
noStopClause=True,
|
||||||
|
charset='UTF-8',
|
||||||
|
class_='phoneDisplay',
|
||||||
|
coding='7bit',
|
||||||
|
senderForResponse=False,
|
||||||
|
validityPeriod=2880)
|
||||||
|
|
||||||
|
print(f"[✓] SMS envoyé à {phone_numbers} pour {site}")
|
||||||
|
# Optionnel : journaliser_sms(message, site, phone_numbers)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[!] Erreur envoi SMS OVH : {e}")
|
||||||
Reference in New Issue
Block a user