Page 14 sur 14

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 04 sept. 2019, 11:45
par Jef73
Je veux bien STP, parce que je n'ai pas réussi du tout :)
Merci par avance ;)

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 04 sept. 2019, 13:16
par raqpub
kiboost a écrit :
04 sept. 2019, 11:20
Ok, le soucis c'est que les messages sont en base, et pas dans un log.
Donc comme je t'avais répondu il faut intercepter les messages et en faire un log, que JeeLog puisse ensuite lire.

J'essaye de faire un truc au plus simple avec explications pour y arriver.
Cool si tu y arrives.
Sinon je tente (question de temps) le code ce WE en partant d'un scénario où actuellement je le stocke dans un tag que je m'envoie par mail 1 fois par jour et je détruis les messages de la veille dans le centre de messages.

Merci

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 04 sept. 2019, 14:49
par kiboost
Alors:

1: Créer un scenario (ici [Tools][messageFilter]) avec juste un bloc CODE :

Code : Tout sélectionner

$logDir='/var/www/html/log/monLog';
$log = fopen($logDir, 'w');

$msgs = message::all();
foreach (array_reverse($msgs) as $msg) {
	$text = $msg->getDate().': '.$msg->getPlugin().': '.$msg->getMessage().'\r\n';
	fputs($log, $text);
}

fclose($log);


2: Dans Configuration, Log, ajouter une action sur message qui va lancer ce scenario à chaque message
sceen_1.jpg
sceen_1.jpg (37.41 Kio) Consulté 3098 fois

3: Créer un équipement JeeLog, et simplement lui assigner le log en question
- Voir $logDir dans le code du scenario pour changer son nom
- Le log doit exister avant de créer l'eq JeeLog, il suffit d’exécuter le scénario en ayant au moins un message dans le centre de messages
sceen_2.jpg
sceen_2.jpg (10.34 Kio) Consulté 3098 fois

=> Le JeeLog remonte bien les messages
sceen_3.jpg
sceen_3.jpg (54.94 Kio) Consulté 3098 fois

PS : Si vous videz le centre de messages, ils apparaitront toujours dans le log crée par le scenario.
Vous pouvez mettre une action avant éxécution sur le refresh du JeeLog, en lancant le scenario. Comme çà le log sera rafraichis, puis le jeelog.

;)

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 04 sept. 2019, 15:34
par Jef73
Super merci, je teste ça dès que possible (peut-être pas avant ce WE cependant, sauf si je craque au bureau LOL).

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 05 sept. 2019, 13:36
par raqpub
kiboost a écrit :
04 sept. 2019, 14:49
Alors:
Merci kiboost,

En faisant (peut-être trop vite) avec ton code mon Jeelog sur le dash ne semblait pas formatté.
Du coup j'ai mis mon code (dérivé du tag + mail) :

Code : Tout sélectionner

$logDir='/var/www/html/log/monLog';
$log = fopen($logDir, 'w');

$listMessage = message::all();
foreach ($listMessage as $message){

		$msg .= "[".$message->getDate()."]";
  		$msg .= " (".$message->getPlugin().")";
  		($message->getAction() != "") ? $msg .= " (Action : ".$message->getAction().")" : null;
  		$msg .= " ".$message->getMessage()."\n";
	    fputs($log, $msg);
}

fclose($log);
Mais je regarderai pourquoi pas formatté avec ton code puisque tu montres des écrans qui prouve le contraire.

Merci encore.

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 06 sept. 2019, 09:28
par Jef73
Merci beaucoup @kiboost, ça fonctionne au poil :)
Merci également @raqpub pour la mise en forme, car chez moi aussi le code précédent mettait tout à la queue-leu-leu :|

Reste plus qu'à trouver une méthode pour ne pas afficher les doublons et/ou faire le ménage dans le fichier log ...

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 06 sept. 2019, 10:02
par kiboost
ATTENTION : La version beta du plugin bascule en v4

Donc si vous restez sur un Jeedom V3, passer le plugin en Stable
La Stable sera dispo à la fois en V3 et en V4

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 07 sept. 2019, 08:53
par raqpub
Jef73 a écrit :
06 sept. 2019, 09:28
Merci beaucoup @kiboost, ça fonctionne au poil :)
Merci également @raqpub pour la mise en forme, car chez moi aussi le code précédent mettait tout à la queue-leu-leu :|

Reste plus qu'à trouver une méthode pour ne pas afficher les doublons et/ou faire le ménage dans le fichier log ...
Pour le ménage, dans un scénario programmé à un horaire précis de nettoyage de monLog tu mets un code du genre :

