| -- name: NewMachine :one | 
 | INSERT INTO machines ( | 
 |     machine_created_at | 
 | ) VALUES ( | 
 |     now() | 
 | ) | 
 | RETURNING *; | 
 |  | 
 | -- name: NewSession :one | 
 | INSERT INTO sessions ( | 
 |     session_component_name, session_runtime_info, session_created_at, session_interval_seconds, session_deadline | 
 | ) VALUES ( | 
 |     $1, $2, now(), $3, (now() + $3 * interval '1 second') | 
 | ) | 
 | RETURNING *; | 
 |  | 
 | -- name: SessionPoke :exec | 
 | -- Update a given session with a new deadline. Must be called in the same | 
 | -- transaction as SessionCheck to ensure the session is still alive. | 
 | UPDATE sessions | 
 | SET session_deadline = now() + session_interval_seconds * interval '1 second' | 
 | WHERE session_id = $1; | 
 |  | 
 | -- name: SessionCheck :many | 
 | -- SessionCheck returns a session by ID if that session is still valid (ie. its | 
 | -- deadline hasn't expired). | 
 | SELECT * | 
 | FROM sessions | 
 | WHERE session_id = $1 | 
 | AND session_deadline > now(); | 
 |  | 
 | -- name: StartWork :exec | 
 | INSERT INTO work ( | 
 |     machine_id, session_id, process | 
 | ) VALUES ( | 
 |     $1, $2, $3 | 
 | ); | 
 |  | 
 | -- name: FinishWork :exec | 
 | DELETE FROM work | 
 | WHERE machine_id = $1 | 
 |   AND session_id = $2 | 
 |   AND process = $3; | 
 |  | 
 |  | 
 | -- name: WorkHistoryInsert :exec | 
 | -- Insert an entry into the work_history audit table. | 
 | INSERT INTO work_history ( | 
 |     machine_id, process, event, timestamp, failed_cause | 
 | ) VALUES ( | 
 |     $1, $2, $3, now(), $4 | 
 | ); | 
 |  | 
 | -- name: WorkBackoffInsert :exec | 
 | -- Upsert a backoff for a given machine/process. | 
 | INSERT INTO work_backoff ( | 
 |     machine_id, process, cause, until | 
 | ) VALUES ( | 
 |     $1, $2, $3, now() + (sqlc.arg(seconds)::int * interval '1 second') | 
 | ) ON CONFLICT (machine_id, process) DO UPDATE SET | 
 |     cause = $3, | 
 |     until = now() + (sqlc.arg(seconds)::int * interval '1 second') | 
 | ; | 
 |  | 
 | -- name: ListHistoryOf :many | 
 | -- Retrieve full audit history of a machine. | 
 | SELECT * | 
 | FROM work_history | 
 | WHERE machine_id = $1 | 
 | ORDER BY timestamp ASC; | 
 |  | 
 | -- name: GetSession :many | 
 | -- Retrieve session information by session ID. | 
 | SELECT * | 
 | FROM sessions | 
 | WHERE session_id = $1; |