Files
pc-monitor/server/main.go
672 0e8c9f7bff 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
2026-05-17 01:29:44 +08:00

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