8
"github.com/go-chi/chi"
9
"github.com/go-chi/render"
11
"go.avito.ru/DO/moira/api"
12
"go.avito.ru/DO/moira/api/controller"
13
"go.avito.ru/DO/moira/api/dto"
14
"go.avito.ru/DO/moira/api/middleware"
15
"go.avito.ru/DO/moira/expression"
16
"go.avito.ru/DO/moira/logging"
17
"go.avito.ru/DO/moira/target"
20
func triggers(router chi.Router) {
21
router.Get("/", getAllTriggers)
22
router.Put("/", createTrigger)
23
router.With(middleware.Paginate(0, 10)).Get("/page", getTriggersPage)
24
router.Route("/{triggerId}", trigger)
27
func getAllTriggers(writer http.ResponseWriter, request *http.Request) {
28
triggersList, errorResponse := controller.GetAllTriggers(database)
29
if errorResponse != nil {
30
render.Render(writer, request, errorResponse)
34
if err := render.Render(writer, request, triggersList); err != nil {
35
render.Render(writer, request, api.ErrorRender(err))
40
func createTrigger(writer http.ResponseWriter, request *http.Request) {
41
trigger := &dto.Trigger{}
42
if err := render.Bind(request, trigger); err != nil {
44
case target.ErrParseExpr, target.ErrEvalExpr, target.ErrUnknownFunction:
45
_ = render.Render(writer, request, api.ErrorInvalidRequest(fmt.Errorf("Invalid graphite targets: %s", err.Error())))
46
case expression.ErrInvalidExpression:
47
_ = render.Render(writer, request, api.ErrorInvalidRequest(fmt.Errorf("Invalid expression: %s", err.Error())))
49
_ = render.Render(writer, request, api.ErrorInternalServer(err))
54
timeSeriesNames := middleware.GetTimeSeriesNames(request)
55
response, err := controller.CreateTrigger(database, triggerInheritanceDatabase, &trigger.TriggerModel, timeSeriesNames)
57
_ = render.Render(writer, request, err)
61
logging.GetLogger(trigger.ID).InfoE("Trigger created", map[string]interface{}{
62
"login": middleware.GetLogin(request),
64
"user_agent": request.Header.Get("User-Agent"),
67
if err := render.Render(writer, request, response); err != nil {
68
_ = render.Render(writer, request, api.ErrorRender(err))
73
func getTriggersPage(writer http.ResponseWriter, request *http.Request) {
75
filterName := getTriggerName(request)
76
filterTags := getRequestTags(request)
77
onlyErrors := getOnlyProblemsFlag(request)
79
page := middleware.GetPage(request)
80
size := middleware.GetSize(request)
82
triggersList, errorResponse := controller.GetTriggerPage(database, page, size, onlyErrors, filterTags, filterName)
83
if errorResponse != nil {
84
render.Render(writer, request, errorResponse)
88
if err := render.Render(writer, request, triggersList); err != nil {
89
render.Render(writer, request, api.ErrorRender(err))
94
func getOnlyProblemsFlag(request *http.Request) bool {
95
onlyProblemsStr := request.FormValue("onlyProblems")
96
if onlyProblemsStr != "" {
97
onlyProblems, _ := strconv.ParseBool(onlyProblemsStr)
103
func getRequestTags(request *http.Request) []string {
104
var filterTags []string
107
tag := request.FormValue(fmt.Sprintf("tags[%v]", i))
111
filterTags = append(filterTags, tag)
117
func getTriggerName(request *http.Request) string {
118
return request.FormValue("triggerName")