github.com/verrazzano/verrazzano@v1.7.1/tools/psr/backend/workers/opensearch/writelogs/writelogs.go (about) 1 // Copyright (c) 2022, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package writelogs 5 6 import ( 7 "fmt" 8 "sync/atomic" 9 10 "github.com/prometheus/client_golang/prometheus" 11 "github.com/verrazzano/verrazzano/pkg/log/vzlog" 12 "github.com/verrazzano/verrazzano/tools/psr/backend/config" 13 "github.com/verrazzano/verrazzano/tools/psr/backend/metrics" 14 "github.com/verrazzano/verrazzano/tools/psr/backend/osenv" 15 "github.com/verrazzano/verrazzano/tools/psr/backend/spi" 16 ) 17 18 // metricsPrefix is the prefix that is automatically pre-pended to all metrics exported by this worker. 19 const metricsPrefix = "opensearch_writelogs" 20 21 type worker struct { 22 metricDescList []prometheus.Desc 23 *workerMetrics 24 } 25 26 var _ spi.Worker = worker{} 27 28 // workerMetrics holds the metrics produced by the worker. Metrics must be thread safe. 29 type workerMetrics struct { 30 loggedLinesCountTotal metrics.MetricItem 31 loggedCharsCountTotal metrics.MetricItem 32 } 33 34 func NewWriteLogsWorker() (spi.Worker, error) { 35 w := worker{workerMetrics: &workerMetrics{ 36 loggedLinesCountTotal: metrics.MetricItem{ 37 Name: "logged_lines_count_total", 38 Help: "The total number of lines logged", 39 Type: prometheus.CounterValue, 40 }, 41 loggedCharsCountTotal: metrics.MetricItem{ 42 Name: "logged_chars_total", 43 Help: "The total number of characters logged", 44 Type: prometheus.CounterValue, 45 }, 46 }} 47 48 if err := config.PsrEnv.LoadFromEnv(w.GetEnvDescList()); err != nil { 49 return w, err 50 } 51 52 metricsLabels := map[string]string{ 53 config.PsrWorkerTypeMetricsName: config.PsrEnv.GetEnv(config.PsrWorkerType), 54 } 55 56 w.metricDescList = metrics.BuildMetricDescList([]*metrics.MetricItem{ 57 &w.loggedLinesCountTotal, 58 &w.loggedCharsCountTotal, 59 }, metricsLabels, w.GetWorkerDesc().MetricsPrefix) 60 61 return w, nil 62 } 63 64 // GetWorkerDesc returns the WorkerDesc for the worker 65 func (w worker) GetWorkerDesc() spi.WorkerDesc { 66 return spi.WorkerDesc{ 67 WorkerType: config.WorkerTypeOpsWriteLogs, 68 Description: "The writelogs worker writes logs to STDOUT, putting a load on OpenSearch", 69 MetricsPrefix: metricsPrefix, 70 } 71 } 72 73 func (w worker) GetEnvDescList() []osenv.EnvVarDesc { 74 return []osenv.EnvVarDesc{} 75 } 76 77 func (w worker) WantLoopInfoLogged() bool { 78 return false 79 } 80 81 func (w worker) PreconditionsMet() (bool, error) { 82 return true, nil 83 } 84 85 func (w worker) DoWork(conf config.CommonConfig, log vzlog.VerrazzanoLogger) error { 86 lc := atomic.AddInt64(&w.workerMetrics.loggedLinesCountTotal.Val, 1) 87 logMsg := fmt.Sprintf("Writelogs worker logging line %v", lc) 88 log.Infof(logMsg) 89 atomic.AddInt64(&w.workerMetrics.loggedCharsCountTotal.Val, int64(len(logMsg))) 90 return nil 91 } 92 93 func (w worker) GetMetricDescList() []prometheus.Desc { 94 return w.metricDescList 95 } 96 97 func (w worker) GetMetricList() []prometheus.Metric { 98 return []prometheus.Metric{ 99 w.loggedLinesCountTotal.BuildMetric(), 100 w.loggedCharsCountTotal.BuildMetric(), 101 } 102 }