provider.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package worker
  2. // mirror provider is the wrapper of mirror jobs
  3. type providerType uint8
  4. const (
  5. _WorkingDirKey = "working_dir"
  6. _LogDirKey = "log_dir"
  7. _LogFileKey = "log_file"
  8. )
  9. // A mirrorProvider instance
  10. type mirrorProvider interface {
  11. // name
  12. Name() string
  13. // TODO: implement Run, Terminate and Hooks
  14. // run mirror job in background
  15. Start()
  16. // Wait job to finish
  17. Wait()
  18. // terminate mirror job
  19. Terminate()
  20. // job hooks
  21. Hooks()
  22. Interval() int
  23. WorkingDir() string
  24. LogDir() string
  25. LogFile() string
  26. // enter context
  27. EnterContext() *Context
  28. // exit context
  29. ExitContext() *Context
  30. // return context
  31. Context() *Context
  32. }
  33. type baseProvider struct {
  34. ctx *Context
  35. name string
  36. interval int
  37. }
  38. func (p *baseProvider) Name() string {
  39. return p.name
  40. }
  41. func (p *baseProvider) EnterContext() *Context {
  42. p.ctx = p.ctx.Enter()
  43. return p.ctx
  44. }
  45. func (p *baseProvider) ExitContext() *Context {
  46. p.ctx, _ = p.ctx.Exit()
  47. return p.ctx
  48. }
  49. func (p *baseProvider) Context() *Context {
  50. return p.ctx
  51. }
  52. func (p *baseProvider) Interval() int {
  53. return p.interval
  54. }
  55. func (p *baseProvider) WorkingDir() string {
  56. if v, ok := p.ctx.Get(_WorkingDirKey); ok {
  57. if s, ok := v.(string); ok {
  58. return s
  59. }
  60. }
  61. panic("working dir is impossible to be non-exist")
  62. }
  63. func (p *baseProvider) LogDir() string {
  64. if v, ok := p.ctx.Get(_LogDirKey); ok {
  65. if s, ok := v.(string); ok {
  66. return s
  67. }
  68. }
  69. panic("log dir is impossible to be unavailable")
  70. }
  71. func (p *baseProvider) LogFile() string {
  72. if v, ok := p.ctx.Get(_LogFileKey); ok {
  73. if s, ok := v.(string); ok {
  74. return s
  75. }
  76. }
  77. panic("log dir is impossible to be unavailable")
  78. }