github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edge/pkg/metamanager/metamanager.go (about)

     1  package metamanager
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/astaxie/beego/orm"
     7  	"k8s.io/klog"
     8  
     9  	"github.com/kubeedge/beehive/pkg/core"
    10  	beehiveContext "github.com/kubeedge/beehive/pkg/core/context"
    11  	"github.com/kubeedge/beehive/pkg/core/model"
    12  	"github.com/kubeedge/kubeedge/edge/pkg/common/modules"
    13  	metamanagerconfig "github.com/kubeedge/kubeedge/edge/pkg/metamanager/config"
    14  	"github.com/kubeedge/kubeedge/edge/pkg/metamanager/dao"
    15  	"github.com/kubeedge/kubeedge/pkg/apis/componentconfig/edgecore/v1alpha1"
    16  )
    17  
    18  //constant metamanager module name
    19  const (
    20  	MetaManagerModuleName = "metaManager"
    21  )
    22  
    23  type metaManager struct {
    24  	enable bool
    25  }
    26  
    27  func newMetaManager(enable bool) *metaManager {
    28  	return &metaManager{enable: enable}
    29  }
    30  
    31  // Register register metamanager
    32  func Register(metaManager *v1alpha1.MetaManager) {
    33  	metamanagerconfig.InitConfigure(metaManager)
    34  	meta := newMetaManager(metaManager.Enable)
    35  	initDBTable(meta)
    36  	core.Register(meta)
    37  }
    38  
    39  // initDBTable create table
    40  func initDBTable(module core.Module) {
    41  	klog.Infof("Begin to register %v db model", module.Name())
    42  	if !module.Enable() {
    43  		klog.Infof("Module %s is disabled, DB meta for it will not be registered", module.Name())
    44  		return
    45  	}
    46  	orm.RegisterModel(new(dao.Meta))
    47  }
    48  
    49  func (*metaManager) Name() string {
    50  	return MetaManagerModuleName
    51  }
    52  
    53  func (*metaManager) Group() string {
    54  	return modules.MetaGroup
    55  }
    56  
    57  func (m *metaManager) Enable() bool {
    58  	return m.enable
    59  }
    60  
    61  func (m *metaManager) Start() {
    62  
    63  	go func() {
    64  		period := getSyncInterval()
    65  		timer := time.NewTimer(period)
    66  		for {
    67  			select {
    68  			case <-beehiveContext.Done():
    69  				klog.Warning("MetaManager stop")
    70  				return
    71  			case <-timer.C:
    72  				timer.Reset(period)
    73  				msg := model.NewMessage("").BuildRouter(MetaManagerModuleName, GroupResource, model.ResourceTypePodStatus, OperationMetaSync)
    74  				beehiveContext.Send(MetaManagerModuleName, *msg)
    75  			}
    76  		}
    77  	}()
    78  
    79  	m.runMetaManager()
    80  }
    81  
    82  func getSyncInterval() time.Duration {
    83  	return time.Duration(metamanagerconfig.Config.PodStatusSyncInterval) * time.Second
    84  }