// Copyright 2021 The Swarm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package pullstorage

import (
	m "github.com/ethersphere/bee/pkg/metrics"
	"github.com/prometheus/client_golang/prometheus"
)

type metrics struct {
	TotalSubscribePullRequests         prometheus.Counter
	TotalSubscribePullRequestsComplete prometheus.Counter
	SubscribePullsStarted              prometheus.Counter
	SubscribePullsComplete             prometheus.Counter
	SubscribePullsFailures             prometheus.Counter
}

func newMetrics() metrics {
	subsystem := "pullstorage"

	return metrics{
		TotalSubscribePullRequests: prometheus.NewCounter(prometheus.CounterOpts{
			Namespace: m.Namespace,
			Subsystem: subsystem,
			Name:      "subscribe_pull_requests",
			Help:      "Total subscribe pull requests.",
		}),
		TotalSubscribePullRequestsComplete: prometheus.NewCounter(prometheus.CounterOpts{
			Namespace: m.Namespace,
			Subsystem: subsystem,
			Name:      "subscribe_pull_requests_complete",
			Help:      "Total subscribe pull requests completed.",
		}),
		SubscribePullsStarted: prometheus.NewCounter(prometheus.CounterOpts{
			Namespace: m.Namespace,
			Subsystem: subsystem,
			Name:      "subscribe_pulls_started",
			Help:      "Total subscribe pulls started.",
		}),
		SubscribePullsComplete: prometheus.NewCounter(prometheus.CounterOpts{
			Namespace: m.Namespace,
			Subsystem: subsystem,
			Name:      "subscribe_pulls_complete",
			Help:      "Total subscribe pulls completed.",
		}),
		SubscribePullsFailures: prometheus.NewCounter(prometheus.CounterOpts{
			Namespace: m.Namespace,
			Subsystem: subsystem,
			Name:      "subscribe_pulls_failures",
			Help:      "Total subscribe pulls failures.",
		})}
}

func (s *PullStorer) Metrics() []prometheus.Collector {
	return m.PrometheusCollectorsFromFields(s.metrics)
}