Code : Tout sélectionner

$logDir='/var/www/html/log/monLog';
$log = fopen($logDir, 'w');
fclose($log);

Mais si ton centre de message n'est pas non plus nettoyé tu vas le récupérer à nouveau.
Perso dans mon scénario qui envoie le centre de message par mail je détruis les messages de la veille du centre de messages avec un autre bloc code après envoi du mail :

Code : Tout sélectionner

$msg = "";
$listMessage = message::all();
$hier = date("Y-m-d", strtotime("Yesterday"));
foreach ($listMessage as $message){
  $msg = strtok($message->getDate(), " ");     
  (strtok($message->getDate(), " ")  == $hier) ? $message->remove() : null;
}

$tags['#msg#'] = $msg;
$scenario->setTags($tags);
cordialement

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 07 sept. 2019, 09:32
par Jef73
Ce que je ne comprends pas, c'est pourquoi le contenu du fichier n'est pas supprimé à chaque lancement du scénario puisqu'on utilise le paramètre "w" dans fopen ?

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 07 sept. 2019, 10:05
par Jef73
J'ai compris le problème en mettant des sorties d'étapes un peu partout : le fichier log est bien effacé, mais la boucle inclus l'écriture dans le log, ce qui n'est pas bon car ça cumule chaque message avec les précédents.

En fait, il faut mettre la ligne « fputs($log, $msg); » juste après la boucle foreach. Comme ça quoi :

Code : Tout sélectionner

$listMessage = message::all();
$msg = "";
foreach ($listMessage as $message){
		$msg .= "[".$message->getDate()."]";
  		$msg .= " (".$message->getPlugin().")";
  		($message->getAction() != "") ? $msg .= " (Action : ".$message->getAction().")" : null;
  		$msg .= " ".$message->getMessage()."\n";
}
fputs($log, $msg);
fclose($log);

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 07 sept. 2019, 11:17
par raqpub
Oui comme le scénario est sollicité à chaque message entrant il faut effectivement sortir cette ligne de la boucle.
Bien vu.

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 07 sept. 2019, 11:28
par raqpub
J'ai modifié le code d'injection dans monLog car mes messages n'étaient pas dans le bon ordre chronologique dans le widget Jeelog (1 ière ligne = dernier événement) :

Code : Tout sélectionner

$logDir='/var/www/html/log/monLog';
$log = fopen($logDir, 'w');

$listMessage = message::all();
$listReversed = array_reverse($listMessage);
foreach ($listReversed as $message){

		$msg .= "[".$message->getDate()."]";
  		$msg .= " (".$message->getPlugin().")";
  		($message->getAction() != "") ? $msg .= " (Action : ".$message->getAction().")" : null;
  		$msg .= " ".$message->getMessage()."\n";
}
fputs($log, $msg);
fclose($log);

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 07 sept. 2019, 12:01
par Jef73
Oui j'avais fait la même chose 😁

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 08 sept. 2019, 06:46
par Jef73
Un peu de cosmétique pour que ce soit plus facile à lire quand il y a des messages sur plusieurs lignes :

Code : Tout sélectionner

$logDir='/var/www/html/log/message-center';
$log = fopen($logDir, 'w');

$listMessage = message::all();
$msg = "";
foreach (array_reverse($listMessage) as $message){	// "array-reverse" sert à lire le log à l'envers pour afficher le plus récent en haut du plugin
  		($message->getAction() != "") ? $msg .= " (Action : ".$message->getAction().")" : null;
  		$msg .= "- ".$message->getMessage()."\n";
		$msg .= "[".$message->getDate()."] ";
  		$msg .= strtoupper($message->getPlugin())." :\n\n";
}
fputs($log, $msg);
fclose($log);

Re: [Plugin Tiers][Sujet Principal] JeeLog

Publié : 10 déc. 2019, 12:13
par sfl
Bonjour à tous, Bonjour Kiboost,

j'ai un pb pour afficher le log de mon scénario chauffage.
Le Jeelog n'indique que le lancement de la programmation pourtant j'ai bien coché afficher le detail du scenario.

Je souhaite afficher dans l objet jeelog le detail des actions et des tests du scenario comme c'est dispo dans l'icone log du scenario.

J'ai relu la doc et il n'y a que la case détail du scenario à cocher d'apres moi.

Une idée ?

je vous remercie par avance de votre aide,
Sfl