From 577ed27f1bb060080d311342047e31943a02ccbb Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Thu, 18 May 2017 15:05:57 -0400 Subject: PLT-6408 Framework for job server (#6404) * Added initial job server * Added job server to be ran as part of platform * Added test job to the enterprise repo * Fixed job server not loading license * Renamed job package to jobs * Fixed TE not being buildable * Added JobStatus table to database * Changed fields used by JobStatus * Added APIs to query job status * Added config change listener to server * Added option to run job server from Makefile * Added ability to enable/disable jobs from config * Commented out placeholder for search indexing job * Fixed govet * Removed debug messages and fixed job api init message --- jobs/jobs.go | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 jobs/jobs.go (limited to 'jobs/jobs.go') diff --git a/jobs/jobs.go b/jobs/jobs.go new file mode 100644 index 000000000..8c84f4eea --- /dev/null +++ b/jobs/jobs.go @@ -0,0 +1,74 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package jobs + +import ( + "sync" + + l4g "github.com/alecthomas/log4go" + ejobs "github.com/mattermost/platform/einterfaces/jobs" + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/store" + "github.com/mattermost/platform/utils" +) + +type Jobs struct { + startOnce sync.Once + + DataRetention model.Job + // SearchIndexing model.Job + + listenerId string +} + +func InitJobs(s store.Store) *Jobs { + jobs := &Jobs{ + // SearchIndexing: MakeTestJob(s, "SearchIndexing"), + } + + if dataRetentionInterface := ejobs.GetDataRetentionInterface(); dataRetentionInterface != nil { + jobs.DataRetention = dataRetentionInterface.MakeJob(s) + } + + return jobs +} + +func (jobs *Jobs) Start() *Jobs { + l4g.Info("Starting jobs") + + jobs.startOnce.Do(func() { + if jobs.DataRetention != nil && *utils.Cfg.DataRetentionSettings.Enable { + go jobs.DataRetention.Run() + } + + // go jobs.SearchIndexing.Run() + }) + + jobs.listenerId = utils.AddConfigListener(jobs.handleConfigChange) + + return jobs +} + +func (jobs *Jobs) handleConfigChange(oldConfig *model.Config, newConfig *model.Config) { + if jobs.DataRetention != nil { + if !*oldConfig.DataRetentionSettings.Enable && *newConfig.DataRetentionSettings.Enable { + go jobs.DataRetention.Run() + } else if *oldConfig.DataRetentionSettings.Enable && !*newConfig.DataRetentionSettings.Enable { + jobs.DataRetention.Stop() + } + } +} + +func (jobs *Jobs) Stop() *Jobs { + utils.RemoveConfigListener(jobs.listenerId) + + if jobs.DataRetention != nil && *utils.Cfg.DataRetentionSettings.Enable { + jobs.DataRetention.Stop() + } + // jobs.SearchIndexing.Stop() + + l4g.Info("Stopped jobs") + + return jobs +} -- cgit v1.2.3-1-g7c22