1package querycheck
2
3import (
4 "time"
5
6 "github.com/labstack/echo/v4"
7)
8
9type RetQuery struct {
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"`
17}
18
19func (q *Querychecker) HandleGetQueries(c echo.Context) error {
20 queries := q.GetQueries(c.Request().Context())
21 retQueries := []RetQuery{}
22 for _, query := range queries {
23 retQueries = append(retQueries, RetQuery{
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(),
31 })
32 }
33
34 return c.JSON(200, retQueries)
35}
36
37func (q *Querychecker) HandleGetQuery(c echo.Context) error {
38 query := q.GetQuery(c.Request().Context(), c.Param("name"))
39 if query == nil {
40 return c.JSON(404, echo.Map{
41 "message": "not found",
42 })
43 }
44
45 retQuery := RetQuery{
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(),
53 }
54
55 return c.JSON(200, retQuery)
56}
57
58func (q *Querychecker) HandleDeleteQuery(c echo.Context) error {
59 q.RemoveQuery(c.Request().Context(), c.Param("name"))
60 return c.JSON(200, echo.Map{
61 "message": "success",
62 })
63}
64
65type AddQueryRequest struct {
66 Name string `json:"name"`
67 Query string `json:"query"`
68 CheckEvery int64 `json:"check_every_ms"`
69}
70
71func (q *Querychecker) HandleAddQuery(c echo.Context) error {
72 var req AddQueryRequest
73 c.Bind(&req)
74 q.AddQuery(c.Request().Context(), req.Name, req.Query, time.Duration(req.CheckEvery)*time.Millisecond)
75 return c.JSON(200, echo.Map{
76 "name": req.Name,
77 "query": req.Query,
78 "check_every_ms": req.CheckEvery,
79 "message": "success",
80 })
81}
82
83type UpdateQueryRequest struct {
84 Query string `json:"query"`
85 CheckEvery int64 `json:"check_every_ms"`
86}
87
88func (q *Querychecker) HandleUpdateQuery(c echo.Context) error {
89 var req UpdateQueryRequest
90 c.Bind(&req)
91 q.UpdateQuery(c.Request().Context(), c.Param("name"), req.Query, time.Duration(req.CheckEvery)*time.Millisecond)
92 return c.JSON(200, echo.Map{
93 "name": c.Param("name"),
94 "query": req.Query,
95 "check_every_ms": req.CheckEvery,
96 "message": "success",
97 })
98}