WIP components (as built)
This commit is contained in:
80 files changed
+2754
-132
No files matched your search
@@ -0,0 +1,127 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/egoist/mygo/ui"
|
||||
|
||||
mujica "mujicaui"
|
||||
)
|
||||
|
||||
func devLogStreamDemo(c *ui.Context, log func(string)) {
|
||||
dtSection(c, "LogStream", func() {
|
||||
s := devControls(c, "447", log, false)
|
||||
type state struct {
|
||||
lines []mujica.LogLine
|
||||
stream mujica.LogStreamState
|
||||
}
|
||||
st := ui.Local(c.Root(), "447", func() state {
|
||||
return state{lines: []mujica.LogLine{{Level: mujica.LogInfo, Text: "server ready"}, {Level: mujica.LogWarn, Text: "slow query"}}}
|
||||
})
|
||||
if mujica.Button(c, "Append line", mujica.ButtonOptions{}).Clicked() {
|
||||
st.lines = append(st.lines, mujica.LogLine{Time: c.Now(), Level: mujica.LogInfo, Text: fmt.Sprintf("request %d completed", len(st.lines))})
|
||||
log("line appended")
|
||||
}
|
||||
devPreview(c, s, func() {
|
||||
data := st.lines
|
||||
if s.empty {
|
||||
data = nil
|
||||
}
|
||||
if mujica.LogStream(c, data, &st.stream, mujica.LogStreamOptions{}).Changed() {
|
||||
log("pause or level changed")
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func devTraceWaterfallDemo(c *ui.Context, log func(string)) {
|
||||
dtSection(c, "TraceWaterfall", func() {
|
||||
s := devControls(c, "448", log, false)
|
||||
spans := ui.Local(c.Root(), "448", func() []mujica.TraceSpan {
|
||||
return []mujica.TraceSpan{{ID: "root", Name: "GET /api", Service: "gateway", Duration: 320 * time.Millisecond}, {ID: "db", Parent: "root", Name: "Query", Service: "database", Start: 40 * time.Millisecond, Duration: 90 * time.Millisecond}, {ID: "pay", Parent: "root", Name: "Charge", Service: "payments", Start: 230 * time.Millisecond, Duration: 80 * time.Millisecond, Error: true}}
|
||||
})
|
||||
devPreview(c, s, func() {
|
||||
data := *spans
|
||||
if s.empty {
|
||||
data = nil
|
||||
}
|
||||
if mujica.TraceWaterfall(c, data, mujica.TraceWaterfallOptions{}).Changed() {
|
||||
log("span selected")
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func devSystemMonitorDemo(c *ui.Context, log func(string)) {
|
||||
dtSection(c, "SystemMonitor", func() {
|
||||
s := devControls(c, "450", log, true)
|
||||
type state struct {
|
||||
times []time.Time
|
||||
metrics []mujica.MonitorMetric
|
||||
}
|
||||
st := ui.Local(c.Root(), "450", func() state {
|
||||
out := state{metrics: []mujica.MonitorMetric{{Name: "CPU", Unit: "%"}, {Name: "Memory", Unit: "GB"}}}
|
||||
for i := range 20 {
|
||||
out.times = append(out.times, time.Date(2026, 10, 5, 9, 0, i*5, 0, time.UTC))
|
||||
out.metrics[0].Samples = append(out.metrics[0].Samples, 40+float64(i%7)*3)
|
||||
out.metrics[1].Samples = append(out.metrics[1].Samples, 3.2+float64(i)*0.02)
|
||||
}
|
||||
return out
|
||||
})
|
||||
if mujica.Button(c, "Append sample", mujica.ButtonOptions{}).Clicked() {
|
||||
st.times = append(append([]time.Time(nil), st.times...), st.times[len(st.times)-1].Add(5*time.Second))
|
||||
for i := range st.metrics {
|
||||
last := st.metrics[i].Samples[len(st.metrics[i].Samples)-1]
|
||||
st.metrics[i].Samples = append(append([]float64(nil), st.metrics[i].Samples...), last+0.1)
|
||||
}
|
||||
log("sample appended")
|
||||
}
|
||||
devPreview(c, s, func() {
|
||||
times, metrics := st.times, st.metrics
|
||||
if s.empty {
|
||||
times, metrics = nil, nil
|
||||
}
|
||||
if mujica.SystemMonitor(c, times, metrics, mujica.SystemMonitorOptions{Status: s.status, Error: "Agent offline"}).Changed() {
|
||||
log("retry requested")
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func devRefreshIntervalSelectorDemo(c *ui.Context, log func(string)) {
|
||||
dtSection(c, "RefreshIntervalSelector", func() {
|
||||
s := devControls(c, "451", log, false)
|
||||
interval := ui.Local(c.Root(), "451", func() time.Duration { return 0 })
|
||||
refreshing := ui.Local(c.Root(), "451-refreshing", func() bool { return false })
|
||||
if mujica.Checkbox(c, refreshing, "Refreshing", mujica.CheckboxOptions{}).Changed() {
|
||||
log("refresh state changed")
|
||||
}
|
||||
devPreview(c, s, func() {
|
||||
r := mujica.RefreshIntervalSelector(c, interval, mujica.RefreshIntervalSelectorOptions{Refreshing: *refreshing})
|
||||
if r.Refresh {
|
||||
log("refresh requested")
|
||||
}
|
||||
if r.Changed {
|
||||
log("interval changed")
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func devDashboardFilterBarDemo(c *ui.Context, log func(string)) {
|
||||
dtSection(c, "DashboardFilterBar", func() {
|
||||
s := devControls(c, "452", log, false)
|
||||
filters := ui.Local(c.Root(), "452", func() mujica.DashboardFilters { return mujica.DashboardFilters{} })
|
||||
devPreview(c, s, func() {
|
||||
opts := mujica.DashboardFilterBarOptions{Envs: []string{"production", "staging"}, Tags: []string{"api", "db", "web"}}
|
||||
if s.empty {
|
||||
opts.Envs, opts.Tags = nil, nil
|
||||
*filters = mujica.DashboardFilters{}
|
||||
}
|
||||
if mujica.DashboardFilterBar(c, filters, opts).Changed() {
|
||||
log("filters changed")
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user