mirror of
https://github.com/Xevion/glance.git
synced 2025-12-06 17:15:13 -06:00
79 lines
1.6 KiB
Go
79 lines
1.6 KiB
Go
package widget
|
|
|
|
import (
|
|
"context"
|
|
"golang.org/x/text/cases"
|
|
"golang.org/x/text/language"
|
|
"html/template"
|
|
"time"
|
|
|
|
"github.com/glanceapp/glance/internal/assets"
|
|
"github.com/glanceapp/glance/internal/feed"
|
|
)
|
|
|
|
type containerData struct {
|
|
Id string
|
|
Image string
|
|
URL string
|
|
Title string
|
|
Icon CustomIcon
|
|
StatusShort string
|
|
StatusFull string
|
|
StatusStyle string
|
|
}
|
|
|
|
type Docker struct {
|
|
widgetBase `yaml:",inline"`
|
|
Containers []containerData `yaml:"-"`
|
|
}
|
|
|
|
func (widget *Docker) Initialize() error {
|
|
widget.withTitle("Docker").withCacheDuration(1 * time.Minute)
|
|
return nil
|
|
}
|
|
|
|
func (widget *Docker) Update(ctx context.Context) {
|
|
containers, err := feed.FetchDockerContainers(ctx)
|
|
|
|
if !widget.canContinueUpdateAfterHandlingErr(err) {
|
|
return
|
|
}
|
|
|
|
var items []containerData
|
|
for _, container := range containers {
|
|
var item containerData
|
|
item.Id = container.Id
|
|
item.Image = container.Image
|
|
item.URL = container.URL
|
|
item.Title = container.Title
|
|
|
|
_ = item.Icon.FromURL(container.IconURL)
|
|
|
|
switch container.State {
|
|
case "paused":
|
|
case "starting":
|
|
case "unhealthy":
|
|
item.StatusStyle = "warning"
|
|
break
|
|
case "stopped":
|
|
case "dead":
|
|
case "exited":
|
|
item.StatusStyle = "error"
|
|
break
|
|
default:
|
|
item.StatusStyle = "success"
|
|
}
|
|
|
|
item.StatusFull = container.Status
|
|
item.StatusShort = cases.Title(language.English, cases.Compact).String(container.State)
|
|
|
|
items = append(items, item)
|
|
}
|
|
|
|
widget.Containers = items
|
|
}
|
|
|
|
func (widget *Docker) Render() template.HTML {
|
|
return widget.render(widget, assets.DockerTemplate)
|
|
}
|