Ca fait maintenant 2 mois que ce plugin pédale dans la semoule: le cron fonctionne par moment et parfois pas, parfois le refresh manuel résoud le problème et parfois non.
Perso je monitore 27 devices sur mon LAN en ARP, comme beaucoup je m’en sers combiné au bluetooth et au GPS pour gérer la présence, ca fausse tout…quand ma femme part au boulot elle est encore vue présente au bout de 4h même avec un cron de 5 mins!
Avis aux devs: vous ne pourriez pas faire un rollback sur la dernière modif de @superbricolo ??
Merci!
merci @superbricolo pour ton retour
Perso je n’ai pas de problèmes récents de déconnexion/reconnexion mais des problèmes de cron.
A titre d’exemple voila l’historique de présence de ma femme aujourd’hui (elle est partie au boulot ce matin et elle y est tjs…c’est moi qui ai déclenché le refresh de 17h…
Ton scan est en ARP ou en IP? Peut-être que ton scan n’aboutit pas à cause d’un appareil déclaré qui fait bloquer la recherche des autres. Il dit quoi ton cron? As tu des logs?
@superbricolo@Mips je ne fais que du ARP. Je viens de relancer les dependances, desactiver et reactiver le plugin en mode debug et rien dans la log pendant 15 mins:
J’ai forcé le refresh de mon Google Nest Hub qui était vu off, il a changé d’état mais rien dans la log
Je suis en v3.3.50 et plugin 2020-05-12 15:07:10
On peut voir que le dernier lancement de ton cron est 19h08. Ce qui n’est pas normal puisque qu’il se lance normalement toute les minutes. Sauf si tu as tardé à envoyer ta copie d’écran. En plus la durée d’exécution est très rapide.
As tu essayé de désactiver le monitorage de la majorité des équipements et d’en remettre que quelques un au faire à mesure pour voir si cela change quelque chose?
Yop, perso je n’est aucune confiance aux table arp, je préférer par dessus tout faire un ping Ip direct, j’arp peut parfois prendre beaucoup de temps à s’update.
Oui j’ai fait ma copie d’écran un instant après. Je n’ai pas trop le temps pour l’instant, je regarderai en detail ce WE. Par contre je m’attendais à avoir des traces du ping ARP en mode DEBUG. Il n’y en a pas dans le code?
@superbricolo j’ai pris le temps de désactiver et réactiver mes équipements un par un.
Mes devices sont réapparus sauf certains qui étaient off comme le téléphone de ma fille.
Par contre après qu’elle soit rentrée il était encore off, il a fallu que je force le refresh pour qu’il apparaisse
Le cron tourne bien toutes les minutes, sa dernière execution est bien a l’heure courante mais j’ai tjs 0s de temps d’exécution. Je n’arrive tjs pas a avoir de traces dans la log en mode debug, bizarre non?
J’ai déterminé que la table arp du RPi ne se met pas à jour, l’entrée de son tel n’y est pas, ceci explique peut être cela? pourtant le arping fonctionne…
Je n’ai pas pris le mode arp car pour moi ce n’était pas fiable. Je suis beaucoup mieux en IP
Après pour les logs le plugin n’est peut-être pas très causant à moins qu’il ne faille le désactiver puis le réactiver
Suite du feuilleton. J’ai mis des traces dans networks.class.php:
public static function update() {
log::add('networks','debug','update(): ' . count(self::byType('networks')) . ' devices');
foreach (self::byType('networks') as $networks) {
$autorefresh = $networks->getConfiguration('autorefresh');
log::add('networks','debug','update():'. $networks->getHumanName() . ' enabled:' . $networks->getIsEnable() . ' autorefresh:' . $autorefresh);
if ($networks->getIsEnable() == 1 && $autorefresh != '') {
log::add('networks','debug','update(): debut ping pour: '.$networks->getHumanName());
try {
$c = new Cron\CronExpression($autorefresh, new Cron\FieldFactory);
if ($c->isDue()) {
try {
log::add('networks','debug','update(): appel a ping pour: '.$networks->getHumanName());
$networks->ping();
} catch (Exception $exc) {
log::add('networks', 'debug', __('Erreur pour ', __FILE__) . $networks->getHumanName() . ' : ' . $exc->getMessage());
}
}
else
log::add('networks','debug','update():'. $networks->getHumanName() . ': next run date:' . $c->getNextRunDate());
} catch (Exception $exc) {
log::add('networks', 'debug', __('Expression cron non valide pour ', __FILE__) . $networks->getHumanName() . ' : ' . $autorefresh);
}
} else
log::add('networks','debug','update(): pas de ping pour: '.$networks->getHumanName());
}
}
le demon bloque sur certains devices dans la boucle foreach, il ne sort jamais de la ligne:
$c = new Cron\CronExpression($autorefresh, new Cron\FieldFactory);
Ex ici il bloque sur emtec2. Je suis passé en cron5 dans install.php et j’ai réduit le timeout a 10s pour être sur que ce n’est pas la limite des 5 minutes qui bloque mais non
Je n’arrive pas a comprendre pourquoi? pb système? plus de process/threads disponibles?
J’ai verifié plusieurs fois il n’y a pas de caracteres parasites dans les equipements.
Bon le moins qu’on puisse dire c’est que mon problème ne passionne pas les foules.
Pour ceux que ca intéresse j’ai identifié que ca bloque dans $c->isDue() dans la lib 3rd party mtdowling/cron-expression
Je ne sais pas si c’est du a ma version de python? dans le doute j’ai bypassé le problème en remplacant $c->isDue() qui bloque par true
On se calme… on ne sait pas toujours répondre à tout immédiatement… perso je suis pas là à attendre que tu poses une question
Et si tu veux une investigation de quelqu’un sur ton cas, tu peux aussi faire un ticket.
donc non je n’ai pas d’idée du pourquoi qui me vient en tête là comme ca, je n’explique pas dans l’immédiat.
Surtout que s’il y avait une erreur on devrait avoir l’exception capturée par le catch…
par contre remplacer le isDue par true est une très mauvaise idée: tes crons sur ce plugin n’auront plus aucun effet (pour tous tes équipements) et ils vont donc tous faire un ping chaque minute… (et de toute façon la modif va sauter à la prochaine mise à jour du plugin…)
Je ne veux vexer personne simplement ce problème n’est pas nouveau, je l’avais déja signalé l’an dernier sur l’ancien forum, sans suite.
Je sais que ca n’est pas bien de remplacer ce test mais d’apres ce que j’ai compris il n’y a pas création de thread, tout est synchrone ce qui à mon avis est la source du problème, cf le timestamp dans mes logs:
Le cron est censé tourner toutes les minutes. Comme la boucle foreach de la methode update() est synchrone et le ping aussi, étant donné qu’il prend environ 5s par device je ne vois pas comment tu peux en pinger plus de 12 avant le prochain update…
Certes j’ai perdu le paramètre autorefresh mais au moins ca marche maintenant:
en augmentant le cron du plugin a 5 mins mes 28 devices sont scannés en 3 mins.