forked from wish/eventmaster
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevents.go
100 lines (88 loc) · 2.93 KB
/
events.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
96
97
98
99
100
package eventmaster
import (
"encoding/json"
"net/http"
"github.com/wish/eventmaster/jh"
"github.com/julienschmidt/httprouter"
"github.com/pkg/errors"
)
// EventResult is the json-serializable version of an Event.
type EventResult struct {
EventID string `json:"event_id"`
ParentEventID string `json:"parent_event_id"`
EventTime int64 `json:"event_time"`
DC string `json:"dc"`
TopicName string `json:"topic_name"`
Tags []string `json:"tag_set"`
Host string `json:"host"`
TargetHosts []string `json:"target_host_set"`
User string `json:"user"`
Data map[string]interface{} `json:"data"`
ReceivedTime int64 `json:"received_time"`
}
// SearchResult groups a slice of EventResult for http responses.
type SearchResult struct {
Results []*EventResult `json:"results"`
}
func (s *Server) addEvent(w http.ResponseWriter, r *http.Request, _ httprouter.Params) (interface{}, error) {
var evt UnaddedEvent
if err := json.NewDecoder(r.Body).Decode(&evt); err != nil {
return evt, jh.NewError(errors.Wrap(err, "json decode").Error(), http.StatusBadRequest)
}
id, err := s.store.AddEvent(&evt)
if err != nil {
return nil, jh.Wrap(err, "add event")
}
return map[string]string{"event_id": id}, nil
}
func (s *Server) getEvent(w http.ResponseWriter, r *http.Request, _ httprouter.Params) (interface{}, error) {
q, err := getQueryFromRequest(r)
if err != nil {
return q, jh.NewError(errors.Wrap(err, "get query from request").Error(), http.StatusBadRequest)
}
events, err := s.store.Find(q)
if err != nil {
return events, errors.Wrap(err, "find events")
}
sr := SearchResult{}
for _, ev := range events {
sr.Results = append(sr.Results, &EventResult{
EventID: ev.EventID,
ParentEventID: ev.ParentEventID,
EventTime: ev.EventTime,
DC: s.store.getDCName(ev.DCID),
TopicName: s.store.getTopicName(ev.TopicID),
Tags: ev.Tags,
Host: ev.Host,
TargetHosts: ev.TargetHosts,
User: ev.User,
Data: ev.Data,
})
}
return sr, nil
}
func (s *Server) getEventByID(w http.ResponseWriter, r *http.Request, ps httprouter.Params) (interface{}, error) {
eventID := ps.ByName("id")
if eventID == "" {
return nil, errors.New("did not provide event id")
}
ev, err := s.store.FindByID(eventID)
if err != nil {
return ev, errors.Wrap(err, "find by id")
}
ret := map[string]EventResult{
"result": {
EventID: ev.EventID,
ParentEventID: ev.ParentEventID,
EventTime: ev.EventTime,
DC: s.store.getDCName(ev.DCID),
TopicName: s.store.getTopicName(ev.TopicID),
Tags: ev.Tags,
Host: ev.Host,
TargetHosts: ev.TargetHosts,
User: ev.User,
Data: ev.Data,
},
}
return ret, nil
}