Rainbond/worker/appm/appm.go
2019-03-12 09:59:09 +08:00

77 lines
2.3 KiB
Go

// RAINBOND, Application Management Platform
// Copyright (C) 2014-2017 Goodrain Co., Ltd.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version. For any non-GPL usage of Rainbond,
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
// must be obtained first.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package appm
import (
"github.com/Sirupsen/logrus"
"github.com/eapache/channels"
opt "github.com/goodrain/rainbond/cmd/worker/option"
"github.com/goodrain/rainbond/worker/appm/prober"
"github.com/goodrain/rainbond/worker/appm/store"
"github.com/goodrain/rainbond/worker/appm/thirdparty"
"k8s.io/client-go/kubernetes"
)
// NewAPPMController creates a new appm controller.
func NewAPPMController(clientset *kubernetes.Clientset,
store store.Storer,
startCh *channels.RingChannel,
updateCh *channels.RingChannel,
probeCh *channels.RingChannel) *Controller {
c := &Controller{
store: store,
updateCh: updateCh,
startCh: startCh,
probeCh: probeCh,
stopCh: make(chan struct{}),
}
// create prober first, then thirdparty
c.prober = prober.NewProber(c.store, c.probeCh, c.updateCh)
c.thirdparty = thirdparty.NewThirdPartier(clientset, c.store, c.startCh, c.updateCh, c.stopCh)
return c
}
// Controller describes a new appm controller.
type Controller struct {
cfg opt.Config
store store.Storer
thirdparty thirdparty.ThirdPartier
prober prober.Prober
startCh *channels.RingChannel
updateCh *channels.RingChannel
probeCh *channels.RingChannel
stopCh chan struct{}
}
// Start starts appm controller
func (c *Controller) Start() error {
logrus.Debugf("start appm manager...")
c.thirdparty.Start()
c.prober.Start()
return nil
}
// Stop stops appm controller.
func (c *Controller) Stop() {
close(c.stopCh)
c.prober.Stop()
}