[URBACKUP / JEEDOM] Affichage d'un texte dans une commande Script

Bonjour.
J’essaie de superviser mes backup « Urbackup »
J’avance bien
Via le plugin script j’envoie une commande au serveur Urbackup qui me répond via son API

Par contre le retour est un gros bloc de texte.

1 - Comment mettre à la ligne ?
2 - Le texte ne s’affiche pas sur le dashboard ??

@bartounet j’utilise aussi urbackup, ton script m’intéresse pas mal. merci.

Salut essai avec un script Python, ce n’est pas le plus simple mais pour moi ca marche.
1.Stocker le resultat de ton script dans un fichier
ex: sudo /var/www/html/plugins/script/check_urabackup.sh >> fichier.txt
2.Création d’un virtuel avec des valeurs infos et noter leurs numerosex: 1000, 1001, 1002, 1003
3.Ensuite créer un second script , de type Python qui va chercher le fichier.txt et qui t’envoie certaines valeurs dans des variables du Virtuel.
ex :

#! /usr/bin python
# coding: utf-8

#Librairies
import urllib    
import xml.etree.ElementTree as ET 

#################################
#Valeur du fichier.txt
#D01 = donnee1
#D02 = donnee1
#D03 = donnee1
#D04 = donnee1
#################################

#Le numero des variables de ton virtuel
D01 = '1000'
D02 = '1001'
D03 = '1002'
D04 = '1003'


#Adresse IP local de Jeedom
IP = 'x.x.x.x'

#Clé Api de Jeedom plugin Virtuel
cle_api = 'xxxxxxxxxx'

#Adresse pour l envoi d information
Adresse = 'http://' + IP + '/core/api/jeeApi.php?api=' + cle_api + '&type=virtual&id='
Valeur = '&value='

#Cherche le fichier txt (il faut renseigner le dossier) 
id_request = ET.parse('/var/www/html/plugins/script/') 

#Lecture du fichier txt
root = id_request.getroot()

#Les requetes (penser au .text afin d'avoir la valeur
D01_Call = Adresse + D01 + Valeur + root[2][0][0].text 
D02_Call = Adresse + D02 + Valeur + root[2][1][0].text 
D03_Call = Adresse + D03 + Valeur + root[3][0][0].text 
D04_Call = Adresse + D04 + Valeur + root[3][1][0].text 


#Envois de donnees a Jeedom
Envoi01 = urllib.urlopen(D01_Call) 
print Envoi01.read()
Envoi02 = urllib.urlopen(D02_Call) 
print Envoi02.read()
Envoi03 = urllib.urlopen(D03_Call) 
print Envoi03.read()
Envoi04 = urllib.urlopen(D04_Call) 
print Envoi04.read()

4.Créer un scénario qui exécute les deux scripts.

Il s’agit d’une piste, pas la solution d’un pro.
Bon courage.

Bonne idée ce sera plus modulaire et utilisable
Je vais parser le fichier pour avoir 3 commandes par client
Nom
last backup
Status

mais je vais le faire en Bash avec du grep et awk, je ne maîtrise pas du tout python

@minscof j’essaierai de documenter, mais j’utilise l’API Urbackup classique

Pour l’affichage, j’ai déjà eu ce soucis avec du texte que je récupère sur une page web (en l’occurence les timers de l’IPX800). J’avais fait un widget avec ce code :
<div>#name_display# - #state#</div>
Du coup forcément, il faut recharger la page si l’info change, mais dans mon cas ce n’était pas gênant. Je n’ai pas cherché plus loin.

Et pour traiter l’info, tu peux aussi créer un scénario avec un bloc code ce qui te donnera accès à toutes les fonctions de php. Pour ma part, je préfère cela aux scripts maintenant, je trouve cela plus lisible et facile à maintenir.

J’avance
J’ai crée un script bash qui met permet de définir 2 variables
1 - Le client urbackup ( ex: --client nas)
2 - L’info que je veux remonter. ( ex ----backupstatus)

Et en cli ca marche


