{ config, pkgs, nodes, hostFQDN, emailCheck, lib, ... }: let to_resource = func: cfg: lib.flatten (lib.optionals cfg.enable (lib.mapAttrsToList func cfg.profiles)); to_backup_age_dependency = name: profile: map (remote: { dependent_host_name = "eldiron.immae.eu"; host_name = "eldiron.immae.eu"; dependent_service_description = "${remote} backup for ${name} is not too old"; service_description = "${remote} backup is up and not full"; execution_failure_criteria = "u"; notification_failure_criteria = "u"; }) profile.remotes; to_backup_age = name: profile: map (remote: { service_description = "${remote} backup for ${name} is not too old"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = ["check_backup_${remote}_age" name]; check_interval = "120"; notification_interval = "1440"; }) profile.remotes; in { host = { # Dummy host for testing # "dummy-host" = { # alias = "dummy.host"; # address = "dummy.host"; # use = "linux-server"; # check_command = "check_ok"; # }; }; service = [ # Dummy service for testing # { # service_description = "Dummy failing test"; # host_name = "dummy-host"; # use = "local-service"; # check_interval = "0.3"; # max_check_attempts = "1"; # flap_detection_enabled = "0"; # notification_interval = "0.1"; # check_command = "check_critical"; # } (emailCheck "monitoring-1" hostFQDN) { service_description = "ftp has access to database for authentication"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = "check_ftp_database"; servicegroups = "webstatus-remote-services"; _webstatus_name = "FTP"; _webstatus_url = "ftp.immae.eu"; } { service_description = "gitolite is working"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = "check_git"; servicegroups = "webstatus-remote-services"; _webstatus_name = "Git"; _webstatus_url = "git.immae.eu"; } { service_description = "postfix SSL is up to date"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = "check_smtp"; servicegroups = "webstatus-ssl"; _webstatus_name = "SMTP"; _webstatus_url = "smtp.immae.eu"; } { service_description = "imap SSL is up to date"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = ["check_tcp_ssl" "993"]; servicegroups = "webstatus-ssl"; _webstatus_name = "IMAP"; _webstatus_url = "imap.immae.eu"; } { service_description = "imap connection works"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = "check_imap_connection"; servicegroups = "webstatus-remote-services,webstatus-email"; _webstatus_name = "IMAP"; _webstatus_url = "imap.immae.eu"; } # Third party services { service_description = "OVH account has enough sms"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = "check_ovh_sms"; check_interval = "120"; notification_interval = "1440"; } # Backup services { service_description = "eriomem backup is up and not full"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = "check_backup_eriomem"; check_interval = "120"; notification_interval = "1440"; servicegroups = "webstatus-backup"; } { service_description = "ovh backup is up and not full"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = "check_ok"; check_interval = "120"; notification_interval = "1440"; servicegroups = "webstatus-backup"; } # DNS services { service_description = "eldiron dns is active and authoritative for aten.pro"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "aten.pro" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "aten.pro"; } { service_description = "eldiron dns is active and authoritative for bouya.org"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "bouya.org" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "bouya.org"; } { service_description = "eldiron dns is active and authoritative for filedesreves.fr"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "filedesreves.fr" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "filedesreves.fr"; } { service_description = "eldiron dns is active and authoritative for ludivinecassal.com"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "ludivinecassal.com" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "ludivinecassal.com"; } { service_description = "eldiron dns is active and authoritative for icommandeur.org"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "icommandeur.org" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "icommandeur.org"; } { service_description = "eldiron dns is active and authoritative for immae.eu"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "immae.eu" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "immae.eu"; } { service_description = "eldiron dns is active and authoritative for immae.fr"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "immae.fr" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "immae.fr"; } { service_description = "eldiron dns is active and authoritative for piedsjaloux.fr"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "piedsjaloux.fr" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "piedsjaloux.fr"; } { service_description = "eldiron dns is active and authoritative for saison-photo.org"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "saison-photo.org" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "saison-photo.org"; } { service_description = "eldiron dns is active and authoritative for tellesflorian.com"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "tellesflorian.com" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "tellesflorian.com"; } { service_description = "eldiron dns is active and authoritative for capitaines.fr"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_dns" "capitaines.fr" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "capitaines.fr"; } { service_description = "cloudns dns is active and authoritative for aten.pro"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "aten.pro" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "aten.pro (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for bouya.org"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "bouya.org" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "bouya.org (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for filedesreves.fr"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "filedesreves.fr" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "filedesreves.fr (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for ludivinecassal.com"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "ludivinecassal.com" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "ludivinecassal.com (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for icommandeur.org"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "icommandeur.org" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "icommandeur.org (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for immae.eu"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "immae.eu" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "immae.eu (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for immae.fr"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "immae.fr" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "immae.fr (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for piedsjaloux.fr"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "piedsjaloux.fr" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "piedsjaloux.fr (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for tellesflorian.com"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "tellesflorian.com" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "tellesflorian.com (Secondary DNS ClouDNS)"; } { service_description = "cloudns dns is active and authoritative for saison-photo.org"; host_name = "eldiron.immae.eu"; use = "dns-service"; check_command = ["check_external_dns" "pns1.cloudns.net" "saison-photo.org" "-A"]; servicegroups = "webstatus-dns"; _webstatus_name = "saison-photo.org (Secondary DNS ClouDNS)"; } #### Web scenarios { service_description = "blog website is running on immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "www.immae.eu" "/blog/" "egrep -ri TODO /etc"]; servicegroups = "webstatus-websites"; _webstatus_name = "Immae’s Blog"; _webstatus_url = "https://www.immae.eu/blog"; } { service_description = "owncloud website is running on cloud.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "cloud.immae.eu" "/" "a safe home for all your data"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Nextcloud"; _webstatus_url = "https://cloud.immae.eu"; } { service_description = "davical website is running on dav.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "dav.immae.eu" "/davical/" "Log On Please"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Davical"; _webstatus_url = "https://dav.immae.eu/davical"; } { service_description = "adminer website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https_auth" "tools.immae.eu" "/adminer/" "www.adminer.org"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Adminer"; _webstatus_url = "https://tools.immae.eu/adminer/"; } { service_description = "ttrss website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "tools.immae.eu" "/ttrss/" "Tiny Tiny RSS"]; servicegroups = "webstatus-webapps"; _webstatus_name = "TT-RSS"; _webstatus_url = "https://tools.immae.eu/ttrss/"; } { service_description = "mpd website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https_auth" "tools.immae.eu" "/mpd/" "<title>ympd"]; servicegroups = "webstatus-webapps"; _webstatus_name = "MPD (YMPD)"; _webstatus_url = "https://tools.immae.eu/mpd/"; } { service_description = "rompr mpd website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https_auth" "tools.immae.eu" "/rompr/" "<title>RompЯ"]; servicegroups = "webstatus-webapps"; _webstatus_name = "MPD (ROMPR)"; _webstatus_url = "https://tools.immae.eu/rompr/"; } { service_description = "wallabag website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "tools.immae.eu" "/wallabag/" "<title>Bienvenue sur wallabag"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Wallabag"; _webstatus_url = "https://tools.immae.eu/wallabag/"; } { service_description = "yourl website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "tools.immae.eu" "/url/admin/" "<title>YOURLS"]; servicegroups = "webstatus-webapps"; _webstatus_name = "YOURLS"; _webstatus_url = "https://tools.immae.eu/url/admin/"; } { service_description = "roundcube website is running on mail.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "mail.immae.eu" "/roundcube/" "<title>Roundcube"]; servicegroups = "webstatus-webapps,webstatus-email"; _webstatus_name = "Roundcube"; _webstatus_url = "https://mail.immae.eu/roundcube/"; } { service_description = "dokuwiki website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "tools.immae.eu" "/dokuwiki/" "<title>start"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Dokuwiki"; _webstatus_url = "https://tools.immae.eu/dokuwiki/"; } { service_description = "shaarli website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "tools.immae.eu" "/Shaarli/immae" "<title>Immae"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Shaarli"; _webstatus_url = "https://tools.immae.eu/Shaarli/"; } { service_description = "ldap website is running on tools.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "tools.immae.eu" "/ldap/" "<title>phpLDAPadmin"]; servicegroups = "webstatus-webapps"; _webstatus_name = "LDAP"; _webstatus_url = "https://tools.immae.eu/ldap/"; } { service_description = "gitweb website is running on git.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "git.immae.eu" "/" "git web interface"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Git"; _webstatus_url = "https://git.immae.eu/"; } { service_description = "mantisbt website is running on git.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "git.immae.eu" "/mantisbt/" "<title>My View - MantisBT"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Mantisbt"; _webstatus_url = "https://git.immae.eu/mantisbt"; } { service_description = "diaspora website is running on diaspora.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "diaspora.immae.eu" "/" "is the online social world where you are in control"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Diaspora"; _webstatus_url = "https://diaspora.immae.eu/"; } { service_description = "peertube website is running on peertube.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "peertube.immae.eu" "/" "<title>Immae’s PeerTube"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Peertube"; _webstatus_url = "https://peertube.immae.eu/"; } { service_description = "etherpad website is running on ether.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "ether.immae.eu" "/" "<title>Etherpad"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Etherpad"; _webstatus_url = "https://ether.immae.eu/"; } { service_description = "mediagoblin website is running on mgoblin.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "mgoblin.immae.eu" "/" "<title>GNU MediaGoblin"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Mediagoblin"; _webstatus_url = "https://mgoblin.immae.eu/"; } { service_description = "mastodon website is running on mastodon.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "mastodon.immae.eu" "/" "Mastodon"]; servicegroups = "webstatus-webapps"; _webstatus_name = "Mastodon"; _webstatus_url = "https://mastodon.immae.eu/"; } # Other web pages { service_description = "Jerome website is running on naturaloutil.immae.eu"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "naturaloutil.immae.eu" "/ping.php" "YES"]; servicegroups = "webstatus-websites"; _webstatus_name = "naturaloutil.immae.eu"; _webstatus_url = "https://naturaloutil.immae.eu/"; } { service_description = "Telio website is running on realistesmedia.fr"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "realistesmedia.fr" "/" "doctype html"]; contact_groups = "telio-tortay"; } { service_description = "Chloe website site is running on osteopathe-cc.fr"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "www.osteopathe-cc.fr" "/" "Chloé Condamin ostéopathe D.O."]; servicegroups = "webstatus-websites"; _webstatus_name = "osteopathe-cc.fr"; _webstatus_url = "https://www.osteopathe-cc.fr/"; } { service_description = "Richie website is running on europe-richie.org"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "www.europe-richie.org" "/" "<title>.Europe Richie]"]; servicegroups = "webstatus-websites"; _webstatus_name = "europe-richie.org"; _webstatus_url = "https://www.europe-richie.org/"; } { service_description = "Ludivine website site is running on ludivinecassal.com"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "www.ludivinecassal.com" "/" "<title>Ludivine Cassal"]; servicegroups = "webstatus-websites"; _webstatus_name = "ludivinecassal.com"; _webstatus_url = "https://www.ludivinecassal.com/"; } { service_description = "Aten website site is running on aten.pro"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "aten.pro" "/" "<title>ATEN"]; servicegroups = "webstatus-websites"; _webstatus_name = "aten.pro"; _webstatus_url = "https://aten.pro/"; } { service_description = "PiedsJaloux website site is running on piedsjaloux.fr"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "www.piedsjaloux.fr" "/" "<title>Les Pieds Jaloux"]; servicegroups = "webstatus-websites"; _webstatus_name = "piedsjaloux.fr"; _webstatus_url = "https://www.piedsjaloux.fr/"; } { service_description = "Denise and Jerome website site is running on denisejerome.piedsjaloux.fr"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "denisejerome.piedsjaloux.fr" "/" "<title>Accueil - Mariage"]; servicegroups = "webstatus-websites"; _webstatus_name = "denisejerome.piedsjaloux.fr"; _webstatus_url = "https://denisejerome.piedsjaloux.fr/"; } { service_description = "Connexionswing website site is running on connexionswing.com"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "www.connexionswing.com" "/" "<title>Cours, stages"]; servicegroups = "webstatus-websites"; _webstatus_name = "connexionswing.com"; _webstatus_url = "https://www.connexionswing.com/"; } { service_description = "Sandetludo website site is running on sandetludo.com"; host_name = "eldiron.immae.eu"; use = "external-web-service"; check_command = ["check_https" "www.sandetludo.com" "/" "<title>Cours de West Coast"]; servicegroups = "webstatus-websites"; _webstatus_name = "sandetludo.com"; _webstatus_url = "https://www.sandetludo.com/"; } # SSL { service_description = "ldap SSL is up to date"; host_name = "eldiron.immae.eu"; use = "external-service"; check_command = ["check_tcp_ssl" "636"]; servicegroups = "webstatus-ssl"; _webstatus_name = "LDAP"; _webstatus_url = "ldap.immae.eu"; } # Tiboqorl { service_description = "Cyllene support page is running"; host_name = "tiboqorl.fr"; use = "external-web-service"; contact_groups = "tiboqorl"; check_command = [ "check_https" "sc.groupe-cyllene.com" "/" "<title>Support Client Cyllene" ]; } ] ++ to_resource to_backup_age nodes.eldiron.config.services.duplyBackup; contact = { telio-tortay = config.myEnv.monitoring.contacts.telio-tortay // { use = "generic-contact"; contactgroups = "telio-tortay"; }; thibault = config.myEnv.monitoring.contacts.thibault // { use = "generic-contact"; contactgroups = "tiboqorl"; }; }; contactgroup = { telio-tortay = { alias = "Telio Tortay"; members = "immae"; }; tiboqorl = { alias = "Tiboqorl"; members = "immae"; }; }; servicedependency = to_resource to_backup_age_dependency nodes.eldiron.config.services.duplyBackup; }