blob: 783586c13c1ffce1156d1b14658f54cb2da574c0 [file] [log] [blame]
giolekva8d9f1022020-05-13 20:13:36 +04001package events
2
3import (
giolekva79323902020-05-16 13:52:19 +04004 "bytes"
giolekva8d9f1022020-05-13 20:13:36 +04005 "encoding/json"
6 "fmt"
7 "io/ioutil"
8 "net/http"
giolekva79323902020-05-16 13:52:19 +04009
10 "github.com/golang/glog"
giolekva8d9f1022020-05-13 20:13:36 +040011)
12
13type Trigger struct {
giolekva79323902020-05-16 13:52:19 +040014 App string `json:"app"`
15 Action string `json:"action"`
giolekva8d9f1022020-05-13 20:13:36 +040016}
17
18type AppManager interface {
giolekva79323902020-05-16 13:52:19 +040019 QueryTriggers(triggerOnType, triggerOnEvent string) ([]Trigger, error)
20 // TODO(giolekva): must return launched action id to enable monitoring
21 LaunchAction(app, action string, args interface{}) error
giolekva8d9f1022020-05-13 20:13:36 +040022}
23
24type appManagerClient struct {
25 addr string
26}
27
28func NewAppManagerClient(addr string) AppManager {
29 return &appManagerClient{addr}
30}
31
32func (c *appManagerClient) QueryTriggers(triggerOnType string, triggerOnEvent string) ([]Trigger, error) {
33 triggerUrl := fmt.Sprintf("%s/triggers?trigger_on_type=%s&trigger_on_event=%s",
34 c.addr, triggerOnType, triggerOnEvent)
35 resp, err := http.Get(triggerUrl)
36 if err != nil {
37 return nil, err
38 }
39 respBody, err := ioutil.ReadAll(resp.Body)
40 if err != nil {
41 return nil, err
42 }
43 triggers := make([]Trigger, 0)
44 if err := json.Unmarshal(respBody, &triggers); err != nil {
45 return nil, err
46 }
47 return triggers, nil
48}
giolekva79323902020-05-16 13:52:19 +040049
50type actionArgs struct {
51 App string `json:"app"`
52 Action string `json:"action"`
53 Args interface{} `json:"args"`
54}
55
56func (c *appManagerClient) LaunchAction(app, action string, args interface{}) error {
57 actionUrl := fmt.Sprintf("%s/launch_action", c.addr)
58 reqJson, err := json.Marshal(actionArgs{app, action, args})
59 if err != nil {
60 return err
61 }
62 resp, err := http.Post(actionUrl, "application/json", bytes.NewReader(reqJson))
63 if err != nil {
64 return err
65 }
66 respBody, err := ioutil.ReadAll(resp.Body)
67 if err != nil {
68 return err
69 }
70 glog.Info("Triggered action: %s", string(respBody))
71 return nil
72}