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 }