github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/cmd/jsjob/flag.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"os"
     7  
     8  	"github.com/angenalZZZ/gofunc/js"
     9  
    10  	"github.com/robfig/cron/v3"
    11  
    12  	"github.com/angenalZZZ/gofunc/log"
    13  	nat "github.com/angenalZZZ/gofunc/rpc/nats"
    14  )
    15  
    16  var (
    17  	flagConfig = flag.String("c", "jsjob.yaml", "sets config file")
    18  	flagCron   = flag.String("n", "cron", "the cron variable name")
    19  	flagTest   = flag.Bool("t", false, "run test")
    20  	flagAddr   = flag.String("a", "", "the NatS-Server address")
    21  	flagToken  = flag.String("token", "", "the NatS-Token auth string [required]")
    22  	flagCred   = flag.String("cred", "", "the NatS-Cred file")
    23  	flagCert   = flag.String("cert", "", "the NatS-TLS cert file")
    24  	flagKey    = flag.String("key", "", "the NatS-TLS key file")
    25  )
    26  
    27  var (
    28  	isTest   = false
    29  	cronName = "cron"
    30  	jobCron  *cron.Cron
    31  	jobList  []*js.JobJs
    32  )
    33  
    34  func initArgs() {
    35  	flag.Usage = func() {
    36  		fmt.Printf(" Usage of %s:\n", os.Args[0])
    37  		flag.PrintDefaults()
    38  	}
    39  	flag.Parse()
    40  }
    41  
    42  func checkArgs() {
    43  	if *flagConfig != "" {
    44  		configFile = *flagConfig
    45  	}
    46  	if *flagCron != "" {
    47  		cronName = *flagCron
    48  	}
    49  
    50  	if err := initConfig(); err != nil {
    51  		panic(err)
    52  	}
    53  
    54  	if *flagAddr != "" {
    55  		configInfo.Nats.Addr = *flagAddr
    56  	}
    57  	if *flagToken != "" {
    58  		configInfo.Nats.Token = *flagToken
    59  	}
    60  	if *flagCred != "" {
    61  		configInfo.Nats.Cred = *flagCred
    62  	}
    63  	if *flagCert != "" {
    64  		configInfo.Nats.Cert = *flagCert
    65  	}
    66  	if *flagKey != "" {
    67  		configInfo.Nats.Key = *flagKey
    68  	}
    69  
    70  	if *flagTest {
    71  		isTest = true
    72  	}
    73  	if isTest {
    74  		configInfo.Log.Level = "debug"
    75  	}
    76  
    77  	if log.Log == nil {
    78  		log.Log = log.Init(configInfo.Log)
    79  	}
    80  	if nat.Log == nil {
    81  		nat.Log = log.Log
    82  	}
    83  	js.RunLogTimeFormat = configInfo.Log.TimeFormat
    84  	log.Log.Debug().Msgf("configuration complete")
    85  }
    86  
    87  func natClientConnect() {
    88  	var err error
    89  
    90  	// NatS
    91  	nat.Subject = "jsjob"
    92  	nat.Conn, err = nat.New("jsjob", configInfo.Nats.Addr, configInfo.Nats.Cred, configInfo.Nats.Token, configInfo.Nats.Cert, configInfo.Nats.Key)
    93  	if err != nil {
    94  		nat.Log.Error().Msgf("[nats] failed connect to server: %v\n", err)
    95  		os.Exit(1)
    96  	}
    97  }
    98  
    99  func runInit() {
   100  	if isTest {
   101  		return
   102  	}
   103  
   104  	var (
   105  		r   = js.NewRuntime(nil)
   106  		err error
   107  	)
   108  	defer func() { r.Clear() }()
   109  
   110  	// load js jobs
   111  	jobList, err = js.NewJobs(r, scriptFile, cronName, "")
   112  	if err != nil {
   113  		log.Log.Error().Msgf("[jsjob] %v\n", err)
   114  		os.Exit(1)
   115  	}
   116  
   117  	// init jobCron
   118  	jobCron = cron.New()
   119  	//jobCron = cron.New(cron.WithChain(cron.SkipIfStillRunning(&log.CronLogger{Log: log.Log})))
   120  
   121  	// adds jobs to the cron
   122  	for _, job := range jobList {
   123  		job.R = js.NewRuntime
   124  		if _, err = jobCron.AddJob(job.Spec, job); err != nil {
   125  			log.Log.Error().Msgf("[jsjob] failed add %q to cron: %v\n", job.Name, err)
   126  			os.Exit(1)
   127  		}
   128  	}
   129  
   130  	jobCron.Start()
   131  }
   132  
   133  func runTest() {
   134  	if !isTest {
   135  		return
   136  	}
   137  
   138  	var (
   139  		r   = js.NewRuntime(nil)
   140  		err error
   141  	)
   142  	defer func() { r.Clear() }()
   143  
   144  	// load js
   145  	jobList, err = js.NewJobs(r, scriptFile, cronName, "")
   146  	if err != nil {
   147  		log.Log.Error().Msgf("[test] %v\n", err)
   148  		os.Exit(1)
   149  	} else {
   150  		log.Log.Debug().Msgf("load js %q finished.", scriptFile)
   151  	}
   152  
   153  	// run jobs
   154  	for _, job := range jobList {
   155  		job.R = js.NewRuntime
   156  		job.Run()
   157  	}
   158  
   159  	log.Log.Debug().Msg("test finished.")
   160  	os.Exit(0)
   161  }