HFish/view/dashboard/view.go

312 lines
7.2 KiB
Go
Raw Normal View History

2019-08-07 13:16:23 +08:00
package dashboard
import (
"github.com/gin-gonic/gin"
"net/http"
"HFish/core/dbUtil"
"strconv"
"HFish/utils/conf"
"HFish/error"
)
func Html(c *gin.Context) {
// 查询上钩数量
sqlWeb := `select count(1) as sum from hfish_info where type="WEB";`
sqlSsh := `select count(1) as sum from hfish_info where type="SSH";`
sqlRedis := `select count(1) as sum from hfish_info where type="REDIS";`
sqlMysql := `select count(1) as sum from hfish_info where type="MYSQL";`
2019-08-11 20:14:28 +08:00
deepMysql := `select count(1) as sum from hfish_info where type="DEEP";`
telnetMysql := `select count(1) as sum from hfish_info where type="TELNET";`
ftpMysql := `select count(1) as sum from hfish_info where type="FTP";`
memCacheMysql := `select count(1) as sum from hfish_info where type="MEMCACHE";`
2019-08-07 13:16:23 +08:00
resultWeb := dbUtil.Query(sqlWeb)
resultSsh := dbUtil.Query(sqlSsh)
resultRedis := dbUtil.Query(sqlRedis)
resultMysql := dbUtil.Query(sqlMysql)
2019-08-11 20:14:28 +08:00
resultDeep := dbUtil.Query(deepMysql)
resultTelnet := dbUtil.Query(telnetMysql)
resultFtp := dbUtil.Query(ftpMysql)
resultMemCache := dbUtil.Query(memCacheMysql)
2019-08-07 13:16:23 +08:00
webSum := strconv.FormatInt(resultWeb[0]["sum"].(int64), 10)
sshSum := strconv.FormatInt(resultSsh[0]["sum"].(int64), 10)
redisSum := strconv.FormatInt(resultRedis[0]["sum"].(int64), 10)
mysqlSum := strconv.FormatInt(resultMysql[0]["sum"].(int64), 10)
2019-08-11 20:14:28 +08:00
deepSum := strconv.FormatInt(resultDeep[0]["sum"].(int64), 10)
telnetSum := strconv.FormatInt(resultTelnet[0]["sum"].(int64), 10)
ftpSum := strconv.FormatInt(resultFtp[0]["sum"].(int64), 10)
memCacheSum := strconv.FormatInt(resultMemCache[0]["sum"].(int64), 10)
2019-08-07 13:16:23 +08:00
// 读取服务运行状态
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")
2019-08-11 20:14:28 +08:00
deepStatus := conf.Get("deep", "status")
telnetStatus := conf.Get("telnet", "status")
ftpStatus := conf.Get("ftp", "status")
memCacheStatus := conf.Get("mem_cache", "status")
2019-08-07 13:16:23 +08:00
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,
2019-08-07 13:16:23 +08:00
})
}
// 仪表盘折线图 统计
func GetFishData(c *gin.Context) {
// 统计 web
sqlWeb := `
SELECT
strftime("%H", create_time) AS hour,
sum(1) AS sum
FROM
hfish_info
WHERE
2019-08-12 14:42:25 +08:00
strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
2019-08-07 13:16:23 +08:00
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
2019-08-12 14:42:25 +08:00
strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
2019-08-07 13:16:23 +08:00
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
2019-08-12 14:42:25 +08:00
strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
2019-08-07 13:16:23 +08:00
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
2019-08-12 14:42:25 +08:00
strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
2019-08-07 13:16:23 +08:00
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)
}
2019-08-11 20:14:28 +08:00
// 统计 deep
sqlDeep := `
SELECT
strftime("%H", create_time) AS hour,
sum(1) AS sum
FROM
hfish_info
WHERE
2019-08-12 14:42:25 +08:00
strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
2019-08-11 20:14:28 +08:00
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
2019-08-12 14:42:25 +08:00
strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
2019-08-11 20:14:28 +08:00
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
2019-08-12 14:42:25 +08:00
strftime('%s', datetime('now')) - strftime('%s', create_time) < (24 * 3600)
2019-08-11 20:14:28 +08:00
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)
}
2019-08-07 13:16:23 +08:00
// 拼接 json
s := map[string]map[string]int64{
"web": webMap,
"ssh": sshMap,
"redis": redisMap,
"mysql": mysqlMap,
"deep": deepMap,
"ftp": ftpMap,
"telnet": telnetMap,
"memCache": memCacheMap,
2019-08-07 13:16:23 +08:00
}
c.JSON(http.StatusOK, error.ErrSuccessEdit(s))
}
// 仪表盘攻击饼图统计
func GetFishPieData(c *gin.Context) {
// 统计攻击地区
sqlRegion := `
SELECT
region,
count(1) AS sum
FROM
hfish_info
WHERE
region != ""
GROUP BY
region;
`
resultRegion := dbUtil.Query(sqlRegion)
var regionList []map[string]string
for k := range resultRegion {
regionMap := make(map[string]string)
regionMap["name"] = resultRegion[k]["region"].(string)
regionMap["value"] = strconv.FormatInt(resultRegion[k]["sum"].(int64), 10)
regionList = append(regionList, regionMap)
}
// 统计攻击IP
sqlIP := `
SELECT
ip,
count(1) AS sum
FROM
hfish_info
WHERE
ip != ""
GROUP BY
ip;
`
resultIP := dbUtil.Query(sqlIP)
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)
}
c.JSON(http.StatusOK, gin.H{
"regionList": regionList,
"ipList": ipList,
})
}