moira
67 строк · 1.7 Кб
1package controller
2
3import (
4"go.avito.ru/DO/moira"
5"go.avito.ru/DO/moira/api"
6"go.avito.ru/DO/moira/api/dto"
7)
8
9// GetAllPatterns get all patterns and triggers and metrics info corresponding to this pattern
10func GetAllPatterns(database moira.Database, logger moira.Logger) (*dto.PatternList, *api.ErrorResponse) {
11patterns, err := database.GetPatterns()
12if err != nil {
13return nil, api.ErrorInternalServer(err)
14}
15pattersList := dto.PatternList{
16List: make([]dto.PatternData, 0, len(patterns)),
17}
18
19rch := make(chan *dto.PatternData, len(patterns))
20
21for _, pattern := range patterns {
22go func(pattern string) {
23triggerIDs, err := database.GetPatternTriggerIDs(pattern)
24if err != nil {
25logger.Error(err.Error())
26rch <- nil
27}
28triggers, err := database.GetTriggers(triggerIDs)
29if err != nil {
30logger.Error(err.Error())
31rch <- nil
32}
33metrics, err := database.GetPatternMetrics(pattern)
34if err != nil {
35logger.Error(err.Error())
36rch <- nil
37}
38patternData := dto.PatternData{
39Pattern: pattern,
40Triggers: make([]dto.TriggerModel, 0),
41Metrics: metrics,
42}
43for _, trigger := range triggers {
44if trigger != nil {
45patternData.Triggers = append(patternData.Triggers, dto.CreateTriggerModel(trigger))
46}
47}
48rch <- &patternData
49}(pattern)
50}
51
52for i := 0; i < len(patterns); i++ {
53if r := <-rch; r != nil {
54pattersList.List = append(pattersList.List, *r)
55}
56}
57
58return &pattersList, nil
59}
60
61// DeletePattern deletes trigger pattern
62func DeletePattern(database moira.Database, pattern string) *api.ErrorResponse {
63if err := database.RemovePattern(pattern); err != nil {
64return api.ErrorInternalServer(err)
65}
66return nil
67}
68