123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package main
- import (
- "flag"
- "fmt"
- "io/ioutil"
- "log"
- "net/http"
- "os/exec"
- "strings"
- "time"
- . "app.yhyue.com/moapp/jybase/common"
- . "app.yhyue.com/moapp/jybase/date"
- . "app.yhyue.com/moapp/jybase/mongodb"
- )
- type config struct {
- Mongodb struct {
- Address string
- Size int
- DbName string
- UserName string
- Password string
- }
- CmdText string
- NoMsgCmdText string
- TimeTask string
- Node string
- MailWarn string
- }
- var Config *config
- var Mgo *MongodbSim
- func main() {
- ReadConfig("./config.json", &Config)
- Mgo = &MongodbSim{
- MongodbAddr: Config.Mongodb.Address,
- Size: Config.Mongodb.Size,
- DbName: Config.Mongodb.DbName,
- UserName: Config.Mongodb.UserName,
- Password: Config.Mongodb.Password,
- }
- Mgo.InitPool()
- t := flag.Int("t", 0, "任务类型;1:全部 2:免费用户无消息")
- m := flag.Int("m", 0, "模式")
- y := flag.String("y", "", "年月日,例如:20250220")
- flag.Parse()
- if *m == 1 {
- run(*t, *y)
- } else {
- SimpleCrontab(false, Config.TimeTask, func() {
- run(*t, *y)
- })
- select {}
- }
- }
- func run(t int, y string) {
- var now time.Time
- if y != "" {
- var err error
- now, err = time.ParseInLocation(Date_yyyyMMdd, y, time.Local)
- if err != nil {
- log.Fatalln(err)
- }
- } else {
- now = time.Now().AddDate(0, 0, -1)
- }
- var cmdText string
- ymd := FormatDate(&now, Date_Short_Layout)
- if t == 1 {
- cmdText = fmt.Sprintf(Config.CmdText, ymd)
- } else if t == 2 {
- cmdText = fmt.Sprintf(Config.NoMsgCmdText, FormatDate(&now, Date_yyyyMMdd))
- } else {
- log.Fatalln("无效的-t参数")
- }
- count := getCmdResult(cmdText)
- log.Println(Config.Node, "模板消息推送量", count)
- if count == 0 {
- go http.Get(Config.MailWarn)
- }
- var tp string
- if t == 1 {
- tp = "all"
- } else if t == 2 {
- tp = "free_nomsg"
- }
- Mgo.Update("wxtmplsend_tj", map[string]interface{}{
- "ymd": ymd,
- "type": tp,
- "node": Config.Node,
- }, map[string]interface{}{
- "$set": map[string]interface{}{
- "count": count,
- "node": Config.Node,
- "ymd": ymd,
- "type": tp,
- },
- }, true, false)
- }
- //
- func getCmdResult(cmdText string) (count int64) {
- log.Println("执行命令", cmdText)
- cmd := exec.Command("/bin/bash", "-c", cmdText)
- //创建获取命令输出管道
- stdout, err := cmd.StdoutPipe()
- if err != nil {
- fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err)
- return
- }
- //执行命令
- if err := cmd.Start(); err != nil {
- fmt.Println("Error:The command is err,", err)
- return
- }
- //读取所有输出
- bytes, err := ioutil.ReadAll(stdout)
- if err != nil {
- fmt.Println("ReadAll Stdout:", err.Error())
- return
- }
- if err := cmd.Wait(); err != nil {
- fmt.Println("wait:", err.Error())
- return
- }
- count = Int64All(strings.TrimSpace(string(bytes)))
- return
- }
|