package util

import (
    "crypto/md5"
    "encoding/hex"
    "fmt"
    "os"
    "runtime"
    "strconv"
    "time"
)

var strCGroupLogID string = ""

func LogRecord(msg string, level string) (string, error) {
    ymd := time.Now().Format("2006-01-02")
    now := time.Now().Format("2006-01-02 15:04:05")
    fileName := GetAppPath() + "storage/" + level + "-" + ymd + ".log"

    logFile, logFileErr := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
    if logFileErr != nil {
        return "open log file fail", logFileErr
    }

    defer logFile.Close()

    _, file, line, _ := runtime.Caller(1)
    // log format = [时间] [用户组日志id] 日志信息
    if strCGroupLogID == "" {
        strCGroupLogID = GenCGroupLogID()
    }
    logFile.WriteString("[" + now + "][" + strCGroupLogID + "]" + msg + ", FILE:" + file + ", LINE:" + strconv.Itoa(line) + "\r\n")

    return "log ok", nil
}

func GenCGroupLogID() string {
    strGuid := GetGUID().Hex()
    strLocalIP := GetLocalIP()
    if strLocalIP == "" {
        strLocalIP = "127.0.0.1"
    }
    int64LocalIP := InetAtoN(strLocalIP)
    _ = strLocalIP
    strCGroupLogID = strconv.FormatInt(int64LocalIP, 10) + "-" + strGuid
    strCGroupLogID = Md5(strCGroupLogID)
    strCGroupLogID = getFormatUUID(strCGroupLogID)
    return strCGroupLogID
}

func SetCGroupLogID(logid string) string {
    strCGroupLogID = logid
    return "ok"
}

func GetCGroupLogID() string {
    return strCGroupLogID
}

//生成32位md5字串
func Md5(s string) string {
    h := md5.New()
    h.Write([]byte(s))
    return hex.EncodeToString(h.Sum(nil))
}

func getFormatUUID(s string) string {
    if len(s) != 32 {
        return s
    }
    return fmt.Sprintf("%s-%s-%s-%s-%s",
        s[0:8],
        s[8:12],
        s[12:16],
        s[16:20],
        s[20:32])
}

func LogStack(err error) {
    var buf [4096]byte
    n := runtime.Stack(buf[:], false)
    LogRecord(err.Error() + "\r\n" + string(buf[:n]) + "\r\n", "panic")
}
package api_controller

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "net/http"
    "util"

)


func Getsmscode(c *gin.Context) {
    defer func() {
        if r := recover(); r != nil {
            util.LogStack(r.(error)) //日志调用
            c.JSON(200, gin.H{"status": 500, "data": r, "msg": "网络异常,请稍后再试"}); return
        }
    }()

    var (
        params             string
    )

    if params = c.DefaultPostForm("testkey", ""); params == "" {
        c.JSON(http.StatusOK, gin.H{"status": params, "data": "", "msg": "data不能为空"})
        return
    }
    fmt.Println(params)
 
}