github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+incompatible/jobs/server.go (about)

     1  // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package jobs
     5  
     6  import (
     7  	l4g "github.com/alecthomas/log4go"
     8  
     9  	ejobs "github.com/mattermost/mattermost-server/einterfaces/jobs"
    10  	"github.com/mattermost/mattermost-server/model"
    11  	"github.com/mattermost/mattermost-server/store"
    12  	"github.com/mattermost/mattermost-server/utils"
    13  )
    14  
    15  type ConfigService interface {
    16  	Config() *model.Config
    17  	AddConfigListener(func(old, current *model.Config)) string
    18  	RemoveConfigListener(string)
    19  }
    20  
    21  type StaticConfigService struct {
    22  	Cfg *model.Config
    23  }
    24  
    25  func (s StaticConfigService) Config() *model.Config                                   { return s.Cfg }
    26  func (StaticConfigService) AddConfigListener(func(old, current *model.Config)) string { return "" }
    27  func (StaticConfigService) RemoveConfigListener(string)                               {}
    28  
    29  type JobServer struct {
    30  	ConfigService ConfigService
    31  	Store         store.Store
    32  	Workers       *Workers
    33  	Schedulers    *Schedulers
    34  
    35  	DataRetentionJob        ejobs.DataRetentionJobInterface
    36  	MessageExportJob        ejobs.MessageExportJobInterface
    37  	ElasticsearchAggregator ejobs.ElasticsearchAggregatorInterface
    38  	ElasticsearchIndexer    ejobs.ElasticsearchIndexerInterface
    39  	LdapSync                ejobs.LdapSyncInterface
    40  }
    41  
    42  func NewJobServer(configService ConfigService, store store.Store) *JobServer {
    43  	return &JobServer{
    44  		ConfigService: configService,
    45  		Store:         store,
    46  	}
    47  }
    48  
    49  func (srv *JobServer) Config() *model.Config {
    50  	return srv.ConfigService.Config()
    51  }
    52  
    53  func (srv *JobServer) LoadLicense() {
    54  	licenseId := ""
    55  	if result := <-srv.Store.System().Get(); result.Err == nil {
    56  		props := result.Data.(model.StringMap)
    57  		licenseId = props[model.SYSTEM_ACTIVE_LICENSE_ID]
    58  	}
    59  
    60  	var licenseBytes []byte
    61  
    62  	if len(licenseId) != 26 {
    63  		// Lets attempt to load the file from disk since it was missing from the DB
    64  		_, licenseBytes = utils.GetAndValidateLicenseFileFromDisk(*srv.ConfigService.Config().ServiceSettings.LicenseFileLocation)
    65  	} else {
    66  		if result := <-srv.Store.License().Get(licenseId); result.Err == nil {
    67  			record := result.Data.(*model.LicenseRecord)
    68  			licenseBytes = []byte(record.Bytes)
    69  			l4g.Info("License key valid unlocking enterprise features.")
    70  		} else {
    71  			l4g.Info(utils.T("mattermost.load_license.find.warn"))
    72  		}
    73  	}
    74  
    75  	if licenseBytes != nil {
    76  		utils.LoadLicense(licenseBytes)
    77  		l4g.Info("License key valid unlocking enterprise features.")
    78  	} else {
    79  		l4g.Info(utils.T("mattermost.load_license.find.warn"))
    80  	}
    81  }
    82  
    83  func (srv *JobServer) StartWorkers() {
    84  	srv.Workers = srv.InitWorkers().Start()
    85  }
    86  
    87  func (srv *JobServer) StartSchedulers() {
    88  	srv.Schedulers = srv.InitSchedulers().Start()
    89  }
    90  
    91  func (srv *JobServer) StopWorkers() {
    92  	if srv.Workers != nil {
    93  		srv.Workers.Stop()
    94  	}
    95  }
    96  
    97  func (srv *JobServer) StopSchedulers() {
    98  	if srv.Schedulers != nil {
    99  		srv.Schedulers.Stop()
   100  	}
   101  }