package handler import ( "log/slog" "os" "runtime" "time" "github.com/descope/go-sdk/descope/client" "github.com/gofiber/fiber/v2" ) type AdminHandler struct { DescopeClient *client.DescopeClient } func NewAdminHandler() *AdminHandler { projectID := os.Getenv("DESCOPE_PROJECT_ID") managementKey := os.Getenv("DESCOPE_MANAGEMENT_KEY") var descopeClient *client.DescopeClient var err error if projectID != "" && managementKey != "" { descopeClient, err = client.NewWithConfig(&client.Config{ ProjectID: projectID, ManagementKey: managementKey, }) if err != nil { slog.Warn("Failed to initialize Descope Client for Admin", "error", err) } } else { slog.Warn("DESCOPE_PROJECT_ID or DESCOPE_MANAGEMENT_KEY missing. Admin functions will fail.") } return &AdminHandler{ DescopeClient: descopeClient, } } func (h *AdminHandler) CheckAuth(c *fiber.Ctx) error { return c.Status(fiber.StatusOK).JSON(fiber.Map{"status": "ok"}) } // GetSystemStats returns runtime statistics for monitoring func (h *AdminHandler) GetSystemStats(c *fiber.Ctx) error { var m runtime.MemStats runtime.ReadMemStats(&m) stats := fiber.Map{ "goroutines": runtime.NumGoroutine(), "cpus": runtime.NumCPU(), "memory": fiber.Map{ "alloc": m.Alloc, "totalAlign": m.TotalAlloc, "sys": m.Sys, "numGC": m.NumGC, }, "timestamp": time.Now(), } return c.Status(fiber.StatusOK).JSON(stats) }