package worker // mirror provider is the wrapper of mirror jobs type providerType uint8 const ( _WorkingDirKey = "working_dir" _LogDirKey = "log_dir" _LogFileKey = "log_file" ) // A mirrorProvider instance type mirrorProvider interface { // name Name() string // TODO: implement Run, Terminate and Hooks // run mirror job in background Start() // Wait job to finish Wait() // terminate mirror job Terminate() // job hooks Hooks() Interval() int WorkingDir() string LogDir() string LogFile() string // enter context EnterContext() *Context // exit context ExitContext() *Context // return context Context() *Context } type baseProvider struct { ctx *Context name string interval int } func (p *baseProvider) Name() string { return p.name } func (p *baseProvider) EnterContext() *Context { p.ctx = p.ctx.Enter() return p.ctx } func (p *baseProvider) ExitContext() *Context { p.ctx, _ = p.ctx.Exit() return p.ctx } func (p *baseProvider) Context() *Context { return p.ctx } func (p *baseProvider) Interval() int { return p.interval } func (p *baseProvider) WorkingDir() string { if v, ok := p.ctx.Get(_WorkingDirKey); ok { if s, ok := v.(string); ok { return s } } panic("working dir is impossible to be non-exist") } func (p *baseProvider) LogDir() string { if v, ok := p.ctx.Get(_LogDirKey); ok { if s, ok := v.(string); ok { return s } } panic("log dir is impossible to be unavailable") } func (p *baseProvider) LogFile() string { if v, ok := p.ctx.Get(_LogFileKey); ok { if s, ok := v.(string); ok { return s } } panic("log dir is impossible to be unavailable") }