mirror of
https://gitee.com/lauix/HFish
synced 2025-05-12 04:48:01 +08:00
294 lines
7.2 KiB
Go
294 lines
7.2 KiB
Go
package dashboard
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"net/http"
|
|
"HFish/core/dbUtil"
|
|
"HFish/utils/conf"
|
|
"strconv"
|
|
"HFish/error"
|
|
"HFish/utils/log"
|
|
"fmt"
|
|
)
|
|
|
|
func Html(c *gin.Context) {
|
|
// 查询上钩数量
|
|
webSum, err := dbUtil.DB().Table("hfish_info").Where("type", "=", "WEB").Count()
|
|
|
|
fmt.Println(err)
|
|
|
|
sshSum, _ := dbUtil.DB().Table("hfish_info").Where("type", "=", "SSH").Count()
|
|
redisSum, _ := dbUtil.DB().Table("hfish_info").Where("type", "=", "REDIS").Count()
|
|
mysqlSum, _ := dbUtil.DB().Table("hfish_info").Where("type", "=", "MYSQL").Count()
|
|
deepSum, _ := dbUtil.DB().Table("hfish_info").Where("type", "=", "DEEP").Count()
|
|
telnetSum, _ := dbUtil.DB().Table("hfish_info").Where("type", "=", "TELNET").Count()
|
|
ftpSum, _ := dbUtil.DB().Table("hfish_info").Where("type", "=", "FTP").Count()
|
|
memCacheSum, _ := dbUtil.DB().Table("hfish_info").Where("type", "=", "MEMCACHE").Count()
|
|
|
|
// 读取服务运行状态
|
|
mysqlStatus := conf.Get("mysql", "status")
|
|
redisStatus := conf.Get("redis", "status")
|
|
sshStatus := conf.Get("ssh", "status")
|
|
webStatus := conf.Get("web", "status")
|
|
apiStatus := conf.Get("api", "status")
|
|
deepStatus := conf.Get("deep", "status")
|
|
telnetStatus := conf.Get("telnet", "status")
|
|
ftpStatus := conf.Get("ftp", "status")
|
|
memCacheStatus := conf.Get("mem_cache", "status")
|
|
|
|
c.HTML(http.StatusOK, "dashboard.html", gin.H{
|
|
"webSum": webSum,
|
|
"sshSum": sshSum,
|
|
"redisSum": redisSum,
|
|
"mysqlSum": mysqlSum,
|
|
"deepSum": deepSum,
|
|
"telnetSum": telnetSum,
|
|
"ftpSum": ftpSum,
|
|
"memCacheSum": memCacheSum,
|
|
"webStatus": webStatus,
|
|
"sshStatus": sshStatus,
|
|
"redisStatus": redisStatus,
|
|
"mysqlStatus": mysqlStatus,
|
|
"apiStatus": apiStatus,
|
|
"deepStatus": deepStatus,
|
|
"telnetStatus": telnetStatus,
|
|
"ftpStatus": ftpStatus,
|
|
"memCacheStatus": memCacheStatus,
|
|
})
|
|
}
|
|
|
|
// 仪表盘折线图 统计
|
|
func GetFishData(c *gin.Context) {
|
|
//// 统计 web
|
|
//sqlWeb := `
|
|
//SELECT
|
|
// strftime("%H", create_time) AS hour,
|
|
// sum(1) AS sum
|
|
//FROM
|
|
// hfish_info
|
|
//WHERE
|
|
// strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
|
|
//AND type="WEB"
|
|
//GROUP BY
|
|
//hour;
|
|
//`
|
|
//
|
|
//resultWeb := dbUtil.Query(sqlWeb)
|
|
//
|
|
webMap := make(map[string]int64)
|
|
//for k := range resultWeb {
|
|
// webMap[resultWeb[k]["hour"].(string)] = resultWeb[k]["sum"].(int64)
|
|
//}
|
|
//
|
|
//// 统计 ssh
|
|
//sqlSsh := `
|
|
//SELECT
|
|
// strftime("%H", create_time) AS hour,
|
|
// sum(1) AS sum
|
|
//FROM
|
|
// hfish_info
|
|
//WHERE
|
|
// strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
|
|
//AND type="SSH"
|
|
//GROUP BY
|
|
//hour;
|
|
//`
|
|
//
|
|
//resultSSH := dbUtil.Query(sqlSsh)
|
|
//
|
|
sshMap := make(map[string]int64)
|
|
//for k := range resultSSH {
|
|
// sshMap[resultSSH[k]["hour"].(string)] = resultSSH[k]["sum"].(int64)
|
|
//}
|
|
//
|
|
//// 统计 redis
|
|
//sqlRedis := `
|
|
//SELECT
|
|
// strftime("%H", create_time) AS hour,
|
|
// sum(1) AS sum
|
|
//FROM
|
|
// hfish_info
|
|
//WHERE
|
|
// strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
|
|
//AND type="REDIS"
|
|
//GROUP BY
|
|
//hour;
|
|
//`
|
|
//
|
|
//resultRedis := dbUtil.Query(sqlRedis)
|
|
//
|
|
redisMap := make(map[string]int64)
|
|
//for k := range resultRedis {
|
|
// redisMap[resultRedis[k]["hour"].(string)] = resultRedis[k]["sum"].(int64)
|
|
//}
|
|
//
|
|
//// 统计 mysql
|
|
//sqlMysql := `
|
|
//SELECT
|
|
// strftime("%H", create_time) AS hour,
|
|
// sum(1) AS sum
|
|
//FROM
|
|
// hfish_info
|
|
//WHERE
|
|
// strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
|
|
//AND type="MYSQL"
|
|
//GROUP BY
|
|
//hour;
|
|
//`
|
|
//
|
|
//resultMysql := dbUtil.Query(sqlMysql)
|
|
//
|
|
mysqlMap := make(map[string]int64)
|
|
//for k := range resultMysql {
|
|
// mysqlMap[resultMysql[k]["hour"].(string)] = resultMysql[k]["sum"].(int64)
|
|
//}
|
|
//
|
|
//// 统计 deep
|
|
//sqlDeep := `
|
|
//SELECT
|
|
// strftime("%H", create_time) AS hour,
|
|
// sum(1) AS sum
|
|
//FROM
|
|
// hfish_info
|
|
//WHERE
|
|
// strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
|
|
//AND type="DEEP"
|
|
//GROUP BY
|
|
//hour;
|
|
//`
|
|
//
|
|
//resultDeep := dbUtil.Query(sqlDeep)
|
|
//
|
|
deepMap := make(map[string]int64)
|
|
//for k := range resultDeep {
|
|
// deepMap[resultDeep[k]["hour"].(string)] = resultDeep[k]["sum"].(int64)
|
|
//}
|
|
//
|
|
//// 统计 ftp
|
|
//sqlFtp := `
|
|
//SELECT
|
|
// strftime("%H", create_time) AS hour,
|
|
// sum(1) AS sum
|
|
//FROM
|
|
// hfish_info
|
|
//WHERE
|
|
// strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
|
|
//AND type="FTP"
|
|
//GROUP BY
|
|
//hour;
|
|
//`
|
|
//
|
|
//resultFtp := dbUtil.Query(sqlFtp)
|
|
//
|
|
ftpMap := make(map[string]int64)
|
|
//for k := range resultFtp {
|
|
// ftpMap[resultFtp[k]["hour"].(string)] = resultFtp[k]["sum"].(int64)
|
|
//}
|
|
//
|
|
//// 统计 Telnet
|
|
//sqlTelnet := `
|
|
//SELECT
|
|
// strftime("%H", create_time) AS hour,
|
|
// sum(1) AS sum
|
|
//FROM
|
|
// hfish_info
|
|
//WHERE
|
|
// strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
|
|
//AND type="TELNET"
|
|
//GROUP BY
|
|
//hour;
|
|
//`
|
|
//
|
|
//resultTelnet := dbUtil.Query(sqlTelnet)
|
|
//
|
|
telnetMap := make(map[string]int64)
|
|
//for k := range resultTelnet {
|
|
// telnetMap[resultTelnet[k]["hour"].(string)] = resultTelnet[k]["sum"].(int64)
|
|
//}
|
|
//
|
|
//// 统计 MemCache
|
|
//sqlMemCache := `
|
|
//SELECT
|
|
// strftime("%H", create_time) AS hour,
|
|
// sum(1) AS sum
|
|
//FROM
|
|
// hfish_info
|
|
//WHERE
|
|
// strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
|
|
//AND type="MEMCACHE"
|
|
//GROUP BY
|
|
//hour;
|
|
//`
|
|
//
|
|
//resultMemCache := dbUtil.Query(sqlMemCache)
|
|
//
|
|
memCacheMap := make(map[string]int64)
|
|
//for k := range resultMemCache {
|
|
// memCacheMap[resultMemCache[k]["hour"].(string)] = resultMemCache[k]["sum"].(int64)
|
|
//}
|
|
|
|
// 拼接 json
|
|
data := map[string]map[string]int64{
|
|
"web": webMap,
|
|
"ssh": sshMap,
|
|
"redis": redisMap,
|
|
"mysql": mysqlMap,
|
|
"deep": deepMap,
|
|
"ftp": ftpMap,
|
|
"telnet": telnetMap,
|
|
"memCache": memCacheMap,
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": error.ErrSuccessCode,
|
|
"msg": error.ErrSuccessMsg,
|
|
"data": data,
|
|
})
|
|
}
|
|
|
|
// 仪表盘攻击饼图统计
|
|
func GetFishPieData(c *gin.Context) {
|
|
// 统计攻击地区
|
|
resultRegion, errRegion := dbUtil.DB().Table("hfish_info").Fields("country", "count(1) AS sum").Where("country", "!=", "").GroupBy("country").OrderBy("sum desc").Limit(10).Get()
|
|
|
|
if errRegion != nil {
|
|
log.Pr("HFish", "127.0.0.1", "统计攻击地区失败", errRegion)
|
|
}
|
|
|
|
var regionList []map[string]string
|
|
|
|
for k := range resultRegion {
|
|
regionMap := make(map[string]string)
|
|
regionMap["name"] = resultRegion[k]["country"].(string)
|
|
regionMap["value"] = strconv.FormatInt(resultRegion[k]["sum"].(int64), 10)
|
|
regionList = append(regionList, regionMap)
|
|
}
|
|
|
|
// 统计攻击IP
|
|
resultIP, errIp := dbUtil.DB().Table("hfish_info").Fields("ip", "count(1) AS sum").Where("ip", "!=", "").GroupBy("ip").OrderBy("sum desc").Limit(10).Get()
|
|
|
|
if errIp != nil {
|
|
log.Pr("HFish", "127.0.0.1", "统计攻击IP失败", errIp)
|
|
}
|
|
|
|
var ipList []map[string]string
|
|
|
|
for k := range resultIP {
|
|
ipMap := make(map[string]string)
|
|
ipMap["name"] = resultIP[k]["ip"].(string)
|
|
ipMap["value"] = strconv.FormatInt(resultIP[k]["sum"].(int64), 10)
|
|
ipList = append(ipList, ipMap)
|
|
}
|
|
|
|
data := map[string]interface{}{
|
|
"regionList": regionList,
|
|
"ipList": ipList,
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"code": error.ErrSuccessCode,
|
|
"msg": error.ErrSuccessMsg,
|
|
"data": data,
|
|
})
|
|
}
|