func ingressMetricFamilies()

in internal/store/ingress.go [42:179]


func ingressMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generator.FamilyGenerator {
	return []generator.FamilyGenerator{
		*generator.NewFamilyGenerator(
			"kube_ingress_info",
			"Information about ingress.",
			metric.Gauge,
			"",
			wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
				ingressClassName := "_default"
				if i.Spec.IngressClassName != nil {
					ingressClassName = *i.Spec.IngressClassName
				}
				if className, ok := i.Annotations["kubernetes.io/ingress.class"]; ok {
					ingressClassName = className
				}

				return &metric.Family{
					Metrics: []*metric.Metric{
						{
							LabelKeys:   []string{"ingressclass"},
							LabelValues: []string{ingressClassName},
							Value:       1,
						},
					}}
			}),
		),
		*generator.NewFamilyGenerator(
			descIngressAnnotationsName,
			descIngressAnnotationsHelp,
			metric.Gauge,
			"",
			wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
				annotationKeys, annotationValues := createPrometheusLabelKeysValues("annotation", i.Annotations, allowAnnotationsList)
				return &metric.Family{
					Metrics: []*metric.Metric{
						{
							LabelKeys:   annotationKeys,
							LabelValues: annotationValues,
							Value:       1,
						},
					}}

			}),
		),
		*generator.NewFamilyGenerator(
			descIngressLabelsName,
			descIngressLabelsHelp,
			metric.Gauge,
			"",
			wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
				labelKeys, labelValues := createPrometheusLabelKeysValues("label", i.Labels, allowLabelsList)
				return &metric.Family{
					Metrics: []*metric.Metric{
						{
							LabelKeys:   labelKeys,
							LabelValues: labelValues,
							Value:       1,
						},
					}}

			}),
		),
		*generator.NewFamilyGenerator(
			"kube_ingress_created",
			"Unix creation timestamp",
			metric.Gauge,
			"",
			wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
				ms := []*metric.Metric{}

				if !i.CreationTimestamp.IsZero() {
					ms = append(ms, &metric.Metric{
						Value: float64(i.CreationTimestamp.Unix()),
					})
				}

				return &metric.Family{
					Metrics: ms,
				}
			}),
		),
		*generator.NewFamilyGenerator(
			"kube_ingress_metadata_resource_version",
			"Resource version representing a specific version of ingress.",
			metric.Gauge,
			"",
			wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
				return &metric.Family{
					Metrics: resourceVersionMetric(i.ObjectMeta.ResourceVersion),
				}
			}),
		),
		*generator.NewFamilyGenerator(
			"kube_ingress_path",
			"Ingress host, paths and backend service information.",
			metric.Gauge,
			"",
			wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
				ms := []*metric.Metric{}
				for _, rule := range i.Spec.Rules {
					if rule.HTTP != nil {
						for _, path := range rule.HTTP.Paths {
							ms = append(ms, &metric.Metric{
								LabelKeys:   []string{"host", "path", "service_name", "service_port"},
								LabelValues: []string{rule.Host, path.Path, path.Backend.Service.Name, strconv.Itoa(int(path.Backend.Service.Port.Number))},
								Value:       1,
							})
						}
					}
				}
				return &metric.Family{
					Metrics: ms,
				}
			}),
		),
		*generator.NewFamilyGenerator(
			"kube_ingress_tls",
			"Ingress TLS host and secret information.",
			metric.Gauge,
			"",
			wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
				ms := []*metric.Metric{}
				for _, tls := range i.Spec.TLS {
					for _, host := range tls.Hosts {
						ms = append(ms, &metric.Metric{
							LabelKeys:   []string{"tls_host", "secret"},
							LabelValues: []string{host, tls.SecretName},
							Value:       1,
						})
					}
				}
				return &metric.Family{
					Metrics: ms,
				}
			}),
		),
	}
}