local addMixin = (import 'kube-prometheus/lib/mixin.libsonnet');

local etcdMixin = addMixin({
  name: 'etcd',
  mixin: (import 'github.com/etcd-io/etcd/contrib/mixin/mixin.libsonnet') +
    {
			_config+: {
				etcd_instance_labels: 'instance, pod',
      }
		} +
		// Remove both etcdHighNumberOfFailedGRPCRequests from etcd-mixin for now
		{ 
			prometheusAlerts+: {
				groups: std.map(
					function(group)
						if group.name == 'etcd' then
							group {
								rules: std.filter(
									function(rule)
										rule.alert != 'etcdHighNumberOfFailedGRPCRequests',
									group.rules
								),
							}
						else
							group,
					super.groups
				),
			},
		},
  });

local kp = (import 'kube-prometheus/main.libsonnet') +
  {
    values+:: {
      common+: {
        namespace: 'monitoring',
      },
    } 
  };

// We just want the Prometheus Rules
{ 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } +
{ 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } +
{ 'alertmanager-prometheusRule': kp.alertmanager.prometheusRule } +
{ 'kube-state-metrics-prometheusRule': kp.kubeStateMetrics.prometheusRule } +
{ 'kubernetes-prometheusRule': kp.kubernetesControlPlane.prometheusRule } +
{ 'node-exporter-prometheusRule': kp.nodeExporter.prometheusRule } +
{ 'prometheus-prometheusRule': kp.prometheus.prometheusRule } +
{ 'etcd-mixin-prometheusRule': etcdMixin.prometheusRules }