Ai
2 Star 5 Fork 0

SillyMan/Ping多个主机的Web版本

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
hosts.go 4.24 KB
一键复制 编辑 原始数据 按行查看 历史
SillyMan 提交于 2021-12-08 14:50 +08:00 . 查看历史记录最大数由3万修改为20万
package api
import (
"net"
"strconv"
"time"
"github.com/labstack/echo/v4"
"github.com/pkg/errors"
"gitee.com/sillyman/PingHostsWebView/models"
"gitee.com/sillyman/PingHostsWebView/modules/config"
"gitee.com/sillyman/PingHostsWebView/modules/db"
"gitee.com/sillyman/PingHostsWebView/modules/mypinger"
)
// GetHosts 列出所有的主机配置
func GetHosts(c echo.Context) error {
hosts := make([]models.HostConfig, 0, 128)
dbConn := db.MustObtainMainDB()
if err := dbConn.Find(&hosts).Error; err != nil {
return newHttpErrReadDB(err)
}
db.ReleaseMainDB()
return respJSON200(c, hosts)
}
func GetHost(c echo.Context) error {
ip := net.ParseIP(c.Param("ip"))
if ip == nil {
return newHttpErrBadParam(errors.New("This is not a valid textual representation of an IP address"))
}
var host = new(models.HostConfig)
dbConn := db.MustObtainMainDB()
if err := dbConn.Where("ip = ?", ip.String()).First(&host).Error; err != nil {
return newHttpErrReadDB(err)
}
db.ReleaseMainDB()
return respJSON200(c, host)
}
// GetRunningHostsIPs 列出所有的主机配置
func GetRunningHostsIPs(c echo.Context) error {
hosts := make([]models.HostConfig, 0, 128)
dbConn := db.MustObtainMainDB()
if err := dbConn.Where("is_running = ?", true).Find(&hosts).Error; err != nil {
return newHttpErrReadDB(err)
}
db.ReleaseMainDB()
ips := make([]string, 0, len(hosts))
for _, h := range hosts {
ips = append(ips, h.IP)
}
return respJSON200(c, ips)
}
// AddHost 添加主机配置
// 创建 初始化的 ping 总结
func AddHost(c echo.Context) error {
var host = new(models.HostConfig)
if err := c.Bind(host); err != nil {
return newHttpErrBadRequest(err)
}
if err := c.Validate(host); err != nil {
return newHttpErrBadParam(err)
}
dbConn := db.MustObtainMainDB()
defer db.ReleaseMainDB()
var count int64
if err := dbConn.Model(&models.HostConfig{}).Count(&count).Error; err != nil {
return newHttpErrReadDB(err)
}
if count >= int64(config.AllowMaxNumHosts) {
return newHttpErrServer(errors.New("已经达到最大允许添加的数量"))
}
if err := dbConn.Create(host).Error; err != nil {
return newHttpErrWriteDB(err)
}
if err := dbConn.Create(&models.PingSummary{IP: host.IP}).Error; err != nil {
return newHttpErrWriteDB(err)
}
return respJSON201(c, host)
}
// UpdateHost 更新主机配置
func UpdateHost(c echo.Context) error {
ip := net.ParseIP(c.Param("ip"))
if ip == nil {
return newHttpErrBadParam(errors.New("This is not a valid textual representation of an IP address"))
}
var host = new(models.HostConfig)
if err := c.Bind(host); err != nil {
return newHttpErrBadRequest(err)
}
if err := c.Validate(host); err != nil {
return newHttpErrBadParam(err)
}
host.IP = ip.String()
host.UpdatedAt = time.Now()
dbConn := db.MustObtainMainDB()
if err := dbConn.Omit("id").Where("ip = ?", ip.String()).Save(host).Error; err != nil {
return newHttpErrWriteDB(err)
}
db.ReleaseMainDB()
return respJSON201(c, host)
}
// DelHost 删除主机
// 删除主机的配置,ping总结,ping记录
func DelHost(c echo.Context) error {
ip := net.ParseIP(c.Param("ip"))
if ip == nil {
return newHttpErrBadParam(errors.New("This is not a valid textual representation of an IP address"))
}
// 停止ping
mypinger.StopMyPinger(ip)
dbConn := db.MustObtainMainDB()
defer db.ReleaseMainDB()
if err := dbConn.Where("ip = ?", ip.String()).Delete(models.HostConfig{}).Error; err != nil {
return newHttpErrWriteDB(err)
}
if err := dbConn.Where("ip = ?", ip.String()).Delete(models.PingSummary{}).Error; err != nil {
return newHttpErrWriteDB(err)
}
go func() {
time.Sleep(time.Second * 5)
db.MustDelPingRecordDB(ip)
}()
return resp204(c)
}
// SetHostRunningStatus 启动或停止pinger
func SetHostRunningStatus(c echo.Context) error {
ip := net.ParseIP(c.Param("ip"))
if ip == nil {
return newHttpErrBadParam(errors.New("This is not a valid textual representation of an IP address"))
}
isRunning, err := strconv.ParseBool(c.QueryParam("status"))
if err != nil {
return newHttpErrBadParam(err)
}
dbConn := db.MustObtainMainDB()
if err := dbConn.Model(&models.HostConfig{}).Where("ip = ?", ip.String()).Update("is_running", isRunning).Error; err != nil {
return newHttpErrWriteDB(err)
}
db.ReleaseMainDB()
return resp202(c)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/sillyman/PingHostsWebView.git
git@gitee.com:sillyman/PingHostsWebView.git
sillyman
PingHostsWebView
Ping多个主机的Web版本
11e63cd92578

搜索帮助