github.com/spotahome/redis-operator@v1.2.4/service/k8s/redisfailover.go (about)

     1  package k8s
     2  
     3  import (
     4  	"context"
     5  
     6  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     7  	"k8s.io/apimachinery/pkg/watch"
     8  
     9  	redisfailoverv1 "github.com/spotahome/redis-operator/api/redisfailover/v1"
    10  	redisfailoverclientset "github.com/spotahome/redis-operator/client/k8s/clientset/versioned"
    11  	"github.com/spotahome/redis-operator/log"
    12  	"github.com/spotahome/redis-operator/metrics"
    13  )
    14  
    15  // RedisFailover the RF service that knows how to interact with k8s to get them
    16  type RedisFailover interface {
    17  	// ListRedisFailovers lists the redisfailovers on a cluster.
    18  	ListRedisFailovers(ctx context.Context, namespace string, opts metav1.ListOptions) (*redisfailoverv1.RedisFailoverList, error)
    19  	// WatchRedisFailovers watches the redisfailovers on a cluster.
    20  	WatchRedisFailovers(ctx context.Context, namespace string, opts metav1.ListOptions) (watch.Interface, error)
    21  }
    22  
    23  // RedisFailoverService is the RedisFailover service implementation using API calls to kubernetes.
    24  type RedisFailoverService struct {
    25  	k8sCli          redisfailoverclientset.Interface
    26  	logger          log.Logger
    27  	metricsRecorder metrics.Recorder
    28  }
    29  
    30  // NewRedisFailoverService returns a new Workspace KubeService.
    31  func NewRedisFailoverService(k8scli redisfailoverclientset.Interface, logger log.Logger, metricsRecorder metrics.Recorder) *RedisFailoverService {
    32  	logger = logger.With("service", "k8s.redisfailover")
    33  	return &RedisFailoverService{
    34  		k8sCli:          k8scli,
    35  		logger:          logger,
    36  		metricsRecorder: metricsRecorder,
    37  	}
    38  }
    39  
    40  // ListRedisFailovers satisfies redisfailover.Service interface.
    41  func (r *RedisFailoverService) ListRedisFailovers(ctx context.Context, namespace string, opts metav1.ListOptions) (*redisfailoverv1.RedisFailoverList, error) {
    42  	redisFailoverList, err := r.k8sCli.DatabasesV1().RedisFailovers(namespace).List(ctx, opts)
    43  	recordMetrics(namespace, "RedisFailover", metrics.NOT_APPLICABLE, "LIST", err, r.metricsRecorder)
    44  	return redisFailoverList, err
    45  }
    46  
    47  // WatchRedisFailovers satisfies redisfailover.Service interface.
    48  func (r *RedisFailoverService) WatchRedisFailovers(ctx context.Context, namespace string, opts metav1.ListOptions) (watch.Interface, error) {
    49  	watcher, err := r.k8sCli.DatabasesV1().RedisFailovers(namespace).Watch(ctx, opts)
    50  	recordMetrics(namespace, "RedisFailover", metrics.NOT_APPLICABLE, "WATCH", err, r.metricsRecorder)
    51  	return watcher, err
    52  }