moira

Форк
0
/
client.go 
118 строк · 2.3 Кб
1
package fan
2

3
import (
4
	"bytes"
5
	"encoding/json"
6
	"fmt"
7
	"io/ioutil"
8
	"net/http"
9
	"time"
10

11
	"go.avito.ru/DO/moira"
12
)
13

14
type Request struct {
15
	Event       moira.NotificationEvent `json:"event"`
16
	TriggerData moira.TriggerData       `json:"trigger_data"`
17
}
18

19
type Response struct {
20
	Done bool   `json:"done"`
21
	ID   string `json:"id"`
22

23
	Event       *moira.NotificationEvent `json:"event"`
24
	TriggerData *moira.TriggerData       `json:"trigger_data"`
25
	Error       interface{}              `json:"error"`
26
}
27

28
type Client struct {
29
	URL string
30

31
	httpClient *http.Client
32
}
33

34
func NewClient(URL string) Client {
35
	return Client{
36
		URL: URL,
37

38
		httpClient: &http.Client{
39
			Timeout: 1 * time.Second,
40
		},
41
	}
42
}
43

44
func (client Client) SendRequest(request Request) (taskID string, err error) {
45
	encodedRequest, err := json.Marshal(request)
46
	if err != nil {
47
		return "", err
48
	}
49

50
	req, err := http.NewRequest("PUT", client.URL+"/request", bytes.NewBuffer(encodedRequest))
51
	if err != nil {
52
		return "", err
53
	}
54
	resp, err := client.httpClient.Do(req)
55
	if err != nil {
56
		return "", err
57
	}
58

59
	responseBytes, err := ioutil.ReadAll(resp.Body)
60
	if err != nil {
61
		return "", err
62
	}
63

64
	var responseData Response
65
	err = json.Unmarshal(responseBytes, &responseData)
66
	if err != nil {
67
		return "", err
68
	}
69

70
	if responseData.ID == "" {
71
		return "", fmt.Errorf("empty ID returned")
72
	}
73

74
	return responseData.ID, nil
75
}
76

77
func (client Client) CheckProgress(taskID string) (Response, error) {
78
	req, err := http.NewRequest("GET", client.URL+"/request/"+taskID, nil)
79
	if err != nil {
80
		return Response{}, err
81
	}
82

83
	resp, err := client.httpClient.Do(req)
84
	if err != nil {
85
		return Response{}, err
86
	}
87

88
	responseBytes, err := ioutil.ReadAll(resp.Body)
89
	if err != nil {
90
		return Response{}, err
91
	}
92

93
	var response Response
94
	err = json.Unmarshal(responseBytes, &response)
95
	if err != nil {
96
		return Response{}, err
97
	}
98

99
	return response, nil
100
}
101

102
func (client Client) ApplyFallbacks(event *moira.NotificationEvent, triggerData *moira.TriggerData, saturation []moira.Saturation) {
103
	// add a tag indicating that saturation failed
104
	const SaturationFailedTag = "fan-saturation-failed"
105
	var shouldAddTag = true
106
	for _, tag := range triggerData.Tags {
107
		if tag == SaturationFailedTag {
108
			shouldAddTag = false
109
			break
110
		}
111
	}
112
	if shouldAddTag {
113
		triggerData.Tags = append(triggerData.Tags, SaturationFailedTag)
114
	}
115

116
	// TODO
117
	return
118
}
119

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

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

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

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