Dings have different states through their life cycle
Ringing: When a device first creates a ding, its initial state is ringing.
Timed Out: Its state will move to timed_out if nobody answers a ding after 1 minute. This could happen for several reasons, like user got the push notification but didn't open the app, or the user got the push notification, opened the app but never pressed "Answer", or just the user never got the push notification.
Connected: When a user answers the call.
Completed: When all clients connected hang up the call.
Whenever a user starts a setup process (by entering the name and location of the device), we create a Setup record in our database.
New: Each new setup will stay with that state until the user has gone through the rest of the setup flow, by connecting to the device's AP and entering the network he wants it to connect to.
Complete: When that happens, the setup process splits into two parallel processes: The client goes back to its network and sends an update to our backend including the mac address of the device it has just set up, and the device tries to connect to the new network and send a status report When one of these happen, the setup moves to complete state.
Valid: The setup moves became valid when the two processes from the previous step are done. This is final state for the device.
Retrying: When one of the two processes from Complete state fails, we offer the user to Retry the setup, and move it the status as a Retry.
When a change is done by an admin user, we track the change in the activity log and save which values changed.