event-processor: delegate launching action to appmanager
diff --git a/events/appmanager.go b/events/appmanager.go
index 91b6791..783586c 100644
--- a/events/appmanager.go
+++ b/events/appmanager.go
@@ -1,19 +1,24 @@
package events
import (
+ "bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
+
+ "github.com/golang/glog"
)
type Trigger struct {
- Namespace string `json:"namespace"`
- Template string `json:"template"`
+ App string `json:"app"`
+ Action string `json:"action"`
}
type AppManager interface {
- QueryTriggers(triggerOnType string, triggerOnEvent string) ([]Trigger, error)
+ QueryTriggers(triggerOnType, triggerOnEvent string) ([]Trigger, error)
+ // TODO(giolekva): must return launched action id to enable monitoring
+ LaunchAction(app, action string, args interface{}) error
}
type appManagerClient struct {
@@ -41,3 +46,27 @@
}
return triggers, nil
}
+
+type actionArgs struct {
+ App string `json:"app"`
+ Action string `json:"action"`
+ Args interface{} `json:"args"`
+}
+
+func (c *appManagerClient) LaunchAction(app, action string, args interface{}) error {
+ actionUrl := fmt.Sprintf("%s/launch_action", c.addr)
+ reqJson, err := json.Marshal(actionArgs{app, action, args})
+ if err != nil {
+ return err
+ }
+ resp, err := http.Post(actionUrl, "application/json", bytes.NewReader(reqJson))
+ if err != nil {
+ return err
+ }
+ respBody, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ return err
+ }
+ glog.Info("Triggered action: %s", string(respBody))
+ return nil
+}