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:
87
server/repository/device.go
Normal file
87
server/repository/device.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user