Reading the status

The operator writes every status, and no person writes one. This page explains the status of the devices, the telescopes and observatories, and the reservations.

Conditions

Each kind has status.conditions in the shape of metav1.Condition, and status.observedGeneration. ParentFound is False when a resource that the spec names does not exist; the resource stays in place, and the message names the missing parent. A device on the shelf has no parent to find, so its ParentFound is True with the reason NoParent.

Devices

A device’s status has the same fields in every kind, and one readings block of its own:

Device states

A reading that holds a state names it in one word, because a device is in one state at a time:

Kind Reading Values From
Mount state Parked, Parking, Unparking, Stopped, Slewing, Tracking TELESCOPE_PARK, TELESCOPE_TRACK_STATE, and the state of EQUATORIAL_EOD_COORD
Dome park Parked, Unparked, Moving DOME_PARK
Dome shutter Open, Closed, Moving DOME_SHUTTER
DustCap cover Open, Closed, Moving CAP_PARK
Camera exposure Idle, Exposing, Done, Failed the state of CCD_EXPOSURE
FlatPanel light Lit, Dark FLAT_LIGHT_CONTROL

A mount reads the first state that applies, in this order. A Busy park is Parking or Unparking, toward the switch that is on. PARK on is Parked, unless the park’s state is Alert: a park that failed or that a client aborted does not say where the mount is. A Busy EQUATORIAL_EOD_COORD is Slewing, so a slew that ends in tracking reads Slewing until the coordinates settle. TRACK_ON on is Tracking, and a mount that does none of these is Stopped. A Moving dome turns to or from its park position.

State conditions

While a device is Connected, its conditions also give its state, for a trigger or for kubectl wait --for=condition=Parked. Each one comes from the property in the table, and a driver that does not define the property gives no condition:

Kind Condition True when Property
Dome Parked the dome is parked DOME_PARK
Dome Open the shutter is open DOME_SHUTTER
Mount Parked the mount is parked TELESCOPE_PARK
DustCap Open the cover is open CAP_PARK
FlatPanel Lit the light is on FLAT_LIGHT_CONTROL
Camera Cooling the cooler is on CCD_COOLER
WeatherStation Safe the station reports Safe SAFETY_STATUS

The reason names the state, such as Parked or Unparked, and the message names the device, such as Dome lab is parked. A park, a shutter, or a cover that moves is Unknown with the reason Moving until the move ends. Safe is False with the reason Warning or Danger. A driver that reports neither side of a switch, or a station with no safety status, gives Unknown with the reason NotReported. A device that is not connected has none of these conditions, so a trigger never reads a state that the operator cannot confirm.

Telescopes and observatories

A Telescope’s status names its INDI server in status.server, its active reservation, its tubes, its trains with their devices, its own devices, and its guider’s phase and PHD2’s state. Its Guider column, in -o wide, shows both, such as Ready, Guiding, and an empty cell for a telescope with no Guider. An Observatory’s status names its server, its telescopes, its devices, the active reservations, and the worst safety status of its weather stations. A Telescope and an Observatory also report the condition Active, and each resource with procedures reports their runs in status.procedures, as Procedures states.

Reservations

A Reservation moves through the phases Scheduled, Activating, Ready, Deactivating, and Released, or Failed. status.steps lists the steps in order, with their states, start and stop times, and summaries. A summary names the device that a step waits for. The list holds the activation steps from the start, and deactivation adds its steps when it begins, so a Ready reservation lists only what ran. Each step’s state is Pending, Running, Done, Failed, or Skipped. status.step names the step that runs now, or the step that failed, and it is empty while the reservation is Ready or Released. How a reservation runs states what each step does.

kubectl get rsv -n observatory -w
kubectl wait --for=condition=Ready reservation/east-tonight -n observatory --timeout=10m
kubectl describe reservation east-tonight -n observatory
kubectl get rsv east-tonight -n observatory \
  -o jsonpath='{.status.steps[?(@.name=="Connect")].summary}'
kubectl get cam,mnt,sw -n observatory

kubectl get rsv -w prints a line for each change of the status: the phase, the step, and the message of the step that runs, such as the device it waits for. It also prints a line for each change of the metadata, which repeats the line before it: one when the operator adds its finalizer, and one when a person deletes the reservation. -o wide adds the start, the end, and the endpoint. The message is the Ready condition’s: while a step runs, its reason is the step and its message is the step’s summary. kubectl describe lists each step with its name first, and the reservation’s Events: one for each step that ends, with the time it took, one for each phase, and a Warning for a step that fails. The Ready condition is True while the phase is Ready, and its message and status.endpoint then give the host and port for KStars, such as east-telescope.observatory.svc:7624.

kubectl logs tells the same story as the status, one line for each phase change and for each step’s start and end:

observatory-operator: Reservation east-tonight: Activating
observatory-operator: Reservation east-tonight: Activation started
observatory-operator: Reservation east-tonight: Activation done in 19 s: ran the activation of Dome lab, Mount east, Camera east-main, DustCap east
observatory-operator: Reservation east-tonight: Ready at east-telescope.observatory.svc:7624

SafeToPowerOff is True when the deactivation steps are done. Until then it is False, and its message says why, such as In use by desktop while the reservation is Ready. The guider states what a Guider’s status holds.