package botser import ( "fmt" "os" "stat/common/redis" "stat/common/utils" "stat/common/version" "stat/statg" "strconv" "sync" "time" ) var ( sysOnce sync.Once ) func GetServerInformation() string { text := fmt.Sprintf("统计中心:【%s】编号【%d】:\n", statg.Conf.ServerIndex.Name(), statg.Conf.ServerIndex) text += fmt.Sprintf("机器名称:【%s】\n", version.HostName()) text += fmt.Sprintf("监听地址:【%s】\n", statg.Conf.Host) text += fmt.Sprintf("监听端口:【%d】\n", statg.Conf.Port) text += fmt.Sprintf("服务进程:【%d】\n", os.Getpid()) text += fmt.Sprintf("程序版本:【%s】\n", version.SERVICE_VERSION) text += fmt.Sprintf("源码分支:【%s】\n", version.GIT_BRANCH) text += fmt.Sprintf("提交版本:【%s】\n", version.GIT_VERSION) text += fmt.Sprintf("编译日期:【%s】\n", version.BUILD_DATE) text += fmt.Sprintf("编译地址:【%s】\n", version.BUILD_IP) text += fmt.Sprintf("运行模式:【%s】\n", statg.Conf.RunMod) text += fmt.Sprintf("启动时间:【%s】\n", version.ServerStartTime.Format("2006-01-02T15:04:05")) text += fmt.Sprintf("运行时长:【%s】\n", time.Since(version.ServerStartTime)) return text } func SaveServerKeepAliveTime() { defer utils.RecoverError(nil) keyAlive := redis.GetServerKeepAliveHashKey(int(statg.Conf.ServerIndex)) _ = redis.StatRds.Set(keyAlive, time.Now().Unix(), 0) } func SaveServerNormalCloseFlag() { defer utils.RecoverError(nil) keyClose := redis.GetServerCloseFlagHashKey(int(statg.Conf.ServerIndex)) _ = redis.StatRds.Set(keyClose, time.Now().Unix(), 0) } func GetServerInformationLastTime() string { ret := "" srvStart := int64(0) srvAlive := int64(0) srvClose := int64(0) sysOnce.Do(func() { keyStart := redis.GetServerStartTimeHashKey(int(statg.Conf.ServerIndex)) if usStart, err := redis.StatRds.Get(keyStart); err == nil && usStart != nil { if ut, err2 := strconv.ParseInt(*usStart, 10, 64); err2 == nil { srvStart = ut } } keyAlive := redis.GetServerKeepAliveHashKey(int(statg.Conf.ServerIndex)) if usAlive, err := redis.StatRds.Get(keyAlive); err == nil && usAlive != nil { if ut, err2 := strconv.ParseInt(*usAlive, 10, 64); err2 == nil { srvAlive = ut } } keyClose := redis.GetServerCloseFlagHashKey(int(statg.Conf.ServerIndex)) if usClose, err := redis.StatRds.Get(keyClose); err == nil && usClose != nil { if ut, err2 := strconv.ParseInt(*usClose, 10, 64); err2 == nil { srvClose = ut } } version.ServerStartLast = time.Unix(srvStart, 0) version.ServerAliveLast = time.Unix(srvAlive, 0) version.ServerCloseLast = time.Unix(srvClose, 0) _ = redis.StatRds.Set(keyStart, version.ServerStartTime.Unix(), 0) _ = redis.StatRds.Set(keyClose, version.ServerStartTime.Unix(), 0) _ = redis.StatRds.Set(keyAlive, time.Now().Unix(), 0) }) if version.ServerAliveLast.After(version.ServerStartLast) { ret = fmt.Sprintf("上次运行:【%v】\n", version.ServerAliveLast.Sub(version.ServerStartLast)) if version.ServerCloseLast.After(version.ServerStartLast) { ret += fmt.Sprintf("上次关闭:【正常关闭🟢】\n") } else { ret += fmt.Sprintf("上次关闭:【异常关闭🔴】\n") } } return ret }