...

Source file src/github.com/cybertec-postgresql/pgwatch/v3/internal/metrics/yaml.go

Documentation: github.com/cybertec-postgresql/pgwatch/v3/internal/metrics

     1  package metrics
     2  
     3  import (
     4  	"context"
     5  	_ "embed"
     6  	"os"
     7  
     8  	"gopkg.in/yaml.v3"
     9  )
    10  
    11  func NewYAMLMetricReaderWriter(ctx context.Context, path string) (ReaderWriter, error) {
    12  	if path == "" {
    13  		return NewDefaultMetricReader(ctx)
    14  	}
    15  	return &fileMetricReader{
    16  		ctx:  ctx,
    17  		path: path,
    18  	}, nil
    19  }
    20  
    21  type fileMetricReader struct {
    22  	ctx  context.Context
    23  	path string
    24  }
    25  
    26  func (fmr *fileMetricReader) WriteMetrics(metricDefs *Metrics) error {
    27  	yamlData, _ := yaml.Marshal(metricDefs)
    28  	return os.WriteFile(fmr.path, yamlData, 0644)
    29  }
    30  
    31  //go:embed metrics.yaml
    32  var defaultMetricsYAML []byte
    33  
    34  func (fmr *fileMetricReader) GetMetrics() (metrics *Metrics, err error) {
    35  	metrics = new(Metrics)
    36  	var s []byte
    37  	if fmr.path == "" {
    38  		s = defaultMetricsYAML
    39  	} else {
    40  		if s, err = os.ReadFile(fmr.path); err != nil {
    41  			return nil, err
    42  		}
    43  	}
    44  	if err = yaml.Unmarshal(s, metrics); err != nil {
    45  		return nil, err
    46  	}
    47  	return
    48  }
    49  
    50  func (fmr *fileMetricReader) DeleteMetric(metricName string) error {
    51  	metrics, err := fmr.GetMetrics()
    52  	if err != nil {
    53  		return err
    54  	}
    55  	delete(metrics.MetricDefs, metricName)
    56  	return fmr.WriteMetrics(metrics)
    57  }
    58  
    59  func (fmr *fileMetricReader) UpdateMetric(metricName string, metric Metric) error {
    60  	metrics, err := fmr.GetMetrics()
    61  	if err != nil {
    62  		return err
    63  	}
    64  	metrics.MetricDefs[metricName] = metric
    65  	return fmr.WriteMetrics(metrics)
    66  }
    67  
    68  func (fmr *fileMetricReader) DeletePreset(presetName string) error {
    69  	metrics, err := fmr.GetMetrics()
    70  	if err != nil {
    71  		return err
    72  	}
    73  	delete(metrics.PresetDefs, presetName)
    74  	return fmr.WriteMetrics(metrics)
    75  }
    76  
    77  func (fmr *fileMetricReader) UpdatePreset(presetName string, preset Preset) error {
    78  	metrics, err := fmr.GetMetrics()
    79  	if err != nil {
    80  		return err
    81  	}
    82  	metrics.PresetDefs[presetName] = preset
    83  	return fmr.WriteMetrics(metrics)
    84  }
    85