feat: 添加数据库资产、命令拦截器、授权资产等功能,修复GitHub Actions工作流
This commit is contained in:
+58
-58
@@ -65,9 +65,9 @@ func (api PortalApi) AssetsTreeEndpoint(c echo.Context) error {
|
||||
tree := make([]maps.Map, 0)
|
||||
for _, g := range groups {
|
||||
node := maps.Map{
|
||||
"key": g.ID,
|
||||
"title": g.Name,
|
||||
"isLeaf": false,
|
||||
"key": g.ID,
|
||||
"title": g.Name,
|
||||
"isLeaf": false,
|
||||
"children": buildPortalAssetChildren(items, g.ID, keyword),
|
||||
}
|
||||
tree = append(tree, node)
|
||||
@@ -159,9 +159,9 @@ func (api PortalApi) AssetsGroupTreeEndpoint(c echo.Context) error {
|
||||
tree := make([]maps.Map, 0)
|
||||
for _, g := range groups {
|
||||
node := maps.Map{
|
||||
"key": g.ID,
|
||||
"title": g.Name,
|
||||
"isLeaf": false,
|
||||
"key": g.ID,
|
||||
"title": g.Name,
|
||||
"isLeaf": false,
|
||||
"children": []interface{}{},
|
||||
}
|
||||
tree = append(tree, node)
|
||||
@@ -198,34 +198,34 @@ func (api PortalApi) CreateSessionEndpoint(c echo.Context) error {
|
||||
}
|
||||
|
||||
return Success(c, maps.Map{
|
||||
"id": s.ID,
|
||||
"protocol": s.Protocol,
|
||||
"assetName": assetName,
|
||||
"strategy": maps.Map{},
|
||||
"url": "",
|
||||
"watermark": maps.Map{},
|
||||
"readonly": false,
|
||||
"idle": 3600,
|
||||
"fileSystem": s.FileSystem == "1",
|
||||
"width": 800,
|
||||
"height": 600,
|
||||
"id": s.ID,
|
||||
"protocol": s.Protocol,
|
||||
"assetName": assetName,
|
||||
"strategy": maps.Map{},
|
||||
"url": "",
|
||||
"watermark": maps.Map{},
|
||||
"readonly": false,
|
||||
"idle": 3600,
|
||||
"fileSystem": s.FileSystem == "1",
|
||||
"width": 800,
|
||||
"height": 600,
|
||||
})
|
||||
}
|
||||
|
||||
func (api PortalApi) GetSessionEndpoint(c echo.Context) error {
|
||||
id := c.Param("id")
|
||||
return Success(c, maps.Map{
|
||||
"id": id,
|
||||
"protocol": "ssh",
|
||||
"assetName": id,
|
||||
"strategy": maps.Map{},
|
||||
"url": "",
|
||||
"watermark": maps.Map{},
|
||||
"readonly": false,
|
||||
"idle": 3600,
|
||||
"fileSystem": false,
|
||||
"width": 800,
|
||||
"height": 600,
|
||||
"id": id,
|
||||
"protocol": "ssh",
|
||||
"assetName": id,
|
||||
"strategy": maps.Map{},
|
||||
"url": "",
|
||||
"watermark": maps.Map{},
|
||||
"readonly": false,
|
||||
"idle": 3600,
|
||||
"fileSystem": false,
|
||||
"width": 800,
|
||||
"height": 600,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -233,7 +233,7 @@ func (api PortalApi) GetShareEndpoint(c echo.Context) error {
|
||||
return Success(c, maps.Map{
|
||||
"enabled": false,
|
||||
"passcode": "",
|
||||
"url": "",
|
||||
"url": "",
|
||||
})
|
||||
}
|
||||
|
||||
@@ -241,7 +241,7 @@ func (api PortalApi) CreateShareEndpoint(c echo.Context) error {
|
||||
return Success(c, maps.Map{
|
||||
"enabled": true,
|
||||
"passcode": "",
|
||||
"url": "",
|
||||
"url": "",
|
||||
})
|
||||
}
|
||||
|
||||
@@ -277,16 +277,16 @@ func (api PortalApi) PingAssetEndpoint(c echo.Context) error {
|
||||
assetId := c.Param("id")
|
||||
item, _ := repository.AssetRepository.FindById(context.TODO(), assetId)
|
||||
return Success(c, maps.Map{
|
||||
"name": item.Name,
|
||||
"active": true,
|
||||
"usedTime": 10,
|
||||
"name": item.Name,
|
||||
"active": true,
|
||||
"usedTime": 10,
|
||||
"usedTimeStr": "10ms",
|
||||
})
|
||||
}
|
||||
|
||||
func (api PortalApi) TerminalStatsEndpoint(c echo.Context) error {
|
||||
sessionId := c.Param("id")
|
||||
|
||||
|
||||
sess := session.GlobalSessionManager.GetById(sessionId)
|
||||
if sess == nil || sess.NextTerminal == nil || sess.NextTerminal.SshClient == nil {
|
||||
return Success(c, maps.Map{
|
||||
@@ -321,7 +321,7 @@ func (api PortalApi) TerminalStatsEndpoint(c echo.Context) error {
|
||||
"cpu": []interface{}{},
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
stats, err := getSystemStats(sess.NextTerminal.SshClient)
|
||||
if err != nil {
|
||||
log.Warn("Failed to get system stats", log.NamedError("error", err))
|
||||
@@ -357,30 +357,30 @@ func (api PortalApi) TerminalStatsEndpoint(c echo.Context) error {
|
||||
"cpu": []interface{}{},
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
return Success(c, stats)
|
||||
}
|
||||
|
||||
func getSystemStats(client *ssh.Client) (maps.Map, error) {
|
||||
result := maps.Map{}
|
||||
|
||||
|
||||
// Get hostname
|
||||
hostname, _ := sshExec(client, "hostname")
|
||||
|
||||
|
||||
// Get OS info
|
||||
osId, _ := sshExec(client, "cat /etc/os-release 2>/dev/null | grep '^ID=' | cut -d'=' -f2 | tr -d '\"'")
|
||||
osName, _ := sshExec(client, "cat /etc/os-release 2>/dev/null | grep '^NAME=' | cut -d'=' -f2 | tr -d '\"'")
|
||||
osVersion, _ := sshExec(client, "cat /etc/os-release 2>/dev/null | grep '^VERSION_ID=' | cut -d'=' -f2 | tr -d '\"'")
|
||||
|
||||
|
||||
// Get arch
|
||||
arch, _ := sshExec(client, "uname -m")
|
||||
|
||||
|
||||
// Get uptime
|
||||
uptimeStr, _ := sshExec(client, "cat /proc/uptime | awk '{print $1}'")
|
||||
uptimeFloat, _ := strconv.ParseFloat(strings.TrimSpace(uptimeStr), 64)
|
||||
uptime := int64(uptimeFloat)
|
||||
upDays := uptime / 86400
|
||||
|
||||
|
||||
// Get load average
|
||||
loadStr, _ := sshExec(client, "cat /proc/loadavg")
|
||||
loadParts := strings.Fields(loadStr)
|
||||
@@ -390,28 +390,28 @@ func getSystemStats(client *ssh.Client) (maps.Map, error) {
|
||||
load5 = loadParts[1]
|
||||
load15 = loadParts[2]
|
||||
}
|
||||
|
||||
|
||||
// Get process count
|
||||
processStr, _ := sshExec(client, "ps aux | wc -l")
|
||||
totalProcess := strings.TrimSpace(processStr)
|
||||
|
||||
|
||||
// Get memory info
|
||||
memInfo, _ := sshExec(client, "cat /proc/meminfo")
|
||||
memTotal, memFree, memAvailable, memBuffers, memCached, swapTotal, swapFree := parseMemInfo(memInfo)
|
||||
memUsed := memTotal - memAvailable
|
||||
|
||||
|
||||
// Get CPU info
|
||||
cpuInfo, _ := sshExec(client, "cat /proc/stat | head -1")
|
||||
cpuStats := parseCpuStat(cpuInfo)
|
||||
|
||||
|
||||
// Get filesystem info
|
||||
dfOutput, _ := sshExec(client, "df -B1 | tail -n +2")
|
||||
fileSystems := parseDfOutput(dfOutput)
|
||||
|
||||
|
||||
// Get network info
|
||||
netDev, _ := sshExec(client, "cat /proc/net/dev | tail -n +3")
|
||||
network := parseNetDev(netDev)
|
||||
|
||||
|
||||
result["info"] = maps.Map{
|
||||
"id": strings.TrimSpace(osId),
|
||||
"name": strings.TrimSpace(osName),
|
||||
@@ -441,7 +441,7 @@ func getSystemStats(client *ssh.Client) (maps.Map, error) {
|
||||
result["cpu"] = cpuStats
|
||||
result["fileSystems"] = fileSystems
|
||||
result["network"] = network
|
||||
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
@@ -451,7 +451,7 @@ func sshExec(client *ssh.Client, cmd string) (string, error) {
|
||||
return "", err
|
||||
}
|
||||
defer session.Close()
|
||||
|
||||
|
||||
output, err := session.CombinedOutput(cmd)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -468,7 +468,7 @@ func parseMemInfo(info string) (total, free, available, buffers, cached, swapTot
|
||||
}
|
||||
key := strings.TrimSuffix(parts[0], ":")
|
||||
value, _ := strconv.ParseInt(parts[1], 10, 64)
|
||||
|
||||
|
||||
switch key {
|
||||
case "MemTotal":
|
||||
total = value
|
||||
@@ -494,11 +494,11 @@ func parseCpuStat(stat string) []interface{} {
|
||||
if len(parts) < 5 {
|
||||
return []interface{}{maps.Map{"user": 0.0, "nice": 0.0, "system": 0.0}}
|
||||
}
|
||||
|
||||
|
||||
user, _ := strconv.ParseFloat(parts[1], 64)
|
||||
nice, _ := strconv.ParseFloat(parts[2], 64)
|
||||
system, _ := strconv.ParseFloat(parts[3], 64)
|
||||
|
||||
|
||||
return []interface{}{
|
||||
maps.Map{
|
||||
"user": user,
|
||||
@@ -519,16 +519,16 @@ func parseDfOutput(output string) []interface{} {
|
||||
if len(parts) < 6 {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
total, _ := strconv.ParseInt(parts[1], 10, 64)
|
||||
used, _ := strconv.ParseInt(parts[2], 10, 64)
|
||||
free, _ := strconv.ParseInt(parts[3], 10, 64)
|
||||
|
||||
|
||||
var percent float64 = 0
|
||||
if total > 0 {
|
||||
percent = float64(used) / float64(total)
|
||||
}
|
||||
|
||||
|
||||
result = append(result, maps.Map{
|
||||
"mountPoint": parts[5],
|
||||
"total": total,
|
||||
@@ -551,15 +551,15 @@ func parseNetDev(output string) []interface{} {
|
||||
if len(parts) < 10 {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
iface := strings.TrimSuffix(parts[0], ":")
|
||||
if strings.HasPrefix(iface, "lo") {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
rx, _ := strconv.ParseInt(parts[1], 10, 64)
|
||||
tx, _ := strconv.ParseInt(parts[9], 10, 64)
|
||||
|
||||
|
||||
result = append(result, maps.Map{
|
||||
"iface": iface,
|
||||
"rx": rx,
|
||||
|
||||
Reference in New Issue
Block a user