mirror of
https://github.com/gotoeasy/glogcenter.git
synced 2025-09-15 12:58:34 +08:00
147 lines
4.4 KiB
Go
147 lines
4.4 KiB
Go
package controller
|
||
|
||
import (
|
||
"fmt"
|
||
"glc/com"
|
||
"glc/conf"
|
||
"glc/gweb"
|
||
"glc/ldb/status"
|
||
"glc/ldb/sysmnt"
|
||
"glc/ver"
|
||
"time"
|
||
|
||
"github.com/gotoeasy/glang/cmn"
|
||
)
|
||
|
||
var glcLatest string = ""
|
||
var glcOrigin string = ""
|
||
|
||
// 查询是否测试模式
|
||
func TestModeController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||
return gweb.Result(conf.IsTestMode())
|
||
}
|
||
|
||
// 查询版本信息
|
||
func VersionController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||
rs := cmn.OfMap("version", ver.VERSION, "latest", glcLatest) // version当前版本号,latest最新版本号
|
||
return gweb.Result(rs)
|
||
}
|
||
|
||
func SetOrigin(req *gweb.HttpRequest) {
|
||
origin := req.GinCtx.GetHeader("Origin")
|
||
if origin != "" {
|
||
glcOrigin = origin
|
||
}
|
||
}
|
||
|
||
// 查询日志仓名称列表
|
||
func StorageNamesController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||
if (!InWhiteList(req) && InBlackList(req)) || (conf.IsEnableLogin() && GetUsernameByToken(req.GetToken()) == "") {
|
||
return gweb.Error403() // 黑名单检查、登录检查
|
||
}
|
||
|
||
rs := com.GetStorageNames(conf.GetStorageRoot(), ".sysmnt")
|
||
return gweb.Result(rs)
|
||
}
|
||
|
||
// 查询系统名称列表
|
||
func SystemNamesController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||
if (!InWhiteList(req) && InBlackList(req)) || (conf.IsEnableLogin() && GetUsernameByToken(req.GetToken()) == "") {
|
||
return gweb.Error403() // 黑名单检查、登录检查
|
||
}
|
||
|
||
if conf.IsEnableLogin() {
|
||
username := GetUsernameByToken(req.GetToken())
|
||
mnt := sysmnt.NewSysmntStorage()
|
||
if username == conf.GetUsername() {
|
||
names := mnt.GetSysUsernames()
|
||
var all []string
|
||
var m map[string]bool = make(map[string]bool)
|
||
for i := 0; i < len(names); i++ {
|
||
user := mnt.GetSysUser(names[i])
|
||
if user != nil && user.Systems != "*" {
|
||
ary := cmn.Split(user.Systems, ",")
|
||
for j := 0; j < len(ary); j++ {
|
||
if !m[cmn.ToLower(ary[j])] {
|
||
m[cmn.ToLower(ary[j])] = true
|
||
all = append(all, ary[j])
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return gweb.Result(all)
|
||
} else {
|
||
user := mnt.GetSysUser(username)
|
||
if user != nil && user.Systems != "*" {
|
||
return gweb.Result(cmn.Split(user.Systems, ",")) // 管理员及全部权限的用户以外,按设定的系统返回
|
||
}
|
||
}
|
||
}
|
||
|
||
return gweb.Ok() // 都有权限,不返回结果
|
||
}
|
||
|
||
// 查询日志仓信息列表
|
||
func StorageListController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||
token := req.GetToken()
|
||
if (!InWhiteList(req) && InBlackList(req)) || (conf.IsEnableLogin() && GetUsernameByToken(token) == "") {
|
||
return gweb.Error403() // 黑名单检查、登录检查
|
||
}
|
||
if conf.IsEnableLogin() {
|
||
catchSession.Set(token, GetUsernameByToken(token)) // 会话重新计时
|
||
}
|
||
|
||
rs := sysmnt.GetStorageList()
|
||
return gweb.Result(rs)
|
||
}
|
||
|
||
// 删除指定日志仓
|
||
func StorageDeleteController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||
if (!InWhiteList(req) && InBlackList(req)) || (conf.IsEnableLogin() && GetUsernameByToken(req.GetToken()) == "") {
|
||
return gweb.Error403() // 黑名单检查、登录检查
|
||
}
|
||
|
||
name := req.GetFormParameter("storeName")
|
||
if name == ".sysmnt" {
|
||
return gweb.Error500("不能删除 .sysmnt")
|
||
} else if conf.IsStoreNameAutoAddDate() {
|
||
if conf.GetSaveDays() > 0 {
|
||
ymd := cmn.Right(name, 8)
|
||
if cmn.Len(ymd) == 8 && cmn.Startwiths(ymd, "20") {
|
||
msg := fmt.Sprintf("当前是日志仓自动维护模式,最多保存 %d 天,不支持手动删除", conf.GetSaveDays())
|
||
return gweb.Error500(msg)
|
||
}
|
||
}
|
||
} else if name == "logdata" {
|
||
return gweb.Error500("日志仓 " + name + " 正在使用,不能删除")
|
||
}
|
||
|
||
if status.IsStorageOpening(name) {
|
||
return gweb.Error500("日志仓 " + name + " 正在使用,不能删除")
|
||
}
|
||
|
||
err := sysmnt.DeleteStorage(name)
|
||
if err != nil {
|
||
cmn.Error("日志仓", name, "删除失败", err)
|
||
return gweb.Error500("日志仓 " + name + " 正在使用,不能删除")
|
||
}
|
||
|
||
cacheTime = time.Now().Add(-1 * time.Hour) // 让检索时不用缓存名,避免查询不存在的日志仓
|
||
|
||
return gweb.Ok()
|
||
}
|
||
|
||
// 尝试查询最新版本号(注:服务不一定总是可用,每小时查取一次)
|
||
func init() {
|
||
go func() {
|
||
url := "https://glc.gotoeasy.top/glogcenter/current/version.json?v=" + ver.VERSION + "&h=" + cmn.Base62Encode(cmn.StringToBytes(glcOrigin))
|
||
v := cmn.GetGlcLatestVersion(url)
|
||
glcLatest = cmn.IifStr(v != "", v, glcLatest)
|
||
ticker := time.NewTicker(time.Hour)
|
||
for range ticker.C {
|
||
v = cmn.GetGlcLatestVersion(url)
|
||
glcLatest = cmn.IifStr(v != "", v, glcLatest)
|
||
}
|
||
}()
|
||
}
|