fork of indigo with slightly nicer lexgen

Show previous query and don't require auth if token setting is empty

Changed files
+51 -44
cmd
querycheck
querycheck
+2 -2
cmd/querycheck/main.go
··· 49 49 &cli.StringFlag{ 50 50 Name: "auth-token", 51 51 Usage: "auth token for accessing the querycheck api", 52 - Value: "localdev", 52 + Value: "", 53 53 EnvVars: []string{"AUTH_TOKEN"}, 54 54 }, 55 55 } ··· 136 136 137 137 e.Use(func(next echo.HandlerFunc) echo.HandlerFunc { 138 138 return func(c echo.Context) error { 139 - if c.Request().Header.Get("Authorization") != cctx.String("auth-token") { 139 + if cctx.String("auth-token") != "" && c.Request().Header.Get("Authorization") != cctx.String("auth-token") { 140 140 return c.String(http.StatusUnauthorized, "unauthorized") 141 141 } 142 142 return next(c)
+28 -24
querycheck/check.go
··· 17 17 18 18 // Query is a query to check 19 19 type Query struct { 20 - Name string 21 - Query string 22 - LastPlan *QueryPlan 23 - LastChecked time.Time 24 - LastError error 25 - CheckEvery time.Duration 20 + Name string 21 + Query string 22 + LatestPlan *QueryPlan 23 + PreviousPlan *QueryPlan 24 + LastChecked time.Time 25 + LastError error 26 + CheckEvery time.Duration 26 27 27 28 lk sync.RWMutex 28 29 in chan struct{} ··· 103 104 for _, qu := range q.Queries { 104 105 if qu.Name == name { 105 106 return &Query{ 106 - Name: qu.Name, 107 - Query: qu.Query, 108 - LastPlan: qu.LastPlan, 109 - LastChecked: qu.LastChecked, 110 - LastError: qu.LastError, 111 - CheckEvery: qu.CheckEvery, 107 + Name: qu.Name, 108 + Query: qu.Query, 109 + LatestPlan: qu.LatestPlan, 110 + PreviousPlan: qu.PreviousPlan, 111 + LastChecked: qu.LastChecked, 112 + LastError: qu.LastError, 113 + CheckEvery: qu.CheckEvery, 112 114 } 113 115 } 114 116 } ··· 125 127 queries := make([]*Query, len(q.Queries)) 126 128 for i, qu := range q.Queries { 127 129 queries[i] = &Query{ 128 - Name: qu.Name, 129 - Query: qu.Query, 130 - LastPlan: qu.LastPlan, 131 - LastChecked: qu.LastChecked, 132 - LastError: qu.LastError, 133 - CheckEvery: qu.CheckEvery, 130 + Name: qu.Name, 131 + Query: qu.Query, 132 + LatestPlan: qu.LatestPlan, 133 + PreviousPlan: qu.PreviousPlan, 134 + LastChecked: qu.LastChecked, 135 + LastError: qu.LastError, 136 + CheckEvery: qu.CheckEvery, 134 137 } 135 138 } 136 139 ··· 177 180 ticker := time.NewTicker(query.CheckEvery) 178 181 defer ticker.Stop() 179 182 180 - query.LastPlan, err = q.CheckQueryPlan(ctx, query.Query) 183 + query.LatestPlan, err = q.CheckQueryPlan(ctx, query.Query) 181 184 if err != nil { 182 185 log.Errorf("failed to check query plan: %+v\n", err) 183 186 } 184 187 185 - if query.LastPlan != nil { 186 - log.Infof("Initial plan:\n%+v\n", query.LastPlan.String()) 187 - query.RecordPlanMetrics(*query.LastPlan) 188 + if query.LatestPlan != nil { 189 + log.Infof("Initial plan:\n%+v\n", query.LatestPlan.String()) 190 + query.RecordPlanMetrics(*query.LatestPlan) 188 191 query.LastChecked = time.Now() 189 192 } 190 193 ··· 216 219 } 217 220 218 221 query.lk.RLock() 219 - lastPlan := *query.LastPlan 222 + lastPlan := *query.LatestPlan 220 223 query.lk.RUnlock() 221 224 222 225 query.RecordPlanMetrics(*qp) ··· 231 234 log.Infof("query plan has changed (%s%.03fms): \n%+v\n", sign, diff, qp.String()) 232 235 233 236 query.lk.Lock() 234 - query.LastPlan = qp 237 + query.PreviousPlan = query.LatestPlan 238 + query.LatestPlan = qp 235 239 query.lk.Unlock() 236 240 } 237 241 case <-query.in:
+21 -18
querycheck/handlers.go
··· 7 7 ) 8 8 9 9 type RetQuery struct { 10 - Name string `json:"name"` 11 - Query string `json:"query"` 12 - LastPlan *QueryPlan `json:"last_plan"` 13 - LastChecked time.Time `json:"last_checked"` 14 - LastError error `json:"last_error"` 15 - CheckEvery string `json:"check_every"` 10 + Name string `json:"name"` 11 + Query string `json:"query"` 12 + LatestPlan *QueryPlan `json:"latest_plan"` 13 + PreviousPlan *QueryPlan `json:"previous_plan"` 14 + LastChecked time.Time `json:"last_checked"` 15 + LastError error `json:"last_error"` 16 + CheckEvery string `json:"check_every"` 16 17 } 17 18 18 19 func (q *Querychecker) HandleGetQueries(c echo.Context) error { ··· 20 21 retQueries := []RetQuery{} 21 22 for _, query := range queries { 22 23 retQueries = append(retQueries, RetQuery{ 23 - Name: query.Name, 24 - Query: query.Query, 25 - LastPlan: query.LastPlan, 26 - LastChecked: query.LastChecked, 27 - LastError: query.LastError, 28 - CheckEvery: query.CheckEvery.String(), 24 + Name: query.Name, 25 + Query: query.Query, 26 + LatestPlan: query.LatestPlan, 27 + PreviousPlan: query.PreviousPlan, 28 + LastChecked: query.LastChecked, 29 + LastError: query.LastError, 30 + CheckEvery: query.CheckEvery.String(), 29 31 }) 30 32 } 31 33 ··· 41 43 } 42 44 43 45 retQuery := RetQuery{ 44 - Name: query.Name, 45 - Query: query.Query, 46 - LastPlan: query.LastPlan, 47 - LastChecked: query.LastChecked, 48 - LastError: query.LastError, 49 - CheckEvery: query.CheckEvery.String(), 46 + Name: query.Name, 47 + Query: query.Query, 48 + LatestPlan: query.LatestPlan, 49 + PreviousPlan: query.PreviousPlan, 50 + LastChecked: query.LastChecked, 51 + LastError: query.LastError, 52 + CheckEvery: query.CheckEvery.String(), 50 53 } 51 54 52 55 return c.JSON(200, retQuery)