glanceapp/glance · warning

missing timezone value

Error message

missing timezone value

What it means

For every mountpoint surfaced by disk.Partitions() plus any explicitly configured ones, Glance calls disk.Usage() and wraps failures as 'getting filesystem usage for %s: %v'. The mountpoint is simply omitted from info.Mountpoints on failure.

Source

Thrown at internal/glance/widget-clock.go:33

	HourFormat string        `yaml:"hour-format"`
	Timezones  []struct {
		Timezone string `yaml:"timezone"`
		Label    string `yaml:"label"`
	} `yaml:"timezones"`
}

func (widget *clockWidget) initialize() error {
	widget.withTitle("Clock").withError(nil)

	if widget.HourFormat == "" {
		widget.HourFormat = "24h"
	} else if widget.HourFormat != "12h" && widget.HourFormat != "24h" {
		return errors.New("hour-format must be either 12h or 24h")
	}

	for t := range widget.Timezones {
		if widget.Timezones[t].Timezone == "" {
			return errors.New("missing timezone value")
		}

		if _, err := time.LoadLocation(widget.Timezones[t].Timezone); err != nil {
			return fmt.Errorf("invalid timezone '%s': %v", widget.Timezones[t].Timezone, err)
		}
	}

	widget.cachedHTML = widget.renderTemplate(widget, clockWidgetTemplate)

	return nil
}

func (widget *clockWidget) Render() template.HTML {
	return widget.cachedHTML
}

View on GitHub (pinned to 91324e8de7)

Solutions

  1. Identify the failing path from the error message and check on the host: df <path> / mount | grep <path>
  2. If the mount is stale (e.g. dead NFS), unmount it properly: sudo umount -l /stale/mount
  3. Hide the problem mount in widget config: mountpoints: { "/stale/mount": { hide: true } } or set hide-mountpoints-by-default and whitelist
  4. For containers, filter host mounts so only paths present in the container are requested

Example fix

// before (glance.yml)
- type: system
  # auto-discovers all partitions including dead NFS /mnt/nas
// after: hide the unreachable mount
- type: system
  mountpoints:
    /mnt/nas:
      hide: true
Defensive patterns

Strategy: validation

Validate before calling

if usage, err := disk.Usage(path); err != nil {
    log.Printf("skipping mount %s: %v", path, err)
    continue // omit this mountpoint, keep others
} else {
    _ = usage
}

Prevention

When it happens

Trigger: disk.Usage(requestedPath) fails: the mountpoint no longer exists (unmounted USB/NFS), a stale/dangling entry in /proc/self/mounts (common with bind mounts in containers), permission denied on the mount root, or statfs failing on network storage that has gone away.

Common situations: Auto-discovered partitions (disk.Partitions(false) lists physical mounts) including an unreachable NFS/SMB share; containers where the host's /proc/mounts references paths not present in the container namespace; recently removed removable media.

Related errors


AI-assisted analysis of glanceapp/glance@91324e8de7 (2026-08-15). Data as JSON: /api/errors/e4b4549d16c07f35. Report an issue: GitHub.