Gestion des exclusions de timeperiods
( 06 Jan 2010 )Et bien après une bataille qui avait des air de guerre épique, j'ai mis en place les exclusions de timeperiods.
Après une première version un peu ... bourrine, une nouvelle arrive qui passe les tests et qui en plus est rapide.
Cette partie du code n'est pas celle que je préfère, car il faut dire que les problèmes des dates et de calcul d'intervalle, c'est touffu, surtout lorsque l'intervalle ressemble à 'monday 3 - thursday 4 00:00-11:00,12:00-24:00' (soit entre le troisième lundi du mois et le 4ième jeudi).
Et puis le plus marrant dans ces définitions, c'est que c'est relatif par rapport au moment où vous calculer...
Mine de rien, c'est sûrement la partie la plus complexe de l'outil.
NOTE 2021: 12 ans après, je suis encore avec ça, c'est clairement ce qui m'a demandé le plus de taf et d'algorithmes
Bon je ne vais pas me plaindre, le module time de python a bien aidé. Bref, vous pouvez faire une déclaration du genre :
define timeperiod{
timeperiod_name 24x7
alias 24_Hours_A_Day,_7_Days_A_Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
exclude workhours
}
# 'workhours' timeperiod definition
define timeperiod{
timeperiod_name workhours
alias Normal Work Hours
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00
}
Donc ici 24x7 sera sans les workhours (bon bah c'est un exemple hein, à vous de trouver quelque chose de plus utile....).
Donc un check en 24x7 voulant être lancé vers 10h le sera à 17h en fait. Ceci gère aussi si les timeperiods dans exclude ont elles même des exclude bien sûr.
NOTE 2021: vous savez c'est quoi le pire: quelques années après, je me suis apperçu qu'en fait Nagios ne gérait pas du tout ça...