moira

Форк
0
/
pattern.go 
67 строк · 1.7 Кб
1
package controller
2

3
import (
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
10
func GetAllPatterns(database moira.Database, logger moira.Logger) (*dto.PatternList, *api.ErrorResponse) {
11
	patterns, err := database.GetPatterns()
12
	if err != nil {
13
		return nil, api.ErrorInternalServer(err)
14
	}
15
	pattersList := dto.PatternList{
16
		List: make([]dto.PatternData, 0, len(patterns)),
17
	}
18

19
	rch := make(chan *dto.PatternData, len(patterns))
20

21
	for _, pattern := range patterns {
22
		go func(pattern string) {
23
			triggerIDs, err := database.GetPatternTriggerIDs(pattern)
24
			if err != nil {
25
				logger.Error(err.Error())
26
				rch <- nil
27
			}
28
			triggers, err := database.GetTriggers(triggerIDs)
29
			if err != nil {
30
				logger.Error(err.Error())
31
				rch <- nil
32
			}
33
			metrics, err := database.GetPatternMetrics(pattern)
34
			if err != nil {
35
				logger.Error(err.Error())
36
				rch <- nil
37
			}
38
			patternData := dto.PatternData{
39
				Pattern:  pattern,
40
				Triggers: make([]dto.TriggerModel, 0),
41
				Metrics:  metrics,
42
			}
43
			for _, trigger := range triggers {
44
				if trigger != nil {
45
					patternData.Triggers = append(patternData.Triggers, dto.CreateTriggerModel(trigger))
46
				}
47
			}
48
			rch <- &patternData
49
		}(pattern)
50
	}
51

52
	for i := 0; i < len(patterns); i++ {
53
		if r := <-rch; r != nil {
54
			pattersList.List = append(pattersList.List, *r)
55
		}
56
	}
57

58
	return &pattersList, nil
59
}
60

61
// DeletePattern deletes trigger pattern
62
func DeletePattern(database moira.Database, pattern string) *api.ErrorResponse {
63
	if err := database.RemovePattern(pattern); err != nil {
64
		return api.ErrorInternalServer(err)
65
	}
66
	return nil
67
}
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.