This repository has been archived by the owner on Dec 11, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
opsgenie.go
95 lines (82 loc) · 2.18 KB
/
opsgenie.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"context"
"fmt"
"github.com/opsgenie/opsgenie-go-sdk-v2/alert"
"github.com/opsgenie/opsgenie-go-sdk-v2/client"
"github.com/opsgenie/opsgenie-go-sdk-v2/team"
"github.com/opsgenie/opsgenie-go-sdk-v2/user"
)
type OpsgenieClient struct {
alerts *alert.Client
teams *team.Client
users *user.Client
}
const (
alertOpenStatus = "open"
alertClosedStatus = "closed"
)
func NewOpsgenieClient(apikey string) (*OpsgenieClient, error) {
alertClient, err := alert.NewClient(&client.Config{ApiKey: apikey})
if err != nil {
return nil, err
}
teamClient, err := team.NewClient(&client.Config{ApiKey: apikey})
if err != nil {
return nil, err
}
userClient, err := user.NewClient(&client.Config{ApiKey: apikey})
if err != nil {
return nil, err
}
return &OpsgenieClient{
alerts: alertClient,
teams: teamClient,
users: userClient,
}, nil
}
func (c *OpsgenieClient) CountAlerts() (float64, error) {
res, err := c.alerts.CountAlerts(context.Background(), &alert.CountAlertsRequest{
Query: "",
})
if err != nil {
return 0, err
}
return float64(res.Count), nil
}
func (c *OpsgenieClient) CountClosedAlerts() (float64, error) {
res, err := c.alerts.CountAlerts(context.Background(), &alert.CountAlertsRequest{
Query: fmt.Sprintf("status: %s", alertClosedStatus),
})
if err != nil {
return 0, err
}
return float64(res.Count), nil
}
func (c *OpsgenieClient) CountOpenAlerts() (float64, error) {
res, err := c.alerts.CountAlerts(context.Background(), &alert.CountAlertsRequest{
Query: fmt.Sprintf("status: %s", alertOpenStatus),
})
if err != nil {
return 0, err
}
return float64(res.Count), nil
}
func (c *OpsgenieClient) CountTeams() (float64, error) {
res, err := c.teams.List(context.Background(), &team.ListTeamRequest{})
if err != nil {
return 0, err
}
return float64(len(res.Teams)), nil
}
func (c *OpsgenieClient) CountUsersByRole() (map[string]float64, error) {
res, err := c.users.List(context.Background(), &user.ListRequest{})
if err != nil {
return make(map[string]float64), err
}
count := make(map[string]float64)
for _, user := range res.Users {
count[user.Role.RoleName] = count[user.Role.RoleName] + 1
}
return count, nil
}