main.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "io/ioutil"
  6. "log"
  7. "net/http"
  8. "os/exec"
  9. "strings"
  10. "time"
  11. . "app.yhyue.com/moapp/jybase/common"
  12. . "app.yhyue.com/moapp/jybase/date"
  13. . "app.yhyue.com/moapp/jybase/mongodb"
  14. )
  15. type config struct {
  16. Mongodb struct {
  17. Address string
  18. Size int
  19. DbName string
  20. UserName string
  21. Password string
  22. }
  23. CmdText string
  24. NoMsgCmdText string
  25. TimeTask string
  26. Node string
  27. MailWarn string
  28. }
  29. var Config *config
  30. var Mgo *MongodbSim
  31. func main() {
  32. ReadConfig("./config.json", &Config)
  33. Mgo = &MongodbSim{
  34. MongodbAddr: Config.Mongodb.Address,
  35. Size: Config.Mongodb.Size,
  36. DbName: Config.Mongodb.DbName,
  37. UserName: Config.Mongodb.UserName,
  38. Password: Config.Mongodb.Password,
  39. }
  40. Mgo.InitPool()
  41. t := flag.Int("t", 0, "任务类型;1:全部 2:免费用户无消息")
  42. m := flag.Int("m", 0, "模式")
  43. y := flag.String("y", "", "年月日,例如:20250220")
  44. flag.Parse()
  45. if *m == 1 {
  46. run(*t, *y)
  47. } else {
  48. SimpleCrontab(false, Config.TimeTask, func() {
  49. run(*t, *y)
  50. })
  51. select {}
  52. }
  53. }
  54. func run(t int, y string) {
  55. var now time.Time
  56. if y != "" {
  57. var err error
  58. now, err = time.ParseInLocation(Date_yyyyMMdd, y, time.Local)
  59. if err != nil {
  60. log.Fatalln(err)
  61. }
  62. } else {
  63. now = time.Now().AddDate(0, 0, -1)
  64. }
  65. var cmdText string
  66. ymd := FormatDate(&now, Date_Short_Layout)
  67. if t == 1 {
  68. cmdText = fmt.Sprintf(Config.CmdText, ymd)
  69. } else if t == 2 {
  70. cmdText = fmt.Sprintf(Config.NoMsgCmdText, FormatDate(&now, Date_yyyyMMdd))
  71. } else {
  72. log.Fatalln("无效的-t参数")
  73. }
  74. count := getCmdResult(cmdText)
  75. log.Println(Config.Node, "模板消息推送量", count)
  76. if count == 0 {
  77. go http.Get(Config.MailWarn)
  78. }
  79. var tp string
  80. if t == 1 {
  81. tp = "all"
  82. } else if t == 2 {
  83. tp = "free_nomsg"
  84. }
  85. Mgo.Update("wxtmplsend_tj", map[string]interface{}{
  86. "ymd": ymd,
  87. "type": tp,
  88. "node": Config.Node,
  89. }, map[string]interface{}{
  90. "$set": map[string]interface{}{
  91. "count": count,
  92. "node": Config.Node,
  93. "ymd": ymd,
  94. "type": tp,
  95. },
  96. }, true, false)
  97. }
  98. //
  99. func getCmdResult(cmdText string) (count int64) {
  100. log.Println("执行命令", cmdText)
  101. cmd := exec.Command("/bin/bash", "-c", cmdText)
  102. //创建获取命令输出管道
  103. stdout, err := cmd.StdoutPipe()
  104. if err != nil {
  105. fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err)
  106. return
  107. }
  108. //执行命令
  109. if err := cmd.Start(); err != nil {
  110. fmt.Println("Error:The command is err,", err)
  111. return
  112. }
  113. //读取所有输出
  114. bytes, err := ioutil.ReadAll(stdout)
  115. if err != nil {
  116. fmt.Println("ReadAll Stdout:", err.Error())
  117. return
  118. }
  119. if err := cmd.Wait(); err != nil {
  120. fmt.Println("wait:", err.Error())
  121. return
  122. }
  123. count = Int64All(strings.TrimSpace(string(bytes)))
  124. return
  125. }