apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: rms-metric.rules
  namespace: monitoring
  labels:
    app: kube-prometheus-stack
    release: kps
spec:
  groups:
    - name: rms-metric.rules
      rules:
        - expr: kube_node_labels{label_naglfar_exclusive=""} unless on (node) kube_node_spec_taint{key!="dedicated"}
          record: available_node
          labels: { ti: rms }
        - expr: kube_node_status_allocatable{resource="cpu"} and on (node) available_node
          record: node_cpu_allocatable
          labels: { ti: rms }
        - expr: kube_node_status_allocatable{resource="memory"} and on (node) available_node
          record: node_mem_allocatable
          labels: { ti: rms }
        - expr: sum(kube_pod_container_resource_requests{resource="cpu"}) by (node) and on (node) available_node
          record: node_cpu_request
          labels: { ti: rms }
        - expr: sum(kube_pod_container_resource_requests{resource="memory"}) by (node) and on (node) available_node
          record: node_mem_request
          labels: { ti: rms }
        - expr: label_join(sum(kube_pod_container_resource_requests{resource="cpu"}) by (namespace), "testbed", ",", "namespace") and on (testbed, namespace) living_testbed
          record: testbed_cpu_request
          labels: { ti: rms }
        - expr: label_join(sum(kube_pod_container_resource_requests{resource="memory"}) by (namespace), "testbed", ",", "namespace") and on (testbed, namespace) living_testbed
          record: testbed_mem_request
          labels: { ti: rms }
        - expr: sum(testbed_cpu_request) or vector(0)
          record: testbeds_cpu_request
          labels: { ti: rms }
        - expr: sum(testbed_mem_request) or vector(0)
          record: testbeds_mem_request
          labels: { ti: rms }
        - expr: node_cpu_allocatable - on (node) node_cpu_request
          record: node_cpu_free
          labels: { ti: rms }
        - expr: node_mem_allocatable - on (node) node_mem_request
          record: node_mem_free
          labels: { ti: rms }
        - record: cluster_resource_occupied_by_non_testinfra
          expr: sum by (resource) (kube_pod_container_resource_requests{} and on (node) available_node unless on (namespace) living_testbed)
          labels: { ti: rms }
        - record: cluster_resource_free
          expr: sum(node_cpu_allocatable) - on () testbeds_cpu_request - on () cluster_resource_occupied_by_non_testinfra{resource="cpu"}
          labels:
            ti: rms
            resource: "cpu"
        - record: cluster_resource_free
          expr: sum(node_mem_allocatable) - on () testbeds_mem_request - on () cluster_resource_occupied_by_non_testinfra{resource="memory"}
          labels:
            ti: rms
            resource: "mem"
        - record: cluster_resource
          expr: cluster_resource_free{resource="cpu"} - on () 0.2 * sum(node_cpu_allocatable)
          labels:
            ti: rms
            resource: "cpu"
        - record: cluster_resource
          expr: cluster_resource_free{resource="mem"} - on () 0.2 * sum(node_mem_allocatable)
          labels:
            ti: rms
            resource: "mem"
