moira

Форк
0
/
dashboard.go 
78 строк · 1.8 Кб
1
package moira
2

3
import (
4
	"fmt"
5
	"strings"
6
)
7

8
type SlackDashboard map[string]bool // map from metric to isOK
9

10
func (sb *SlackDashboard) Update(events NotificationEvents, triggerName string) (hasChanged bool, changes NotificationEvents) {
11
	hasChanged = false
12
	changes = make(NotificationEvents, 0, len(events))
13
	for _, event := range events {
14
		if event.State == OK {
15
			if oldState, ok := (*sb)[event.Metric]; ok && !oldState {
16
				hasChanged = true
17
				(*sb)[event.Metric] = true
18
				changes = append(changes, event)
19
			}
20
		}
21
		if !event.IsTriggerEvent {
22
			if oldState, ok := (*sb)[triggerName]; ok && !oldState {
23
				hasChanged = true
24
				(*sb)[triggerName] = true
25
				changes = append(changes, event)
26
			}
27
		}
28
	}
29
	return hasChanged, changes
30
}
31

32
func (sb SlackDashboard) IsEverythingOK() bool {
33
	for _, isOK := range sb {
34
		if !isOK {
35
			return false
36
		}
37
	}
38
	return true
39
}
40

41
func MakeDashboardFromEvents(events NotificationEvents) SlackDashboard {
42
	result := make(SlackDashboard)
43
	for _, event := range events {
44
		result[event.Metric] = event.State == OK
45
	}
46
	return result
47
}
48

49
type SlackThreadLink struct {
50
	Contact     string `json:"contact"`
51
	ThreadTs    string `json:"thread_ts"`
52
	DashboardTs string `json:"dashboard_ts,omitempty"`
53
}
54

55
func (link SlackThreadLink) StorageKey() string {
56
	if link.DashboardTs != "" {
57
		return fmt.Sprintf("slack:%s:%s:%s", link.Contact, link.ThreadTs, link.DashboardTs)
58
	} else {
59
		return fmt.Sprintf("slack:%s:%s", link.Contact, link.ThreadTs)
60
	}
61
}
62

63
func (link *SlackThreadLink) FromString(s string) error {
64
	split := strings.SplitN(s, ":", 3)
65
	if len(split) < 2 {
66
		return fmt.Errorf("failed to parse %s as SlackThreadLink", s)
67
	}
68
	link.Contact = split[0]
69
	link.ThreadTs = split[1]
70
	if len(split) >= 3 {
71
		link.DashboardTs = split[2]
72
	}
73
	return nil
74
}
75

76
func (link SlackThreadLink) SenderName() string {
77
	return "slack"
78
}
79

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

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

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

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