- 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
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"embed"
|
|
"io/fs"
|
|
"log"
|
|
"net/http"
|
|
"pc-monitor-server/api"
|
|
"pc-monitor-server/config"
|
|
"pc-monitor-server/repository"
|
|
"pc-monitor-server/service"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
//go:embed web/dist
|
|
var webFS embed.FS
|
|
|
|
func main() {
|
|
cfg := config.Load()
|
|
|
|
db, err := repository.NewDB(cfg.Database.Path)
|
|
if err != nil {
|
|
log.Fatalf("Failed to initialize database: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
deviceRepo := repository.NewDeviceRepository(db)
|
|
metricsRepo := repository.NewMetricsRepository(db)
|
|
alertRepo := repository.NewAlertRepository(db)
|
|
|
|
deviceService := service.NewDeviceService(deviceRepo)
|
|
metricsService := service.NewMetricsService(metricsRepo)
|
|
alertService := service.NewAlertService(alertRepo, metricsRepo)
|
|
|
|
router := api.SetupRouter(deviceService, metricsService, alertService)
|
|
|
|
// Serve embedded frontend
|
|
distFS, err := fs.Sub(webFS, "web/dist")
|
|
if err != nil {
|
|
log.Fatalf("Failed to load embedded frontend: %v", err)
|
|
}
|
|
router.StaticFS("/assets", http.FS(distFS))
|
|
router.NoRoute(func(c *gin.Context) {
|
|
c.FileFromFS("/", http.FS(distFS))
|
|
})
|
|
|
|
log.Printf("Server starting on %s", cfg.Server.Addr)
|
|
if err := router.Run(cfg.Server.Addr); err != nil {
|
|
log.Fatalf("Failed to start server: %v", err)
|
|
}
|
|
}
|