github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/cmd/hkserver/commands/jobserver.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package commands
     5  
     6  import (
     7  	"os"
     8  	"os/signal"
     9  	"syscall"
    10  
    11  	"github.com/spf13/cobra"
    12  
    13  	"github.com/masterhung0112/hk_server/v5/audit"
    14  	"github.com/masterhung0112/hk_server/v5/config"
    15  	"github.com/masterhung0112/hk_server/v5/shared/mlog"
    16  )
    17  
    18  var JobserverCmd = &cobra.Command{
    19  	Use:   "jobserver",
    20  	Short: "Start the Mattermost job server",
    21  	RunE:  jobserverCmdF,
    22  }
    23  
    24  func init() {
    25  	JobserverCmd.Flags().Bool("nojobs", false, "Do not run jobs on this jobserver.")
    26  	JobserverCmd.Flags().Bool("noschedule", false, "Do not schedule jobs from this jobserver.")
    27  
    28  	RootCmd.AddCommand(JobserverCmd)
    29  }
    30  
    31  func jobserverCmdF(command *cobra.Command, args []string) error {
    32  	// Options
    33  	noJobs, _ := command.Flags().GetBool("nojobs")
    34  	noSchedule, _ := command.Flags().GetBool("noschedule")
    35  
    36  	// Initialize
    37  	a, err := initDBCommandContext(getConfigDSN(command, config.GetEnvironment()), false)
    38  	if err != nil {
    39  		return err
    40  	}
    41  	defer a.Srv().Shutdown()
    42  
    43  	a.Srv().LoadLicense()
    44  
    45  	// Run jobs
    46  	mlog.Info("Starting Mattermost job server")
    47  	defer mlog.Info("Stopped Mattermost job server")
    48  
    49  	if !noJobs {
    50  		a.Srv().Jobs.StartWorkers()
    51  		defer a.Srv().Jobs.StopWorkers()
    52  	}
    53  	if !noSchedule {
    54  		a.Srv().Jobs.StartSchedulers()
    55  		defer a.Srv().Jobs.StopSchedulers()
    56  	}
    57  
    58  	if !noJobs || !noSchedule {
    59  		auditRec := a.MakeAuditRecord("jobServer", audit.Success)
    60  		a.LogAuditRec(auditRec, nil)
    61  	}
    62  
    63  	signalChan := make(chan os.Signal, 1)
    64  	signal.Notify(signalChan, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
    65  	<-signalChan
    66  
    67  	// Cleanup anything that isn't handled by a defer statement
    68  	mlog.Info("Stopping Mattermost job server")
    69  
    70  	return nil
    71  }