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  }