package pkg

import (
	"github.com/prometheus/client_golang/prometheus"
)

const (
	DataSource = "data_source"
	Version    = "version"
)

var (
	AgentFailedToScrapeDataMetric = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "agent_failed_to_scrape_data_metric",
		}, []string{DataSource, Version})

	AgentFailedToUploadDataMetric = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "agent_failed_to_upload_data_metric",
		}, []string{DataSource, Version})

	AgentTaskSuccess = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "agent_task_success",
		}, []string{DataSource, Version})

	ProcessorFailedToCleanDataMetric = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "processor_failed_to_clean_data_metric",
		}, []string{DataSource, Version})

	ProcessorFailedToProcessDataMetric = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "processor_failed_to_process_data_metric",
		}, []string{DataSource, Version})

	ProcessorFailedToUploadDataMetric = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "processor_failed_to_download_data_metric",
		}, []string{DataSource, Version})

	ProcessorSucceedToCleanDataMetric = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "processor_succeed_to_clean_data_metric",
		}, []string{DataSource, Version})

	ProcessorSucceedToProcessDataMetric = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "processor_succeed_to_process_data_metric",
		}, []string{DataSource, Version})

	ProcessorSucceedToUploadDataMetric = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: "data_collector",
			Name:      "processor_succeed_to_upload_data_metric",
		}, []string{DataSource, Version})

	ProcessorIsDownForTooLong = prometheus.NewHistogramVec(
		prometheus.HistogramOpts{
			Namespace: "data_collector",
			Name:      "processor_is_down_for_too_long",
		}, []string{DataSource, Version})
)

func RegisterMetric() {
	prometheus.MustRegister(AgentFailedToScrapeDataMetric)
	prometheus.MustRegister(AgentFailedToUploadDataMetric)
	prometheus.MustRegister(AgentTaskSuccess)
	prometheus.MustRegister(ProcessorFailedToCleanDataMetric)
	prometheus.MustRegister(ProcessorFailedToProcessDataMetric)
	prometheus.MustRegister(ProcessorFailedToUploadDataMetric)
	prometheus.MustRegister(ProcessorIsDownForTooLong)
	prometheus.MustRegister(ProcessorSucceedToCleanDataMetric)
	prometheus.MustRegister(ProcessorSucceedToProcessDataMetric)
	prometheus.MustRegister(ProcessorSucceedToUploadDataMetric)
}
