github.com/awesome-flow/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  }