package grafanabackuper import ( "context" "git.ar21.de/yolokube/grafana-backuper/internal/config" "git.ar21.de/yolokube/grafana-backuper/pkg/git" "git.ar21.de/yolokube/grafana-backuper/pkg/grafana" "github.com/rs/zerolog" ) type ClientOption func(*Client) func WithZerologLogger(logger zerolog.Logger) ClientOption { return func(c *Client) { c.logger = logger } } type Client struct { git *git.Project grafana *grafana.Client logger zerolog.Logger signer *git.SignKey Backup BackupClient Restore RestoreClient } func NewClient(options ...ClientOption) *Client { client := &Client{} for _, option := range options { option(client) } client.Backup = BackupClient{client: client} client.Restore = RestoreClient{client: client} return client } func (c *Client) Prepare(ctx context.Context, cfg *config.Config) error { c.logger.Debug().Msg("Creating new Grafana Client") c.grafana = grafana.NewClient( cfg.GrafanaURL, grafana.WithToken(cfg.GrafanaToken), ) c.logger.Debug().Msg("Created new Grafana Client successfully") c.git = git.NewProject( cfg.GitRepo, git.WithBasicAuth(cfg.GitUser, cfg.GitPass), git.WithBranch(cfg.GitBranch), git.WithOutputWriter(cfg.Output), ) c.logger.Debug().Msg("Cloning git project") if err := c.git.Clone(ctx); err != nil { return err } c.logger.Debug().Msg("Checking out git project") if err := c.git.Checkout(); err != nil { return err } c.logger.Debug().Msg("Pulling git project content") if err := c.git.Pull(ctx); err != nil { return err } c.logger.Debug().Msg("Loading git logs") return c.git.LoadLogs() } func (c *Client) GetSigner(cfg *config.Config) error { if cfg.GPGKey == "" { c.logger.Debug().Msg("GPG key path parameter is empty") return nil } c.signer = &git.SignKey{KeyFile: cfg.GPGKey} c.logger.Debug().Msg("Reading GPG key file") return c.signer.ReadKeyFile() }