# netdata python.d.plugin configuration for httpcheck
#
# This file is in YaML format. Generally the format is:
#
# name: value
#
# There are 2 sections:
#  - global variables
#  - one or more JOBS
#
# JOBS allow you to collect values from multiple sources.
# Each source will have its own set of charts.
#
# JOB parameters have to be indented (using spaces only, example below).

# ----------------------------------------------------------------------
# Global Variables
# These variables set the defaults for all JOBs, however each JOB
# may define its own, overriding the defaults.

# update_every sets the default data collection frequency.
# If unset, the httpcheck default is used, which is at 3 seconds.
# update_every: 1

# priority controls the order of charts at the netdata dashboard.
# Lower numbers move the charts towards the top of the page.
# If unset, the default for python.d.plugin is used.
# priority: 60000

# chart_cleanup sets the default chart cleanup interval in iterations.
# A chart is marked as obsolete if it has not been updated
# 'chart_cleanup' iterations in a row.
# They will be hidden immediately (not offered to dashboard viewer,
# streamed upstream and archived to backends) and deleted one hour
# later (configurable from netdata.conf).
# -- For this plugin, cleanup MUST be disabled, otherwise we lose response
#    time charts
chart_cleanup: 0
redirect: no

# Autodetection and retries do not work for this plugin

# ----------------------------------------------------------------------
# JOBS (data collection sources)
#
# The default JOBS share the same *name*. JOBS with the same name
# are mutually exclusive. Only one of them will be allowed running at
# any time. This allows autodetection to try several alternatives and
# pick the one that works.
#
# Any number of jobs is supported.
#
# -------------------------------
# ATTENTION: Any valid configuration will be accepted, even if initial connection fails!
# -------------------------------
#
# There is intentionally no default config, e.g. for 'localhost'

# job_name:
#     name: myname            # [optional] the JOB's name as it will appear at the
#                             #   dashboard (by default is the job_name)
#                             #   JOBs sharing a name are mutually exclusive
#     update_every: 3         # [optional] the JOB's data collection frequency
#     priority: 60000         # [optional] the JOB's order on the dashboard
#     retries: 60             # [optional] the JOB's number of restoration attempts
#     timeout: 1              # [optional] the timeout when connecting, supports decimals (e.g. 0.5s)
#     url: http[s]://host-ip-or-dns[:port][path]
#                             # [required] the remote host url to connect to. If [:port] is missing, it defaults to 80
#                             #   for HTTP and 443 for HTTPS. [path] is optional too, defaults to /
#     redirect: yes           # [optional] If the remote host returns 3xx status codes, the redirection url will be
#                             #   followed (default).
#     status_accepted:        # [optional] By default, 200 is accepted. Anything else will result in 'bad status' in the
#                             #   status chart, however: The response time will still be > 0, since the
#                             #   host responded with something.
#                             #   If redirect is enabled, the accepted status will be checked against the redirected page.
#       - 200                 # Multiple status codes are possible. If you specify 'status_accepted', you would still
#                             #   need to add '200'. E.g. 'status_accepted: [301]' will trigger an error in 'bad status'
#                             #   if code is 200. Do specify numerical entries such as 200, not 'OK'.
#     regex: None             # [optional] If the status code is accepted, the content of the response will be searched for this
#                             #   regex (if defined). Be aware that you may need to escape the regex string. If redirect is enabled,
#                             #   the regex will be matched to the redirected page, not the initial 3xx response.

# Simple example:
#
# jira:
#   url: https://jira.localdomain/


# Complex example:
#
# cool_website:
#   url: http://cool.website:8080/home
#   status_accepted:
#     - 200
#     - 204
#   regex: <title>My cool website!<\/title>
#   timeout: 2

# This plugin is intended for simple cases. Currently, the accuracy of the response time is low and should be used as reference only.
{% for item in netdata_httpcheck|default([]) %}
{% if not item.disabled|default(false) and item.username is not defined %}

{{ item.name|to_uuid }}:
    name: {{ item.name }}
    url: {{ item.url }}
{% if item.regex is defined %}
    regex: {{ item.regex|regex_escape() }}
{% endif %}
{% if item.redirect|default(false) %}
    redirect: yes
{% endif %}
{% if item.timeout is defined %}
    timeout: {{ item.timeout }}
{% endif %}
{% if item.header is defined %}
    header: {{ item.header|to_json }}
{% endif %}
{% endif %}
{% endfor %}
{% for drupal in drupal_settings|default([]) %}
{% for site in drupal.domains|default([]) %}
{% if site.uptime is defined and not site.uptime.disabled|default(false) %}

{{ site.uptime.name|to_uuid }}:
    name: {{ site.uptime.name }}
    url: {{ site.protocol|default('https') }}://{{ site.domain }}{% if site.uptime.path is defined %}/{{ site.uptime.path }}{% endif %}

{% if site.uptime.pollerParams|default(false) and site.uptime.pollerParams.body|default(false) %}
    regex: {{ site.uptime.pollerParams.body|regex_escape() }}
{% endif %}
{% if site.uptime.timeout|default(false) %}
    timeout: {{ site.uptime.timeout }}
{% endif %}
{% if site.uptime.header is defined %}
    header: {{ site.uptime.header|to_json }}
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
{% for site in nextcloud_settings|default([]) %}
{% if site.uptime is defined and not site.uptime.disabled|default(false) %}

{{ site.uptime.name|to_uuid }}:
    name: {{ site.uptime.name }}
    url: {{ site.protocol|default('https') }}://{{ site.domain }}{% if site.uptime.path is defined %}/{{ site.uptime.path }}{% endif %}

{% if site.uptime.pollerParams|default(false) and site.uptime.pollerParams.body|default(false) %}
    regex: {{ site.uptime.pollerParams.body|regex_escape() }}
{% endif %}
{% if site.uptime.timeout|default(false) %}
    timeout: {{ site.uptime.timeout }}
{% endif %}
{% if site.uptime.header is defined %}
    header: {{ site.uptime.header|to_json }}
{% endif %}
{% endif %}
{% if site.ocs is defined %}

{{ site.domain|to_uuid }}:
    name: NextCloud OCS {{ site.id }}
    url: {{ site.protocol|default('https') }}://{{ site.domain }}/ocs/v2.php/apps/serverinfo/api/v1/info?format=json
    header:
      Authorization: Basic {{ (site.ocs.username + ':' + site.ocs.password) | b64encode }}
    regex: {{ '"status":"ok"'|regex_escape() }}
{% endif %}
{% endfor %}