henrygd/beszel · warning

service name is required

Error message

service name is required

What it means

The systemd info handler decodes the request payload into common.SystemdInfoRequest via CBOR and requires ServiceName to be non-empty before querying systemd. This error is returned when the hub sent a SystemdInfo request whose ServiceName field is the empty string, i.e. a malformed or incomplete request.

Source

Thrown at agent/handlers.go:198

////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////

// GetSystemdInfoHandler handles detailed systemd service info requests
type GetSystemdInfoHandler struct{}

func (h *GetSystemdInfoHandler) Handle(hctx *HandlerContext) error {
	if hctx.Agent.systemdManager == nil {
		return errors.ErrUnsupported
	}

	var req common.SystemdInfoRequest
	if err := cbor.Unmarshal(hctx.Request.Data, &req); err != nil {
		return err
	}
	if req.ServiceName == "" {
		return errors.New("service name is required")
	}

	details, err := hctx.Agent.systemdManager.getServiceDetails(req.ServiceName)
	if err != nil {
		return err
	}

	return hctx.SendResponse(details, hctx.RequestID)
}

View on GitHub (pinned to b38fb7dafa)

Solutions

  1. Ensure the caller (hub UI or API client) always sets ServiceName before sending a SystemdInfoRequest.
  2. Update hub and agent to matching versions so the request schema (CBOR field names) lines up.
  3. If calling the agent programmatically, validate the request client-side and log the payload when ServiceName is empty.

Example fix

// before
req := common.SystemdInfoRequest{}

// after
req := common.SystemdInfoRequest{ServiceName: "beszel-hub.service"}
Defensive patterns

Strategy: validation

Validate before calling

if req.ServiceName == "" {
    return fmt.Errorf("cannot query systemd: ServiceName is empty")
}

Try / catch

err := handle(hctx)
if err != nil && err.Error() == "service name is required" {
    log.Warn("SystemdInfoRequest missing ServiceName — check hub payload", "data", hctx.Request.Data)
}

Prevention

When it happens

Trigger: Calling Handle with Action = systemd info while hctx.Request.Data unmarshals into common.SystemdInfoRequest with ServiceName == "" — e.g. hub UI/API submitted a service lookup without selecting a service, or sent an empty/zero-value payload.

Common situations: A hub bug or stale frontend sending an empty systemd service name; custom API calls to the agent's systemd endpoint omitting ServiceName; CBOR payloads decoded from older/newer request shapes where the field name shifted.

Understand the failure class

Background: "Missing required field" and "field is required" errors: why libraries reject payloads that omit mandatory fields — this error's family across 20 libraries.

Related errors


AI-assisted analysis of henrygd/beszel@b38fb7dafa (2026-08-31). Data as JSON: /api/errors/a78bec9bb570891e. Report an issue: GitHub.