123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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)
- }
|