reporter

package
v2.0.0-...-7b710ec Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 22, 2024 License: Apache-2.0 Imports: 60 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ErrNoMeterDefinitionsFound = errors.Sentinel("no meterDefinitions found")
	WarningDuplicateData       = errors.Sentinel("duplicate data")
	WarningPrintTemplate       = errors.Sentinel("template error")
)
View Source
const (
	MktplProductionURL = "https://marketplace.redhat.com"
	MktplStageURL      = "https://sandbox.marketplace.redhat.com"
)

Variables

Functions

func NewEventBroadcaster

func NewEventBroadcaster(erConfig *Config) (record.EventBroadcaster, func(), error)

func ProvideDataBuilder

func ProvideDataBuilder(
	config *Config,
	logger logr.Logger,
) (common.DataBuilder, error)

func ProvideUploader

func ProvideUploader(us u.Uploaders) (u.Uploader, error)

func ProvideUploaders

func ProvideUploaders(
	ctx context.Context,
	client client.Client,
	log logr.Logger,
	reporterConfig *Config,
) (u.Uploaders, error)

func ProvideWriter

func ProvideWriter(
	config *Config,
	MktConfig *marketplacev1alpha1.MarketplaceConfig,
	logger logr.Logger,
) (common.ReportWriter, error)

func Tar

func Tar(src string, writers ...io.Writer) error

Tar takes a source and variable writers and walks 'source' writing each file found to the tar writer; the purpose for accepting multiple writers is to allow for multiple outputs (for example a file, or md5 hash)

func TargzFolder

func TargzFolder(srcFolder, destFileName string) error

Types

type Config

type Config struct {
	OutputDirectory      string
	MetricsPerFile       *int
	MaxRoutines          *int
	Retry                *int
	CaFile               string
	TokenFile            string
	DataServiceTokenFile string
	DataServiceCertFile  string
	DeployedNamespace    string
	Local                bool
	Upload               bool
	IsDisconnected       bool
	PrometheusService    string
	PrometheusNamespace  string
	PrometheusPort       string
	uploaders.UploaderTargets
	ReporterSchema string
	CipherSuites   []uint16
	MinVersion     uint16

	K8sRestConfig *rest.Config
}

Top level config

func (*Config) SetDefaults

func (c *Config) SetDefaults() error

type MarketplaceReporter

type MarketplaceReporter struct {
	PrometheusAPI
	MktConfig *marketplacev1alpha1.MarketplaceConfig

	*Config
	// contains filtered or unexported fields
}

Goals of the reporter: Get current meters to query

Build a report for hourly since last reprot

Query all the meters

Break up reports into manageable chunks

Upload to insights

Update the CR status for each report and queue

func NewMarketplaceReporter

func NewMarketplaceReporter(
	config *Config,
	report *marketplacev1alpha1.MeterReport,
	MktConfig *marketplacev1alpha1.MarketplaceConfig,
	api *PrometheusAPI,
	meterDefinitions MeterDefinitionReferences,
	schemaDataBuilder common.DataBuilder,
	reportWriter common.ReportWriter,
) (*MarketplaceReporter, error)

func NewReporter

func NewReporter(ctx context.Context, task *Task) (*MarketplaceReporter, error)

func (*MarketplaceReporter) CollectMetrics

func (r *MarketplaceReporter) CollectMetrics(ctxIn context.Context) (map[string]common.SchemaMetricBuilder, []error, []error, error)

func (*MarketplaceReporter) Process

func (r *MarketplaceReporter) Process(
	ctx context.Context,
	inPromModels <-chan meterDefPromModel,
	results map[string]common.SchemaMetricBuilder,
	mutex sync.Locker,
	done chan bool,
	errorsch chan error,
)

func (*MarketplaceReporter) ProduceMeterDefinitions

func (r *MarketplaceReporter) ProduceMeterDefinitions(
	meterDefinitions MeterDefinitionReferences,
	meterDefsChan chan *meterDefPromQuery,
) error

func (*MarketplaceReporter) Query

func (r *MarketplaceReporter) Query(
	ctx context.Context,
	startTime, endTime time.Time,
	inMeterDefs <-chan *meterDefPromQuery,
	outPromModels chan<- meterDefPromModel,
	done chan bool,
	errorsch chan<- error,
)

