reported.json

Every field of the document a host writes back, from its JSON Schema.

What the host is running, written to reported.json in paths.state_dir after every pass, and rendered as the metrics page from the same builder. A control plane that only reads this file learns what became of its last write, and why.

Schema: reported-state.schema.json

HostReportedState

What one host is running, as the daemon last wrote it to reported.json in its paths.state_dir.

NameTypeDescription
hostIdHostId
reportedAtTimestamp
stateHostState
capacityHostCapacityWhat the machine has.
allocatableHostCapacityWhat is left once every booted app is taken off.
versionsHostVersions
volumesarray of ReportedVolume
instancesarray of ReportedInstance
checkpointsarray of ReportedCheckpoint
exportsarray of ReportedExport
message optionalStateMessage | nullSet when the last document this host was handed was refused — malformed, or not the document this host reads — and cleared when a readable one is taken up. A control plane that only reads this file learns from it that its last write did not land, and why.

HostId

an identifier

string, matching ^[A-Za-z0-9][A-Za-z0-9_-]{0,62}$

Timestamp

an ISO 8601 instant with an offset

string, matching ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]{1,9})?(Z|[+-][0-9]{2}:[0-9]{2})$

HostState

One of "registering", "ready", "draining", "unreachable".

HostCapacity

NameTypeDescription
vcpuCountinteger, at least 0
memoryMibinteger, at least 0
cacheBytesinteger, at least 0

HostVersions

NameTypeDescription
agentstring
guestImagestring
zerofsstring
firecrackerstring

ReportedVolume

NameTypeDescription
volumeIdVolumeId
appIdAppId
stateVolumeState
sizeBytesinteger, at least 0
devicePath optionalstring | null
message optionalStateMessage | null
storagePrefix optionalObjectKey | null
usage optionalFilesystemUsage | null

ReportedInstance

NameTypeDescription
appIdAppId
deploymentIdDeploymentId
stateInstanceState
restartCountinteger, at least 0Times the supervisor inside the guest has restarted the tenant since this host last booted the app afresh. A restore from a snapshot keeps the count; a cold boot starts it over.
compute optionalComputeUsage | null
convergedAt optionalTimestamp | nullWhen the instance first became what the document asks of it, for the deploymentId and desiredState it now carries. Absent while it is still on its way there, and for a deployment this host was not there to see arrive.
guestIpv4 optionalIpv4Address | null
hostPort optionalHostPort | null
lastExitCode optionalinteger | null
lastHealthyAt optionalTimestamp | null
lastRestart optionalReportedRestart | nullThe last of those restarts. Absent until there has been one.
layerDigests optionalarray of Sha256DigestThe layers the running microVM was booted from, bottom first. Empty until one has been.
message optionalStateMessage | null
meters optionalUsageMeters
startedAt optionalTimestamp | null

ReportedCheckpoint

NameTypeDescription
checkpointIdCheckpointId
volumeIdVolumeId
stateCheckpointState
message optionalStateMessage | null
readyAt optionalTimestamp | null
reference optionalStateMessage | null

ReportedExport

NameTypeDescription
exportIdExportId
stateExportState
checkpointId optionalCheckpointId | null
message optionalStateMessage | null
readyAt optionalTimestamp | null
sizeBytes optionalinteger, at least 0 | null

StateMessage

string, at most 512 characters

VolumeId

an identifier

string, matching ^[A-Za-z0-9][A-Za-z0-9_-]{0,62}$

AppId

an identifier

string, matching ^[A-Za-z0-9][A-Za-z0-9_-]{0,62}$

VolumeState

One of "pending", "ready", "detached", "deleted", "failed".

ObjectKey

between 1 and 1024 characters

string, 1 to 1024 characters

FilesystemUsage

NameTypeDescription
totalBytesinteger, at least 0
usedBytesinteger, at least 0
measuredAtTimestamp

DeploymentId

an identifier

string, matching ^[A-Za-z0-9][A-Za-z0-9_-]{0,62}$

InstanceState

One of "pending", "starting", "running", "unhealthy", "stopping", "stopped", "idle", "failed".

ComputeUsage

NameTypeDescription
memoryTotalBytesinteger, at least 0
memoryUsedBytesinteger, at least 0
measuredAtTimestamp
cpuShare optionalnumber | null

Ipv4Address

an IPv4 address

string, matching ^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])$

HostPort

integer, 1 to 65535

ReportedRestart

A tenant restart as the host heard of it: what the guest said, and when it said it.

NameTypeDescription
atTimestamp
attemptinteger, at least 01 for the first restart since the tenant last stayed up long enough to earn its budget back, up to budget.
budgetinteger, at least 0
exitTenantExit
reasonStateMessage
backoffMsinteger, at least 0

Sha256Digest

a lowercase hex sha-256

string, matching ^[0-9a-f]{64}$

UsageMeters

What an app has used since this host first saw it. Every field only ever grows, so what it cost over any stretch is the difference between two readings of it, and a reading that was missed costs nothing but resolution. A field that went down is a counter this host restarted.

Time is metered in two, because a running app holds the memory it was promised and an idle one holds only the disk its snapshot sits on. Which of those is worth what, this does not say.

NameTypeDescription
runningMsinteger, at least 0
idleMsinteger, at least 0
cpuMsinteger, at least 0Summed across the vCPUs the app was given, so a two-vCPU app that stayed busy for a second spent two seconds of it.
rxBytesinteger, at least 0What reached the guest, and what it put back on the wire. Only what was let out is counted as sent: a packet the ruleset rejected never left, so nobody is charged for it.
txBytesinteger, at least 0
diskProvisionedMibSecondsinteger, at least 0Disk is a level rather than a flow, so what is metered is the level multiplied by the time it was held: what was set aside for the app, and what its guest reported having filled. Mebibyte-seconds, because byte-milliseconds of a large volume outrun a u64 in months.
diskUsedMibSecondsinteger, at least 0

CheckpointId

an identifier

string, matching ^[A-Za-z0-9][A-Za-z0-9_-]{0,62}$

CheckpointState

One of "pending", "ready", "deleted", "failed".

ExportId

an identifier

string, matching ^[A-Za-z0-9][A-Za-z0-9_-]{0,62}$

ExportState

One of "pending", "preparing", "ready", "failed", "expired".

TenantExit

How a tenant process ended: the code it exited with, or the signal that killed it.

One of the following:

code

NameTypeDescription
codeinteger

signal

NameTypeDescription
signalinteger

On this page