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 }