{%- from "telegraf/map.jinja" import agent with context -%}
{%- if agent.output is defined %}
  {%- if agent.output.prometheus_client is defined %}
    {%- if agent.output.prometheus_client.bind.address == '0.0.0.0' %}
      {%- set fqdn_ip4_addresses = [] %}
      {%- for addr in grains['fqdn_ip4'] %}
        {%- if not addr.startswith('127.') %}
          {%- do fqdn_ip4_addresses.append(addr) %}
        {%- endif %}
      {%- endfor %}
      {%- set address = fqdn_ip4_addresses[0] %}
    {%- else %}
      {%- set address = agent.output.prometheus_client.bind.address %}
    {%- endif %}
  {%- endif %}
{%- endif %}
server:
  alert:
    NodeDown:
      if: >-
        sum by (host, url) (label_replace((up{job=~"telegraf|fluentd"}), "url", "$1", "instance", "(.*):.*")) + on (url) group_left abs(clamp_max(ping_result_code, 1) - 1) == 0
      labels:
        severity: critical
        service: system
      annotations:
{%- raw %}
        summary: "The {{ $labels.host }} node is down"
        description: "The {{ $labels.host }} node is unreachable at {{ $labels.url }}, the Telegraf and Fluentd targets on the {{ $labels.host }} node are down."
{%- endraw %}
{%- if address is defined %}
  target:
    static:
      telegraf:
  {%- if agent.output.prometheus_client.scheme is defined %}
        scheme: {{ agent.output.prometheus_client.scheme }}
  {%- endif %}
  {%- if agent.output.prometheus_client.tls_config is defined %}
        tls_config:
    {%- if agent.output.prometheus_client.tls_config.skip_verify is defined %}
          skip_verify: {{ agent.output.prometheus_client.tls_config.skip_verify }}
    {%- endif %}
    {%- if agent.output.prometheus_client.tls_config.ca_file is defined %}
          ca_file: {{ agent.output.prometheus_client.tls_config.ca_file }}
    {%- endif %}
    {%- if agent.output.prometheus_client.tls_config.cert_name is defined %}
          cert_name: {{ agent.output.prometheus_client.tls_config.cert_name }}
    {%- endif %}
    {%- if agent.output.prometheus_client.tls_config.key_name is defined %}
          key_name: {{ agent.output.prometheus_client.tls_config.key_name }}
    {%- endif %}
  {%- endif %}
        endpoint:
          - address: {{ address }}
            port: {{ agent.output.prometheus_client.bind.port }}
        relabel_configs:
          - regex: {{ address }}:{{ agent.output.prometheus_client.bind.port }}
            replacement: {{ grains['host'] }}
            source_labels: "__address__"
            target_label: "host"
        honor_labels: true
{%- endif %}
