github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/tools/query-audit/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"fmt"
     7  	"log"
     8  
     9  	v1 "github.com/prometheus/client_golang/api/prometheus/v1"
    10  )
    11  
    12  var (
    13  	configFile string
    14  )
    15  
    16  func init() {
    17  	flag.StringVar(&configFile, "f", "", "path to config file")
    18  	flag.Parse()
    19  	if configFile == "" {
    20  		log.Fatal(`unset configFile. try "-f <file>"`)
    21  	}
    22  }
    23  
    24  func main() {
    25  	var conf Config
    26  	if err := LoadConfig(configFile, &conf); err != nil {
    27  		log.Fatal(err)
    28  	}
    29  
    30  	err := Run(conf)
    31  	if err != nil {
    32  		log.Fatal(err)
    33  	}
    34  }
    35  
    36  func Run(conf Config) error {
    37  	ctlAPI, err := NewAPI(conf.Control)
    38  	if err != nil {
    39  		return err
    40  	}
    41  
    42  	tstAPI, err := NewAPI(conf.Test)
    43  	if err != nil {
    44  		return err
    45  	}
    46  
    47  	for _, query := range conf.Queries {
    48  		ctlResp, _, err := ctlAPI.QueryRange(context.Background(), query.Query, v1.Range{
    49  			Start: query.Start,
    50  			End:   query.End,
    51  			Step:  query.StepSize,
    52  		})
    53  
    54  		if err != nil {
    55  			return err
    56  		}
    57  
    58  		tstResp, _, err := tstAPI.QueryRange(context.Background(), query.Query, v1.Range{
    59  			Start: query.Start,
    60  			End:   query.End,
    61  			Step:  query.StepSize,
    62  		})
    63  
    64  		if err != nil {
    65  			return err
    66  		}
    67  
    68  		auditor := &Auditor{}
    69  		diff, err := auditor.Audit(ctlResp, tstResp)
    70  		if err != nil {
    71  			return err
    72  		}
    73  
    74  		fmt.Printf(
    75  			"\n%f%% avg diff for:\n\tquery: %s\n\tseries: %d\n\tsamples: %d\n\tstart: %v\n\tend: %v\n\tstep: %v\n",
    76  			diff.Diff*100,
    77  			query.Query,
    78  			diff.Series,
    79  			len(diff.sampleDiffs),
    80  			query.Start,
    81  			query.End,
    82  			query.StepSize,
    83  		)
    84  
    85  	}
    86  	return nil
    87  }