main.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package worker
  2. import (
  3. "bytes"
  4. "errors"
  5. "html/template"
  6. "path/filepath"
  7. "time"
  8. )
  9. // toplevel module for workers
  10. func initProviders(c *Config) []mirrorProvider {
  11. formatLogDir := func(logDir string, m mirrorConfig) string {
  12. tmpl, err := template.New("logDirTmpl-" + m.Name).Parse(logDir)
  13. if err != nil {
  14. panic(err)
  15. }
  16. var formatedLogDir bytes.Buffer
  17. tmpl.Execute(&formatedLogDir, m)
  18. return formatedLogDir.String()
  19. }
  20. providers := []mirrorProvider{}
  21. for _, mirror := range c.Mirrors {
  22. logDir := mirror.LogDir
  23. mirrorDir := mirror.MirrorDir
  24. if logDir == "" {
  25. logDir = c.Global.LogDir
  26. }
  27. if mirrorDir == "" {
  28. mirrorDir = c.Global.MirrorDir
  29. }
  30. logDir = formatLogDir(logDir, mirror)
  31. switch mirror.Provider {
  32. case ProvCommand:
  33. pc := cmdConfig{
  34. name: mirror.Name,
  35. upstreamURL: mirror.Upstream,
  36. command: mirror.Command,
  37. workingDir: filepath.Join(mirrorDir, mirror.Name),
  38. logDir: logDir,
  39. logFile: filepath.Join(logDir, "latest.log"),
  40. interval: time.Duration(mirror.Interval) * time.Minute,
  41. env: mirror.Env,
  42. }
  43. p, err := newCmdProvider(pc)
  44. if err != nil {
  45. panic(err)
  46. }
  47. providers = append(providers, p)
  48. case ProvRsync:
  49. rc := rsyncConfig{
  50. name: mirror.Name,
  51. upstreamURL: mirror.Upstream,
  52. password: mirror.Password,
  53. excludeFile: mirror.ExcludeFile,
  54. workingDir: filepath.Join(mirrorDir, mirror.Name),
  55. logDir: logDir,
  56. logFile: filepath.Join(logDir, "latest.log"),
  57. useIPv6: mirror.UseIPv6,
  58. interval: time.Duration(mirror.Interval) * time.Minute,
  59. }
  60. p, err := newRsyncProvider(rc)
  61. if err != nil {
  62. panic(err)
  63. }
  64. providers = append(providers, p)
  65. case ProvTwoStageRsync:
  66. rc := twoStageRsyncConfig{
  67. name: mirror.Name,
  68. stage1Profile: mirror.Stage1Profile,
  69. upstreamURL: mirror.Upstream,
  70. password: mirror.Password,
  71. excludeFile: mirror.ExcludeFile,
  72. workingDir: filepath.Join(mirrorDir, mirror.Name),
  73. logDir: logDir,
  74. logFile: filepath.Join(logDir, "latest.log"),
  75. useIPv6: mirror.UseIPv6,
  76. interval: time.Duration(mirror.Interval) * time.Minute,
  77. }
  78. p, err := newTwoStageRsyncProvider(rc)
  79. if err != nil {
  80. panic(err)
  81. }
  82. providers = append(providers, p)
  83. default:
  84. panic(errors.New("Invalid mirror provider"))
  85. }
  86. }
  87. return providers
  88. }
  89. func main() {
  90. for {
  91. // if time.Now().After() {
  92. //
  93. // }
  94. time.Sleep(1 * time.Second)
  95. }
  96. }