github.com/whiteboxio/flow@v0.0.3-0.20190918184116-508d75d68a2c/web/app/agent/agent.go (about) 1 package agent 2 3 import ( 4 "net/http" 5 6 core "github.com/awesome-flow/flow/pkg/corev1alpha1" 7 ) 8 9 type WebAgent interface { 10 GetPath() string 11 GetHandler() http.Handler 12 core.Runner 13 } 14 15 type WebAgents []WebAgent 16 17 func (w WebAgents) Len() int { return len(w) } 18 func (w WebAgents) Swap(i, j int) { w[i], w[j] = w[j], w[i] } 19 func (w WebAgents) Less(i, j int) bool { return w[i].GetPath() < w[j].GetPath() } 20 21 type DummyWebAgent struct { 22 path string 23 handler http.Handler 24 } 25 26 // TODO: accept both handler and handler func 27 func NewDummyWebAgent(path string, handler http.HandlerFunc) *DummyWebAgent { 28 return &DummyWebAgent{ 29 path: path, 30 handler: handler, 31 } 32 } 33 34 func (dwa *DummyWebAgent) GetPath() string { 35 return dwa.path 36 } 37 38 func (dwa *DummyWebAgent) GetHandler() http.Handler { 39 return dwa.handler 40 } 41 42 func (dwa *DummyWebAgent) Start() error { 43 return nil 44 } 45 46 func (dws *DummyWebAgent) Stop() error { 47 return nil 48 } 49 50 type WebAgentRegistrator func(*core.Context) (WebAgent, error) 51 type WebAgentRegistrators []WebAgentRegistrator 52 53 var ( 54 webAgentRegistrators = make(WebAgentRegistrators, 0) 55 ) 56 57 func RegisterWebAgent(r WebAgentRegistrator) { 58 webAgentRegistrators = append(webAgentRegistrators, r) 59 } 60 61 func AllAgentRegistrators() WebAgentRegistrators { 62 return webAgentRegistrators 63 }