github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/jobs/server.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package jobs 5 6 import ( 7 "sync" 8 9 "github.com/masterhung0112/hk_server/v5/einterfaces" 10 ejobs "github.com/masterhung0112/hk_server/v5/einterfaces/jobs" 11 tjobs "github.com/masterhung0112/hk_server/v5/jobs/interfaces" 12 "github.com/masterhung0112/hk_server/v5/model" 13 "github.com/masterhung0112/hk_server/v5/services/configservice" 14 "github.com/masterhung0112/hk_server/v5/store" 15 ) 16 17 type JobServer struct { 18 ConfigService configservice.ConfigService 19 Store store.Store 20 metrics einterfaces.MetricsInterface 21 22 DataRetentionJob ejobs.DataRetentionJobInterface 23 MessageExportJob ejobs.MessageExportJobInterface 24 ElasticsearchAggregator ejobs.ElasticsearchAggregatorInterface 25 ElasticsearchIndexer tjobs.IndexerJobInterface 26 LdapSync ejobs.LdapSyncInterface 27 Migrations tjobs.MigrationsJobInterface 28 Plugins tjobs.PluginsJobInterface 29 BleveIndexer tjobs.IndexerJobInterface 30 ExpiryNotify tjobs.ExpiryNotifyJobInterface 31 ProductNotices tjobs.ProductNoticesJobInterface 32 ActiveUsers tjobs.ActiveUsersJobInterface 33 ImportProcess tjobs.ImportProcessInterface 34 ImportDelete tjobs.ImportDeleteInterface 35 ExportProcess tjobs.ExportProcessInterface 36 ExportDelete tjobs.ExportDeleteInterface 37 Cloud ejobs.CloudJobInterface 38 ResendInvitationEmails ejobs.ResendInvitationEmailJobInterface 39 40 // mut is used to protect the following fields from concurrent access. 41 mut sync.Mutex 42 workers *Workers 43 schedulers *Schedulers 44 } 45 46 func NewJobServer(configService configservice.ConfigService, store store.Store, metrics einterfaces.MetricsInterface) *JobServer { 47 return &JobServer{ 48 ConfigService: configService, 49 Store: store, 50 metrics: metrics, 51 } 52 } 53 54 func (srv *JobServer) Config() *model.Config { 55 return srv.ConfigService.Config() 56 } 57 58 func (srv *JobServer) StartWorkers() error { 59 srv.mut.Lock() 60 defer srv.mut.Unlock() 61 if srv.workers == nil { 62 return ErrWorkersUninitialized 63 } else if srv.workers.running { 64 return ErrWorkersRunning 65 } 66 srv.workers.Start() 67 return nil 68 } 69 70 func (srv *JobServer) StartSchedulers() error { 71 srv.mut.Lock() 72 defer srv.mut.Unlock() 73 if srv.schedulers == nil { 74 return ErrSchedulersUninitialized 75 } else if srv.schedulers.running { 76 return ErrSchedulersRunning 77 } 78 srv.schedulers.Start() 79 return nil 80 } 81 82 func (srv *JobServer) StopWorkers() error { 83 srv.mut.Lock() 84 defer srv.mut.Unlock() 85 if srv.workers == nil { 86 return ErrWorkersUninitialized 87 } else if !srv.workers.running { 88 return ErrWorkersNotRunning 89 } 90 srv.workers.Stop() 91 return nil 92 } 93 94 func (srv *JobServer) StopSchedulers() error { 95 srv.mut.Lock() 96 defer srv.mut.Unlock() 97 if srv.schedulers == nil { 98 return ErrSchedulersUninitialized 99 } else if !srv.schedulers.running { 100 return ErrSchedulersNotRunning 101 } 102 srv.schedulers.Stop() 103 return nil 104 } 105 106 func (srv *JobServer) HandleClusterLeaderChange(isLeader bool) { 107 srv.mut.Lock() 108 defer srv.mut.Unlock() 109 if srv.schedulers != nil { 110 srv.schedulers.handleClusterLeaderChange(isLeader) 111 } 112 }