...

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

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

     1  package cmdopts
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"math"
     7  
     8  	"gopkg.in/yaml.v3"
     9  )
    10  
    11  type MetricCommand struct {
    12  	owner     *Options
    13  	PrintInit MetricPrintInitCommand `command:"print-init" description:"Get and print init SQL for a given metric or preset"`
    14  	PrintSQL  MetricPrintSQLCommand  `command:"print-sql" description:"Get and print SQL for a given metric"`
    15  	List      MetricListCommand      `command:"list" description:"List available metrics and presets"`
    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  		List:      MetricListCommand{owner: owner},
    24  	}
    25  }
    26  
    27  type MetricPrintInitCommand struct {
    28  	owner *Options
    29  }
    30  
    31  func (cmd *MetricPrintInitCommand) Execute(args []string) error {
    32  	err := cmd.owner.InitMetricReader(context.Background())
    33  	if err != nil {
    34  		return err
    35  	}
    36  	metrics, err := cmd.owner.MetricsReaderWriter.GetMetrics()
    37  	if err != nil {
    38  		return err
    39  	}
    40  	metrics, err = metrics.FilterByNames(args)
    41  	if err != nil {
    42  		return err
    43  	}
    44  	w := cmd.owner.OutputWriter
    45  	for mname, mdef := range metrics.MetricDefs {
    46  		if mdef.InitSQL > "" {
    47  			fmt.Fprintln(w, "--", mname)
    48  			fmt.Fprintln(w, mdef.InitSQL)
    49  		}
    50  	}
    51  	cmd.owner.CompleteCommand(ExitCodeOK)
    52  	return nil
    53  }
    54  
    55  type MetricPrintSQLCommand struct {
    56  	owner   *Options
    57  	Version int `short:"v" long:"version" description:"PostgreSQL version to get SQL for"`
    58  }
    59  
    60  func (cmd *MetricPrintSQLCommand) Execute(args []string) error {
    61  	err := cmd.owner.InitMetricReader(context.Background())
    62  	if err != nil {
    63  		return err
    64  	}
    65  	metrics, err := cmd.owner.MetricsReaderWriter.GetMetrics()
    66  	if err != nil {
    67  		return err
    68  	}
    69  	metrics, err = metrics.FilterByNames(args)
    70  	if err != nil {
    71  		return err
    72  	}
    73  	w := cmd.owner.OutputWriter
    74  	if cmd.Version == 0 {
    75  		cmd.Version = math.MaxInt32
    76  	}
    77  	for _, name := range args {
    78  		if m, ok := metrics.MetricDefs[name]; ok {
    79  			if v := m.GetSQL(cmd.Version); v > "" {
    80  				fmt.Fprintln(w, "--", name)
    81  				fmt.Fprintln(w, v)
    82  			}
    83  		}
    84  	}
    85  	cmd.owner.CompleteCommand(ExitCodeOK)
    86  	return nil
    87  }
    88  
    89  type MetricListCommand struct {
    90  	owner *Options
    91  }
    92  
    93  func (cmd *MetricListCommand) Execute(args []string) error {
    94  	err := cmd.owner.InitMetricReader(context.Background())
    95  	if err != nil {
    96  		return err
    97  	}
    98  	allMetrics, err := cmd.owner.MetricsReaderWriter.GetMetrics()
    99  	if err != nil {
   100  		return err
   101  	}
   102  	result, err := allMetrics.FilterByNames(args)
   103  	if err != nil {
   104  		return err
   105  	}
   106  	w := cmd.owner.OutputWriter
   107  
   108  	yamlData, _ := yaml.Marshal(result)
   109  	fmt.Fprint(w, string(yamlData))
   110  	cmd.owner.CompleteCommand(ExitCodeOK)
   111  	return nil
   112  }
   113