mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
* Created message export scheduled task * Added CLI command to immediately kick off an export job * Added email addresses for users joining and leaving the channel to the export * Added support for both MySQL and PostgreSQL * Fixing gofmt error * Added a new ChannelMemberHistory store and associated tests * Updating the ChannelMemberHistory channel as users create/join/leave channels * Added user email to the message export object so it can be included in the actiance export xml * Don't fail to log a leave event if a corresponding join event wasn't logged * Adding copyright notices * Adding message export settings to daily diagnostics report * Added System Console integration for message export * Cleaned up TODOs * Made batch size configurable * Added export from timestamp to CLI command * Made ChannelMemberHistory table updates best effort * Added a context-based timeout option to the message export CLI * Minor PR updates/improvements * Removed unnecessary fields from MessageExport object to reduce query overhead * Removed JSON functions from the message export query in an effort to optimize performance * Changed the way that channel member history queries and purges work to better account for edge cases * Fixing a test I missed with the last refactor * Added file copy functionality to file backend, improved config validation, added default config values * Fixed file copy tests * More concise use of the testing libraries * Fixed context leak error * Changed default export path to correctly place an 'export' directory under the 'data' directory * Can't delete records from a read replica * Fixed copy file tests * Start job workers when license is applied, if configured to do so * Suggestions from the PR * Moar unit tests * Fixed test imports
84 lines
2.2 KiB
Go
84 lines
2.2 KiB
Go
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
package jobs
|
|
|
|
import (
|
|
l4g "github.com/alecthomas/log4go"
|
|
|
|
ejobs "github.com/mattermost/mattermost-server/einterfaces/jobs"
|
|
"github.com/mattermost/mattermost-server/model"
|
|
"github.com/mattermost/mattermost-server/store"
|
|
"github.com/mattermost/mattermost-server/utils"
|
|
)
|
|
|
|
type JobServer struct {
|
|
Config model.ConfigFunc
|
|
Store store.Store
|
|
Workers *Workers
|
|
Schedulers *Schedulers
|
|
|
|
DataRetentionJob ejobs.DataRetentionJobInterface
|
|
MessageExportJob ejobs.MessageExportJobInterface
|
|
ElasticsearchAggregator ejobs.ElasticsearchAggregatorInterface
|
|
ElasticsearchIndexer ejobs.ElasticsearchIndexerInterface
|
|
LdapSync ejobs.LdapSyncInterface
|
|
}
|
|
|
|
func NewJobServer(config model.ConfigFunc, store store.Store) *JobServer {
|
|
return &JobServer{
|
|
Config: config,
|
|
Store: store,
|
|
}
|
|
}
|
|
|
|
func (srv *JobServer) LoadLicense() {
|
|
licenseId := ""
|
|
if result := <-srv.Store.System().Get(); result.Err == nil {
|
|
props := result.Data.(model.StringMap)
|
|
licenseId = props[model.SYSTEM_ACTIVE_LICENSE_ID]
|
|
}
|
|
|
|
var licenseBytes []byte
|
|
|
|
if len(licenseId) != 26 {
|
|
// Lets attempt to load the file from disk since it was missing from the DB
|
|
_, licenseBytes = utils.GetAndValidateLicenseFileFromDisk()
|
|
} else {
|
|
if result := <-srv.Store.License().Get(licenseId); result.Err == nil {
|
|
record := result.Data.(*model.LicenseRecord)
|
|
licenseBytes = []byte(record.Bytes)
|
|
l4g.Info("License key valid unlocking enterprise features.")
|
|
} else {
|
|
l4g.Info(utils.T("mattermost.load_license.find.warn"))
|
|
}
|
|
}
|
|
|
|
if licenseBytes != nil {
|
|
utils.LoadLicense(licenseBytes)
|
|
l4g.Info("License key valid unlocking enterprise features.")
|
|
} else {
|
|
l4g.Info(utils.T("mattermost.load_license.find.warn"))
|
|
}
|
|
}
|
|
|
|
func (srv *JobServer) StartWorkers() {
|
|
srv.Workers = srv.InitWorkers().Start()
|
|
}
|
|
|
|
func (srv *JobServer) StartSchedulers() {
|
|
srv.Schedulers = srv.InitSchedulers().Start()
|
|
}
|
|
|
|
func (srv *JobServer) StopWorkers() {
|
|
if srv.Workers != nil {
|
|
srv.Workers.Stop()
|
|
}
|
|
}
|
|
|
|
func (srv *JobServer) StopSchedulers() {
|
|
if srv.Schedulers != nil {
|
|
srv.Schedulers.Stop()
|
|
}
|
|
}
|