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 }