J’utilise ici MCEBuddy 2.5.7 Premium. J’ai configuré MCEBuddy pour analyser un partage de fichiers SMB1 sur un serveur de fichiers Windows séparé à la recherche de fichiers à convertir. (Oui, je sais que SMB1 n’est pas sécurisé, mais je ne peux pas changer cela pour le moment.) L’analyse d’un grand arborescence de répertoires via SMB1 n’est pas rapide, et mes analyses prenaient souvent environ 10 minutes. Avec la période d’interrogation par défaut de 5 minutes, le trafic d’analyse était constant et générait beaucoup de trafic réseau et d’activité disque/CPU inutiles. Au lieu de simplement augmenter l’intervalle d’analyse, j’ai créé quelques scripts pour rendre cela plus efficace.
Maintenant, j’ai un script qui s’exécute sur le serveur de fichiers Windows et qui surveille les répertoires concernés à l’aide de l’API Win32 des services de répertoire. Étant donné qu’il est piloté par événements plutôt que par interrogation, mon script n’a jamais besoin d’interroger pour voir si des fichiers ont changé ; le système d’exploitation informe mon script immédiatement lorsque cela se produit. Si quelque chose change dans l’arborescence, mon script dépose un fichier marqueur dans le partage. (Il utilise également une hystérésis pour traiter plusieurs changements consécutifs comme un seul changement et attendre un délai raisonnable jusqu’à ce que les changements cessent.) Un deuxième script s’exécute sur la machine MCEBuddy et interroge toutes les 60 secondes l’existence de ce fichier marqueur. Si le fichier marqueur existe, il le supprime et lance une nouvelle analyse dans MCEBuddy en exécutant « MCEBuddy.UserCLI.exe --command=engine --action=rescan ». La période d’analyse réelle de MCEBuddy est définie à 1 semaine (604 800 secondes) pour capturer tout ce que le script aurait pu manquer pour une raison quelconque. Cela résout mon problème de performance, car au lieu d’analyser des milliers de fichiers en continu via SMB1, la machine MCEBuddy ne fait qu’un « if exist » sur un seul fichier, puis MCEBuddy ne fait une analyse complète que lorsque c’est nécessaire.
Mais il y a un petit problème causé par la façon dont MCEBuddy traite « MCEBuddy.UserCLI.exe --command=engine --action=rescan » si une analyse est déjà en cours.
Ce que j’attends de MCEBuddy :
- Abandonner et redémarrer l’analyse en cours depuis le début.
- OU -
- Mettre en file d’attente (jusqu’à 1) demande de nouvelle analyse jusqu’à ce que l’analyse en cours soit terminée, puis analyser à nouveau.
Ce que MCEBuddy fait réellement :
Il accepte mais ignore la demande de nouvelle analyse et renvoie un succès :
MCEBuddy.UserCLI trying to connect to Engine localhost on Port 23332
MCEBuddy.UserCLI successfully connected to MCEBuddy engine
MCEBuddy.UserCLI processing command engine
MCEBuddy.UserCLI rescanning monitor locations and logs
MCEBuddy.UserCLI Successful!!
Cela fait que des changements sont manqués si un changement survient pendant qu’MCEBuddy analyse déjà.
Le problème est que je pourrais facilement contourner cela si j’avais un aperçu programmatique de savoir si MCEBuddy est en cours d’analyse… mais je ne l’ai pas. Si l’un des petits détails changeait, je pourrais gérer cela :
- Si MCEBuddy adoptait l’un des comportements suggérés ci-dessus (solution préférée), je n’aurais plus rien à faire.
- Si MCEBuddy.UserCLI.exe renvoyait un échec au lieu d’un succès, mon script pourrait réessayer l’analyse plus tard.
- Si MCEBuddy.UserCLI.exe avait un moyen d’interroger le moteur pour savoir s’il est en cours d’analyse, mon script pourrait d’abord faire cela, et s’il est déjà en cours d’analyse, réessayer plus tard.
- Si le service MCEBuddy déposait un fichier temporaire ou une valeur de registre indiquant qu’une analyse est en cours, mon script pourrait vérifier cela d’abord, et si le fichier/valeur existe, réessayer plus tard.
- Si le service MCEBuddy écrivait une entrée de journal de niveau débogage indiquant quand il commence et termine une analyse, mon script pourrait gratter continuellement le journal et chercher ces entrées pour maintenir un compte du statut de MCEBuddy. Cela serait terriblement inefficace, mais encore des ordres de grandeur plus efficace qu’analyser constamment tous les fichiers vidéo.
À moins d’avoir manqué quelque chose, je pense que je vais devoir faire une demande de fonctionnalité pour que l’un de ces comportements soit modifié dans MCEBuddy. Mais j’ai pensé demander à la communauté d’abord pour toute autre idée.
J’adore MCEBuddy et je veux simplement bien l’utiliser. Merci d’avoir écouté les élucubrations d’un fou !