{% from "nova/map.jinja" import controller, compute with context %}

{%- set is_controller = controller.get('enabled', False) %}
{%- set is_compute = compute.get('enabled', False) %}

{%- if is_controller or is_compute %}
{%- if is_compute and exporters is defined and compute.get('compute_driver', 'libvirt.LibvirtDriver') == 'libvirt.LibvirtDriver' %}
{%- set packages = exporters.get('libvirt', {}).get('packages', ('libvirt-exporter', )) %}
  {%- load_yaml as new_exporters_cfg %}
exporters:
  libvirt:
    enabled: true
{%- if packages is defined %}
    packages:
    {% for pkg in packages %}
    - {{ pkg }}
    {% endfor %}
{%- endif %}
    services:
      qemu:
        enabled: true
        bind:
          address: 0.0.0.0
          port: 9177
  {%- endload %}
{{ new_exporters_cfg|yaml(False) }}
{%- endif %}

server:
  recording:
    total:openstack_nova_instance_status:
      query: >-
        count(openstack_nova_instance_status) without (id,name)
    total:openstack_nova_instance_status:error:
      query: >-
        count(openstack_nova_instance_status == 2) without (id,name)
  alert:
{%- if is_controller %}
{% raw %}
    NovaApiOutage:
      if: >-
        max(openstack_api_check_status{name=~"nova.*|placement"}) == 0
      labels:
        severity: critical
        service: nova
      annotations:
        summary: "Nova API outage"
        description: >-
          Nova API is not accessible for all available Nova endpoints in the OpenStack service catalog.
    NovaApiDown:
      if: >-
        openstack_api_check_status{name=~"nova.*|placement"} == 0
      labels:
        severity: major
        service: nova
      annotations:
        summary: "{{ $labels.name }} endpoint is not accessible"
        description: >-
          Nova API is not accessible for the {{ $labels.name }} endpoint.
    NovaApiEndpointDown:
      if: >-
        http_response_status{name=~"nova-api"} == 0
      for: 2m
      labels:
        severity: minor
        service: nova
      annotations:
        summary: "nova-api endpoint is not accessible"
        description: >-
          The nova-api endpoint on the {{ $labels.host }} node is not accessible for 2 minutes.
    NovaApiEndpointsDownMajor:
      if: >-
        count(http_response_status{name=~"nova-api"} == 0) >= count(http_response_status{name=~"nova-api"}) * 0.6
      for: 2m
      labels:
        severity: major
        service: nova
      annotations:
        summary: "60% of nova-api endpoints are not accessible"
        description: >-
          More than 60% of nova-api endpoints are not accessible for 2 minutes.
    NovaApiEndpointsOutage:
      if: >-
        count(http_response_status{name=~"nova-api"} == 0) == count(http_response_status{name=~"nova-api"})
      for: 2m
      labels:
        severity: critical
        service: nova
      annotations:
        summary: "nova-api endpoints outage"
        description: >-
          All available nova-api endpoints are not accessible for 2 minutes.
    NovaServiceDown:
      if: >-
        openstack_nova_service_state == 0
      labels:
        severity: minor
        service: nova
      annotations:
        summary: "{{ $labels.binary }} service is down"
        description: >-
          The {{ $labels.binary }} service on the {{ $labels.hostname }} node is down.
    NovaServicesDownMinor:
      if: >-
        count(openstack_nova_service_state{binary!~"nova-compute"} == 0) by (binary) >= on (binary) count(openstack_nova_service_state{binary!~"nova-compute"}) by (binary) * 0.3
      labels:
        severity: minor
        service: nova
      annotations:
        summary: "30% of {{ $labels.binary }} services are down"
        description: >-
          More than 30% {{ $labels.binary }} services are down.
    NovaComputeServicesDownMinor:
      if: >-
        count(openstack_nova_service_state{binary="nova-compute"} == 0) >= count(openstack_nova_service_state{binary="nova-compute"}) * 0.25
      labels:
        severity: minor
        service: nova
      annotations:
        summary: "More than 25% of nova-compute services are down"
        description: >-
          More than 25% of nova-compute services are down.
    NovaServicesDownMajor:
      if: >-
        count(openstack_nova_service_state{binary!~"nova-compute"} == 0) by (binary) >= on (binary) count(openstack_nova_service_state{binary!~"nova-compute"}) by (binary) * 0.6
      labels:
        severity: major
        service: nova
      annotations:
        summary: "More than 60% of {{ $labels.binary }} services are down"
        description: >-
          More than 60% of {{ $labels.binary }} services are down.
    NovaComputeServicesDownMajor:
      if: >-
        count(openstack_nova_service_state{binary="nova-compute"} == 0) >= count(openstack_nova_service_state{binary="nova-compute"}) * 0.5
      labels:
        severity: major
        service: nova
      annotations:
        summary: "More than 50% of nova-compute services are down"
        description: >-
          More than 50% of nova-compute services are down.
    NovaServiceOutage:
      if: >-
        count(openstack_nova_service_state == 0) by (binary) == on (binary) count(openstack_nova_service_state) by (binary)
      labels:
        severity: critical
        service: nova
      annotations:
        summary: "{{ $labels.binary }} service outage"
        description: >-
          All {{ $labels.binary }} services are down.
{%- endraw %}
{%- endif %}
{%- raw %}
    NovaErrorLogsTooHigh:
      if: >-
        sum(rate(log_messages{service="nova",level=~"(?i:(error|emergency|fatal))"}[5m])) without (level) > 0.2
      labels:
        severity: warning
        service: nova
      annotations:
        summary: "High number of errors in Nova logs"
        description: "The average rate of errors in Nova logs on the {{ $labels.host }} node is more than 0.2 error messages per second (as measured over the last 5 minutes)."
{%- endraw %}
{%- if is_compute and exporters is defined and compute.get('compute_driver', 'libvirt.LibvirtDriver') == 'libvirt.LibvirtDriver'%}
{%- raw %}
    LibvirtDown:
      if: >-
        libvirt_up == 0
      for: 2m
      labels:
        severity: critical
        service: libvirt
      annotations:
        summary: "Failure to gather Libvirt metrics"
        description: "The Libvirt metric exporter fails to gather metrics on the {{ $labels.host }} node for 2 minutes."
{%- endraw %}
{%- include "prometheus/_exporters_config.sls" %}
{%- endif %}
{%- endif %}