root@jeedom:/var/www/html/plugins/script# /var/www/html/plugins/script/urbackup.sh --client nas --clientstatus
 Online
root@jeedom:/var/www/html/plugins/script# /var/www/html/plugins/script/urbackup.sh --client nas --lastbackup
 08.11.2019 22:08:54
root@jeedom:/var/www/html/plugins/script# /var/www/html/plugins/script/urbackup.sh --client nas --backupstatus
 OK
root@jeedom:/var/www/html/plugins/script# /var/www/html/plugins/script/urbackup.sh --client nas --globalstatus
 OK

Par contre je sèche pour depuis Jeedom comment ajouter mes 2 arguments dans un virtuel à ma commande script ??

Je pourrai créer autant de commande scripts que d’infos mais bon… si j’ai fait une commande acceptant les arguments c’est pouvoir les appeler

au final comment appeler la commande depuis un virtuel
mon_script --client nas --clientstatus
sudo /var/www/html/plugins/script/urbackup.sh --client nas --clientstatus

Pour l’instant j’ai crée le script avec les 4 commandes…
C’est pas propre mais répond au besoin

Le virtuel qui appelle les commandes du scripts

Et ca répond au besoin :slight_smile:

Concernant la supervision de Urbackup j’ai simplement suivi les conseils sur le forum urbackup
J’ai installé 2 choses sur le serveurs Urbackup.

D’abord l’API

Et ensuite ce script ( dans le dossier de l’API)

Grace à ce script tu as déjà ce retour

root@raspberrypi-backup:~/urbackup-server-python-web-api-wrapper# python3 /root/urbackup-server-python-web-api-wrapper/check_urbackup.py '--host' '127.0.0.1' '--password' 'tonpass' '--user' 'admin'
OK: There are 3 Backups in state OK
        -> OK:3 WARNING:0 CRITICAL:0

NAS
         -> Client Status: Online
         -> Last Backup: 08.11.2019 22:08:54
         -> Backup Status: OK
         -> Status: OK
bartounet-PC
         -> Client Status: Online
         -> Last Backup: 09.11.2019 00:05:07
         -> Backup Status: OK
         -> Status: OK
pascaline
         -> Client Status: Online
         -> Last Backup: 09.11.2019 17:23:36
         -> Backup Status: OK
         -> Status: OK

| OK=3;; WARNING=0;; CRITICAL=0;;

J’ai échangé les cléfs SSH entre Jeedom et le serveur URbackup
Après tout le reste tu as suivi sur ce post, c’est la partie Jeedom

Voiçi mon script que j’ai mis dans Jeedom

BARTOUNET 2019
#JEEDOM URBACKUP SCRIPT
################################
 file="/tmp/urbackup.txt"

 ssh root@10.0.0.200 python3 /root/urbackup-server-python-web-api-wrapper/check_urbackup.py '--host' '127.0.0.1' '--password' 'tonpass' '--user' 'admin' > $file

        if [ "$1" = "--client" ]; then
                clientparam=$(echo $* | gawk -F'--client' '{print $2}' | cut -d" " -f2)
        fi


for i in $3; do
        if [ "$i" = "--clientstatus" ]; then
                cat $file | grep -i -A4 $clientparam | grep -w "Client Status:"  | awk -F "Status:" '{ print $2}'

        elif [ "$i" = "--lastbackup" ]; then
                cat $file | grep -i -A4 $clientparam | grep -w "Last Backup:"  | awk -F "Backup:" '{ print $2}'

        elif [ "$i" = "--backupstatus" ]; then
                cat $file | grep -i -A4 $clientparam | grep -w "Backup Status:"  | awk -F "Status:" '{ print $2}'

        elif [ "$i" = "--globalstatus" ]; then
                cat $file | grep -i -A4 $clientparam | grep -w "> Status:"  | awk -F "Status:" '{ print $2}'

        fi

           done

Faut que je vérifie quand même qu’un seul fichier texte ne pose pas de problème de conflit en cas de commande simultanée.
Il faudra probablement mettre un fichier avec date et le supprimer.