...

Source file src/github.com/cybertec-postgresql/pgwatch/v3/internal/cmdopts/cmdmetric.go

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

     1  package cmdopts
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"math"
     7  	"slices"
     8  
     9  	"golang.org/x/exp/maps"
    10  )
    11  
    12  type MetricCommand struct {
    13  	owner     *Options
    14  	PrintInit MetricPrintInitCommand `command:"print-init" description:"Get and print init SQL for a given metric or preset"`
    15  	PrintSQL  MetricPrintSQLCommand  `command:"print-sql" description:"Get and print SQL for a given metric"`
    16  }
    17  
    18  func NewMetricCommand(owner *Options) *MetricCommand {
    19  	return &MetricCommand{
    20  		owner:     owner,
    21  		PrintInit: MetricPrintInitCommand{owner: owner},
    22  		PrintSQL:  MetricPrintSQLCommand{owner: owner},
    23  	}
    24  }
    25  
    26  type MetricPrintInitCommand struct {
    27  	owner *Options
    28  }
    29  
    30  func (cmd *MetricPrintInitCommand) Execute(args []string) error {
    31  	err := cmd.owner.InitMetricReader(context.Background())
    32  	if err != nil {
    33  		return err
    34  	}
    35  	metrics, err := cmd.owner.MetricsReaderWriter.GetMetrics()
    36  	if err != nil {
    37  		return err
    38  	}
    39  	w := cmd.owner.OutputWriter
    40  	for _, name := range args {
    41  		if preset, ok := metrics.PresetDefs[name]; ok {
    42  			args = append(args, maps.Keys(preset.Metrics)...)
    43  		}
    44  	}
    45  	slices.Sort(args)
    46  	args = slices.Compact(args)
    47  	for _, mname := range args {
    48  		if m, ok := metrics.MetricDefs[mname]; ok && m.InitSQL != "" {
    49  
    50  			fmt.Fprintln(w, "--", mname)
    51  			fmt.Fprintln(w, m.InitSQL)
    52  		}
    53  	}
    54  	cmd.owner.CompleteCommand(ExitCodeOK)
    55  	return nil
    56  }
    57  
    58  type MetricPrintSQLCommand struct {
    59  	owner   *Options
    60  	Version int `short:"v" long:"version" description:"PostgreSQL version to get SQL for"`
    61  }
    62  
    63  func (cmd *MetricPrintSQLCommand) Execute(args []string) error {
    64  	err := cmd.owner.InitMetricReader(context.Background())
    65  	if err != nil {
    66  		return err
    67  	}
    68  	metrics, err := cmd.owner.MetricsReaderWriter.GetMetrics()
    69  	if err != nil {
    70  		return err
    71  	}
    72  	w := cmd.owner.OutputWriter
    73  	if cmd.Version == 0 {
    74  		cmd.Version = math.MaxInt32
    75  	}
    76  	for _, name := range args {
    77  		if m, ok := metrics.MetricDefs[name]; ok {
    78  			if v := m.GetSQL(cmd.Version); v > "" {
    79  				fmt.Fprintln(w, "--", name, v)
    80  			}
    81  		}
    82  	}
    83  	cmd.owner.CompleteCommand(ExitCodeOK)
    84  	return nil
    85  }
    86