func (*MarketplaceReporter) WriteReport

func (r *MarketplaceReporter) WriteReport(
	reportID uuid.UUID,
	metrics map[string]common.SchemaMetricBuilder,
) ([]string, error)

type MeterDefKey

type MeterDefKey struct {
	Name, Namespace string
}

type Name

type Name types.NamespacedName

type Namespace

type Namespace string

type PrometheusService

type PrometheusService *corev1.Service

type ReconcileTask

type ReconcileTask struct {
	K8SClient client.Client
	Config    *Config
	K8SScheme *runtime.Scheme
	Namespace

	NewTask   func(ctx context.Context, reportName ReportName, taskConfig *Config) (TaskRun, error)
	NewUpload func(ctx context.Context, config *Config, namespace Namespace) (UploadRun, error)
	// contains filtered or unexported fields
}

func NewReconcileTask

func NewReconcileTask(ctx context.Context, config *Config, broadcaster record.EventBroadcaster, namespace Namespace, newReportTask func(ctx context.Context, reportName ReportName, taskConfig *Config) (TaskRun, error), newUploadTask func(ctx context.Context, config *Config, namespace Namespace) (UploadRun, error)) (*ReconcileTask, error)

func (*ReconcileTask) CanRunGenericUpload

func (r *ReconcileTask) CanRunGenericUpload(ctx context.Context) (bool, ReportSkipReason)

func (*ReconcileTask) CanRunReportTask

func (r *ReconcileTask) CanRunReportTask(ctx context.Context, report marketplacev1alpha1.MeterReport) bool

func (*ReconcileTask) CanRunUploadReportTask

func (r *ReconcileTask) CanRunUploadReportTask(ctx context.Context, report marketplacev1alpha1.MeterReport) (ReportSkipReason, bool)

IsDisconnected defaults to false

func (*ReconcileTask) ReportTask

func (r *ReconcileTask) ReportTask(ctx context.Context, report *marketplacev1alpha1.MeterReport) error

func (*ReconcileTask) Run

func (r *ReconcileTask) Run(ctx context.Context) error

type ReportName

type ReportName types.NamespacedName

type ReportOutputDir

type ReportOutputDir string

type ReportSkipReason

type ReportSkipReason string
const (
	SkipNotReady     ReportSkipReason = "NotReady"
	SkipDisconnected ReportSkipReason = "Disconn"
	SkipNoData       ReportSkipReason = "NoData"
	SkipNoFileID     ReportSkipReason = "NoFileID"
	SkipDone         ReportSkipReason = "Done"
	SkipMaxAttempts  ReportSkipReason = "OutOfRetry"
	SkipComplete     ReportSkipReason = "Complete"

	SkipEmpty ReportSkipReason = ""
)

type Task

type Task struct {
	ReportName ReportName
	K8SClient  rhmclient.SimpleClient
	Config     *Config
	uploaders.Uploader
}

func (*Task) Run

func (r *Task) Run(ctx context.Context) error

type TaskRun

type TaskRun interface {
	Run(ctx context.Context) error
}

func NewTask

func NewTask(ctx context.Context, reportName ReportName, taskConfig *Config) (TaskRun, error)

type UploadRun

type UploadRun interface {
	RunGeneric(ctx context.Context) error
	RunReport(ctx context.Context, report *marketplacev1alpha1.MeterReport) error
}

func NewUploadTask

func NewUploadTask(ctx context.Context, config *Config, namespace Namespace) (UploadRun, error)

type UploadTask

type UploadTask struct {
	// contains filtered or unexported fields
}

Task to upload the reports from dataservice to redhat-insights

func (*UploadTask) RunGeneric

func (r *UploadTask) RunGeneric(ctx context.Context) error

Run checks for just files in DataService and sends them if it can.

func (*UploadTask) RunReport

func (r *UploadTask) RunReport(ctx context.Context, report *marketplacev1alpha1.MeterReport) error

RunReport uses status fields on the Report to get identifiers for the file

Directories

Path Synopsis
schema
writer
v1
v2

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL