Delete main.go
This commit is contained in:
258
main.go
258
main.go
@@ -1,258 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
"github.com/shirou/gopsutil/host"
|
||||
"github.com/shirou/gopsutil/load"
|
||||
"github.com/shirou/gopsutil/mem"
|
||||
"github.com/shirou/gopsutil/net"
|
||||
"net/http"
|
||||
"time"
|
||||
"encoding/json"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/labstack/echo/v4/middleware"
|
||||
"github.com/skip2/go-qrcode"
|
||||
"os"
|
||||
"encoding/base64"
|
||||
"io/ioutil"
|
||||
"github.com/labstack/gommon/log"
|
||||
|
||||
|
||||
|
||||
)
|
||||
|
||||
|
||||
type Status struct {
|
||||
T time.Time `json:"-"`
|
||||
Cpu float64 `json:"cpu"`
|
||||
Mem struct {
|
||||
Current uint64 `json:"current"`
|
||||
Total uint64 `json:"total"`
|
||||
} `json:"mem"`
|
||||
Swap struct {
|
||||
Current uint64 `json:"current"`
|
||||
Total uint64 `json:"total"`
|
||||
} `json:"swap"`
|
||||
Disk struct {
|
||||
Current uint64 `json:"current"`
|
||||
Total uint64 `json:"total"`
|
||||
} `json:"disk"`
|
||||
Uptime uint64 `json:"uptime"`
|
||||
Loads []float64 `json:"loads"`
|
||||
TcpCount int `json:"tcpCount"`
|
||||
UdpCount int `json:"udpCount"`
|
||||
NetIO struct {
|
||||
Up uint64 `json:"up"`
|
||||
Down uint64 `json:"down"`
|
||||
} `json:"netIO"`
|
||||
NetTraffic struct {
|
||||
Sent uint64 `json:"sent"`
|
||||
Recv uint64 `json:"recv"`
|
||||
SentM uint64 `json:"sentM"`
|
||||
RecvM uint64 `json:"recvM"`
|
||||
} `json:"netTraffic"`
|
||||
}
|
||||
|
||||
|
||||
|
||||
func show_qrcode(){
|
||||
|
||||
fmt.Println("欢迎使用服务器监控脚本")
|
||||
fmt.Println("------------------稍等片刻-----------------")
|
||||
fmt.Println("获取公网IP")
|
||||
|
||||
|
||||
resp, err := http.Get("https://api4.ipify.org/?format=text")
|
||||
if err != nil {
|
||||
fmt.Println("无法获取IP地址:", err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Println("无法读取响应:", err)
|
||||
return
|
||||
}
|
||||
|
||||
local_ip := string(body)
|
||||
|
||||
|
||||
fmt.Println("你的外部IP地址是:", local_ip)
|
||||
fmt.Println("服务器端口号", 1323)
|
||||
|
||||
url:= "http://"+local_ip+":1323/"
|
||||
|
||||
data := []byte(url)
|
||||
// 进行Base64编码
|
||||
encoded := base64.StdEncoding.EncodeToString(data)
|
||||
fmt.Println("绑定ID", encoded)
|
||||
|
||||
|
||||
|
||||
// 生成二维码
|
||||
qr, err := qrcode.New(encoded, qrcode.Medium)
|
||||
if err != nil {
|
||||
fmt.Println("生成二维码时出错:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
|
||||
fmt.Println("\n")
|
||||
|
||||
fmt.Println("请使用微信小程序 矢光小屋 扫描下方二维码 添加服务器")
|
||||
fmt.Println("\n")
|
||||
|
||||
// 在终端中显示二维码
|
||||
fmt.Println(qr.ToSmallString(false))
|
||||
}
|
||||
|
||||
func customLogger() echo.MiddlewareFunc {
|
||||
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
// 获取Echo的默认日志记录器
|
||||
logger := c.Echo().Logger
|
||||
// 设置日志级别为致命错误
|
||||
logger.SetLevel(log.ERROR)
|
||||
// 执行下一个中间件或处理程序
|
||||
return next(c)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
func GetStatus(lastStatus *Status) *Status {
|
||||
now := time.Now()
|
||||
status := &Status{
|
||||
T: now,
|
||||
}
|
||||
|
||||
percents , err := cpu.Percent(0, false)
|
||||
if err != nil {
|
||||
fmt.Println("get cpu percent failed:", err)
|
||||
} else {
|
||||
status.Cpu = percents[0]
|
||||
}
|
||||
|
||||
upTime , err := host.Uptime()
|
||||
if err != nil {
|
||||
fmt.Println("get uptime failed:", err)
|
||||
} else {
|
||||
status.Uptime = upTime
|
||||
}
|
||||
|
||||
memInfo, err := mem.VirtualMemory()
|
||||
if err != nil {
|
||||
fmt.Println("get virtual memory failed:",err)
|
||||
} else {
|
||||
status.Mem.Current = memInfo.Used
|
||||
status.Mem.Total = memInfo.Total
|
||||
}
|
||||
|
||||
swapInfo, err := mem.SwapMemory()
|
||||
if err != nil {
|
||||
fmt.Println("get swap memory failed:", err)
|
||||
} else {
|
||||
status.Swap.Current = swapInfo.Used
|
||||
status.Swap.Total = swapInfo.Total
|
||||
}
|
||||
|
||||
distInfo,err := disk.Usage("/")
|
||||
if err != nil {
|
||||
fmt.Println("get dist usage failed:", err)
|
||||
} else {
|
||||
status.Disk.Current = distInfo.Used/1024/1024
|
||||
status.Disk.Total = distInfo.Total/1024/1024
|
||||
}
|
||||
|
||||
avgState, err := load.Avg()
|
||||
if err != nil {
|
||||
fmt.Println("get load avg failed:",err)
|
||||
} else {
|
||||
status.Loads = []float64{avgState.Load1, avgState.Load5, avgState.Load15}
|
||||
}
|
||||
|
||||
ioStats, err := net.IOCounters(false)
|
||||
if err != nil {
|
||||
fmt.Println("get io counters failed:", err)
|
||||
} else if len(ioStats) > 0 {
|
||||
ioStat := ioStats[0]
|
||||
status.NetTraffic.Sent = ioStat.BytesSent
|
||||
status.NetTraffic.Recv = ioStat.BytesRecv
|
||||
status.NetTraffic.SentM = ioStat.BytesSent/1024/1024
|
||||
status.NetTraffic.RecvM = ioStat.BytesRecv/1024/1024
|
||||
|
||||
if lastStatus != nil {
|
||||
duration := now.Sub(lastStatus.T)
|
||||
seconds := float64(duration) / float64(time.Second)
|
||||
up := uint64(float64(status.NetTraffic.Sent-lastStatus.NetTraffic.Sent) / seconds)
|
||||
down := uint64(float64(status.NetTraffic.Recv-lastStatus.NetTraffic.Recv) / seconds)
|
||||
status.NetIO.Up = up
|
||||
status.NetIO.Down = down
|
||||
}
|
||||
} else {
|
||||
fmt.Println("can not find io counters")
|
||||
}
|
||||
|
||||
status.TcpCount, err = 0,nil // GetTCPCount()
|
||||
if err != nil {
|
||||
fmt.Println("get tcp connections failed:", err)
|
||||
}
|
||||
|
||||
status.UdpCount, err = 0,nil // GetUDPCount()
|
||||
if err != nil {
|
||||
fmt.Println("get udp connections failed:", err)
|
||||
}
|
||||
|
||||
return status
|
||||
}
|
||||
|
||||
|
||||
var S *Status
|
||||
|
||||
|
||||
|
||||
func main() {
|
||||
|
||||
|
||||
// Echo instance
|
||||
e := echo.New()
|
||||
|
||||
// Middleware
|
||||
//e.Use(middleware.Logger())
|
||||
e.Use(middleware.Recover())
|
||||
e.Use(customLogger())
|
||||
|
||||
// Routes
|
||||
e.GET("/", hello)
|
||||
e.GET("/", state)
|
||||
|
||||
show_qrcode()
|
||||
|
||||
// Start server
|
||||
e.Logger.Fatal(e.Start(":1323"))
|
||||
|
||||
e.Logger.SetOutput(ioutil.Discard)
|
||||
|
||||
}
|
||||
|
||||
// Handler
|
||||
func hello(c echo.Context) error {
|
||||
return c.String(http.StatusOK, "Hello, World!")
|
||||
}
|
||||
|
||||
func state(c echo.Context) error {
|
||||
|
||||
|
||||
S = GetStatus(S);
|
||||
|
||||
bytes, err := json.Marshal(S)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return c.String(http.StatusOK, string(bytes))
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user