IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

michelgard

Python vérification serveur par SQL

Noter ce billet
par , 10/03/2016 à 16h27 (921 Affichages)
A la maison j’ai un Raspberry Pi qui avec une tache CRON envoi des valeurs de température dans une base de données sur un serveur VPS. http://rasp-pi.fr.nf/mon-dashscreen/

J’ai intallé une verification sur le Raspberry Pi pour la connexion internet. Si la connexion est perdu plus de 5 minutes il reboot. Mais il arrive que la connexion soit bonne mais qu’aucune info ne soit envoyée sur la base SQL du serveur VPS distant.

Donc j’ai fait ce code en Python. Dans un premier temps il récupère la dernière valeur dans une table de la base des températures. Il faut que cette valeur soit enregistrée avec une colonne DateTime pour récupérer l’heure de la dernière entrée.

Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
def connexSQL(paramMysql, sql, colonne):
    try:
        # On créé une conexion MySQL
        conn = MySQLdb.connect(**paramMysql)
        # On créé un curseur MySQL
        cur = conn.cursor(MySQLdb.cursors.DictCursor)
        # On exécute la requête SQL
        cur.execute(sql)
        # On récupère toutes les lignes du résultat de la requête
        rows = cur.fetchall()
        # On parcourt toutes les lignes
        for row in rows:
            # Pour récupérer les différentes valeurs des différents champs
            dateDerniere = row[colonne]
        return dateDerniere
 
    except MySQLdb.Error, e:
        # En cas d’anomalie
        print « Error %d: %s » % (e.args[0],e.args[1])
        sys.exit(1)
 
    finally:
        # On ferme la connexion
        if conn:
            conn.close()
Ensuite on ajoute un delta. Dans mon cas les infos arrivent dans la table toutes les 5 minutes donc j’ajoute 20 mn et si avec cette heure je suis inférieur à l’heure actuelle c’est qu’il y a un problème sur le Raspberry.

Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
# On recupère l’heure de la derniere donnée entrée dans la table
dateDerniere = connexSQL(paramMysql, sql, colonne)
 
#Date et heure maintenant
deSuite = datetime.datetime.now()
#calcul du delta pour savoir si le serveur envoi toujours des données
delta = datetime.timedelta(minutes=delais)

J’ai ajouté la possibilité d’envoyer un mail quand tout va bien et quand quelque chose ne marche pas.

Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
# Envoi mail
def sendEmail(email_from, email_to, subject, text, smtp, portSmtp, mailLogin, passLogin):
    msg = MIMEText(text)
    msg[‘Subject’] = subject
    msg[‘From’] = email_from
    msg[‘To’] = email_to
    s = smtplib.SMTP(smtp, portSmtp)
    s.ehlo()
    s.starttls()
    s.ehlo()
    s.login(mailLogin, passLogin)
    s.sendmail(email_from,[email_to],msg.as_string())
    s.quit()

Et bien sur si cela ne va pas il y a un reboot du Raspberry Pi par une connexion SSH.

Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
# Connexion SSH pour le reboot
def rebootSSH(hostSSH, userSSH, passWordSSH):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostSSH, username=userSSH, password=passWordSSH)
    ssh.exec_command(« sudo reboot »)
Pour l’utilisation il faut entrèe les host, login et mots de passe pour La connexion à la base de données, le mail et le SSH. Il est possible de mettre les mail à False pour éviter de recevoir un mail par heure.

Vous trouverez le fichier complet et le fichier de configuration ici : https://github.com/Michelgard/Python...erveur_par_SQL

Pour finir une tache CRON toutes les 1/2 heures :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
/usr/bin/python /var/www/tache_cron/verifSQLserveur/verifSQLserveur.py >> /var/www/tache_cron/erreur_log/cron_verifSQLserveur.log 2>&1

Michel
http://rasp-pi.fr.nf

Envoyer le billet « Python vérification serveur par SQL » dans le blog Viadeo Envoyer le billet « Python vérification serveur par SQL » dans le blog Twitter Envoyer le billet « Python vérification serveur par SQL » dans le blog Google Envoyer le billet « Python vérification serveur par SQL » dans le blog Facebook Envoyer le billet « Python vérification serveur par SQL » dans le blog Digg Envoyer le billet « Python vérification serveur par SQL » dans le blog Delicious Envoyer le billet « Python vérification serveur par SQL » dans le blog MySpace Envoyer le billet « Python vérification serveur par SQL » dans le blog Yahoo

Mis à jour 24/03/2016 à 21h03 par michelgard

Catégories
Programmation , Python

Commentaires