Files
llmgw/internal/web/nvlink_page.go
T
Ilker ManapandClaude Opus 5.5 11231d8c2b The portal in English and Turkish: a catalogue per language, a switcher at the foot of every page, landing.language, Turkish numbers and dates
Every template and handler message in internal/web goes through a JSON
catalogue under internal/web/locales/<code>/, with English as the fallback.
The language is the person's choice (a cookie set by /_lang/{code}), else
Accept-Language, else landing.language. Tests refuse a key some language
lacks, a translation with other arguments than English, and template text
left in English.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 00:12:53 +02:00

57 lines
1.3 KiB
Go

package web
import (
"net/http"
"time"
"gitea.mynodes.xyz/ilker/llmgw/internal/control/nvlink"
)
// NVLinkSource is a Source that can report multi-node NVLink domains.
type NVLinkSource interface {
NVLink() nvlink.Report
}
type nvlinkPageData struct {
Nav Nav
OnAdminListener bool
Nodes string
Domains []nvlinkDomainView
Problems []nvlink.Problem
Version, Now string
}
type nvlinkDomainView struct {
nvlink.Domain
Short string
Problems []nvlink.Problem
}
// NVLinkPage shows every multi-node NVLink domain as a rack of trays.
func NVLinkPage(src Source, onAdminListener bool, version string) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ns, ok := src.(NVLinkSource)
if !ok {
http.NotFound(w, r)
return
}
rep := ns.NVLink()
d := nvlinkPageData{Nav: navFrom(r, "cluster"), OnAdminListener: onAdminListener, Nodes: "/admin/nodes",
Problems: rep.Problems, Version: version, Now: time.Now().UTC().Format(time.RFC3339)}
if onAdminListener {
d.Nodes = "/nodes"
}
for _, dom := range rep.Domains {
v := nvlinkDomainView{Domain: dom, Short: nvlink.Short(dom.Key)}
for _, p := range rep.Problems {
if p.Domain == dom.Key {
v.Problems = append(v.Problems, p)
}
}
d.Domains = append(d.Domains, v)
}
noStore(w)
render(w, r, "nvlink", d)
}
}