feat: Telegram fleet alerts, forge sigil scramble, UI polish, agent ops
- Calibrate: per-event Telegram/SMTP toggles, test notification, chat ID help - Notify on agent connect/reconnect, offline/hashrate/rejection, forge complete - Sigil scramble post-forge uniquification and Dispense Reveal ceremony - Full system check, desktop push, BITS/host-binary persistence, Path Tracer - Dashboard/Crucible visual polish, haptics, sacred geometry, mobile nav - README documents alerts, sigil scramble, and pack-usb workflow - USB bundle repacked via pack-usb.bat (AetherForge.exe + synced agent source)
This commit is contained in:
@@ -4,12 +4,15 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"crypto-miner-server/internal/db"
|
||||
"crypto-miner-server/internal/models"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
var serverStartTime = time.Now()
|
||||
|
||||
type Handler struct {
|
||||
db *db.Database
|
||||
}
|
||||
@@ -100,6 +103,45 @@ func (h *Handler) HealthCheck(w http.ResponseWriter, r *http.Request) {
|
||||
writeJSON(w, map[string]string{"status": "ok"})
|
||||
}
|
||||
|
||||
// GET /api/v1/server/ready
|
||||
// Requires auth (not in the basicAuthMiddleware bypass list).
|
||||
// Add ?verbose=1 to get full diagnostics; omit for a lightweight liveness check.
|
||||
func (h *Handler) ServerReady(w http.ResponseWriter, r *http.Request) {
|
||||
uptime := int64(time.Since(serverStartTime).Seconds())
|
||||
resp := map[string]interface{}{
|
||||
"status": "ok",
|
||||
"uptime_s": uptime,
|
||||
}
|
||||
|
||||
if r.URL.Query().Get("verbose") != "1" {
|
||||
writeJSON(w, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// DB ping
|
||||
dbStatus := "ok"
|
||||
if err := h.db.QueryRow("SELECT 1").Scan(new(int)); err != nil {
|
||||
dbStatus = "error: " + err.Error()
|
||||
resp["status"] = "degraded"
|
||||
}
|
||||
resp["db"] = dbStatus
|
||||
|
||||
// Count online agents
|
||||
var onlineAgents int
|
||||
if err := h.db.QueryRow("SELECT COUNT(*) FROM agents WHERE status = 'online'").Scan(&onlineAgents); err != nil {
|
||||
onlineAgents = -1
|
||||
}
|
||||
resp["agents_online"] = onlineAgents
|
||||
|
||||
if resp["status"] == "degraded" {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
return
|
||||
}
|
||||
writeJSON(w, resp)
|
||||
}
|
||||
|
||||
// GET /api/v1/builds
|
||||
func (h *Handler) ListBuilds(w http.ResponseWriter, r *http.Request) {
|
||||
builds, err := h.db.ListBuilds(50)
|
||||
|
||||
Reference in New Issue
Block a user