feat: init pc-monitor project

- Client: Go-based Windows hardware monitoring (CPU, GPU, memory, disk, network, power)
- Server: Go + Gin + SQLite backend with REST API
- Frontend: Vue 3 + Element Plus dashboard
- Docker deployment support
- Windows service installation script
This commit is contained in:
672
2026-05-17 01:29:44 +08:00
commit 0e8c9f7bff
49 changed files with 3291 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
package repository
import (
"database/sql"
"pc-monitor-server/model"
"time"
)
type DeviceRepository struct {
db *sql.DB
}
func NewDeviceRepository(db *sql.DB) *DeviceRepository {
return &DeviceRepository{db: db}
}
func (r *DeviceRepository) Create(device *model.Device) error {
_, err := r.db.Exec(
`INSERT INTO devices (id, hostname, os, ip, registered_at, last_report_at, status)
VALUES (?, ?, ?, ?, ?, ?, ?)`,
device.ID, device.Hostname, device.OS, device.IP,
device.RegisteredAt, device.LastReportAt, device.Status,
)
return err
}
func (r *DeviceRepository) Update(device *model.Device) error {
_, err := r.db.Exec(
`UPDATE devices SET hostname=?, os=?, ip=?, last_report_at=?, status=?
WHERE id=?`,
device.Hostname, device.OS, device.IP,
device.LastReportAt, device.Status, device.ID,
)
return err
}
func (r *DeviceRepository) GetByID(id string) (*model.Device, error) {
device := &model.Device{}
err := r.db.QueryRow(
`SELECT id, hostname, os, ip, registered_at, last_report_at, status
FROM devices WHERE id=?`, id,
).Scan(&device.ID, &device.Hostname, &device.OS, &device.IP,
&device.RegisteredAt, &device.LastReportAt, &device.Status)
if err != nil {
return nil, err
}
return device, nil
}
func (r *DeviceRepository) GetAll() ([]model.Device, error) {
rows, err := r.db.Query(
`SELECT id, hostname, os, ip, registered_at, last_report_at, status
FROM devices ORDER BY last_report_at DESC`)
if err != nil {
return nil, err
}
defer rows.Close()
var devices []model.Device
for rows.Next() {
var d model.Device
if err := rows.Scan(&d.ID, &d.Hostname, &d.OS, &d.IP,
&d.RegisteredAt, &d.LastReportAt, &d.Status); err != nil {
return nil, err
}
devices = append(devices, d)
}
return devices, nil
}
func (r *DeviceRepository) Delete(id string) error {
_, err := r.db.Exec("DELETE FROM devices WHERE id=?", id)
return err
}
func (r *DeviceRepository) UpdateStatus(id string, status string) error {
_, err := r.db.Exec("UPDATE devices SET status=? WHERE id=?", status, id)
return err
}
func (r *DeviceRepository) MarkOffline(threshold time.Duration) error {
cutoff := time.Now().Add(-threshold)
_, err := r.db.Exec(
`UPDATE devices SET status='offline'
WHERE last_report_at < ? AND status='online'`, cutoff)
return err
}