()
| 67 | } |
| 68 | |
| 69 | func (s *server) Start() error { |
| 70 | // Debug 关闭时,切换为生产模式 |
| 71 | if !s.config.System().Debug { |
| 72 | gin.SetMode(gin.ReleaseMode) |
| 73 | } |
| 74 | |
| 75 | s.kv = s.dep.KV() |
| 76 | // delete all cached settings |
| 77 | _ = s.kv.Delete(setting.KvSettingPrefix) |
| 78 | if memKv, ok := s.kv.(*cache.MemoStore); ok { |
| 79 | memKv.GarbageCollect(s.logger) |
| 80 | } |
| 81 | |
| 82 | // TODO: make sure redis is connected in dep before user traffic. |
| 83 | if s.config.System().Mode == conf.MasterMode { |
| 84 | s.dbClient = s.dep.DBClient() |
| 85 | // TODO: make sure all dep is initialized before server start. |
| 86 | s.dep.LockSystem() |
| 87 | s.dep.UAParser() |
| 88 | |
| 89 | // Initialize OneDrive credentials |
| 90 | credentials, err := onedrive.RetrieveOneDriveCredentials(context.Background(), s.dep.StoragePolicyClient()) |
| 91 | if err != nil { |
| 92 | return fmt.Errorf("faield to retrieve OneDrive credentials for CredManager: %w", err) |
| 93 | } |
| 94 | if err := s.dep.CredManager().Upsert(context.Background(), credentials...); err != nil { |
| 95 | return fmt.Errorf("failed to upsert OneDrive credentials to CredManager: %w", err) |
| 96 | } |
| 97 | crontab.Register(setting.CronTypeOauthCredRefresh, func(ctx context.Context) { |
| 98 | dep := dependency.FromContext(ctx) |
| 99 | cred := dep.CredManager() |
| 100 | cred.RefreshAll(ctx) |
| 101 | }) |
| 102 | |
| 103 | // Initialize email queue before user traffic starts. |
| 104 | _ = s.dep.EmailClient(context.Background()) |
| 105 | |
| 106 | // Start all queues |
| 107 | s.dep.MediaMetaQueue(context.Background()).Start() |
| 108 | s.dep.EntityRecycleQueue(context.Background()).Start() |
| 109 | s.dep.IoIntenseQueue(context.Background()).Start() |
| 110 | s.dep.RemoteDownloadQueue(context.Background()).Start() |
| 111 | |
| 112 | // Start cron jobs |
| 113 | c, err := crontab.NewCron(context.Background(), s.dep) |
| 114 | if err != nil { |
| 115 | return err |
| 116 | } |
| 117 | c.Start() |
| 118 | |
| 119 | // Start node pool |
| 120 | if _, err := s.dep.NodePool(context.Background()); err != nil { |
| 121 | return err |
| 122 | } |
| 123 | } else { |
| 124 | s.dep.SlaveQueue(context.Background()).Start() |
| 125 | } |
| 126 | s.dep.ThumbQueue(context.Background()).Start() |
nothing calls this directly
no test coverage detected