metrics: true ui: title: "liz.coffee health dashboard." header: "liz.coffee" description: "⋆⭒˚.⋆ 🐧 <3 ⋆⭒˚.⋆" logo: "https://src.liz.coffee/cgit.png" default-sort-by: "group" alerting: ntfy: topic: "{{ ntfy_topic }}" priority: 3 endpoints: - name: "HealthCheck" url: "{{ healthchecks_io_ping }}" interval: 60s conditions: - "[STATUS] == 200" - "[BODY] == pat(*OK*)" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "GlobalHealthCheck" - name: "LDAPS" url: "tls://{{ idm_domain }}:3636" interval: 2m client: timeout: 5s conditions: - "[CONNECTED] == true" - "[CERTIFICATE_EXPIRATION] > 48h" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "LDAPS" - name: "ssh for git" url: "tls://src.{{ domain }}:2222" interval: 2m client: timeout: 5s conditions: - "[CONNECTED] == true" - "[CERTIFICATE_EXPIRATION] > 48h" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "ssh for git" {% for test in email_tests %} {% set from_account = (email_accounts | selectattr("email", "equalto", test.from) | list).0 %} {% set to_account = (email_accounts | selectattr("email", "equalto", test.to) | list).0 %} - name: "{{ test.name }}" url: "http://uptime:9000/email" method: "POST" interval: 15m client: timeout: 120s group: "mail" body: | { "from": { "email": "{{ from_account.email }}", "username": "{{ from_account.username }}", "password": "{{ from_account.password }}", "send_host": "{{ from_account.host }}", "send_port": 465 }, "to": { "email": "{{ to_account.email }}", "username": "{{ to_account.username }}", "password": "{{ to_account.password }}", "read_host": "{{ to_account.host }}", "read_port": 993 }, "readRetry": { "interval": 5, "attempts": 24 } } conditions: - "[STATUS] == 200" - "[BODY] == pat(*ok*)" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "mail {{ test.name }}" {% endfor %} {% for port in [465,993] %} - name: "mail on port {{ port }}" group: "mail" url: "tls://{{ mail_domain }}:{{ port }}" interval: 2m client: timeout: 5s conditions: - "[CONNECTED] == true" - "[CERTIFICATE_EXPIRATION] > 48h" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "mail on port {{ port }}" {% endfor %} {% for user, m in mesh.items() %} {% for healthcheck in m.public_healthchecks %} - name: "healthcheck {{ user }} pub {{ healthcheck }} 200" group: "{{ user }}_pub" url: "{{ healthcheck }}" interval: 2m conditions: - "[STATUS] == 200" - "[CERTIFICATE_EXPIRATION] > 240h" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "healthcheck {{ user }} pub {{ healthcheck }} 200" {% endfor %} {% for healthcheck in m.private_healthchecks %} - name: "{{ healthcheck }} priv healthcheck {{ user }}" url: "{{ healthcheck }}" client: dns-resolver: "tcp://{{ m.gateway }}:53" group: "{{ user }}_priv" interval: 2m conditions: - "[STATUS] == 200" - "[CERTIFICATE_EXPIRATION] > 240h" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "{{ healthcheck }} priv healthcheck {{ user }}" - name: "{{ healthcheck }} pub healthcheck {{ user }} 403" group: "{{ user }}_priv" url: "{{ healthcheck }}" client: dns-resolver: "tcp://{{ public_resolver }}:53" interval: 2m conditions: - "[STATUS] == 403" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "{{ healthcheck }} pub healthcheck {{ user }} 403" {% endfor %} {% for record in m.private_records %} - name: "DNS Check [{{ record.name }}_{{ record.type }}]" group: "{{ user }}_dns_private" url: "{{ m.gateway }}" interval: 2m dns: query-name: "{{ record.name }}" query-type: "{{ record.type }}" conditions: - "[BODY] == {{ record.ip }}" - "[DNS_RCODE] == NOERROR" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "DNS {{ record.name }}_{{ record.type }}" - name: "PING {{ record.name }}_{{ record.type }}" group: "{{ user }}_dns_private" url: "icmp://{{ record.name }}" interval: 2m conditions: - "[CONNECTED] == true" alerts: - type: ntfy failure-threshold: 3 send-on-resolved: true description: "PING {{ record.name }}" {% endfor %} {% endfor %}