logfilelist.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/10/15 16:28
  4. * @Modify : 2021/10/15 16:28
  5. */
  6. package other
  7. import (
  8. "fmt"
  9. "html/template"
  10. "io"
  11. "io/ioutil"
  12. "mtp2_if/config"
  13. "net/http"
  14. "regexp"
  15. "sort"
  16. "strings"
  17. "github.com/gin-gonic/gin"
  18. )
  19. var (
  20. VERSION string
  21. GITHASH string
  22. )
  23. // LogList 列出日志文件
  24. func LogList(c *gin.Context) {
  25. host := c.Request.Host
  26. if !strings.Contains(host, "http://") {
  27. host = "http://" + host
  28. }
  29. const templateText = `
  30. <!DOCTYPE html>
  31. <head>
  32. <meta charset="UTF-8">
  33. </head>
  34. <body>
  35. <h1>go查询服务信息</h1>
  36. <a href="{{.host}}/debug/update" title="点击后从自动构建服务拉取版本升级并重启GO服务, 请谨慎点击" target="_blank">点击升级到最新版本</a>
  37. <br><br>
  38. <a href="{{.host}}/swagger/index.html" target="_blank">点击打开swagger</a>
  39. <br>
  40. <a href="{{.host}}/debug/token" title="仅当调试模式内网段才能成功设置" target="_blank">点击设置token(用于swagger查询)</a>
  41. <p>=========配置信息============</p>
  42. version : {{.version}}<br>
  43. git hash: {{.githash}}<br>
  44. oracle : {{.db}} <br>
  45. mysql : {{.mysql}} <br>
  46. redis : {{.redis}} <br>
  47. <h3>版本列表(最近20次构建)</h3>
  48. <font color="#DC143C">*** 点击版本,将升级到对应版本 ***</font>
  49. <br>
  50. {{.verlist}}
  51. <h2>日志文件列表</h2>
  52. <p>------------------------</p>
  53. {{.data}}
  54. <p>------------------------</p>
  55. </body>
  56. `
  57. sFile := make([]string, 0)
  58. path := config.SerCfg.LogCfg.LogPath
  59. db := fmt.Sprintf("%s/***@%s:%s/%s",
  60. config.SerCfg.DbCfg.DbUser,
  61. config.SerCfg.DbCfg.DbAddress,
  62. config.SerCfg.DbCfg.DbPort,
  63. config.SerCfg.DbCfg.DbName)
  64. mysql := fmt.Sprintf("%s/***@%s:%v/%s",
  65. config.SerCfg.MySQLCfg.Username,
  66. config.SerCfg.MySQLCfg.Host,
  67. config.SerCfg.MySQLCfg.Port,
  68. config.SerCfg.MySQLCfg.DBName)
  69. redis := fmt.Sprintf("%s:%v", config.SerCfg.RedisCfg.Address, config.SerCfg.RedisCfg.Port)
  70. if d, err := ioutil.ReadDir(path); err == nil {
  71. for _, v := range d {
  72. if !v.IsDir() {
  73. lk := fmt.Sprintf(`<a href="%v/debug/download?filename=%v" target="_blank">%v</a> size:%.2f k`,
  74. host, v.Name(), v.Name(), float64(v.Size())/1024.0)
  75. lk2 := fmt.Sprintf(`<a href="%v/debug/log/view?filename=%v" target="_blank">查看</a>`, host, v.Name())
  76. lk = lk + " " + lk2
  77. sFile = append(sFile, lk)
  78. }
  79. }
  80. str := strings.Join(sFile, "\n<br>")
  81. if tmpl, err := template.New("index").Parse(templateText); err == nil {
  82. _ = tmpl.Execute(c.Writer, gin.H{"data": template.HTML(str), "db": template.HTML(db),
  83. "mysql": template.HTML(mysql), "redis": template.HTML(redis),
  84. "version": template.HTML(VERSION), "githash": template.HTML(GITHASH), "verlist": template.HTML(GetVerlist(host))})
  85. } else {
  86. c.String(400, "index err.")
  87. }
  88. } else {
  89. c.JSON(http.StatusBadRequest, gin.H{"message": "can't list the file"})
  90. }
  91. }
  92. // GetVerlist 获取版本列表(含html标记)
  93. func GetVerlist(host string) string {
  94. var strVerList string
  95. url := `http://192.168.30.153/share/build/mtp2.0_release/`
  96. if rsp, err := http.Get(url); err == nil {
  97. if body, err2 := io.ReadAll(rsp.Body); err2 == nil {
  98. strContext := string(body)
  99. rx := regexp.MustCompile(`mtp2_queryservice_r[\d_]*\.zip`)
  100. names := rx.FindAllStringSubmatch(strContext, -1)
  101. mapName := make(map[string]string, 0)
  102. for _, v := range names {
  103. for _, d := range v {
  104. mapName[d] = url + d
  105. }
  106. }
  107. sName := make([]string, 0)
  108. for k, _ := range mapName {
  109. sName = append(sName, k)
  110. }
  111. // 按日期排序
  112. sort.Slice(sName, func(i, j int) bool {
  113. return sName[i] > sName[j]
  114. })
  115. for i := range sName {
  116. strVerList += fmt.Sprintf(`<a href="%v/debug/update?filename=%v" target="_blank">%v</a>`, host, sName[i], sName[i]) + "<br>"
  117. // 取最近n条
  118. if i >= 19 {
  119. break
  120. }
  121. }
  122. } else {
  123. fmt.Println("can't read body")
  124. }
  125. rsp.Body.Close()
  126. } else {
  127. fmt.Println("can't get url.")
  128. }
  129. return strVerList
  130. }