64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
package internal
|
|
|
|
import (
|
|
"database/sql"
|
|
"log"
|
|
"time"
|
|
|
|
"git.mmeiblog.cn/mei/nezha-recoder/pkg"
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
func Recoder() {
|
|
servers := pkg.GetData()
|
|
for _, server := range servers.Servers {
|
|
checkNameChange(server)
|
|
db := HandleSqlConnection()
|
|
defer db.Close()
|
|
|
|
var diskUse float64
|
|
if server.Host.Disk_total != 0 {
|
|
diskUse = float64(server.State.Disk_used) / float64(server.Host.Disk_total) * 100
|
|
} else {
|
|
diskUse = 0 // 或者根据业务需求设置其他默认值
|
|
}
|
|
|
|
sql := "INSERT INTO history (id, cpu, timestamp, disk_use, load_5, net_in_speed, net_out_speed, process_count) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
|
|
_, err := db.Exec(sql, server.Id, server.State.Cpu, time.Now().Unix(), diskUse, server.State.Load_5, server.State.Net_in_speed, server.State.Net_out_speed, server.State.Process_count)
|
|
if err != nil {
|
|
log.Println("insert error:", err)
|
|
}
|
|
log.Printf("写入数据成功: %s", server.Name)
|
|
}
|
|
}
|
|
|
|
func checkNameChange(server pkg.Servers) {
|
|
db := HandleSqlConnection()
|
|
defer db.Close()
|
|
|
|
Query := "SELECT name FROM agent WHERE id = ?"
|
|
var name string
|
|
err := db.QueryRow(Query, server.Id).Scan(&name)
|
|
if err == sql.ErrNoRows {
|
|
addServer(server)
|
|
} else if err != nil {
|
|
log.Println("query error:", err)
|
|
}
|
|
|
|
if name != server.Name {
|
|
sql := "UPDATE agent SET name = ? WHERE id = ?"
|
|
db.Exec(sql, server.Name, server.Id)
|
|
}
|
|
}
|
|
|
|
func addServer(server pkg.Servers) {
|
|
db := HandleSqlConnection()
|
|
defer db.Close()
|
|
|
|
sql := "INSERT INTO agent (id, name, disk_total, mem_total, arch, platform) VALUES (?, ?, ?, ?, ?, ?)"
|
|
_, err := db.Exec(sql, server.Id, server.Name, server.Host.Disk_total, server.Host.Mem_total, server.Host.Arch, server.Host.Platform)
|
|
if err != nil {
|
|
log.Println("add Server error:", err)
|
|
}
|
|
}
|