feat: integrate Grafana dashboards into BOC DashboardPage

- Add Infrastructure Health section with CPU/Memory/Disk panels
- Add Service Status section with PM2/Docker panels
- Create GrafanaPanel component for iframe embedding
- Build passes successfully
This commit is contained in:
Bernt
2026-07-29 19:03:06 +00:00
parent af874040ca
commit e5623d2f84
77 changed files with 11338 additions and 779 deletions
+14 -2
View File
@@ -18,13 +18,25 @@ func NewCRMHandler(db *sql.DB) *CRMHandler {
return &CRMHandler{DB: db}
}
// NullString is a sql.NullString that marshals to a plain string in JSON
type NullString struct {
sql.NullString
}
func (ns NullString) MarshalJSON() ([]byte, error) {
if ns.Valid {
return json.Marshal(ns.String)
}
return json.Marshal("")
}
type Customer struct {
ID string `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
Phone string `json:"phone"`
Phone NullString `json:"phone"`
Company string `json:"company"`
OrgNumber string `json:"org_number"`
OrgNumber NullString `json:"org_number"`
Status string `json:"status"`
Source string `json:"source"`
Tags []string `json:"tags"`