Delete main.go

This commit is contained in:
挽晴-StaySunny
2023-09-15 19:24:46 +08:00
committed by GitHub
parent a407abe4f9
commit 021e39549e

258
main.go
View File

@@ -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))
}