gui/pkg/plugin/builtin/system/system.go

94 lines
2.2 KiB
Go
Raw Normal View History

// Package system provides the built-in system plugin for Core.
// It exposes runtime information and basic system operations via HTTP API.
package system
import (
"net/http"
"runtime"
"time"
"github.com/gin-gonic/gin"
"forge.lthn.ai/core/gui/pkg/plugin"
)
// Plugin is the built-in system information plugin.
type Plugin struct {
*plugin.BasePlugin
startTime time.Time
}
// New creates a new system plugin.
func New() *Plugin {
p := &Plugin{
startTime: time.Now(),
}
p.BasePlugin = plugin.NewBasePlugin("core", "system", nil).
WithDescription("Core system information and operations").
WithVersion("1.0.0")
return p
}
// RegisterRoutes registers the plugin's Gin routes.
func (p *Plugin) RegisterRoutes(group *gin.RouterGroup) {
group.GET("/info", p.handleInfo)
group.GET("/health", p.handleHealth)
group.GET("/runtime", p.handleRuntime)
}
// InfoResponse contains system information.
type InfoResponse struct {
Name string `json:"name"`
Version string `json:"version"`
GoVersion string `json:"goVersion"`
OS string `json:"os"`
Arch string `json:"arch"`
}
func (p *Plugin) handleInfo(c *gin.Context) {
c.JSON(http.StatusOK, InfoResponse{
Name: "Core",
Version: "0.1.0",
GoVersion: runtime.Version(),
OS: runtime.GOOS,
Arch: runtime.GOARCH,
})
}
// HealthResponse contains health check information.
type HealthResponse struct {
Status string `json:"status"`
Uptime string `json:"uptime"`
}
func (p *Plugin) handleHealth(c *gin.Context) {
c.JSON(http.StatusOK, HealthResponse{
Status: "healthy",
Uptime: time.Since(p.startTime).String(),
})
}
// RuntimeResponse contains Go runtime statistics.
type RuntimeResponse struct {
NumGoroutine int `json:"numGoroutine"`
NumCPU int `json:"numCPU"`
MemAlloc uint64 `json:"memAlloc"`
MemTotal uint64 `json:"memTotalAlloc"`
MemSys uint64 `json:"memSys"`
NumGC uint32 `json:"numGC"`
}
func (p *Plugin) handleRuntime(c *gin.Context) {
var mem runtime.MemStats
runtime.ReadMemStats(&mem)
c.JSON(http.StatusOK, RuntimeResponse{
NumGoroutine: runtime.NumGoroutine(),
NumCPU: runtime.NumCPU(),
MemAlloc: mem.Alloc,
MemTotal: mem.TotalAlloc,
MemSys: mem.Sys,
NumGC: mem.NumGC,
})
}