diff --git a/.backup-days-until-due-pilot/domains.yaml.bak b/.backup-days-until-due-pilot/domains.yaml.bak deleted file mode 100644 index 61761f9..0000000 --- a/.backup-days-until-due-pilot/domains.yaml.bak +++ /dev/null @@ -1,768 +0,0 @@ -domains: - - revue: - - name: revue-quotidienne-life-noc - date: "2026-03-13" - notes: Vérifier le tableau de bord Life-NOC - probe: - type: elapsed_time - source: - type: manual_date - inputs_file: "/opt/life-noc/data/inputs/revue.yaml" - item_key: "revue-quotidienne-life-noc" - metric: - unit: days - thresholds: - unknown_lt: 1 - ok_gte: 1 - warning_gte: 2 - critical_gte: 3 - policy: - on_error: critical - - - name: revue-hebdomadaire-priorites - date: "2026-03-10" - notes: Revoir les priorités de la semaine - probe: - type: elapsed_time - source: - type: manual_date - inputs_file: "/opt/life-noc/data/inputs/revue.yaml" - item_key: "revue-hebdomadaire-priorites" - metric: - unit: days - thresholds: - unknown_lt: 5 - ok_gte: 5 - warning_gte: 7 - critical_gte: 10 - policy: - on_error: critical - - - name: revue-mensuelle-systeme-vie - date: 2026-04-01 - notes: Revue mensuelle de l'ensemble du système Life-NOC - - - name: revue-trimestrielle-orientation - date: 2026-06-30 - notes: Revue trimestrielle des orientations de vie et de Chezlepro - - focus: - - name: entretien-processus-focus - date: 2026-03-09 - notes: Vérifier que les cartouches FOCUS sont à jour - - - name: nettoyage-inbox-mentale - date: 2026-03-09 - notes: Vider et clarifier les éléments capturés hors système - - - name: revue-limitation-engagements - date: 2026-03-31 - notes: Vérifier que les engagements actifs demeurent réalistes - - finances-personnelles: - - name: revision-comptes-bancaires - date: 2026-04-01 - notes: Révision mensuelle des comptes bancaires personnels - - - name: verification-cartes-credit - date: 2026-04-01 - notes: Vérification des soldes et transactions des cartes de crédit - - - name: paiement-cartes-credit - date: 2026-04-15 - notes: Paiement des cartes de crédit personnelles - - - name: revision-budget-personnel - date: 2026-04-05 - notes: Révision mensuelle du budget personnel - - - name: verification-prelevements-automatiques - date: 2026-04-03 - notes: Vérification des prélèvements automatiques personnels - - - name: verification-placements - date: 2026-06-30 - notes: Vérification périodique des placements et comptes enregistrés - - - name: verification-cotisations-reer - date: 2026-02-28 - notes: Vérification des cotisations REER - - - name: verification-celi - date: 2026-05-01 - notes: Vérification de l'espace CELI et de son utilisation - - - name: preparation-dossier-financier-annuel - date: 2026-01-31 - notes: Préparer le dossier financier annuel personnel - - fiscalite-personnelle: - - name: preparation-documents-impots - date: 2026-03-15 - notes: Rassembler tous les documents fiscaux personnels - - - name: production-impots-federal - date: 2026-04-30 - notes: Produire la déclaration de revenus fédérale - - - name: production-impots-quebec - date: 2026-04-30 - notes: Produire la déclaration de revenus Québec - - - name: paiement-solde-impots - date: 2026-04-30 - notes: Payer tout solde d'impôt exigible - - - name: verification-avis-cotisation - date: 2026-05-31 - notes: Vérifier les avis de cotisation ARC et Revenu Québec - - - name: archivage-documents-fiscaux - date: 2026-06-15 - notes: Archiver les documents fiscaux personnels - - - name: verification-acomptes-provisionnels - date: 2026-03-15 - notes: Vérifier si des acomptes provisionnels sont requis - - obligations-legales-personnelles: - - name: verification-testament - date: 2026-07-01 - notes: Vérifier la pertinence et l'actualité du testament - - - name: verification-mandat-inaptitude - date: 2026-07-01 - notes: Vérifier le mandat de protection et documents connexes - - - name: verification-directives-medicales - date: 2026-07-15 - notes: Vérifier les directives médicales anticipées - - - name: verification-papiers-identite - date: 2026-06-01 - notes: Vérifier l'expiration des papiers d'identité - - - name: renouvellement-permis-conduire - date: 2027-01-01 - notes: Vérifier le renouvellement du permis de conduire - - - name: verification-carte-assurance-maladie - date: 2026-10-01 - notes: Vérifier l'expiration de la carte d'assurance maladie - - - name: verification-passeport - date: 2026-06-01 - notes: Vérifier l'expiration du passeport - - maison: - - name: remplacement-filtre-fournaise - date: 2026-04-01 - notes: Remplacer le filtre de la fournaise - - - name: inspection-fournaise - date: 2026-09-15 - notes: Inspection générale de la fournaise avant saison froide - - - name: inspection-thermopompe - date: 2026-05-01 - notes: Inspection et entretien de la thermopompe - - - name: nettoyage-unites-exterieures - date: 2026-05-15 - notes: Nettoyer les unités extérieures et vérifier le dégagement - - - name: inspection-toiture - date: 2026-10-01 - notes: Inspection annuelle de la toiture - - - name: inspection-gouttieres - date: 2026-11-01 - notes: Inspection et nettoyage des gouttières - - - name: inspection-fondation - date: 2026-06-01 - notes: Inspection de la fondation et des fissures - - - name: verification-drainage-terrain - date: 2026-05-15 - notes: Vérification du drainage autour de la maison - - - name: test-detecteurs-fumee - date: 2026-04-01 - notes: Test des détecteurs de fumée - - - name: test-detecteurs-co - date: 2026-04-01 - notes: Test des détecteurs de monoxyde de carbone - - - name: remplacement-piles-detecteurs - date: 2026-10-01 - notes: Remplacement préventif des piles des détecteurs - - - name: verification-plomberie-visible - date: 2026-05-01 - notes: Vérification visuelle de la plomberie accessible - - - name: inspection-sump-pump - date: 2026-04-15 - notes: Vérification de la pompe de puisard si applicable - - - name: verification-calfetrage - date: 2026-10-15 - notes: Vérification du calfeutrage portes et fenêtres - - - name: inspection-portes-garage - date: 2026-05-15 - notes: Vérification mécanique et sécurité des portes de garage - - - name: verification-extincteurs - date: 2026-06-01 - notes: Vérification des extincteurs - - garage-et-rangement: - - name: inspection-rangement-plafond - date: 2026-05-01 - notes: Vérification des supports suspendus au plafond du garage - - - name: revue-inventaire-garage - date: 2026-04-15 - notes: Revue de l'inventaire et de l'ordre du garage - - - name: verification-rouille-outillage - date: 2026-05-15 - notes: Vérification de la corrosion sur les outils et équipements - - - name: inspection-securite-garage - date: 2026-06-01 - notes: Vérification des conditions de sécurité du garage - - - name: rotation-stockage-bacs - date: 2026-05-15 - notes: Revue des contenus de bacs de rangement - - energie: - - name: inspection-batteries-lifepo4 - date: 2026-04-01 - notes: Inspection physique et logique des batteries LiFePO4 - - - name: verification-tension-batteries - date: 2026-03-15 - notes: Vérification des tensions et cohérence des batteries - - - name: verification-smartshunt - date: 2026-03-15 - notes: Vérification SmartShunt et cohérence du monitoring - - - name: verification-cerbo-gx - date: 2026-03-15 - notes: Vérification Cerbo GX et remontée des données - - - name: verification-can-rs485 - date: 2026-04-15 - notes: Vérification des communications CAN ou RS485 - - - name: inspection-cablage-energie - date: 2026-05-01 - notes: Inspection du câblage et des connexions énergétiques - - - name: verification-busbars - date: 2026-05-01 - notes: Vérification du serrage, corrosion et échauffement des busbars - - - name: verification-parametres-charge - date: 2026-04-01 - notes: Vérification des paramètres de charge et float - - - name: test-charge-batteries - date: 2026-04-15 - notes: Test de comportement en charge des batteries - - - name: test-comportement-onduleur - date: 2026-05-01 - notes: Vérifier le comportement du Multiplus sous charge légère - - - name: verification-journal-evenements-victron - date: 2026-04-15 - notes: Vérification des événements et anomalies Victron - - resilience: - - name: test-generatrice-propane - date: 2026-04-01 - notes: Test mensuel de la génératrice au propane - - - name: verification-carburant-generatrice - date: 2026-04-01 - notes: Vérification de l'approvisionnement propane lié à la génératrice - - - name: verification-procedure-bascule - date: 2026-04-15 - notes: Réviser la procédure de bascule en mode secours - - - name: verification-stock-lampes-piles - date: 2026-05-01 - notes: Vérification des lampes, piles et éclairage d'urgence - - - name: verification-trousses-urgence - date: 2026-05-15 - notes: Vérification des trousses d'urgence - - - name: revision-plan-urgence - date: 2026-06-01 - notes: Réviser le plan d'urgence domestique - - - name: test-autonomie-base - date: 2026-06-15 - notes: Vérifier l'autonomie énergétique minimale attendue - - - name: verification-moyens-cuisson-secours - date: 2026-05-15 - notes: Vérification des moyens de cuisson de secours - - stock-alimentaire: - - name: rotation-nourriture-seche - date: 2026-04-01 - notes: Rotation des stocks de nourriture sèche - - - name: verification-reserve-eau - date: 2026-04-15 - notes: Vérification de la réserve d'eau potable - - - name: verification-mylar-absorbeurs - date: 2026-05-01 - notes: Vérifier l'intégrité des emballages Mylar et absorbeurs - - - name: revue-inventaire-conserves - date: 2026-04-15 - notes: Revue des conserves et dates de rotation - - - name: revue-inventaire-farine-riz-pates - date: 2026-04-01 - notes: Vérification des gros stocks alimentaires de base - - - name: verification-bacs-legumes-racines - date: 2026-10-01 - notes: Vérification des bacs de stockage de légumes racines - - - name: revue-supplements-vitamines - date: 2026-05-01 - notes: Vérification du stock de suppléments et dates utiles - - sante: - - name: verification-trousse-premiers-soins - date: 2026-04-01 - notes: Vérification de la trousse de premiers soins - - - name: verification-expiration-medicaments - date: 2026-05-01 - notes: Vérification des dates d'expiration des médicaments - - - name: revision-rendez-vous-medicaux - date: 2026-04-15 - notes: Revoir les rendez-vous médicaux requis - - - name: verification-lunettes-prescriptions - date: 2026-06-01 - notes: Vérifier les prescriptions et besoins de renouvellement - - - name: verification-dossier-sante - date: 2026-06-15 - notes: Vérifier l'ordre et l'accessibilité des documents de santé - - voiture: - - name: verification-huile-moteur - date: 2026-04-01 - notes: Vérification de l'huile moteur - - - name: inspection-freins - date: 2026-05-01 - notes: Inspection des freins - - - name: verification-pneus - date: 2026-04-15 - notes: Vérification usure, pression et permutation des pneus - - - name: ajustement-valves - date: 2026-08-01 - notes: Vérification et ajustement des valves Honda Accord - - - name: verification-timing-belt - date: 2027-01-01 - notes: Vérification de la courroie de distribution et pompe à eau - - - name: verification-batterie-voiture - date: 2026-10-01 - notes: Vérification de l'état de la batterie automobile - - - name: verification-balais-essuie-glace - date: 2026-05-01 - notes: Vérification des essuie-glaces - - - name: verification-liquides - date: 2026-04-15 - notes: Vérification des liquides de la voiture - - - name: verification-eclairage - date: 2026-05-01 - notes: Vérification de l'éclairage et des phares - - - name: verification-immatriculation-assurance - date: 2026-06-01 - notes: Vérification papiers d'assurance et immatriculation - - jardin: - - name: inspection-vignes - date: 2026-04-15 - notes: Inspection et entretien des vignes - - - name: entretien-bleuetiers - date: 2026-05-01 - notes: Entretien des bleuetiers - - - name: entretien-framboisiers - date: 2026-06-01 - notes: Entretien des framboisiers - - - name: inspection-kiwis-nordiques - date: 2026-05-15 - notes: Vérification des kiwis nordiques - - - name: entretien-rhubarbe - date: 2026-05-15 - notes: Entretien de la rhubarbe - - - name: inspection-groseillier - date: 2026-05-15 - notes: Inspection du groseillier - - - name: inspection-muriers - date: 2026-05-15 - notes: Inspection des mûriers - - - name: entretien-houblon - date: 2026-06-01 - notes: Vérification et entretien du houblon - - - name: revision-pharmacopée-jardin - date: 2026-05-01 - notes: Vérification du stock de soins pour végétaux - - - name: revision-armoire-produits-jardin - date: 2026-05-01 - notes: Vérification et ordre de l'armoire des produits pour végétaux - - outils-et-equipements: - - name: entretien-outils-jardin - date: 2026-04-15 - notes: Nettoyage et entretien des outils de jardin - - - name: inspection-outils-electriques - date: 2026-05-01 - notes: Vérification des outils électriques - - - name: verification-rallonges-et-connecteurs - date: 2026-05-01 - notes: Vérification des rallonges et connecteurs - - - name: verification-compresseur-et-accessoires - date: 2026-05-15 - notes: Vérification du compresseur et accessoires - - - name: revision-inventaire-outillage - date: 2026-06-01 - notes: Revue de l'inventaire d'outillage - - informatique-personnelle: - - name: verification-sauvegardes-personnelles - date: 2026-04-01 - notes: Vérification des sauvegardes personnelles - - - name: nettoyage-stockage-personnel - date: 2026-04-15 - notes: Nettoyage du stockage numérique personnel - - - name: verification-comptes-importants - date: 2026-05-01 - notes: Vérification des comptes numériques personnels importants - - - name: revue-mots-de-passe-personnels - date: 2026-06-01 - notes: Revue des mots de passe personnels critiques - - - name: verification-documents-cloud-personnels - date: 2026-05-15 - notes: Vérifier la cohérence des documents personnels sauvegardés - - infrastructure-chezlepro: - - name: verification-proxmox - date: 2026-04-01 - notes: Vérification générale de l'environnement Proxmox - - - name: verification-ceph - date: 2026-04-01 - notes: Vérification générale de l'état Ceph - - - name: test-restauration-backups - date: 2026-04-15 - notes: Test de restauration des sauvegardes - - - name: verification-pbs-truenas - date: 2026-05-01 - notes: Vérification des solutions de sauvegarde et synchronisation - - - name: verification-ups-infrastructure - date: 2026-04-15 - notes: Vérification des UPS de l'infrastructure - - - name: verification-capacite-stockage - date: 2026-04-15 - notes: Vérifier capacité et croissance du stockage - - - name: verification-apt-cacher-ng - date: 2026-05-01 - notes: Vérification du bon fonctionnement d'apt-cacher-ng - - - name: verification-icinga2 - date: 2026-04-01 - notes: Vérification de la supervision Icinga2 - - - name: verification-keycloak-openldap - date: 2026-05-01 - notes: Vérification de l'identité et de l'authentification centralisées - - - name: verification-nextcloud - date: 2026-04-15 - notes: Vérification de l'état Nextcloud - - - name: verification-mailcow - date: 2026-05-01 - notes: Vérification de l'infrastructure Mailcow - - - name: verification-openvas - date: 2026-05-15 - notes: Vérification de la plateforme OpenVAS - - - name: verification-journaux-systemes - date: 2026-04-15 - notes: Revue des journaux systèmes critiques - - reseau-chezlepro: - - name: verification-firewalls - date: 2026-04-01 - notes: Vérification des firewalls - - - name: verification-vpn-openvpn - date: 2026-04-15 - notes: Vérification des tunnels OpenVPN - - - name: verification-crl-certificats - date: 2026-04-15 - notes: Vérification de la CRL et des certificats - - - name: verification-switches - date: 2026-05-01 - notes: Vérification des switches et uplinks - - - name: verification-vlans-segmentation - date: 2026-05-01 - notes: Vérification de la segmentation réseau - - - name: verification-dns - date: 2026-05-15 - notes: Vérification DNS interne et externe - - - name: verification-dynamic-dns - date: 2026-05-15 - notes: Vérification du DNS dynamique si utilisé - - - name: audit-regles-firewall - date: 2026-06-01 - notes: Audit périodique des règles de firewall - - - name: verification-geoblocking - date: 2026-05-15 - notes: Vérifier le geoblocking et son effet attendu - - - name: verification-certificats-publics - date: 2026-06-01 - notes: Vérifier les expirations de certificats publics - - securite-chezlepro: - - name: verification-mises-a-jour-securite - date: 2026-04-01 - notes: Vérification des mises à jour de sécurité - - - name: audit-comptes-acces - date: 2026-05-01 - notes: Audit des comptes et accès privilégiés - - - name: verification-ids-snort - date: 2026-05-01 - notes: Vérification des IDS et de leur état - - - name: revue-pki-privee - date: 2026-05-15 - notes: Revue de la PKI privée et des autorités intermédiaires - - - name: revue-politiques-securite - date: 2026-06-01 - notes: Revue des politiques et pratiques de sécurité numérique - - - name: verification-sauvegardes-configuration - date: 2026-04-15 - notes: Vérifier les sauvegardes des configurations critiques - - exploitation-chezlepro: - - name: revision-playbooks-ansible - date: 2026-05-01 - notes: Revue des playbooks Ansible - - - name: verification-inventaires-ansible - date: 2026-05-01 - notes: Vérification des inventaires Ansible - - - name: revision-documentation-technique - date: 2026-05-15 - notes: Revue de la documentation technique Chezlepro - - - name: verification-procedures-reprise - date: 2026-06-01 - notes: Vérifier les procédures de reprise et restauration - - - name: revue-capacite-ressources - date: 2026-06-15 - notes: Revue CPU RAM stockage et charge de l'infrastructure - - - name: verification-jobs-automatises - date: 2026-05-15 - notes: Vérification des jobs automatisés et scripts périodiques - - obligations-chezlepro: - - name: verification-registraire-entreprise - date: 2026-06-15 - notes: Vérifier les obligations au Registraire des entreprises - - - name: verification-declarations-taxes - date: 2026-04-30 - notes: Vérifier les obligations de taxes de l'entreprise si applicables - - - name: verification-dossier-comptable-entreprise - date: 2026-04-15 - notes: Vérifier l'ordre du dossier comptable Chezlepro - - - name: verification-facturation-clients - date: 2026-04-10 - notes: Vérifier la facturation et son suivi - - - name: verification-paiements-fournisseurs - date: 2026-04-10 - notes: Vérifier les paiements fournisseurs - - - name: verification-contrats-ententes - date: 2026-05-15 - notes: Vérifier contrats, ententes et obligations associées - - - name: verification-assurances-entreprise - date: 2026-06-01 - notes: Vérifier les assurances de l'entreprise - - - name: archivage-documents-entreprise - date: 2026-05-31 - notes: Archiver les documents administratifs et financiers de l'entreprise - - actifs-chezlepro: - - name: revision-inventaire-materiel - date: 2026-05-01 - notes: Revoir l'inventaire du matériel de Chezlepro - - - name: verification-amortissables - date: 2026-06-01 - notes: Vérifier le registre des biens amortissables - - - name: verification-serveurs-et-composants - date: 2026-05-15 - notes: Vérifier l'état des serveurs et composants matériels - - - name: verification-reserve-pieces - date: 2026-06-01 - notes: Vérifier les pièces de rechange critiques - - - name: revision-actifs-transferts - date: 2026-06-15 - notes: Réviser les actifs transférés ou à transférer à l'entreprise - - projets: - - name: revision-life-noc - date: 2026-04-01 - notes: Révision du projet Life-NOC - - - name: revision-alliance-boreale - date: 2026-04-15 - notes: Révision du projet Alliance Boréale - - - name: revision-erplibre - date: 2026-05-01 - notes: Révision du projet ERPLibre - - - name: revision-semence-numerique - date: 2026-05-15 - notes: Révision du projet semence numérique - - - name: revision-ortrux-1 - date: 2026-05-15 - notes: Révision du système Ortrux-1 - - - name: revision-district16 - date: 2026-05-01 - notes: Révision du projet DISTRICT16 - - communaute: - - name: verification-outils-aa - date: 2026-05-01 - notes: Vérifier les outils numériques liés aux activités communautaires - - - name: verification-espace-87-16 - date: 2026-05-01 - notes: Vérifier l'espace Nextcloud du district - - - name: verification-salles-visio-groupes - date: 2026-05-15 - notes: Vérifier les salles de visioconférence des groupes - - - name: verification-depots-rapports-rsg - date: 2026-05-15 - notes: Vérifier les dépôts de rapports RSG - - - name: revision-outils-communication-communaute - date: 2026-06-01 - notes: Réviser les moyens de communication communautaires - - documentation: - - name: revue-docs-personnelles-importantes - date: 2026-05-15 - notes: Revoir l'organisation des documents personnels importants - - - name: revue-wiki-technique - date: 2026-05-15 - notes: Revoir le wiki technique et sa cohérence - - - name: revue-base-connaissances - date: 2026-06-01 - notes: Revoir la base de connaissances globale - - - name: verification-sauvegarde-docs-cles - date: 2026-05-15 - notes: Vérifier la sauvegarde des documents clés - - animaux: - - name: verification-stock-nourriture-chats - date: 2026-04-15 - notes: Vérification du stock de nourriture pour chats - - - name: verification-friandises-et-litiere - date: 2026-04-15 - notes: Vérification des stocks de friandises et de litière - - - name: revision-routine-soins-animaux - date: 2026-05-01 - notes: Revue de la routine de soins et des besoins matériels des chats diff --git a/.patch-backup-days-until-due-v2/domains.yaml.bak b/.patch-backup-days-until-due-v2/domains.yaml.bak deleted file mode 100644 index 61761f9..0000000 --- a/.patch-backup-days-until-due-v2/domains.yaml.bak +++ /dev/null @@ -1,768 +0,0 @@ -domains: - - revue: - - name: revue-quotidienne-life-noc - date: "2026-03-13" - notes: Vérifier le tableau de bord Life-NOC - probe: - type: elapsed_time - source: - type: manual_date - inputs_file: "/opt/life-noc/data/inputs/revue.yaml" - item_key: "revue-quotidienne-life-noc" - metric: - unit: days - thresholds: - unknown_lt: 1 - ok_gte: 1 - warning_gte: 2 - critical_gte: 3 - policy: - on_error: critical - - - name: revue-hebdomadaire-priorites - date: "2026-03-10" - notes: Revoir les priorités de la semaine - probe: - type: elapsed_time - source: - type: manual_date - inputs_file: "/opt/life-noc/data/inputs/revue.yaml" - item_key: "revue-hebdomadaire-priorites" - metric: - unit: days - thresholds: - unknown_lt: 5 - ok_gte: 5 - warning_gte: 7 - critical_gte: 10 - policy: - on_error: critical - - - name: revue-mensuelle-systeme-vie - date: 2026-04-01 - notes: Revue mensuelle de l'ensemble du système Life-NOC - - - name: revue-trimestrielle-orientation - date: 2026-06-30 - notes: Revue trimestrielle des orientations de vie et de Chezlepro - - focus: - - name: entretien-processus-focus - date: 2026-03-09 - notes: Vérifier que les cartouches FOCUS sont à jour - - - name: nettoyage-inbox-mentale - date: 2026-03-09 - notes: Vider et clarifier les éléments capturés hors système - - - name: revue-limitation-engagements - date: 2026-03-31 - notes: Vérifier que les engagements actifs demeurent réalistes - - finances-personnelles: - - name: revision-comptes-bancaires - date: 2026-04-01 - notes: Révision mensuelle des comptes bancaires personnels - - - name: verification-cartes-credit - date: 2026-04-01 - notes: Vérification des soldes et transactions des cartes de crédit - - - name: paiement-cartes-credit - date: 2026-04-15 - notes: Paiement des cartes de crédit personnelles - - - name: revision-budget-personnel - date: 2026-04-05 - notes: Révision mensuelle du budget personnel - - - name: verification-prelevements-automatiques - date: 2026-04-03 - notes: Vérification des prélèvements automatiques personnels - - - name: verification-placements - date: 2026-06-30 - notes: Vérification périodique des placements et comptes enregistrés - - - name: verification-cotisations-reer - date: 2026-02-28 - notes: Vérification des cotisations REER - - - name: verification-celi - date: 2026-05-01 - notes: Vérification de l'espace CELI et de son utilisation - - - name: preparation-dossier-financier-annuel - date: 2026-01-31 - notes: Préparer le dossier financier annuel personnel - - fiscalite-personnelle: - - name: preparation-documents-impots - date: 2026-03-15 - notes: Rassembler tous les documents fiscaux personnels - - - name: production-impots-federal - date: 2026-04-30 - notes: Produire la déclaration de revenus fédérale - - - name: production-impots-quebec - date: 2026-04-30 - notes: Produire la déclaration de revenus Québec - - - name: paiement-solde-impots - date: 2026-04-30 - notes: Payer tout solde d'impôt exigible - - - name: verification-avis-cotisation - date: 2026-05-31 - notes: Vérifier les avis de cotisation ARC et Revenu Québec - - - name: archivage-documents-fiscaux - date: 2026-06-15 - notes: Archiver les documents fiscaux personnels - - - name: verification-acomptes-provisionnels - date: 2026-03-15 - notes: Vérifier si des acomptes provisionnels sont requis - - obligations-legales-personnelles: - - name: verification-testament - date: 2026-07-01 - notes: Vérifier la pertinence et l'actualité du testament - - - name: verification-mandat-inaptitude - date: 2026-07-01 - notes: Vérifier le mandat de protection et documents connexes - - - name: verification-directives-medicales - date: 2026-07-15 - notes: Vérifier les directives médicales anticipées - - - name: verification-papiers-identite - date: 2026-06-01 - notes: Vérifier l'expiration des papiers d'identité - - - name: renouvellement-permis-conduire - date: 2027-01-01 - notes: Vérifier le renouvellement du permis de conduire - - - name: verification-carte-assurance-maladie - date: 2026-10-01 - notes: Vérifier l'expiration de la carte d'assurance maladie - - - name: verification-passeport - date: 2026-06-01 - notes: Vérifier l'expiration du passeport - - maison: - - name: remplacement-filtre-fournaise - date: 2026-04-01 - notes: Remplacer le filtre de la fournaise - - - name: inspection-fournaise - date: 2026-09-15 - notes: Inspection générale de la fournaise avant saison froide - - - name: inspection-thermopompe - date: 2026-05-01 - notes: Inspection et entretien de la thermopompe - - - name: nettoyage-unites-exterieures - date: 2026-05-15 - notes: Nettoyer les unités extérieures et vérifier le dégagement - - - name: inspection-toiture - date: 2026-10-01 - notes: Inspection annuelle de la toiture - - - name: inspection-gouttieres - date: 2026-11-01 - notes: Inspection et nettoyage des gouttières - - - name: inspection-fondation - date: 2026-06-01 - notes: Inspection de la fondation et des fissures - - - name: verification-drainage-terrain - date: 2026-05-15 - notes: Vérification du drainage autour de la maison - - - name: test-detecteurs-fumee - date: 2026-04-01 - notes: Test des détecteurs de fumée - - - name: test-detecteurs-co - date: 2026-04-01 - notes: Test des détecteurs de monoxyde de carbone - - - name: remplacement-piles-detecteurs - date: 2026-10-01 - notes: Remplacement préventif des piles des détecteurs - - - name: verification-plomberie-visible - date: 2026-05-01 - notes: Vérification visuelle de la plomberie accessible - - - name: inspection-sump-pump - date: 2026-04-15 - notes: Vérification de la pompe de puisard si applicable - - - name: verification-calfetrage - date: 2026-10-15 - notes: Vérification du calfeutrage portes et fenêtres - - - name: inspection-portes-garage - date: 2026-05-15 - notes: Vérification mécanique et sécurité des portes de garage - - - name: verification-extincteurs - date: 2026-06-01 - notes: Vérification des extincteurs - - garage-et-rangement: - - name: inspection-rangement-plafond - date: 2026-05-01 - notes: Vérification des supports suspendus au plafond du garage - - - name: revue-inventaire-garage - date: 2026-04-15 - notes: Revue de l'inventaire et de l'ordre du garage - - - name: verification-rouille-outillage - date: 2026-05-15 - notes: Vérification de la corrosion sur les outils et équipements - - - name: inspection-securite-garage - date: 2026-06-01 - notes: Vérification des conditions de sécurité du garage - - - name: rotation-stockage-bacs - date: 2026-05-15 - notes: Revue des contenus de bacs de rangement - - energie: - - name: inspection-batteries-lifepo4 - date: 2026-04-01 - notes: Inspection physique et logique des batteries LiFePO4 - - - name: verification-tension-batteries - date: 2026-03-15 - notes: Vérification des tensions et cohérence des batteries - - - name: verification-smartshunt - date: 2026-03-15 - notes: Vérification SmartShunt et cohérence du monitoring - - - name: verification-cerbo-gx - date: 2026-03-15 - notes: Vérification Cerbo GX et remontée des données - - - name: verification-can-rs485 - date: 2026-04-15 - notes: Vérification des communications CAN ou RS485 - - - name: inspection-cablage-energie - date: 2026-05-01 - notes: Inspection du câblage et des connexions énergétiques - - - name: verification-busbars - date: 2026-05-01 - notes: Vérification du serrage, corrosion et échauffement des busbars - - - name: verification-parametres-charge - date: 2026-04-01 - notes: Vérification des paramètres de charge et float - - - name: test-charge-batteries - date: 2026-04-15 - notes: Test de comportement en charge des batteries - - - name: test-comportement-onduleur - date: 2026-05-01 - notes: Vérifier le comportement du Multiplus sous charge légère - - - name: verification-journal-evenements-victron - date: 2026-04-15 - notes: Vérification des événements et anomalies Victron - - resilience: - - name: test-generatrice-propane - date: 2026-04-01 - notes: Test mensuel de la génératrice au propane - - - name: verification-carburant-generatrice - date: 2026-04-01 - notes: Vérification de l'approvisionnement propane lié à la génératrice - - - name: verification-procedure-bascule - date: 2026-04-15 - notes: Réviser la procédure de bascule en mode secours - - - name: verification-stock-lampes-piles - date: 2026-05-01 - notes: Vérification des lampes, piles et éclairage d'urgence - - - name: verification-trousses-urgence - date: 2026-05-15 - notes: Vérification des trousses d'urgence - - - name: revision-plan-urgence - date: 2026-06-01 - notes: Réviser le plan d'urgence domestique - - - name: test-autonomie-base - date: 2026-06-15 - notes: Vérifier l'autonomie énergétique minimale attendue - - - name: verification-moyens-cuisson-secours - date: 2026-05-15 - notes: Vérification des moyens de cuisson de secours - - stock-alimentaire: - - name: rotation-nourriture-seche - date: 2026-04-01 - notes: Rotation des stocks de nourriture sèche - - - name: verification-reserve-eau - date: 2026-04-15 - notes: Vérification de la réserve d'eau potable - - - name: verification-mylar-absorbeurs - date: 2026-05-01 - notes: Vérifier l'intégrité des emballages Mylar et absorbeurs - - - name: revue-inventaire-conserves - date: 2026-04-15 - notes: Revue des conserves et dates de rotation - - - name: revue-inventaire-farine-riz-pates - date: 2026-04-01 - notes: Vérification des gros stocks alimentaires de base - - - name: verification-bacs-legumes-racines - date: 2026-10-01 - notes: Vérification des bacs de stockage de légumes racines - - - name: revue-supplements-vitamines - date: 2026-05-01 - notes: Vérification du stock de suppléments et dates utiles - - sante: - - name: verification-trousse-premiers-soins - date: 2026-04-01 - notes: Vérification de la trousse de premiers soins - - - name: verification-expiration-medicaments - date: 2026-05-01 - notes: Vérification des dates d'expiration des médicaments - - - name: revision-rendez-vous-medicaux - date: 2026-04-15 - notes: Revoir les rendez-vous médicaux requis - - - name: verification-lunettes-prescriptions - date: 2026-06-01 - notes: Vérifier les prescriptions et besoins de renouvellement - - - name: verification-dossier-sante - date: 2026-06-15 - notes: Vérifier l'ordre et l'accessibilité des documents de santé - - voiture: - - name: verification-huile-moteur - date: 2026-04-01 - notes: Vérification de l'huile moteur - - - name: inspection-freins - date: 2026-05-01 - notes: Inspection des freins - - - name: verification-pneus - date: 2026-04-15 - notes: Vérification usure, pression et permutation des pneus - - - name: ajustement-valves - date: 2026-08-01 - notes: Vérification et ajustement des valves Honda Accord - - - name: verification-timing-belt - date: 2027-01-01 - notes: Vérification de la courroie de distribution et pompe à eau - - - name: verification-batterie-voiture - date: 2026-10-01 - notes: Vérification de l'état de la batterie automobile - - - name: verification-balais-essuie-glace - date: 2026-05-01 - notes: Vérification des essuie-glaces - - - name: verification-liquides - date: 2026-04-15 - notes: Vérification des liquides de la voiture - - - name: verification-eclairage - date: 2026-05-01 - notes: Vérification de l'éclairage et des phares - - - name: verification-immatriculation-assurance - date: 2026-06-01 - notes: Vérification papiers d'assurance et immatriculation - - jardin: - - name: inspection-vignes - date: 2026-04-15 - notes: Inspection et entretien des vignes - - - name: entretien-bleuetiers - date: 2026-05-01 - notes: Entretien des bleuetiers - - - name: entretien-framboisiers - date: 2026-06-01 - notes: Entretien des framboisiers - - - name: inspection-kiwis-nordiques - date: 2026-05-15 - notes: Vérification des kiwis nordiques - - - name: entretien-rhubarbe - date: 2026-05-15 - notes: Entretien de la rhubarbe - - - name: inspection-groseillier - date: 2026-05-15 - notes: Inspection du groseillier - - - name: inspection-muriers - date: 2026-05-15 - notes: Inspection des mûriers - - - name: entretien-houblon - date: 2026-06-01 - notes: Vérification et entretien du houblon - - - name: revision-pharmacopée-jardin - date: 2026-05-01 - notes: Vérification du stock de soins pour végétaux - - - name: revision-armoire-produits-jardin - date: 2026-05-01 - notes: Vérification et ordre de l'armoire des produits pour végétaux - - outils-et-equipements: - - name: entretien-outils-jardin - date: 2026-04-15 - notes: Nettoyage et entretien des outils de jardin - - - name: inspection-outils-electriques - date: 2026-05-01 - notes: Vérification des outils électriques - - - name: verification-rallonges-et-connecteurs - date: 2026-05-01 - notes: Vérification des rallonges et connecteurs - - - name: verification-compresseur-et-accessoires - date: 2026-05-15 - notes: Vérification du compresseur et accessoires - - - name: revision-inventaire-outillage - date: 2026-06-01 - notes: Revue de l'inventaire d'outillage - - informatique-personnelle: - - name: verification-sauvegardes-personnelles - date: 2026-04-01 - notes: Vérification des sauvegardes personnelles - - - name: nettoyage-stockage-personnel - date: 2026-04-15 - notes: Nettoyage du stockage numérique personnel - - - name: verification-comptes-importants - date: 2026-05-01 - notes: Vérification des comptes numériques personnels importants - - - name: revue-mots-de-passe-personnels - date: 2026-06-01 - notes: Revue des mots de passe personnels critiques - - - name: verification-documents-cloud-personnels - date: 2026-05-15 - notes: Vérifier la cohérence des documents personnels sauvegardés - - infrastructure-chezlepro: - - name: verification-proxmox - date: 2026-04-01 - notes: Vérification générale de l'environnement Proxmox - - - name: verification-ceph - date: 2026-04-01 - notes: Vérification générale de l'état Ceph - - - name: test-restauration-backups - date: 2026-04-15 - notes: Test de restauration des sauvegardes - - - name: verification-pbs-truenas - date: 2026-05-01 - notes: Vérification des solutions de sauvegarde et synchronisation - - - name: verification-ups-infrastructure - date: 2026-04-15 - notes: Vérification des UPS de l'infrastructure - - - name: verification-capacite-stockage - date: 2026-04-15 - notes: Vérifier capacité et croissance du stockage - - - name: verification-apt-cacher-ng - date: 2026-05-01 - notes: Vérification du bon fonctionnement d'apt-cacher-ng - - - name: verification-icinga2 - date: 2026-04-01 - notes: Vérification de la supervision Icinga2 - - - name: verification-keycloak-openldap - date: 2026-05-01 - notes: Vérification de l'identité et de l'authentification centralisées - - - name: verification-nextcloud - date: 2026-04-15 - notes: Vérification de l'état Nextcloud - - - name: verification-mailcow - date: 2026-05-01 - notes: Vérification de l'infrastructure Mailcow - - - name: verification-openvas - date: 2026-05-15 - notes: Vérification de la plateforme OpenVAS - - - name: verification-journaux-systemes - date: 2026-04-15 - notes: Revue des journaux systèmes critiques - - reseau-chezlepro: - - name: verification-firewalls - date: 2026-04-01 - notes: Vérification des firewalls - - - name: verification-vpn-openvpn - date: 2026-04-15 - notes: Vérification des tunnels OpenVPN - - - name: verification-crl-certificats - date: 2026-04-15 - notes: Vérification de la CRL et des certificats - - - name: verification-switches - date: 2026-05-01 - notes: Vérification des switches et uplinks - - - name: verification-vlans-segmentation - date: 2026-05-01 - notes: Vérification de la segmentation réseau - - - name: verification-dns - date: 2026-05-15 - notes: Vérification DNS interne et externe - - - name: verification-dynamic-dns - date: 2026-05-15 - notes: Vérification du DNS dynamique si utilisé - - - name: audit-regles-firewall - date: 2026-06-01 - notes: Audit périodique des règles de firewall - - - name: verification-geoblocking - date: 2026-05-15 - notes: Vérifier le geoblocking et son effet attendu - - - name: verification-certificats-publics - date: 2026-06-01 - notes: Vérifier les expirations de certificats publics - - securite-chezlepro: - - name: verification-mises-a-jour-securite - date: 2026-04-01 - notes: Vérification des mises à jour de sécurité - - - name: audit-comptes-acces - date: 2026-05-01 - notes: Audit des comptes et accès privilégiés - - - name: verification-ids-snort - date: 2026-05-01 - notes: Vérification des IDS et de leur état - - - name: revue-pki-privee - date: 2026-05-15 - notes: Revue de la PKI privée et des autorités intermédiaires - - - name: revue-politiques-securite - date: 2026-06-01 - notes: Revue des politiques et pratiques de sécurité numérique - - - name: verification-sauvegardes-configuration - date: 2026-04-15 - notes: Vérifier les sauvegardes des configurations critiques - - exploitation-chezlepro: - - name: revision-playbooks-ansible - date: 2026-05-01 - notes: Revue des playbooks Ansible - - - name: verification-inventaires-ansible - date: 2026-05-01 - notes: Vérification des inventaires Ansible - - - name: revision-documentation-technique - date: 2026-05-15 - notes: Revue de la documentation technique Chezlepro - - - name: verification-procedures-reprise - date: 2026-06-01 - notes: Vérifier les procédures de reprise et restauration - - - name: revue-capacite-ressources - date: 2026-06-15 - notes: Revue CPU RAM stockage et charge de l'infrastructure - - - name: verification-jobs-automatises - date: 2026-05-15 - notes: Vérification des jobs automatisés et scripts périodiques - - obligations-chezlepro: - - name: verification-registraire-entreprise - date: 2026-06-15 - notes: Vérifier les obligations au Registraire des entreprises - - - name: verification-declarations-taxes - date: 2026-04-30 - notes: Vérifier les obligations de taxes de l'entreprise si applicables - - - name: verification-dossier-comptable-entreprise - date: 2026-04-15 - notes: Vérifier l'ordre du dossier comptable Chezlepro - - - name: verification-facturation-clients - date: 2026-04-10 - notes: Vérifier la facturation et son suivi - - - name: verification-paiements-fournisseurs - date: 2026-04-10 - notes: Vérifier les paiements fournisseurs - - - name: verification-contrats-ententes - date: 2026-05-15 - notes: Vérifier contrats, ententes et obligations associées - - - name: verification-assurances-entreprise - date: 2026-06-01 - notes: Vérifier les assurances de l'entreprise - - - name: archivage-documents-entreprise - date: 2026-05-31 - notes: Archiver les documents administratifs et financiers de l'entreprise - - actifs-chezlepro: - - name: revision-inventaire-materiel - date: 2026-05-01 - notes: Revoir l'inventaire du matériel de Chezlepro - - - name: verification-amortissables - date: 2026-06-01 - notes: Vérifier le registre des biens amortissables - - - name: verification-serveurs-et-composants - date: 2026-05-15 - notes: Vérifier l'état des serveurs et composants matériels - - - name: verification-reserve-pieces - date: 2026-06-01 - notes: Vérifier les pièces de rechange critiques - - - name: revision-actifs-transferts - date: 2026-06-15 - notes: Réviser les actifs transférés ou à transférer à l'entreprise - - projets: - - name: revision-life-noc - date: 2026-04-01 - notes: Révision du projet Life-NOC - - - name: revision-alliance-boreale - date: 2026-04-15 - notes: Révision du projet Alliance Boréale - - - name: revision-erplibre - date: 2026-05-01 - notes: Révision du projet ERPLibre - - - name: revision-semence-numerique - date: 2026-05-15 - notes: Révision du projet semence numérique - - - name: revision-ortrux-1 - date: 2026-05-15 - notes: Révision du système Ortrux-1 - - - name: revision-district16 - date: 2026-05-01 - notes: Révision du projet DISTRICT16 - - communaute: - - name: verification-outils-aa - date: 2026-05-01 - notes: Vérifier les outils numériques liés aux activités communautaires - - - name: verification-espace-87-16 - date: 2026-05-01 - notes: Vérifier l'espace Nextcloud du district - - - name: verification-salles-visio-groupes - date: 2026-05-15 - notes: Vérifier les salles de visioconférence des groupes - - - name: verification-depots-rapports-rsg - date: 2026-05-15 - notes: Vérifier les dépôts de rapports RSG - - - name: revision-outils-communication-communaute - date: 2026-06-01 - notes: Réviser les moyens de communication communautaires - - documentation: - - name: revue-docs-personnelles-importantes - date: 2026-05-15 - notes: Revoir l'organisation des documents personnels importants - - - name: revue-wiki-technique - date: 2026-05-15 - notes: Revoir le wiki technique et sa cohérence - - - name: revue-base-connaissances - date: 2026-06-01 - notes: Revoir la base de connaissances globale - - - name: verification-sauvegarde-docs-cles - date: 2026-05-15 - notes: Vérifier la sauvegarde des documents clés - - animaux: - - name: verification-stock-nourriture-chats - date: 2026-04-15 - notes: Vérification du stock de nourriture pour chats - - - name: verification-friandises-et-litiere - date: 2026-04-15 - notes: Vérification des stocks de friandises et de litière - - - name: revision-routine-soins-animaux - date: 2026-05-01 - notes: Revue de la routine de soins et des besoins matériels des chats diff --git a/.patch-backup-days-until-due-v2/generate_services.py.bak b/.patch-backup-days-until-due-v2/generate_services.py.bak deleted file mode 100644 index e7373a9..0000000 --- a/.patch-backup-days-until-due-v2/generate_services.py.bak +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env python3 - -from pathlib import Path -import re -import sys -import yaml - -INPUT_FILE = Path("domains.yaml") -OUTPUT_DIR = Path("icinga/services") -SERVICEGROUPS_DIR = Path("icinga/servicegroups") -SERVICEGROUPS_FILE = SERVICEGROUPS_DIR / "life-noc.conf" -HOST_NAME = "life-noc" -SERVICE_TEMPLATE = "service_echeance" -PROBE_TEMPLATE = "service_life_noc_probe" -DEFAULT_MOCK_STATE = "OK" -DEFAULT_MOCK_MESSAGE = "Sous contrôle" - - -def slugify(value: str) -> str: - value = value.strip().lower() - replacements = { - "à": "a", "â": "a", "ä": "a", - "ç": "c", - "é": "e", "è": "e", "ê": "e", "ë": "e", - "î": "i", "ï": "i", - "ô": "o", "ö": "o", - "ù": "u", "û": "u", "ü": "u", - "ÿ": "y", - "œ": "oe", - "æ": "ae", - "'": "", - "’": "", - } - for old, new in replacements.items(): - value = value.replace(old, new) - value = re.sub(r"[^a-z0-9\-]+", "-", value) - value = re.sub(r"-{2,}", "-", value) - return value.strip("-") - - -def aliasify(value: str) -> str: - value = value.strip().upper() - replacements = { - "À": "A", "Â": "A", "Ä": "A", - "Ç": "C", - "É": "E", "È": "E", "Ê": "E", "Ë": "E", - "Î": "I", "Ï": "I", - "Ô": "O", "Ö": "O", - "Ù": "U", "Û": "U", "Ü": "U", - "Ÿ": "Y", - "Œ": "OE", - "Æ": "AE", - "'": "", - "’": "", - } - for old, new in replacements.items(): - value = value.replace(old, new) - value = re.sub(r"[^A-Z0-9\-]+", "-", value) - value = re.sub(r"-{2,}", "-", value) - return value.strip("-") - - -def icinga_escape(value: str) -> str: - return value.replace("\\", "\\\\").replace('"', '\\"') - - -def normalize_mock_state(value: str) -> str: - state = str(value).strip().upper() - allowed = {"OK", "WARNING", "CRITICAL"} - if state not in allowed: - raise ValueError( - f"mock_state invalide: {value}. Valeurs permises: {', '.join(sorted(allowed))}" - ) - return state - - -def render_mock_service(domain: str, group_name: str, item: dict) -> str: - name = item["name"].strip() - date = str(item["date"]).strip() - notes = item.get("notes", "").strip() - notes_url = item.get("notes_url", "").strip() - action_url = item.get("action_url", "").strip() - mock_state = normalize_mock_state(item.get("mock_state", DEFAULT_MOCK_STATE)) - mock_message = item.get("mock_message", DEFAULT_MOCK_MESSAGE).strip() or DEFAULT_MOCK_MESSAGE - - service_name = f"{domain}-{name}" - - lines = [ - f'apply Service "{icinga_escape(service_name)}" {{', - f' import "{SERVICE_TEMPLATE}"', - f' vars.date_echeance = "{icinga_escape(date)}"', - f' vars.mock_state = "{icinga_escape(mock_state)}"', - f' vars.mock_message = "{icinga_escape(mock_message)}"', - f' groups = [ "{icinga_escape(group_name)}" ]', - ] - - if notes: - lines.append(f' notes = "{icinga_escape(notes)}"') - if notes_url: - lines.append(f' notes_url = "{icinga_escape(notes_url)}"') - if action_url: - lines.append(f' action_url = "{icinga_escape(action_url)}"') - - lines.append(f' assign where host.name == "{HOST_NAME}"') - lines.append("}") - lines.append("") - - return "\n".join(lines) - - -def render_probe_service(domain: str, group_name: str, item: dict) -> str: - name = item["name"].strip() - notes = item.get("notes", "").strip() - notes_url = item.get("notes_url", "").strip() - action_url = item.get("action_url", "").strip() - probe = item["probe"] - - probe_type = str(probe["type"]).strip() - source = probe["source"] - metric = probe["metric"] - thresholds = probe["thresholds"] - policy = probe.get("policy", {}) - - service_name = f"{domain}-{name}" - - lines = [ - f'apply Service "{icinga_escape(service_name)}" {{', - f' import "{PROBE_TEMPLATE}"', - f' vars.life_noc_probe_type = "{icinga_escape(probe_type)}"', - f' vars.life_noc_source_type = "{icinga_escape(str(source["type"]).strip())}"', - f' vars.life_noc_source_value = "{icinga_escape(str(source.get("value", "")).strip())}"', - f' vars.life_noc_inputs_file = "{icinga_escape(str(source.get("inputs_file", "")).strip())}"', - f' vars.life_noc_item_key = "{icinga_escape(str(source.get("item_key", name)).strip())}"', - f' vars.life_noc_metric_unit = "{icinga_escape(str(metric["unit"]).strip())}"', - f' vars.life_noc_label = "{icinga_escape(name)}"', - f' groups = [ "{icinga_escape(group_name)}" ]', - ] - - if "unknown_lt" in thresholds: - lines.append(f' vars.life_noc_threshold_unknown_lt = "{icinga_escape(str(thresholds["unknown_lt"]))}"') - if "ok_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_ok_gte = "{icinga_escape(str(thresholds["ok_gte"]))}"') - if "warning_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_warning_gte = "{icinga_escape(str(thresholds["warning_gte"]))}"') - if "critical_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_critical_gte = "{icinga_escape(str(thresholds["critical_gte"]))}"') - - on_error = str(policy.get("on_error", "critical")).strip() - lines.append(f' vars.life_noc_on_error = "{icinga_escape(on_error)}"') - - if notes: - lines.append(f' notes = "{icinga_escape(notes)}"') - if notes_url: - lines.append(f' notes_url = "{icinga_escape(notes_url)}"') - if action_url: - lines.append(f' action_url = "{icinga_escape(action_url)}"') - - lines.append(f' assign where host.name == "{HOST_NAME}"') - lines.append("}") - lines.append("") - - return "\n".join(lines) - - -def validate_probe(item: dict) -> None: - probe = item["probe"] - if not isinstance(probe, dict): - raise ValueError("probe doit être un objet") - - if str(probe.get("type", "")).strip() != "elapsed_time": - raise ValueError("seul probe.type=elapsed_time est supporté en v1") - - source = probe.get("source") - if not isinstance(source, dict): - raise ValueError("probe.source doit être un objet") - if str(source.get("type", "")).strip() != "manual_date": - raise ValueError("seul probe.source.type=manual_date est supporté en v1") - - has_inline_value = "value" in source - has_store_ref = "inputs_file" in source and "item_key" in source - - if not has_inline_value and not has_store_ref: - raise ValueError("probe.source.value ou probe.source.inputs_file + item_key requis") - - metric = probe.get("metric") - if not isinstance(metric, dict): - raise ValueError("probe.metric doit être un objet") - if str(metric.get("unit", "")).strip() != "days": - raise ValueError("seul probe.metric.unit=days est supporté en v1") - - thresholds = probe.get("thresholds") - if not isinstance(thresholds, dict): - raise ValueError("probe.thresholds doit être un objet") - - -def render_servicegroup(group_name: str) -> str: - return "\n".join([ - f'object ServiceGroup "{icinga_escape(group_name)}" {{', - f' display_name = "{icinga_escape(group_name)}"', - "}", - "", - ]) - - -def main() -> int: - if not INPUT_FILE.exists(): - print(f"Erreur: fichier introuvable: {INPUT_FILE}", file=sys.stderr) - return 1 - - with INPUT_FILE.open("r", encoding="utf-8") as f: - data = yaml.safe_load(f) - - if not isinstance(data, dict) or "domains" not in data: - print("Erreur: le YAML doit contenir une clé racine 'domains'.", file=sys.stderr) - return 1 - - domains = data["domains"] - if not isinstance(domains, dict): - print("Erreur: 'domains' doit être un objet YAML.", file=sys.stderr) - return 1 - - OUTPUT_DIR.mkdir(parents=True, exist_ok=True) - SERVICEGROUPS_DIR.mkdir(parents=True, exist_ok=True) - - for existing_conf in OUTPUT_DIR.glob("*.conf"): - existing_conf.unlink() - - if SERVICEGROUPS_FILE.exists(): - SERVICEGROUPS_FILE.unlink() - - generated_files = [] - servicegroup_content = [ - "/*", - " AUTO-GENERATED FILE - SERVICE GROUPS", - " Ne pas modifier manuellement.", - " Source: domains.yaml", - "*/", - "", - ] - - for raw_domain, services in domains.items(): - domain = slugify(str(raw_domain)) - group_name = aliasify(str(raw_domain)) - - if not isinstance(services, list): - print(f"Erreur: le domaine '{raw_domain}' doit contenir une liste.", file=sys.stderr) - return 1 - - output_file = OUTPUT_DIR / f"{domain}.conf" - content = [ - "/*", - f" AUTO-GENERATED FILE - DOMAIN: {raw_domain}", - " Ne pas modifier manuellement.", - " Source: domains.yaml", - "*/", - "", - ] - - servicegroup_content.append(render_servicegroup(group_name)) - - for idx, item in enumerate(services, start=1): - if not isinstance(item, dict): - print(f"Erreur: entrée invalide dans '{raw_domain}' à la position {idx}.", file=sys.stderr) - return 1 - - missing = [key for key in ("name", "date", "notes") if key not in item] - if missing: - print( - f"Erreur: dans le domaine '{raw_domain}', entrée {idx}, champs manquants: {', '.join(missing)}", - file=sys.stderr, - ) - return 1 - - try: - if "probe" in item: - validate_probe(item) - content.append(render_probe_service(domain, group_name, item)) - else: - content.append(render_mock_service(domain, group_name, item)) - except ValueError as exc: - print(f"Erreur dans '{raw_domain}', entrée {idx}: {exc}", file=sys.stderr) - return 1 - - output_file.write_text("\n".join(content).rstrip() + "\n", encoding="utf-8") - generated_files.append(str(output_file)) - - SERVICEGROUPS_FILE.write_text("\n".join(servicegroup_content).rstrip() + "\n", encoding="utf-8") - generated_files.append(str(SERVICEGROUPS_FILE)) - - print("Fichiers générés :") - for file_path in generated_files: - print(f" - {file_path}") - - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/.patch-backup-days-until-due-v3/domains.yaml.bak b/.patch-backup-days-until-due-v3/domains.yaml.bak deleted file mode 100644 index 61761f9..0000000 --- a/.patch-backup-days-until-due-v3/domains.yaml.bak +++ /dev/null @@ -1,768 +0,0 @@ -domains: - - revue: - - name: revue-quotidienne-life-noc - date: "2026-03-13" - notes: Vérifier le tableau de bord Life-NOC - probe: - type: elapsed_time - source: - type: manual_date - inputs_file: "/opt/life-noc/data/inputs/revue.yaml" - item_key: "revue-quotidienne-life-noc" - metric: - unit: days - thresholds: - unknown_lt: 1 - ok_gte: 1 - warning_gte: 2 - critical_gte: 3 - policy: - on_error: critical - - - name: revue-hebdomadaire-priorites - date: "2026-03-10" - notes: Revoir les priorités de la semaine - probe: - type: elapsed_time - source: - type: manual_date - inputs_file: "/opt/life-noc/data/inputs/revue.yaml" - item_key: "revue-hebdomadaire-priorites" - metric: - unit: days - thresholds: - unknown_lt: 5 - ok_gte: 5 - warning_gte: 7 - critical_gte: 10 - policy: - on_error: critical - - - name: revue-mensuelle-systeme-vie - date: 2026-04-01 - notes: Revue mensuelle de l'ensemble du système Life-NOC - - - name: revue-trimestrielle-orientation - date: 2026-06-30 - notes: Revue trimestrielle des orientations de vie et de Chezlepro - - focus: - - name: entretien-processus-focus - date: 2026-03-09 - notes: Vérifier que les cartouches FOCUS sont à jour - - - name: nettoyage-inbox-mentale - date: 2026-03-09 - notes: Vider et clarifier les éléments capturés hors système - - - name: revue-limitation-engagements - date: 2026-03-31 - notes: Vérifier que les engagements actifs demeurent réalistes - - finances-personnelles: - - name: revision-comptes-bancaires - date: 2026-04-01 - notes: Révision mensuelle des comptes bancaires personnels - - - name: verification-cartes-credit - date: 2026-04-01 - notes: Vérification des soldes et transactions des cartes de crédit - - - name: paiement-cartes-credit - date: 2026-04-15 - notes: Paiement des cartes de crédit personnelles - - - name: revision-budget-personnel - date: 2026-04-05 - notes: Révision mensuelle du budget personnel - - - name: verification-prelevements-automatiques - date: 2026-04-03 - notes: Vérification des prélèvements automatiques personnels - - - name: verification-placements - date: 2026-06-30 - notes: Vérification périodique des placements et comptes enregistrés - - - name: verification-cotisations-reer - date: 2026-02-28 - notes: Vérification des cotisations REER - - - name: verification-celi - date: 2026-05-01 - notes: Vérification de l'espace CELI et de son utilisation - - - name: preparation-dossier-financier-annuel - date: 2026-01-31 - notes: Préparer le dossier financier annuel personnel - - fiscalite-personnelle: - - name: preparation-documents-impots - date: 2026-03-15 - notes: Rassembler tous les documents fiscaux personnels - - - name: production-impots-federal - date: 2026-04-30 - notes: Produire la déclaration de revenus fédérale - - - name: production-impots-quebec - date: 2026-04-30 - notes: Produire la déclaration de revenus Québec - - - name: paiement-solde-impots - date: 2026-04-30 - notes: Payer tout solde d'impôt exigible - - - name: verification-avis-cotisation - date: 2026-05-31 - notes: Vérifier les avis de cotisation ARC et Revenu Québec - - - name: archivage-documents-fiscaux - date: 2026-06-15 - notes: Archiver les documents fiscaux personnels - - - name: verification-acomptes-provisionnels - date: 2026-03-15 - notes: Vérifier si des acomptes provisionnels sont requis - - obligations-legales-personnelles: - - name: verification-testament - date: 2026-07-01 - notes: Vérifier la pertinence et l'actualité du testament - - - name: verification-mandat-inaptitude - date: 2026-07-01 - notes: Vérifier le mandat de protection et documents connexes - - - name: verification-directives-medicales - date: 2026-07-15 - notes: Vérifier les directives médicales anticipées - - - name: verification-papiers-identite - date: 2026-06-01 - notes: Vérifier l'expiration des papiers d'identité - - - name: renouvellement-permis-conduire - date: 2027-01-01 - notes: Vérifier le renouvellement du permis de conduire - - - name: verification-carte-assurance-maladie - date: 2026-10-01 - notes: Vérifier l'expiration de la carte d'assurance maladie - - - name: verification-passeport - date: 2026-06-01 - notes: Vérifier l'expiration du passeport - - maison: - - name: remplacement-filtre-fournaise - date: 2026-04-01 - notes: Remplacer le filtre de la fournaise - - - name: inspection-fournaise - date: 2026-09-15 - notes: Inspection générale de la fournaise avant saison froide - - - name: inspection-thermopompe - date: 2026-05-01 - notes: Inspection et entretien de la thermopompe - - - name: nettoyage-unites-exterieures - date: 2026-05-15 - notes: Nettoyer les unités extérieures et vérifier le dégagement - - - name: inspection-toiture - date: 2026-10-01 - notes: Inspection annuelle de la toiture - - - name: inspection-gouttieres - date: 2026-11-01 - notes: Inspection et nettoyage des gouttières - - - name: inspection-fondation - date: 2026-06-01 - notes: Inspection de la fondation et des fissures - - - name: verification-drainage-terrain - date: 2026-05-15 - notes: Vérification du drainage autour de la maison - - - name: test-detecteurs-fumee - date: 2026-04-01 - notes: Test des détecteurs de fumée - - - name: test-detecteurs-co - date: 2026-04-01 - notes: Test des détecteurs de monoxyde de carbone - - - name: remplacement-piles-detecteurs - date: 2026-10-01 - notes: Remplacement préventif des piles des détecteurs - - - name: verification-plomberie-visible - date: 2026-05-01 - notes: Vérification visuelle de la plomberie accessible - - - name: inspection-sump-pump - date: 2026-04-15 - notes: Vérification de la pompe de puisard si applicable - - - name: verification-calfetrage - date: 2026-10-15 - notes: Vérification du calfeutrage portes et fenêtres - - - name: inspection-portes-garage - date: 2026-05-15 - notes: Vérification mécanique et sécurité des portes de garage - - - name: verification-extincteurs - date: 2026-06-01 - notes: Vérification des extincteurs - - garage-et-rangement: - - name: inspection-rangement-plafond - date: 2026-05-01 - notes: Vérification des supports suspendus au plafond du garage - - - name: revue-inventaire-garage - date: 2026-04-15 - notes: Revue de l'inventaire et de l'ordre du garage - - - name: verification-rouille-outillage - date: 2026-05-15 - notes: Vérification de la corrosion sur les outils et équipements - - - name: inspection-securite-garage - date: 2026-06-01 - notes: Vérification des conditions de sécurité du garage - - - name: rotation-stockage-bacs - date: 2026-05-15 - notes: Revue des contenus de bacs de rangement - - energie: - - name: inspection-batteries-lifepo4 - date: 2026-04-01 - notes: Inspection physique et logique des batteries LiFePO4 - - - name: verification-tension-batteries - date: 2026-03-15 - notes: Vérification des tensions et cohérence des batteries - - - name: verification-smartshunt - date: 2026-03-15 - notes: Vérification SmartShunt et cohérence du monitoring - - - name: verification-cerbo-gx - date: 2026-03-15 - notes: Vérification Cerbo GX et remontée des données - - - name: verification-can-rs485 - date: 2026-04-15 - notes: Vérification des communications CAN ou RS485 - - - name: inspection-cablage-energie - date: 2026-05-01 - notes: Inspection du câblage et des connexions énergétiques - - - name: verification-busbars - date: 2026-05-01 - notes: Vérification du serrage, corrosion et échauffement des busbars - - - name: verification-parametres-charge - date: 2026-04-01 - notes: Vérification des paramètres de charge et float - - - name: test-charge-batteries - date: 2026-04-15 - notes: Test de comportement en charge des batteries - - - name: test-comportement-onduleur - date: 2026-05-01 - notes: Vérifier le comportement du Multiplus sous charge légère - - - name: verification-journal-evenements-victron - date: 2026-04-15 - notes: Vérification des événements et anomalies Victron - - resilience: - - name: test-generatrice-propane - date: 2026-04-01 - notes: Test mensuel de la génératrice au propane - - - name: verification-carburant-generatrice - date: 2026-04-01 - notes: Vérification de l'approvisionnement propane lié à la génératrice - - - name: verification-procedure-bascule - date: 2026-04-15 - notes: Réviser la procédure de bascule en mode secours - - - name: verification-stock-lampes-piles - date: 2026-05-01 - notes: Vérification des lampes, piles et éclairage d'urgence - - - name: verification-trousses-urgence - date: 2026-05-15 - notes: Vérification des trousses d'urgence - - - name: revision-plan-urgence - date: 2026-06-01 - notes: Réviser le plan d'urgence domestique - - - name: test-autonomie-base - date: 2026-06-15 - notes: Vérifier l'autonomie énergétique minimale attendue - - - name: verification-moyens-cuisson-secours - date: 2026-05-15 - notes: Vérification des moyens de cuisson de secours - - stock-alimentaire: - - name: rotation-nourriture-seche - date: 2026-04-01 - notes: Rotation des stocks de nourriture sèche - - - name: verification-reserve-eau - date: 2026-04-15 - notes: Vérification de la réserve d'eau potable - - - name: verification-mylar-absorbeurs - date: 2026-05-01 - notes: Vérifier l'intégrité des emballages Mylar et absorbeurs - - - name: revue-inventaire-conserves - date: 2026-04-15 - notes: Revue des conserves et dates de rotation - - - name: revue-inventaire-farine-riz-pates - date: 2026-04-01 - notes: Vérification des gros stocks alimentaires de base - - - name: verification-bacs-legumes-racines - date: 2026-10-01 - notes: Vérification des bacs de stockage de légumes racines - - - name: revue-supplements-vitamines - date: 2026-05-01 - notes: Vérification du stock de suppléments et dates utiles - - sante: - - name: verification-trousse-premiers-soins - date: 2026-04-01 - notes: Vérification de la trousse de premiers soins - - - name: verification-expiration-medicaments - date: 2026-05-01 - notes: Vérification des dates d'expiration des médicaments - - - name: revision-rendez-vous-medicaux - date: 2026-04-15 - notes: Revoir les rendez-vous médicaux requis - - - name: verification-lunettes-prescriptions - date: 2026-06-01 - notes: Vérifier les prescriptions et besoins de renouvellement - - - name: verification-dossier-sante - date: 2026-06-15 - notes: Vérifier l'ordre et l'accessibilité des documents de santé - - voiture: - - name: verification-huile-moteur - date: 2026-04-01 - notes: Vérification de l'huile moteur - - - name: inspection-freins - date: 2026-05-01 - notes: Inspection des freins - - - name: verification-pneus - date: 2026-04-15 - notes: Vérification usure, pression et permutation des pneus - - - name: ajustement-valves - date: 2026-08-01 - notes: Vérification et ajustement des valves Honda Accord - - - name: verification-timing-belt - date: 2027-01-01 - notes: Vérification de la courroie de distribution et pompe à eau - - - name: verification-batterie-voiture - date: 2026-10-01 - notes: Vérification de l'état de la batterie automobile - - - name: verification-balais-essuie-glace - date: 2026-05-01 - notes: Vérification des essuie-glaces - - - name: verification-liquides - date: 2026-04-15 - notes: Vérification des liquides de la voiture - - - name: verification-eclairage - date: 2026-05-01 - notes: Vérification de l'éclairage et des phares - - - name: verification-immatriculation-assurance - date: 2026-06-01 - notes: Vérification papiers d'assurance et immatriculation - - jardin: - - name: inspection-vignes - date: 2026-04-15 - notes: Inspection et entretien des vignes - - - name: entretien-bleuetiers - date: 2026-05-01 - notes: Entretien des bleuetiers - - - name: entretien-framboisiers - date: 2026-06-01 - notes: Entretien des framboisiers - - - name: inspection-kiwis-nordiques - date: 2026-05-15 - notes: Vérification des kiwis nordiques - - - name: entretien-rhubarbe - date: 2026-05-15 - notes: Entretien de la rhubarbe - - - name: inspection-groseillier - date: 2026-05-15 - notes: Inspection du groseillier - - - name: inspection-muriers - date: 2026-05-15 - notes: Inspection des mûriers - - - name: entretien-houblon - date: 2026-06-01 - notes: Vérification et entretien du houblon - - - name: revision-pharmacopée-jardin - date: 2026-05-01 - notes: Vérification du stock de soins pour végétaux - - - name: revision-armoire-produits-jardin - date: 2026-05-01 - notes: Vérification et ordre de l'armoire des produits pour végétaux - - outils-et-equipements: - - name: entretien-outils-jardin - date: 2026-04-15 - notes: Nettoyage et entretien des outils de jardin - - - name: inspection-outils-electriques - date: 2026-05-01 - notes: Vérification des outils électriques - - - name: verification-rallonges-et-connecteurs - date: 2026-05-01 - notes: Vérification des rallonges et connecteurs - - - name: verification-compresseur-et-accessoires - date: 2026-05-15 - notes: Vérification du compresseur et accessoires - - - name: revision-inventaire-outillage - date: 2026-06-01 - notes: Revue de l'inventaire d'outillage - - informatique-personnelle: - - name: verification-sauvegardes-personnelles - date: 2026-04-01 - notes: Vérification des sauvegardes personnelles - - - name: nettoyage-stockage-personnel - date: 2026-04-15 - notes: Nettoyage du stockage numérique personnel - - - name: verification-comptes-importants - date: 2026-05-01 - notes: Vérification des comptes numériques personnels importants - - - name: revue-mots-de-passe-personnels - date: 2026-06-01 - notes: Revue des mots de passe personnels critiques - - - name: verification-documents-cloud-personnels - date: 2026-05-15 - notes: Vérifier la cohérence des documents personnels sauvegardés - - infrastructure-chezlepro: - - name: verification-proxmox - date: 2026-04-01 - notes: Vérification générale de l'environnement Proxmox - - - name: verification-ceph - date: 2026-04-01 - notes: Vérification générale de l'état Ceph - - - name: test-restauration-backups - date: 2026-04-15 - notes: Test de restauration des sauvegardes - - - name: verification-pbs-truenas - date: 2026-05-01 - notes: Vérification des solutions de sauvegarde et synchronisation - - - name: verification-ups-infrastructure - date: 2026-04-15 - notes: Vérification des UPS de l'infrastructure - - - name: verification-capacite-stockage - date: 2026-04-15 - notes: Vérifier capacité et croissance du stockage - - - name: verification-apt-cacher-ng - date: 2026-05-01 - notes: Vérification du bon fonctionnement d'apt-cacher-ng - - - name: verification-icinga2 - date: 2026-04-01 - notes: Vérification de la supervision Icinga2 - - - name: verification-keycloak-openldap - date: 2026-05-01 - notes: Vérification de l'identité et de l'authentification centralisées - - - name: verification-nextcloud - date: 2026-04-15 - notes: Vérification de l'état Nextcloud - - - name: verification-mailcow - date: 2026-05-01 - notes: Vérification de l'infrastructure Mailcow - - - name: verification-openvas - date: 2026-05-15 - notes: Vérification de la plateforme OpenVAS - - - name: verification-journaux-systemes - date: 2026-04-15 - notes: Revue des journaux systèmes critiques - - reseau-chezlepro: - - name: verification-firewalls - date: 2026-04-01 - notes: Vérification des firewalls - - - name: verification-vpn-openvpn - date: 2026-04-15 - notes: Vérification des tunnels OpenVPN - - - name: verification-crl-certificats - date: 2026-04-15 - notes: Vérification de la CRL et des certificats - - - name: verification-switches - date: 2026-05-01 - notes: Vérification des switches et uplinks - - - name: verification-vlans-segmentation - date: 2026-05-01 - notes: Vérification de la segmentation réseau - - - name: verification-dns - date: 2026-05-15 - notes: Vérification DNS interne et externe - - - name: verification-dynamic-dns - date: 2026-05-15 - notes: Vérification du DNS dynamique si utilisé - - - name: audit-regles-firewall - date: 2026-06-01 - notes: Audit périodique des règles de firewall - - - name: verification-geoblocking - date: 2026-05-15 - notes: Vérifier le geoblocking et son effet attendu - - - name: verification-certificats-publics - date: 2026-06-01 - notes: Vérifier les expirations de certificats publics - - securite-chezlepro: - - name: verification-mises-a-jour-securite - date: 2026-04-01 - notes: Vérification des mises à jour de sécurité - - - name: audit-comptes-acces - date: 2026-05-01 - notes: Audit des comptes et accès privilégiés - - - name: verification-ids-snort - date: 2026-05-01 - notes: Vérification des IDS et de leur état - - - name: revue-pki-privee - date: 2026-05-15 - notes: Revue de la PKI privée et des autorités intermédiaires - - - name: revue-politiques-securite - date: 2026-06-01 - notes: Revue des politiques et pratiques de sécurité numérique - - - name: verification-sauvegardes-configuration - date: 2026-04-15 - notes: Vérifier les sauvegardes des configurations critiques - - exploitation-chezlepro: - - name: revision-playbooks-ansible - date: 2026-05-01 - notes: Revue des playbooks Ansible - - - name: verification-inventaires-ansible - date: 2026-05-01 - notes: Vérification des inventaires Ansible - - - name: revision-documentation-technique - date: 2026-05-15 - notes: Revue de la documentation technique Chezlepro - - - name: verification-procedures-reprise - date: 2026-06-01 - notes: Vérifier les procédures de reprise et restauration - - - name: revue-capacite-ressources - date: 2026-06-15 - notes: Revue CPU RAM stockage et charge de l'infrastructure - - - name: verification-jobs-automatises - date: 2026-05-15 - notes: Vérification des jobs automatisés et scripts périodiques - - obligations-chezlepro: - - name: verification-registraire-entreprise - date: 2026-06-15 - notes: Vérifier les obligations au Registraire des entreprises - - - name: verification-declarations-taxes - date: 2026-04-30 - notes: Vérifier les obligations de taxes de l'entreprise si applicables - - - name: verification-dossier-comptable-entreprise - date: 2026-04-15 - notes: Vérifier l'ordre du dossier comptable Chezlepro - - - name: verification-facturation-clients - date: 2026-04-10 - notes: Vérifier la facturation et son suivi - - - name: verification-paiements-fournisseurs - date: 2026-04-10 - notes: Vérifier les paiements fournisseurs - - - name: verification-contrats-ententes - date: 2026-05-15 - notes: Vérifier contrats, ententes et obligations associées - - - name: verification-assurances-entreprise - date: 2026-06-01 - notes: Vérifier les assurances de l'entreprise - - - name: archivage-documents-entreprise - date: 2026-05-31 - notes: Archiver les documents administratifs et financiers de l'entreprise - - actifs-chezlepro: - - name: revision-inventaire-materiel - date: 2026-05-01 - notes: Revoir l'inventaire du matériel de Chezlepro - - - name: verification-amortissables - date: 2026-06-01 - notes: Vérifier le registre des biens amortissables - - - name: verification-serveurs-et-composants - date: 2026-05-15 - notes: Vérifier l'état des serveurs et composants matériels - - - name: verification-reserve-pieces - date: 2026-06-01 - notes: Vérifier les pièces de rechange critiques - - - name: revision-actifs-transferts - date: 2026-06-15 - notes: Réviser les actifs transférés ou à transférer à l'entreprise - - projets: - - name: revision-life-noc - date: 2026-04-01 - notes: Révision du projet Life-NOC - - - name: revision-alliance-boreale - date: 2026-04-15 - notes: Révision du projet Alliance Boréale - - - name: revision-erplibre - date: 2026-05-01 - notes: Révision du projet ERPLibre - - - name: revision-semence-numerique - date: 2026-05-15 - notes: Révision du projet semence numérique - - - name: revision-ortrux-1 - date: 2026-05-15 - notes: Révision du système Ortrux-1 - - - name: revision-district16 - date: 2026-05-01 - notes: Révision du projet DISTRICT16 - - communaute: - - name: verification-outils-aa - date: 2026-05-01 - notes: Vérifier les outils numériques liés aux activités communautaires - - - name: verification-espace-87-16 - date: 2026-05-01 - notes: Vérifier l'espace Nextcloud du district - - - name: verification-salles-visio-groupes - date: 2026-05-15 - notes: Vérifier les salles de visioconférence des groupes - - - name: verification-depots-rapports-rsg - date: 2026-05-15 - notes: Vérifier les dépôts de rapports RSG - - - name: revision-outils-communication-communaute - date: 2026-06-01 - notes: Réviser les moyens de communication communautaires - - documentation: - - name: revue-docs-personnelles-importantes - date: 2026-05-15 - notes: Revoir l'organisation des documents personnels importants - - - name: revue-wiki-technique - date: 2026-05-15 - notes: Revoir le wiki technique et sa cohérence - - - name: revue-base-connaissances - date: 2026-06-01 - notes: Revoir la base de connaissances globale - - - name: verification-sauvegarde-docs-cles - date: 2026-05-15 - notes: Vérifier la sauvegarde des documents clés - - animaux: - - name: verification-stock-nourriture-chats - date: 2026-04-15 - notes: Vérification du stock de nourriture pour chats - - - name: verification-friandises-et-litiere - date: 2026-04-15 - notes: Vérification des stocks de friandises et de litière - - - name: revision-routine-soins-animaux - date: 2026-05-01 - notes: Revue de la routine de soins et des besoins matériels des chats diff --git a/.patch-backup-days-until-due-v3/generate_services.py.bak b/.patch-backup-days-until-due-v3/generate_services.py.bak deleted file mode 100644 index e7373a9..0000000 --- a/.patch-backup-days-until-due-v3/generate_services.py.bak +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env python3 - -from pathlib import Path -import re -import sys -import yaml - -INPUT_FILE = Path("domains.yaml") -OUTPUT_DIR = Path("icinga/services") -SERVICEGROUPS_DIR = Path("icinga/servicegroups") -SERVICEGROUPS_FILE = SERVICEGROUPS_DIR / "life-noc.conf" -HOST_NAME = "life-noc" -SERVICE_TEMPLATE = "service_echeance" -PROBE_TEMPLATE = "service_life_noc_probe" -DEFAULT_MOCK_STATE = "OK" -DEFAULT_MOCK_MESSAGE = "Sous contrôle" - - -def slugify(value: str) -> str: - value = value.strip().lower() - replacements = { - "à": "a", "â": "a", "ä": "a", - "ç": "c", - "é": "e", "è": "e", "ê": "e", "ë": "e", - "î": "i", "ï": "i", - "ô": "o", "ö": "o", - "ù": "u", "û": "u", "ü": "u", - "ÿ": "y", - "œ": "oe", - "æ": "ae", - "'": "", - "’": "", - } - for old, new in replacements.items(): - value = value.replace(old, new) - value = re.sub(r"[^a-z0-9\-]+", "-", value) - value = re.sub(r"-{2,}", "-", value) - return value.strip("-") - - -def aliasify(value: str) -> str: - value = value.strip().upper() - replacements = { - "À": "A", "Â": "A", "Ä": "A", - "Ç": "C", - "É": "E", "È": "E", "Ê": "E", "Ë": "E", - "Î": "I", "Ï": "I", - "Ô": "O", "Ö": "O", - "Ù": "U", "Û": "U", "Ü": "U", - "Ÿ": "Y", - "Œ": "OE", - "Æ": "AE", - "'": "", - "’": "", - } - for old, new in replacements.items(): - value = value.replace(old, new) - value = re.sub(r"[^A-Z0-9\-]+", "-", value) - value = re.sub(r"-{2,}", "-", value) - return value.strip("-") - - -def icinga_escape(value: str) -> str: - return value.replace("\\", "\\\\").replace('"', '\\"') - - -def normalize_mock_state(value: str) -> str: - state = str(value).strip().upper() - allowed = {"OK", "WARNING", "CRITICAL"} - if state not in allowed: - raise ValueError( - f"mock_state invalide: {value}. Valeurs permises: {', '.join(sorted(allowed))}" - ) - return state - - -def render_mock_service(domain: str, group_name: str, item: dict) -> str: - name = item["name"].strip() - date = str(item["date"]).strip() - notes = item.get("notes", "").strip() - notes_url = item.get("notes_url", "").strip() - action_url = item.get("action_url", "").strip() - mock_state = normalize_mock_state(item.get("mock_state", DEFAULT_MOCK_STATE)) - mock_message = item.get("mock_message", DEFAULT_MOCK_MESSAGE).strip() or DEFAULT_MOCK_MESSAGE - - service_name = f"{domain}-{name}" - - lines = [ - f'apply Service "{icinga_escape(service_name)}" {{', - f' import "{SERVICE_TEMPLATE}"', - f' vars.date_echeance = "{icinga_escape(date)}"', - f' vars.mock_state = "{icinga_escape(mock_state)}"', - f' vars.mock_message = "{icinga_escape(mock_message)}"', - f' groups = [ "{icinga_escape(group_name)}" ]', - ] - - if notes: - lines.append(f' notes = "{icinga_escape(notes)}"') - if notes_url: - lines.append(f' notes_url = "{icinga_escape(notes_url)}"') - if action_url: - lines.append(f' action_url = "{icinga_escape(action_url)}"') - - lines.append(f' assign where host.name == "{HOST_NAME}"') - lines.append("}") - lines.append("") - - return "\n".join(lines) - - -def render_probe_service(domain: str, group_name: str, item: dict) -> str: - name = item["name"].strip() - notes = item.get("notes", "").strip() - notes_url = item.get("notes_url", "").strip() - action_url = item.get("action_url", "").strip() - probe = item["probe"] - - probe_type = str(probe["type"]).strip() - source = probe["source"] - metric = probe["metric"] - thresholds = probe["thresholds"] - policy = probe.get("policy", {}) - - service_name = f"{domain}-{name}" - - lines = [ - f'apply Service "{icinga_escape(service_name)}" {{', - f' import "{PROBE_TEMPLATE}"', - f' vars.life_noc_probe_type = "{icinga_escape(probe_type)}"', - f' vars.life_noc_source_type = "{icinga_escape(str(source["type"]).strip())}"', - f' vars.life_noc_source_value = "{icinga_escape(str(source.get("value", "")).strip())}"', - f' vars.life_noc_inputs_file = "{icinga_escape(str(source.get("inputs_file", "")).strip())}"', - f' vars.life_noc_item_key = "{icinga_escape(str(source.get("item_key", name)).strip())}"', - f' vars.life_noc_metric_unit = "{icinga_escape(str(metric["unit"]).strip())}"', - f' vars.life_noc_label = "{icinga_escape(name)}"', - f' groups = [ "{icinga_escape(group_name)}" ]', - ] - - if "unknown_lt" in thresholds: - lines.append(f' vars.life_noc_threshold_unknown_lt = "{icinga_escape(str(thresholds["unknown_lt"]))}"') - if "ok_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_ok_gte = "{icinga_escape(str(thresholds["ok_gte"]))}"') - if "warning_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_warning_gte = "{icinga_escape(str(thresholds["warning_gte"]))}"') - if "critical_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_critical_gte = "{icinga_escape(str(thresholds["critical_gte"]))}"') - - on_error = str(policy.get("on_error", "critical")).strip() - lines.append(f' vars.life_noc_on_error = "{icinga_escape(on_error)}"') - - if notes: - lines.append(f' notes = "{icinga_escape(notes)}"') - if notes_url: - lines.append(f' notes_url = "{icinga_escape(notes_url)}"') - if action_url: - lines.append(f' action_url = "{icinga_escape(action_url)}"') - - lines.append(f' assign where host.name == "{HOST_NAME}"') - lines.append("}") - lines.append("") - - return "\n".join(lines) - - -def validate_probe(item: dict) -> None: - probe = item["probe"] - if not isinstance(probe, dict): - raise ValueError("probe doit être un objet") - - if str(probe.get("type", "")).strip() != "elapsed_time": - raise ValueError("seul probe.type=elapsed_time est supporté en v1") - - source = probe.get("source") - if not isinstance(source, dict): - raise ValueError("probe.source doit être un objet") - if str(source.get("type", "")).strip() != "manual_date": - raise ValueError("seul probe.source.type=manual_date est supporté en v1") - - has_inline_value = "value" in source - has_store_ref = "inputs_file" in source and "item_key" in source - - if not has_inline_value and not has_store_ref: - raise ValueError("probe.source.value ou probe.source.inputs_file + item_key requis") - - metric = probe.get("metric") - if not isinstance(metric, dict): - raise ValueError("probe.metric doit être un objet") - if str(metric.get("unit", "")).strip() != "days": - raise ValueError("seul probe.metric.unit=days est supporté en v1") - - thresholds = probe.get("thresholds") - if not isinstance(thresholds, dict): - raise ValueError("probe.thresholds doit être un objet") - - -def render_servicegroup(group_name: str) -> str: - return "\n".join([ - f'object ServiceGroup "{icinga_escape(group_name)}" {{', - f' display_name = "{icinga_escape(group_name)}"', - "}", - "", - ]) - - -def main() -> int: - if not INPUT_FILE.exists(): - print(f"Erreur: fichier introuvable: {INPUT_FILE}", file=sys.stderr) - return 1 - - with INPUT_FILE.open("r", encoding="utf-8") as f: - data = yaml.safe_load(f) - - if not isinstance(data, dict) or "domains" not in data: - print("Erreur: le YAML doit contenir une clé racine 'domains'.", file=sys.stderr) - return 1 - - domains = data["domains"] - if not isinstance(domains, dict): - print("Erreur: 'domains' doit être un objet YAML.", file=sys.stderr) - return 1 - - OUTPUT_DIR.mkdir(parents=True, exist_ok=True) - SERVICEGROUPS_DIR.mkdir(parents=True, exist_ok=True) - - for existing_conf in OUTPUT_DIR.glob("*.conf"): - existing_conf.unlink() - - if SERVICEGROUPS_FILE.exists(): - SERVICEGROUPS_FILE.unlink() - - generated_files = [] - servicegroup_content = [ - "/*", - " AUTO-GENERATED FILE - SERVICE GROUPS", - " Ne pas modifier manuellement.", - " Source: domains.yaml", - "*/", - "", - ] - - for raw_domain, services in domains.items(): - domain = slugify(str(raw_domain)) - group_name = aliasify(str(raw_domain)) - - if not isinstance(services, list): - print(f"Erreur: le domaine '{raw_domain}' doit contenir une liste.", file=sys.stderr) - return 1 - - output_file = OUTPUT_DIR / f"{domain}.conf" - content = [ - "/*", - f" AUTO-GENERATED FILE - DOMAIN: {raw_domain}", - " Ne pas modifier manuellement.", - " Source: domains.yaml", - "*/", - "", - ] - - servicegroup_content.append(render_servicegroup(group_name)) - - for idx, item in enumerate(services, start=1): - if not isinstance(item, dict): - print(f"Erreur: entrée invalide dans '{raw_domain}' à la position {idx}.", file=sys.stderr) - return 1 - - missing = [key for key in ("name", "date", "notes") if key not in item] - if missing: - print( - f"Erreur: dans le domaine '{raw_domain}', entrée {idx}, champs manquants: {', '.join(missing)}", - file=sys.stderr, - ) - return 1 - - try: - if "probe" in item: - validate_probe(item) - content.append(render_probe_service(domain, group_name, item)) - else: - content.append(render_mock_service(domain, group_name, item)) - except ValueError as exc: - print(f"Erreur dans '{raw_domain}', entrée {idx}: {exc}", file=sys.stderr) - return 1 - - output_file.write_text("\n".join(content).rstrip() + "\n", encoding="utf-8") - generated_files.append(str(output_file)) - - SERVICEGROUPS_FILE.write_text("\n".join(servicegroup_content).rstrip() + "\n", encoding="utf-8") - generated_files.append(str(SERVICEGROUPS_FILE)) - - print("Fichiers générés :") - for file_path in generated_files: - print(f" - {file_path}") - - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/.patch-backup-days-until-due/check_life_noc_probe.conf.bak b/.patch-backup-days-until-due/check_life_noc_probe.conf.bak deleted file mode 100644 index 2c5b33b..0000000 --- a/.patch-backup-days-until-due/check_life_noc_probe.conf.bak +++ /dev/null @@ -1,18 +0,0 @@ -object CheckCommand "check_life_noc_probe" { - command = [ PluginDir + "/check_life_noc_probe.py" ] - - arguments = { - "--probe-type" = "$life_noc_probe_type$" - "--source-type" = "$life_noc_source_type$" - "--source-value" = "$life_noc_source_value$" - "--inputs-file" = "$life_noc_inputs_file$" - "--item-key" = "$life_noc_item_key$" - "--unit" = "$life_noc_metric_unit$" - "--unknown-lt" = "$life_noc_threshold_unknown_lt$" - "--ok-gte" = "$life_noc_threshold_ok_gte$" - "--warning-gte" = "$life_noc_threshold_warning_gte$" - "--critical-gte" = "$life_noc_threshold_critical_gte$" - "--on-error" = "$life_noc_on_error$" - "--label" = "$life_noc_label$" - } -} diff --git a/.patch-backup-days-until-due/check_life_noc_probe.py.bak b/.patch-backup-days-until-due/check_life_noc_probe.py.bak deleted file mode 100644 index 0c957e5..0000000 --- a/.patch-backup-days-until-due/check_life_noc_probe.py.bak +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -from datetime import datetime, timezone -from pathlib import Path -import sys -import yaml - - -def exit_with(code: int, text: str) -> None: - print(text) - raise SystemExit(code) - - -def parse_date(value: str) -> datetime: - return datetime.strptime(value, "%Y-%m-%d").replace(tzinfo=timezone.utc) - - -def load_input_value(inputs_file: str, item_key: str) -> str: - path = Path(inputs_file) - if not path.exists(): - raise ValueError(f"inputs file introuvable: {inputs_file}") - - data = yaml.safe_load(path.read_text(encoding="utf-8")) - if not isinstance(data, dict): - raise ValueError(f"inputs file invalide: {inputs_file}") - - if item_key not in data: - raise ValueError(f"item_key introuvable dans le store: {item_key}") - - item = data[item_key] - if not isinstance(item, dict): - raise ValueError(f"entrée invalide pour item_key: {item_key}") - - if "value" not in item: - raise ValueError(f"champ 'value' absent pour item_key: {item_key}") - - return str(item["value"]).strip() - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--probe-type", required=True) - ap.add_argument("--source-type", required=True) - ap.add_argument("--source-value") - ap.add_argument("--inputs-file") - ap.add_argument("--item-key") - ap.add_argument("--unit", required=True) - ap.add_argument("--unknown-lt", type=float) - ap.add_argument("--ok-gte", type=float) - ap.add_argument("--warning-gte", type=float) - ap.add_argument("--critical-gte", type=float) - ap.add_argument("--on-error", default="critical") - ap.add_argument("--label", default="life-noc") - args = ap.parse_args() - - try: - if args.probe_type != "elapsed_time": - exit_with(2, f"CRITICAL - probe_type non supporté: {args.probe_type}") - - if args.source_type != "manual_date": - exit_with(2, f"CRITICAL - source_type non supporté: {args.source_type}") - - if args.unit != "days": - exit_with(2, f"CRITICAL - unité non supportée: {args.unit}") - - source_value = None - - if args.inputs_file and args.item_key: - source_value = load_input_value(args.inputs_file, args.item_key) - elif args.source_value: - source_value = args.source_value - else: - raise ValueError("aucune source fournie: inputs-file/item-key ou source-value requis") - - dt = parse_date(source_value) - now = datetime.now(timezone.utc) - delta_days = (now - dt).total_seconds() / 86400.0 - - if args.critical_gte is not None and delta_days >= args.critical_gte: - exit_with(2, f"CRITICAL - {args.label}: {delta_days:.1f} jours") - if args.warning_gte is not None and delta_days >= args.warning_gte: - exit_with(1, f"WARNING - {args.label}: {delta_days:.1f} jours") - if args.ok_gte is not None and delta_days >= args.ok_gte: - exit_with(0, f"OK - {args.label}: {delta_days:.1f} jours") - if args.unknown_lt is not None and delta_days < args.unknown_lt: - exit_with(3, f"UNKNOWN - {args.label}: {delta_days:.1f} jours") - - exit_with(2, f"CRITICAL - {args.label}: seuils incohérents") - except Exception as exc: - if args.on_error == "critical": - exit_with(2, f"CRITICAL - erreur sonde: {exc}") - exit_with(3, f"UNKNOWN - erreur sonde: {exc}") - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/.patch-backup-days-until-due/domains.yaml.bak b/.patch-backup-days-until-due/domains.yaml.bak deleted file mode 100644 index 61761f9..0000000 --- a/.patch-backup-days-until-due/domains.yaml.bak +++ /dev/null @@ -1,768 +0,0 @@ -domains: - - revue: - - name: revue-quotidienne-life-noc - date: "2026-03-13" - notes: Vérifier le tableau de bord Life-NOC - probe: - type: elapsed_time - source: - type: manual_date - inputs_file: "/opt/life-noc/data/inputs/revue.yaml" - item_key: "revue-quotidienne-life-noc" - metric: - unit: days - thresholds: - unknown_lt: 1 - ok_gte: 1 - warning_gte: 2 - critical_gte: 3 - policy: - on_error: critical - - - name: revue-hebdomadaire-priorites - date: "2026-03-10" - notes: Revoir les priorités de la semaine - probe: - type: elapsed_time - source: - type: manual_date - inputs_file: "/opt/life-noc/data/inputs/revue.yaml" - item_key: "revue-hebdomadaire-priorites" - metric: - unit: days - thresholds: - unknown_lt: 5 - ok_gte: 5 - warning_gte: 7 - critical_gte: 10 - policy: - on_error: critical - - - name: revue-mensuelle-systeme-vie - date: 2026-04-01 - notes: Revue mensuelle de l'ensemble du système Life-NOC - - - name: revue-trimestrielle-orientation - date: 2026-06-30 - notes: Revue trimestrielle des orientations de vie et de Chezlepro - - focus: - - name: entretien-processus-focus - date: 2026-03-09 - notes: Vérifier que les cartouches FOCUS sont à jour - - - name: nettoyage-inbox-mentale - date: 2026-03-09 - notes: Vider et clarifier les éléments capturés hors système - - - name: revue-limitation-engagements - date: 2026-03-31 - notes: Vérifier que les engagements actifs demeurent réalistes - - finances-personnelles: - - name: revision-comptes-bancaires - date: 2026-04-01 - notes: Révision mensuelle des comptes bancaires personnels - - - name: verification-cartes-credit - date: 2026-04-01 - notes: Vérification des soldes et transactions des cartes de crédit - - - name: paiement-cartes-credit - date: 2026-04-15 - notes: Paiement des cartes de crédit personnelles - - - name: revision-budget-personnel - date: 2026-04-05 - notes: Révision mensuelle du budget personnel - - - name: verification-prelevements-automatiques - date: 2026-04-03 - notes: Vérification des prélèvements automatiques personnels - - - name: verification-placements - date: 2026-06-30 - notes: Vérification périodique des placements et comptes enregistrés - - - name: verification-cotisations-reer - date: 2026-02-28 - notes: Vérification des cotisations REER - - - name: verification-celi - date: 2026-05-01 - notes: Vérification de l'espace CELI et de son utilisation - - - name: preparation-dossier-financier-annuel - date: 2026-01-31 - notes: Préparer le dossier financier annuel personnel - - fiscalite-personnelle: - - name: preparation-documents-impots - date: 2026-03-15 - notes: Rassembler tous les documents fiscaux personnels - - - name: production-impots-federal - date: 2026-04-30 - notes: Produire la déclaration de revenus fédérale - - - name: production-impots-quebec - date: 2026-04-30 - notes: Produire la déclaration de revenus Québec - - - name: paiement-solde-impots - date: 2026-04-30 - notes: Payer tout solde d'impôt exigible - - - name: verification-avis-cotisation - date: 2026-05-31 - notes: Vérifier les avis de cotisation ARC et Revenu Québec - - - name: archivage-documents-fiscaux - date: 2026-06-15 - notes: Archiver les documents fiscaux personnels - - - name: verification-acomptes-provisionnels - date: 2026-03-15 - notes: Vérifier si des acomptes provisionnels sont requis - - obligations-legales-personnelles: - - name: verification-testament - date: 2026-07-01 - notes: Vérifier la pertinence et l'actualité du testament - - - name: verification-mandat-inaptitude - date: 2026-07-01 - notes: Vérifier le mandat de protection et documents connexes - - - name: verification-directives-medicales - date: 2026-07-15 - notes: Vérifier les directives médicales anticipées - - - name: verification-papiers-identite - date: 2026-06-01 - notes: Vérifier l'expiration des papiers d'identité - - - name: renouvellement-permis-conduire - date: 2027-01-01 - notes: Vérifier le renouvellement du permis de conduire - - - name: verification-carte-assurance-maladie - date: 2026-10-01 - notes: Vérifier l'expiration de la carte d'assurance maladie - - - name: verification-passeport - date: 2026-06-01 - notes: Vérifier l'expiration du passeport - - maison: - - name: remplacement-filtre-fournaise - date: 2026-04-01 - notes: Remplacer le filtre de la fournaise - - - name: inspection-fournaise - date: 2026-09-15 - notes: Inspection générale de la fournaise avant saison froide - - - name: inspection-thermopompe - date: 2026-05-01 - notes: Inspection et entretien de la thermopompe - - - name: nettoyage-unites-exterieures - date: 2026-05-15 - notes: Nettoyer les unités extérieures et vérifier le dégagement - - - name: inspection-toiture - date: 2026-10-01 - notes: Inspection annuelle de la toiture - - - name: inspection-gouttieres - date: 2026-11-01 - notes: Inspection et nettoyage des gouttières - - - name: inspection-fondation - date: 2026-06-01 - notes: Inspection de la fondation et des fissures - - - name: verification-drainage-terrain - date: 2026-05-15 - notes: Vérification du drainage autour de la maison - - - name: test-detecteurs-fumee - date: 2026-04-01 - notes: Test des détecteurs de fumée - - - name: test-detecteurs-co - date: 2026-04-01 - notes: Test des détecteurs de monoxyde de carbone - - - name: remplacement-piles-detecteurs - date: 2026-10-01 - notes: Remplacement préventif des piles des détecteurs - - - name: verification-plomberie-visible - date: 2026-05-01 - notes: Vérification visuelle de la plomberie accessible - - - name: inspection-sump-pump - date: 2026-04-15 - notes: Vérification de la pompe de puisard si applicable - - - name: verification-calfetrage - date: 2026-10-15 - notes: Vérification du calfeutrage portes et fenêtres - - - name: inspection-portes-garage - date: 2026-05-15 - notes: Vérification mécanique et sécurité des portes de garage - - - name: verification-extincteurs - date: 2026-06-01 - notes: Vérification des extincteurs - - garage-et-rangement: - - name: inspection-rangement-plafond - date: 2026-05-01 - notes: Vérification des supports suspendus au plafond du garage - - - name: revue-inventaire-garage - date: 2026-04-15 - notes: Revue de l'inventaire et de l'ordre du garage - - - name: verification-rouille-outillage - date: 2026-05-15 - notes: Vérification de la corrosion sur les outils et équipements - - - name: inspection-securite-garage - date: 2026-06-01 - notes: Vérification des conditions de sécurité du garage - - - name: rotation-stockage-bacs - date: 2026-05-15 - notes: Revue des contenus de bacs de rangement - - energie: - - name: inspection-batteries-lifepo4 - date: 2026-04-01 - notes: Inspection physique et logique des batteries LiFePO4 - - - name: verification-tension-batteries - date: 2026-03-15 - notes: Vérification des tensions et cohérence des batteries - - - name: verification-smartshunt - date: 2026-03-15 - notes: Vérification SmartShunt et cohérence du monitoring - - - name: verification-cerbo-gx - date: 2026-03-15 - notes: Vérification Cerbo GX et remontée des données - - - name: verification-can-rs485 - date: 2026-04-15 - notes: Vérification des communications CAN ou RS485 - - - name: inspection-cablage-energie - date: 2026-05-01 - notes: Inspection du câblage et des connexions énergétiques - - - name: verification-busbars - date: 2026-05-01 - notes: Vérification du serrage, corrosion et échauffement des busbars - - - name: verification-parametres-charge - date: 2026-04-01 - notes: Vérification des paramètres de charge et float - - - name: test-charge-batteries - date: 2026-04-15 - notes: Test de comportement en charge des batteries - - - name: test-comportement-onduleur - date: 2026-05-01 - notes: Vérifier le comportement du Multiplus sous charge légère - - - name: verification-journal-evenements-victron - date: 2026-04-15 - notes: Vérification des événements et anomalies Victron - - resilience: - - name: test-generatrice-propane - date: 2026-04-01 - notes: Test mensuel de la génératrice au propane - - - name: verification-carburant-generatrice - date: 2026-04-01 - notes: Vérification de l'approvisionnement propane lié à la génératrice - - - name: verification-procedure-bascule - date: 2026-04-15 - notes: Réviser la procédure de bascule en mode secours - - - name: verification-stock-lampes-piles - date: 2026-05-01 - notes: Vérification des lampes, piles et éclairage d'urgence - - - name: verification-trousses-urgence - date: 2026-05-15 - notes: Vérification des trousses d'urgence - - - name: revision-plan-urgence - date: 2026-06-01 - notes: Réviser le plan d'urgence domestique - - - name: test-autonomie-base - date: 2026-06-15 - notes: Vérifier l'autonomie énergétique minimale attendue - - - name: verification-moyens-cuisson-secours - date: 2026-05-15 - notes: Vérification des moyens de cuisson de secours - - stock-alimentaire: - - name: rotation-nourriture-seche - date: 2026-04-01 - notes: Rotation des stocks de nourriture sèche - - - name: verification-reserve-eau - date: 2026-04-15 - notes: Vérification de la réserve d'eau potable - - - name: verification-mylar-absorbeurs - date: 2026-05-01 - notes: Vérifier l'intégrité des emballages Mylar et absorbeurs - - - name: revue-inventaire-conserves - date: 2026-04-15 - notes: Revue des conserves et dates de rotation - - - name: revue-inventaire-farine-riz-pates - date: 2026-04-01 - notes: Vérification des gros stocks alimentaires de base - - - name: verification-bacs-legumes-racines - date: 2026-10-01 - notes: Vérification des bacs de stockage de légumes racines - - - name: revue-supplements-vitamines - date: 2026-05-01 - notes: Vérification du stock de suppléments et dates utiles - - sante: - - name: verification-trousse-premiers-soins - date: 2026-04-01 - notes: Vérification de la trousse de premiers soins - - - name: verification-expiration-medicaments - date: 2026-05-01 - notes: Vérification des dates d'expiration des médicaments - - - name: revision-rendez-vous-medicaux - date: 2026-04-15 - notes: Revoir les rendez-vous médicaux requis - - - name: verification-lunettes-prescriptions - date: 2026-06-01 - notes: Vérifier les prescriptions et besoins de renouvellement - - - name: verification-dossier-sante - date: 2026-06-15 - notes: Vérifier l'ordre et l'accessibilité des documents de santé - - voiture: - - name: verification-huile-moteur - date: 2026-04-01 - notes: Vérification de l'huile moteur - - - name: inspection-freins - date: 2026-05-01 - notes: Inspection des freins - - - name: verification-pneus - date: 2026-04-15 - notes: Vérification usure, pression et permutation des pneus - - - name: ajustement-valves - date: 2026-08-01 - notes: Vérification et ajustement des valves Honda Accord - - - name: verification-timing-belt - date: 2027-01-01 - notes: Vérification de la courroie de distribution et pompe à eau - - - name: verification-batterie-voiture - date: 2026-10-01 - notes: Vérification de l'état de la batterie automobile - - - name: verification-balais-essuie-glace - date: 2026-05-01 - notes: Vérification des essuie-glaces - - - name: verification-liquides - date: 2026-04-15 - notes: Vérification des liquides de la voiture - - - name: verification-eclairage - date: 2026-05-01 - notes: Vérification de l'éclairage et des phares - - - name: verification-immatriculation-assurance - date: 2026-06-01 - notes: Vérification papiers d'assurance et immatriculation - - jardin: - - name: inspection-vignes - date: 2026-04-15 - notes: Inspection et entretien des vignes - - - name: entretien-bleuetiers - date: 2026-05-01 - notes: Entretien des bleuetiers - - - name: entretien-framboisiers - date: 2026-06-01 - notes: Entretien des framboisiers - - - name: inspection-kiwis-nordiques - date: 2026-05-15 - notes: Vérification des kiwis nordiques - - - name: entretien-rhubarbe - date: 2026-05-15 - notes: Entretien de la rhubarbe - - - name: inspection-groseillier - date: 2026-05-15 - notes: Inspection du groseillier - - - name: inspection-muriers - date: 2026-05-15 - notes: Inspection des mûriers - - - name: entretien-houblon - date: 2026-06-01 - notes: Vérification et entretien du houblon - - - name: revision-pharmacopée-jardin - date: 2026-05-01 - notes: Vérification du stock de soins pour végétaux - - - name: revision-armoire-produits-jardin - date: 2026-05-01 - notes: Vérification et ordre de l'armoire des produits pour végétaux - - outils-et-equipements: - - name: entretien-outils-jardin - date: 2026-04-15 - notes: Nettoyage et entretien des outils de jardin - - - name: inspection-outils-electriques - date: 2026-05-01 - notes: Vérification des outils électriques - - - name: verification-rallonges-et-connecteurs - date: 2026-05-01 - notes: Vérification des rallonges et connecteurs - - - name: verification-compresseur-et-accessoires - date: 2026-05-15 - notes: Vérification du compresseur et accessoires - - - name: revision-inventaire-outillage - date: 2026-06-01 - notes: Revue de l'inventaire d'outillage - - informatique-personnelle: - - name: verification-sauvegardes-personnelles - date: 2026-04-01 - notes: Vérification des sauvegardes personnelles - - - name: nettoyage-stockage-personnel - date: 2026-04-15 - notes: Nettoyage du stockage numérique personnel - - - name: verification-comptes-importants - date: 2026-05-01 - notes: Vérification des comptes numériques personnels importants - - - name: revue-mots-de-passe-personnels - date: 2026-06-01 - notes: Revue des mots de passe personnels critiques - - - name: verification-documents-cloud-personnels - date: 2026-05-15 - notes: Vérifier la cohérence des documents personnels sauvegardés - - infrastructure-chezlepro: - - name: verification-proxmox - date: 2026-04-01 - notes: Vérification générale de l'environnement Proxmox - - - name: verification-ceph - date: 2026-04-01 - notes: Vérification générale de l'état Ceph - - - name: test-restauration-backups - date: 2026-04-15 - notes: Test de restauration des sauvegardes - - - name: verification-pbs-truenas - date: 2026-05-01 - notes: Vérification des solutions de sauvegarde et synchronisation - - - name: verification-ups-infrastructure - date: 2026-04-15 - notes: Vérification des UPS de l'infrastructure - - - name: verification-capacite-stockage - date: 2026-04-15 - notes: Vérifier capacité et croissance du stockage - - - name: verification-apt-cacher-ng - date: 2026-05-01 - notes: Vérification du bon fonctionnement d'apt-cacher-ng - - - name: verification-icinga2 - date: 2026-04-01 - notes: Vérification de la supervision Icinga2 - - - name: verification-keycloak-openldap - date: 2026-05-01 - notes: Vérification de l'identité et de l'authentification centralisées - - - name: verification-nextcloud - date: 2026-04-15 - notes: Vérification de l'état Nextcloud - - - name: verification-mailcow - date: 2026-05-01 - notes: Vérification de l'infrastructure Mailcow - - - name: verification-openvas - date: 2026-05-15 - notes: Vérification de la plateforme OpenVAS - - - name: verification-journaux-systemes - date: 2026-04-15 - notes: Revue des journaux systèmes critiques - - reseau-chezlepro: - - name: verification-firewalls - date: 2026-04-01 - notes: Vérification des firewalls - - - name: verification-vpn-openvpn - date: 2026-04-15 - notes: Vérification des tunnels OpenVPN - - - name: verification-crl-certificats - date: 2026-04-15 - notes: Vérification de la CRL et des certificats - - - name: verification-switches - date: 2026-05-01 - notes: Vérification des switches et uplinks - - - name: verification-vlans-segmentation - date: 2026-05-01 - notes: Vérification de la segmentation réseau - - - name: verification-dns - date: 2026-05-15 - notes: Vérification DNS interne et externe - - - name: verification-dynamic-dns - date: 2026-05-15 - notes: Vérification du DNS dynamique si utilisé - - - name: audit-regles-firewall - date: 2026-06-01 - notes: Audit périodique des règles de firewall - - - name: verification-geoblocking - date: 2026-05-15 - notes: Vérifier le geoblocking et son effet attendu - - - name: verification-certificats-publics - date: 2026-06-01 - notes: Vérifier les expirations de certificats publics - - securite-chezlepro: - - name: verification-mises-a-jour-securite - date: 2026-04-01 - notes: Vérification des mises à jour de sécurité - - - name: audit-comptes-acces - date: 2026-05-01 - notes: Audit des comptes et accès privilégiés - - - name: verification-ids-snort - date: 2026-05-01 - notes: Vérification des IDS et de leur état - - - name: revue-pki-privee - date: 2026-05-15 - notes: Revue de la PKI privée et des autorités intermédiaires - - - name: revue-politiques-securite - date: 2026-06-01 - notes: Revue des politiques et pratiques de sécurité numérique - - - name: verification-sauvegardes-configuration - date: 2026-04-15 - notes: Vérifier les sauvegardes des configurations critiques - - exploitation-chezlepro: - - name: revision-playbooks-ansible - date: 2026-05-01 - notes: Revue des playbooks Ansible - - - name: verification-inventaires-ansible - date: 2026-05-01 - notes: Vérification des inventaires Ansible - - - name: revision-documentation-technique - date: 2026-05-15 - notes: Revue de la documentation technique Chezlepro - - - name: verification-procedures-reprise - date: 2026-06-01 - notes: Vérifier les procédures de reprise et restauration - - - name: revue-capacite-ressources - date: 2026-06-15 - notes: Revue CPU RAM stockage et charge de l'infrastructure - - - name: verification-jobs-automatises - date: 2026-05-15 - notes: Vérification des jobs automatisés et scripts périodiques - - obligations-chezlepro: - - name: verification-registraire-entreprise - date: 2026-06-15 - notes: Vérifier les obligations au Registraire des entreprises - - - name: verification-declarations-taxes - date: 2026-04-30 - notes: Vérifier les obligations de taxes de l'entreprise si applicables - - - name: verification-dossier-comptable-entreprise - date: 2026-04-15 - notes: Vérifier l'ordre du dossier comptable Chezlepro - - - name: verification-facturation-clients - date: 2026-04-10 - notes: Vérifier la facturation et son suivi - - - name: verification-paiements-fournisseurs - date: 2026-04-10 - notes: Vérifier les paiements fournisseurs - - - name: verification-contrats-ententes - date: 2026-05-15 - notes: Vérifier contrats, ententes et obligations associées - - - name: verification-assurances-entreprise - date: 2026-06-01 - notes: Vérifier les assurances de l'entreprise - - - name: archivage-documents-entreprise - date: 2026-05-31 - notes: Archiver les documents administratifs et financiers de l'entreprise - - actifs-chezlepro: - - name: revision-inventaire-materiel - date: 2026-05-01 - notes: Revoir l'inventaire du matériel de Chezlepro - - - name: verification-amortissables - date: 2026-06-01 - notes: Vérifier le registre des biens amortissables - - - name: verification-serveurs-et-composants - date: 2026-05-15 - notes: Vérifier l'état des serveurs et composants matériels - - - name: verification-reserve-pieces - date: 2026-06-01 - notes: Vérifier les pièces de rechange critiques - - - name: revision-actifs-transferts - date: 2026-06-15 - notes: Réviser les actifs transférés ou à transférer à l'entreprise - - projets: - - name: revision-life-noc - date: 2026-04-01 - notes: Révision du projet Life-NOC - - - name: revision-alliance-boreale - date: 2026-04-15 - notes: Révision du projet Alliance Boréale - - - name: revision-erplibre - date: 2026-05-01 - notes: Révision du projet ERPLibre - - - name: revision-semence-numerique - date: 2026-05-15 - notes: Révision du projet semence numérique - - - name: revision-ortrux-1 - date: 2026-05-15 - notes: Révision du système Ortrux-1 - - - name: revision-district16 - date: 2026-05-01 - notes: Révision du projet DISTRICT16 - - communaute: - - name: verification-outils-aa - date: 2026-05-01 - notes: Vérifier les outils numériques liés aux activités communautaires - - - name: verification-espace-87-16 - date: 2026-05-01 - notes: Vérifier l'espace Nextcloud du district - - - name: verification-salles-visio-groupes - date: 2026-05-15 - notes: Vérifier les salles de visioconférence des groupes - - - name: verification-depots-rapports-rsg - date: 2026-05-15 - notes: Vérifier les dépôts de rapports RSG - - - name: revision-outils-communication-communaute - date: 2026-06-01 - notes: Réviser les moyens de communication communautaires - - documentation: - - name: revue-docs-personnelles-importantes - date: 2026-05-15 - notes: Revoir l'organisation des documents personnels importants - - - name: revue-wiki-technique - date: 2026-05-15 - notes: Revoir le wiki technique et sa cohérence - - - name: revue-base-connaissances - date: 2026-06-01 - notes: Revoir la base de connaissances globale - - - name: verification-sauvegarde-docs-cles - date: 2026-05-15 - notes: Vérifier la sauvegarde des documents clés - - animaux: - - name: verification-stock-nourriture-chats - date: 2026-04-15 - notes: Vérification du stock de nourriture pour chats - - - name: verification-friandises-et-litiere - date: 2026-04-15 - notes: Vérification des stocks de friandises et de litière - - - name: revision-routine-soins-animaux - date: 2026-05-01 - notes: Revue de la routine de soins et des besoins matériels des chats diff --git a/.patch-backup-days-until-due/generate_services.py.bak b/.patch-backup-days-until-due/generate_services.py.bak deleted file mode 100644 index e7373a9..0000000 --- a/.patch-backup-days-until-due/generate_services.py.bak +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env python3 - -from pathlib import Path -import re -import sys -import yaml - -INPUT_FILE = Path("domains.yaml") -OUTPUT_DIR = Path("icinga/services") -SERVICEGROUPS_DIR = Path("icinga/servicegroups") -SERVICEGROUPS_FILE = SERVICEGROUPS_DIR / "life-noc.conf" -HOST_NAME = "life-noc" -SERVICE_TEMPLATE = "service_echeance" -PROBE_TEMPLATE = "service_life_noc_probe" -DEFAULT_MOCK_STATE = "OK" -DEFAULT_MOCK_MESSAGE = "Sous contrôle" - - -def slugify(value: str) -> str: - value = value.strip().lower() - replacements = { - "à": "a", "â": "a", "ä": "a", - "ç": "c", - "é": "e", "è": "e", "ê": "e", "ë": "e", - "î": "i", "ï": "i", - "ô": "o", "ö": "o", - "ù": "u", "û": "u", "ü": "u", - "ÿ": "y", - "œ": "oe", - "æ": "ae", - "'": "", - "’": "", - } - for old, new in replacements.items(): - value = value.replace(old, new) - value = re.sub(r"[^a-z0-9\-]+", "-", value) - value = re.sub(r"-{2,}", "-", value) - return value.strip("-") - - -def aliasify(value: str) -> str: - value = value.strip().upper() - replacements = { - "À": "A", "Â": "A", "Ä": "A", - "Ç": "C", - "É": "E", "È": "E", "Ê": "E", "Ë": "E", - "Î": "I", "Ï": "I", - "Ô": "O", "Ö": "O", - "Ù": "U", "Û": "U", "Ü": "U", - "Ÿ": "Y", - "Œ": "OE", - "Æ": "AE", - "'": "", - "’": "", - } - for old, new in replacements.items(): - value = value.replace(old, new) - value = re.sub(r"[^A-Z0-9\-]+", "-", value) - value = re.sub(r"-{2,}", "-", value) - return value.strip("-") - - -def icinga_escape(value: str) -> str: - return value.replace("\\", "\\\\").replace('"', '\\"') - - -def normalize_mock_state(value: str) -> str: - state = str(value).strip().upper() - allowed = {"OK", "WARNING", "CRITICAL"} - if state not in allowed: - raise ValueError( - f"mock_state invalide: {value}. Valeurs permises: {', '.join(sorted(allowed))}" - ) - return state - - -def render_mock_service(domain: str, group_name: str, item: dict) -> str: - name = item["name"].strip() - date = str(item["date"]).strip() - notes = item.get("notes", "").strip() - notes_url = item.get("notes_url", "").strip() - action_url = item.get("action_url", "").strip() - mock_state = normalize_mock_state(item.get("mock_state", DEFAULT_MOCK_STATE)) - mock_message = item.get("mock_message", DEFAULT_MOCK_MESSAGE).strip() or DEFAULT_MOCK_MESSAGE - - service_name = f"{domain}-{name}" - - lines = [ - f'apply Service "{icinga_escape(service_name)}" {{', - f' import "{SERVICE_TEMPLATE}"', - f' vars.date_echeance = "{icinga_escape(date)}"', - f' vars.mock_state = "{icinga_escape(mock_state)}"', - f' vars.mock_message = "{icinga_escape(mock_message)}"', - f' groups = [ "{icinga_escape(group_name)}" ]', - ] - - if notes: - lines.append(f' notes = "{icinga_escape(notes)}"') - if notes_url: - lines.append(f' notes_url = "{icinga_escape(notes_url)}"') - if action_url: - lines.append(f' action_url = "{icinga_escape(action_url)}"') - - lines.append(f' assign where host.name == "{HOST_NAME}"') - lines.append("}") - lines.append("") - - return "\n".join(lines) - - -def render_probe_service(domain: str, group_name: str, item: dict) -> str: - name = item["name"].strip() - notes = item.get("notes", "").strip() - notes_url = item.get("notes_url", "").strip() - action_url = item.get("action_url", "").strip() - probe = item["probe"] - - probe_type = str(probe["type"]).strip() - source = probe["source"] - metric = probe["metric"] - thresholds = probe["thresholds"] - policy = probe.get("policy", {}) - - service_name = f"{domain}-{name}" - - lines = [ - f'apply Service "{icinga_escape(service_name)}" {{', - f' import "{PROBE_TEMPLATE}"', - f' vars.life_noc_probe_type = "{icinga_escape(probe_type)}"', - f' vars.life_noc_source_type = "{icinga_escape(str(source["type"]).strip())}"', - f' vars.life_noc_source_value = "{icinga_escape(str(source.get("value", "")).strip())}"', - f' vars.life_noc_inputs_file = "{icinga_escape(str(source.get("inputs_file", "")).strip())}"', - f' vars.life_noc_item_key = "{icinga_escape(str(source.get("item_key", name)).strip())}"', - f' vars.life_noc_metric_unit = "{icinga_escape(str(metric["unit"]).strip())}"', - f' vars.life_noc_label = "{icinga_escape(name)}"', - f' groups = [ "{icinga_escape(group_name)}" ]', - ] - - if "unknown_lt" in thresholds: - lines.append(f' vars.life_noc_threshold_unknown_lt = "{icinga_escape(str(thresholds["unknown_lt"]))}"') - if "ok_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_ok_gte = "{icinga_escape(str(thresholds["ok_gte"]))}"') - if "warning_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_warning_gte = "{icinga_escape(str(thresholds["warning_gte"]))}"') - if "critical_gte" in thresholds: - lines.append(f' vars.life_noc_threshold_critical_gte = "{icinga_escape(str(thresholds["critical_gte"]))}"') - - on_error = str(policy.get("on_error", "critical")).strip() - lines.append(f' vars.life_noc_on_error = "{icinga_escape(on_error)}"') - - if notes: - lines.append(f' notes = "{icinga_escape(notes)}"') - if notes_url: - lines.append(f' notes_url = "{icinga_escape(notes_url)}"') - if action_url: - lines.append(f' action_url = "{icinga_escape(action_url)}"') - - lines.append(f' assign where host.name == "{HOST_NAME}"') - lines.append("}") - lines.append("") - - return "\n".join(lines) - - -def validate_probe(item: dict) -> None: - probe = item["probe"] - if not isinstance(probe, dict): - raise ValueError("probe doit être un objet") - - if str(probe.get("type", "")).strip() != "elapsed_time": - raise ValueError("seul probe.type=elapsed_time est supporté en v1") - - source = probe.get("source") - if not isinstance(source, dict): - raise ValueError("probe.source doit être un objet") - if str(source.get("type", "")).strip() != "manual_date": - raise ValueError("seul probe.source.type=manual_date est supporté en v1") - - has_inline_value = "value" in source - has_store_ref = "inputs_file" in source and "item_key" in source - - if not has_inline_value and not has_store_ref: - raise ValueError("probe.source.value ou probe.source.inputs_file + item_key requis") - - metric = probe.get("metric") - if not isinstance(metric, dict): - raise ValueError("probe.metric doit être un objet") - if str(metric.get("unit", "")).strip() != "days": - raise ValueError("seul probe.metric.unit=days est supporté en v1") - - thresholds = probe.get("thresholds") - if not isinstance(thresholds, dict): - raise ValueError("probe.thresholds doit être un objet") - - -def render_servicegroup(group_name: str) -> str: - return "\n".join([ - f'object ServiceGroup "{icinga_escape(group_name)}" {{', - f' display_name = "{icinga_escape(group_name)}"', - "}", - "", - ]) - - -def main() -> int: - if not INPUT_FILE.exists(): - print(f"Erreur: fichier introuvable: {INPUT_FILE}", file=sys.stderr) - return 1 - - with INPUT_FILE.open("r", encoding="utf-8") as f: - data = yaml.safe_load(f) - - if not isinstance(data, dict) or "domains" not in data: - print("Erreur: le YAML doit contenir une clé racine 'domains'.", file=sys.stderr) - return 1 - - domains = data["domains"] - if not isinstance(domains, dict): - print("Erreur: 'domains' doit être un objet YAML.", file=sys.stderr) - return 1 - - OUTPUT_DIR.mkdir(parents=True, exist_ok=True) - SERVICEGROUPS_DIR.mkdir(parents=True, exist_ok=True) - - for existing_conf in OUTPUT_DIR.glob("*.conf"): - existing_conf.unlink() - - if SERVICEGROUPS_FILE.exists(): - SERVICEGROUPS_FILE.unlink() - - generated_files = [] - servicegroup_content = [ - "/*", - " AUTO-GENERATED FILE - SERVICE GROUPS", - " Ne pas modifier manuellement.", - " Source: domains.yaml", - "*/", - "", - ] - - for raw_domain, services in domains.items(): - domain = slugify(str(raw_domain)) - group_name = aliasify(str(raw_domain)) - - if not isinstance(services, list): - print(f"Erreur: le domaine '{raw_domain}' doit contenir une liste.", file=sys.stderr) - return 1 - - output_file = OUTPUT_DIR / f"{domain}.conf" - content = [ - "/*", - f" AUTO-GENERATED FILE - DOMAIN: {raw_domain}", - " Ne pas modifier manuellement.", - " Source: domains.yaml", - "*/", - "", - ] - - servicegroup_content.append(render_servicegroup(group_name)) - - for idx, item in enumerate(services, start=1): - if not isinstance(item, dict): - print(f"Erreur: entrée invalide dans '{raw_domain}' à la position {idx}.", file=sys.stderr) - return 1 - - missing = [key for key in ("name", "date", "notes") if key not in item] - if missing: - print( - f"Erreur: dans le domaine '{raw_domain}', entrée {idx}, champs manquants: {', '.join(missing)}", - file=sys.stderr, - ) - return 1 - - try: - if "probe" in item: - validate_probe(item) - content.append(render_probe_service(domain, group_name, item)) - else: - content.append(render_mock_service(domain, group_name, item)) - except ValueError as exc: - print(f"Erreur dans '{raw_domain}', entrée {idx}: {exc}", file=sys.stderr) - return 1 - - output_file.write_text("\n".join(content).rstrip() + "\n", encoding="utf-8") - generated_files.append(str(output_file)) - - SERVICEGROUPS_FILE.write_text("\n".join(servicegroup_content).rstrip() + "\n", encoding="utf-8") - generated_files.append(str(SERVICEGROUPS_FILE)) - - print("Fichiers générés :") - for file_path in generated_files: - print(f" - {file_path}") - - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/.patch-backup/Makefile.bak b/.patch-backup/Makefile.bak deleted file mode 100644 index 9674188..0000000 --- a/.patch-backup/Makefile.bak +++ /dev/null @@ -1,105 +0,0 @@ -SHELL := /bin/bash -.DEFAULT_GOAL := help - -PYTHON ?= python3 -ANSIBLE_PLAYBOOK ?= ansible-playbook -INVENTORY ?= ansible/inventory -PLAYBOOK ?= ansible/site.yml -ARCHIVE ?= life-noc-from-scratch-debian12.zip -PROJECT_NAME ?= life-noc - -GENERATORS := scripts/generate_services.py scripts/generate_bpm.py -CHECKS := checks/check_life_noc_mock.sh checks/check_echeance_vie.sh -ICINGA_FILES := $(wildcard icinga/commands/*.conf) $(wildcard icinga/hosts/*.conf) $(wildcard icinga/templates/*.conf) $(wildcard icinga/services/*.conf) - -.PHONY: help all generate regen services bpm validate validate-yaml validate-python validate-shell validate-generated check mock-ok mock-warning mock-critical clean bootstrap deploy deploy-no-bpm deploy-with-bpm package inventory-example vars-example info - -help: - @echo "Life-NOC - cibles disponibles" - @echo - @echo " make generate Génère services Icinga + BPM" - @echo " make validate Valide YAML, Python, shell et artefacts générés" - @echo " make check Génère puis valide" - @echo " make bootstrap Déploie la plateforme complète depuis Debian 12 vanille" - @echo " make deploy Alias de bootstrap" - @echo " make deploy-with-bpm Déploie explicitement avec artefact BPM" - @echo " make mock-ok Teste la sonde mock en état OK" - @echo " make mock-warning Teste la sonde mock en état WARNING" - @echo " make mock-critical Teste la sonde mock en état CRITICAL" - @echo " make package Crée une archive zip du dépôt" - @echo " make inventory-example Rappelle comment préparer l'inventaire" - @echo " make vars-example Rappelle comment préparer les variables" - @echo " make info Affiche les variables utiles" - @echo - @echo "Variables surchargables : INVENTORY=..., PLAYBOOK=..., ARCHIVE=..." - -all: check -regen: generate - -generate: services bpm - -services: domains.yaml scripts/generate_services.py - $(PYTHON) scripts/generate_services.py - -bpm: domains.yaml scripts/generate_bpm.py - $(PYTHON) scripts/generate_bpm.py - -validate: validate-yaml validate-python validate-shell validate-generated - -validate-yaml: domains.yaml - @$(PYTHON) -c 'import yaml, pathlib; p = pathlib.Path("domains.yaml"); data = yaml.safe_load(p.read_text(encoding="utf-8")); assert isinstance(data, dict) and isinstance(data.get("domains"), dict), "domains.yaml invalide: clé racine domains requise"; print("YAML valide: domains.yaml")' - -validate-python: $(GENERATORS) - @$(PYTHON) -m py_compile $(GENERATORS) - @echo "Python OK" - -validate-shell: $(CHECKS) - @bash -n $(CHECKS) - @echo "Shell OK" - -validate-generated: $(ICINGA_FILES) bpm/life-noc.json - @grep -R 'check_life_noc_mock' icinga/templates icinga/commands icinga/services >/dev/null - @$(PYTHON) -c 'import json, pathlib; p = pathlib.Path("bpm/life-noc.json"); data = json.loads(p.read_text(encoding="utf-8")); assert isinstance(data.get("processes"), list) and data["processes"], "bpm/life-noc.json invalide: processes absent ou vide"; print("Artefacts générés valides")' - -check: generate validate - -mock-ok: - @bash checks/check_life_noc_mock.sh --state OK --message "Sous contrôle" --item-name "demo" --date "2026-03-13" - -mock-warning: - @bash checks/check_life_noc_mock.sh --state WARNING --message "Attention requise" --item-name "demo" --date "2026-03-13"; test $$? -eq 1 - -mock-critical: - @bash checks/check_life_noc_mock.sh --state CRITICAL --message "Action requise" --item-name "demo" --date "2026-03-13"; test $$? -eq 2 - -bootstrap: check - $(ANSIBLE_PLAYBOOK) -i $(INVENTORY) $(PLAYBOOK) - -deploy: bootstrap - -deploy-no-bpm: bootstrap - -deploy-with-bpm: check - $(ANSIBLE_PLAYBOOK) -i $(INVENTORY) $(PLAYBOOK) -e life_noc_bpm_deploy_enabled=true - -package: check - @rm -f $(ARCHIVE) - @zip -qr $(ARCHIVE) . -x '*.git*' -x '__pycache__/*' -x '*.pyc' -x '$(ARCHIVE)' - @echo "Archive créée: $(ARCHIVE)" - -clean: - rm -f $(ARCHIVE) - -inventory-example: - @echo "Copier ansible/inventory.example vers ansible/inventory puis ajuster l'hôte, l'adresse et l'utilisateur ansible." - -vars-example: - @echo "Copier ansible/group_vars/all.yml.example vers ansible/group_vars/all.yml puis remplacer TOUS les mots de passe par les tiens." - -info: - @echo "PROJECT_NAME=$(PROJECT_NAME)" - @echo "PYTHON=$(PYTHON)" - @echo "ANSIBLE_PLAYBOOK=$(ANSIBLE_PLAYBOOK)" - @echo "INVENTORY=$(INVENTORY)" - @echo "PLAYBOOK=$(PLAYBOOK)" - @echo "ARCHIVE=$(ARCHIVE)" diff --git a/.patch-backup/generate_bpm.py.bak b/.patch-backup/generate_bpm.py.bak deleted file mode 100644 index 46da8d2..0000000 --- a/.patch-backup/generate_bpm.py.bak +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env python3 - -from pathlib import Path -import json -import re -import sys -import yaml - - -INPUT_FILE = Path("domains.yaml") -OUTPUT_DIR = Path("bpm") -OUTPUT_FILE = OUTPUT_DIR / "life-noc.json" -HOST_NAME = "life-noc" - - -def slugify(value: str) -> str: - value = value.strip().lower() - replacements = { - "à": "a", "â": "a", "ä": "a", - "ç": "c", - "é": "e", "è": "e", "ê": "e", "ë": "e", - "î": "i", "ï": "i", - "ô": "o", "ö": "o", - "ù": "u", "û": "u", "ü": "u", - "ÿ": "y", - "œ": "oe", - "æ": "ae", - "'": "", - "’": "", - } - for old, new in replacements.items(): - value = value.replace(old, new) - value = re.sub(r"[^a-z0-9\-]+", "-", value) - value = re.sub(r"-{2,}", "-", value) - return value.strip("-") - - -def build_service_name(domain_slug: str, item_name: str) -> str: - return f"{domain_slug}-{item_name.strip()}" - - -def make_leaf_node(service_name: str) -> dict: - return { - "type": "service", - "host": HOST_NAME, - "service": service_name - } - - -def make_domain_process(domain_label: str, domain_slug: str, services: list[dict]) -> dict: - leaves = [] - for item in services: - service_name = build_service_name(domain_slug, item["name"]) - leaves.append(make_leaf_node(service_name)) - - return { - "name": domain_label.upper(), - "operator": "worst", - "nodes": leaves - } - - -def main() -> int: - if not INPUT_FILE.exists(): - print(f"Erreur: fichier introuvable: {INPUT_FILE}", file=sys.stderr) - return 1 - - with INPUT_FILE.open("r", encoding="utf-8") as f: - data = yaml.safe_load(f) - - if not isinstance(data, dict) or "domains" not in data: - print("Erreur: le YAML doit contenir une clé racine 'domains'.", file=sys.stderr) - return 1 - - domains = data["domains"] - if not isinstance(domains, dict): - print("Erreur: 'domains' doit être un objet YAML.", file=sys.stderr) - return 1 - - processes = [] - root_nodes = [] - - for raw_domain, services in domains.items(): - if not isinstance(services, list): - print(f"Erreur: le domaine '{raw_domain}' doit contenir une liste.", file=sys.stderr) - return 1 - - for idx, item in enumerate(services, start=1): - if not isinstance(item, dict): - print(f"Erreur: entrée invalide dans '{raw_domain}' à la position {idx}.", file=sys.stderr) - return 1 - missing = [key for key in ("name", "date", "notes") if key not in item] - if missing: - print( - f"Erreur: dans le domaine '{raw_domain}', entrée {idx}, champs manquants: {', '.join(missing)}", - file=sys.stderr, - ) - return 1 - - domain_slug = slugify(str(raw_domain)) - domain_label = str(raw_domain) - - domain_process = make_domain_process(domain_label, domain_slug, services) - processes.append(domain_process) - - root_nodes.append({ - "type": "process", - "name": domain_label.upper() - }) - - root_process = { - "name": "LIFE-NOC", - "operator": "worst", - "nodes": root_nodes - } - - bpm_document = { - "version": 1, - "processes": [root_process] + processes - } - - OUTPUT_DIR.mkdir(parents=True, exist_ok=True) - with OUTPUT_FILE.open("w", encoding="utf-8") as f: - json.dump(bpm_document, f, ensure_ascii=False, indent=2) - - print(f"BPM généré: {OUTPUT_FILE}") - print("Processus générés :") - print(" - LIFE-NOC") - for raw_domain in domains.keys(): - print(f" - {str(raw_domain).upper()}") - - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/.patch-backup/life_noc_defaults_main.yml.bak b/.patch-backup/life_noc_defaults_main.yml.bak deleted file mode 100644 index 0635185..0000000 --- a/.patch-backup/life_noc_defaults_main.yml.bak +++ /dev/null @@ -1,10 +0,0 @@ -life_noc_project_root: /opt/life-noc -life_noc_icinga_conf_root: /etc/icinga2/conf.d/life-noc -life_noc_plugin_dir: /usr/lib/nagios/plugins -life_noc_validate_icinga: true -life_noc_reload_icinga: true -life_noc_bpm_deploy_enabled: false -life_noc_bpm_destination_dir: /etc/icingaweb2/modules/businessprocess/processes -life_noc_bpm_target_file: /etc/icingaweb2/modules/businessprocess/processes/life-noc.json -life_noc_owner: root -life_noc_group: root diff --git a/.patch-backup/life_noc_tasks_main.yml.bak b/.patch-backup/life_noc_tasks_main.yml.bak deleted file mode 100644 index 08a3a71..0000000 --- a/.patch-backup/life_noc_tasks_main.yml.bak +++ /dev/null @@ -1,191 +0,0 @@ ---- -- name: install minimal dependencies - ansible.builtin.apt: - name: - - python3 - - python3-yaml - state: present - update_cache: true - -- name: remove legacy life-noc subdirectory under icinga conf.d - ansible.builtin.file: - path: /etc/icinga2/conf.d/life-noc - state: absent - notify: - - validate icinga - - reload icinga - -- name: find previously deployed flattened life-noc config files - ansible.builtin.find: - paths: /etc/icinga2/conf.d - patterns: "life-noc-*" - file_type: file - register: life_noc_flattened_files - -- name: remove previously deployed flattened life-noc config files - ansible.builtin.file: - path: "{{ item.path }}" - state: absent - loop: "{{ life_noc_flattened_files.files }}" - notify: - - validate icinga - - reload icinga - -- name: create project root - ansible.builtin.file: - path: "{{ life_noc_project_root }}" - state: directory - owner: root - group: root - mode: "0755" - -- name: copy project files - ansible.builtin.copy: - src: "{{ playbook_dir }}/../" - dest: "{{ life_noc_project_root }}/" - owner: root - group: root - mode: preserve - -- name: generate icinga services from domains - ansible.builtin.command: - cmd: python3 scripts/generate_services.py - chdir: "{{ life_noc_project_root }}" - changed_when: true - -- name: generate bpm from domains - ansible.builtin.command: - cmd: python3 scripts/generate_bpm.py - chdir: "{{ life_noc_project_root }}" - changed_when: true - -################################## - -- name: find life-noc command files on target - ansible.builtin.find: - paths: "{{ life_noc_project_root }}/icinga/commands" - patterns: "*.conf" - file_type: file - register: life_noc_command_files - -- name: deploy life-noc command files into icinga conf.d - ansible.builtin.copy: - src: "{{ item.path }}" - dest: "/etc/icinga2/conf.d/life-noc-command-{{ item.path | basename }}" - remote_src: true - owner: root - group: root - mode: "0644" - loop: "{{ life_noc_command_files.files }}" - notify: - - validate icinga - - reload icinga - -- name: find life-noc template files on target - ansible.builtin.find: - paths: "{{ life_noc_project_root }}/icinga/templates" - patterns: "*.conf" - file_type: file - register: life_noc_template_files - -- name: deploy life-noc template files into icinga conf.d - ansible.builtin.copy: - src: "{{ item.path }}" - dest: "/etc/icinga2/conf.d/life-noc-template-{{ item.path | basename }}" - remote_src: true - owner: root - group: root - mode: "0644" - loop: "{{ life_noc_template_files.files }}" - notify: - - validate icinga - - reload icinga - -- name: find life-noc host files on target - ansible.builtin.find: - paths: "{{ life_noc_project_root }}/icinga/hosts" - patterns: "*.conf" - file_type: file - register: life_noc_host_files - -- name: deploy life-noc host files into icinga conf.d - ansible.builtin.copy: - src: "{{ item.path }}" - dest: "/etc/icinga2/conf.d/life-noc-host-{{ item.path | basename }}" - remote_src: true - owner: root - group: root - mode: "0644" - loop: "{{ life_noc_host_files.files }}" - notify: - - validate icinga - - reload icinga - -- name: find life-noc service files on target - ansible.builtin.find: - paths: "{{ life_noc_project_root }}/icinga/services" - patterns: "*.conf" - file_type: file - register: life_noc_service_files - -- name: deploy life-noc service files into icinga conf.d - ansible.builtin.copy: - src: "{{ item.path }}" - dest: "/etc/icinga2/conf.d/life-noc-service-{{ item.path | basename }}" - remote_src: true - owner: root - group: root - mode: "0644" - loop: "{{ life_noc_service_files.files }}" - notify: - - validate icinga - - reload icinga - -################################## - -- name: install mock plugin - ansible.builtin.copy: - src: "{{ life_noc_project_root }}/checks/check_life_noc_mock.sh" - dest: /usr/lib/nagios/plugins/check_life_noc_mock.sh - remote_src: true - owner: root - group: root - mode: "0755" - notify: - - validate icinga - - reload icinga - -- name: install compatibility wrapper plugin - ansible.builtin.copy: - src: "{{ life_noc_project_root }}/checks/check_echeance_vie.sh" - dest: /usr/lib/nagios/plugins/check_echeance_vie.sh - remote_src: true - owner: root - group: root - mode: "0755" - notify: - - validate icinga - - reload icinga - -- name: ensure bpm destination directory exists - ansible.builtin.file: - path: "{{ life_noc_bpm_destination_dir }}" - state: directory - owner: root - group: root - mode: "0755" - when: - - life_noc_bpm_deploy_enabled | bool - - life_noc_bpm_destination_dir is defined - -- name: deploy bpm json - ansible.builtin.copy: - src: "{{ life_noc_project_root }}/bpm/life-noc.json" - dest: "{{ life_noc_bpm_destination_dir }}/life-noc.json" - remote_src: true - owner: root - group: root - mode: "0644" - when: - - life_noc_bpm_deploy_enabled | bool - - life_noc_bpm_destination_dir is defined