/**
* @Author: zou.yingbin
* @Create : 2021/10/15 16:28
* @Modify : 2021/10/15 16:28
*/
package other
import (
"fmt"
"html/template"
"io"
"io/ioutil"
"mtp2_if/config"
"net/http"
"regexp"
"sort"
"strings"
"github.com/gin-gonic/gin"
)
var (
VERSION string
GITHASH string
)
// LogList 列出日志文件
func LogList(c *gin.Context) {
host := c.Request.Host
if !strings.Contains(host, "http://") {
host = "http://" + host
}
const templateText = `
go查询服务信息
点击升级到最新版本
点击打开swagger
点击设置token(用于swagger查询)
=========配置信息============
version : {{.version}}
git hash: {{.githash}}
oracle : {{.db}}
mysql : {{.mysql}}
redis : {{.redis}}
版本列表(最近20次构建)
*** 点击版本,将升级到对应版本 ***
{{.verlist}}
日志文件列表
------------------------
{{.data}}
------------------------
`
sFile := make([]string, 0)
path := config.SerCfg.LogCfg.LogPath
db := fmt.Sprintf("%s/***@%s:%s/%s",
config.SerCfg.DbCfg.DbUser,
config.SerCfg.DbCfg.DbAddress,
config.SerCfg.DbCfg.DbPort,
config.SerCfg.DbCfg.DbName)
mysql := fmt.Sprintf("%s/***@%s:%v/%s",
config.SerCfg.MySQLCfg.Username,
config.SerCfg.MySQLCfg.Host,
config.SerCfg.MySQLCfg.Port,
config.SerCfg.MySQLCfg.DBName)
redis := fmt.Sprintf("%s:%v", config.SerCfg.RedisCfg.Address, config.SerCfg.RedisCfg.Port)
if d, err := ioutil.ReadDir(path); err == nil {
for _, v := range d {
if !v.IsDir() {
lk := fmt.Sprintf(`%v size:%.2f k`,
host, v.Name(), v.Name(), float64(v.Size())/1024.0)
lk2 := fmt.Sprintf(`查看`, host, v.Name())
lk = lk + " " + lk2
sFile = append(sFile, lk)
}
}
str := strings.Join(sFile, "\n
")
if tmpl, err := template.New("index").Parse(templateText); err == nil {
_ = tmpl.Execute(c.Writer, gin.H{"data": template.HTML(str), "db": template.HTML(db),
"mysql": template.HTML(mysql), "redis": template.HTML(redis),
"version": template.HTML(VERSION), "githash": template.HTML(GITHASH), "verlist": template.HTML(GetVerlist(host))})
} else {
c.String(400, "index err.")
}
} else {
c.JSON(http.StatusBadRequest, gin.H{"message": "can't list the file"})
}
}
// GetVerlist 获取版本列表(含html标记)
func GetVerlist(host string) string {
var strVerList string
url := `http://192.168.30.153/share/build/mtp2.0_release/`
if rsp, err := http.Get(url); err == nil {
if body, err2 := io.ReadAll(rsp.Body); err2 == nil {
strContext := string(body)
rx := regexp.MustCompile(`mtp2_queryservice_r[\d_]*\.zip`)
names := rx.FindAllStringSubmatch(strContext, -1)
mapName := make(map[string]string, 0)
for _, v := range names {
for _, d := range v {
mapName[d] = url + d
}
}
sName := make([]string, 0)
for k, _ := range mapName {
sName = append(sName, k)
}
// 按日期排序
sort.Slice(sName, func(i, j int) bool {
return sName[i] > sName[j]
})
for i := range sName {
strVerList += fmt.Sprintf(`%v`, host, sName[i], sName[i]) + "
"
// 取最近n条
if i >= 19 {
break
}
}
} else {
fmt.Println("can't read body")
}
rsp.Body.Close()
} else {
fmt.Println("can't get url.")
}
return strVerList
}