32 lines
1.6 KiB
Go
32 lines
1.6 KiB
Go
package device
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"crypto/sha256"
|
||
|
|
"encoding/hex"
|
||
|
|
|
||
|
|
"github.com/jackc/pgx/v5"
|
||
|
|
)
|
||
|
|
|
||
|
|
func recordFirmwareAssignmentEvent(ctx context.Context, tx pgx.Tx, commandID, commandStatus, assignmentStatus string, progress *int, resultJSON []byte) error {
|
||
|
|
digest := sha256.Sum256(resultJSON)
|
||
|
|
_, err := tx.Exec(ctx, `
|
||
|
|
INSERT INTO firmware_assignment_event(
|
||
|
|
assignment_id,tenant_id,device_id,command_id,command_status,assignment_status,phase,progress_percent,result_code,
|
||
|
|
active_slot,target_slot,previous_slot,failed_slot,boot_attempt_id,boot_health_deadline,rollback_applied,rollback_version,
|
||
|
|
installed_version,verified_sha256,verified_signing_key_id,
|
||
|
|
result_digest,result_summary
|
||
|
|
)
|
||
|
|
SELECT fa.id,fa.tenant_id,fa.device_id,fa.command_id,$2,$3,NULLIF($6::jsonb->>'phase',''),$4,NULLIF($6::jsonb->>'result_code',''),
|
||
|
|
NULLIF($6::jsonb->>'active_slot',''),NULLIF($6::jsonb->>'target_slot',''),NULLIF($6::jsonb->>'previous_slot',''),
|
||
|
|
NULLIF($6::jsonb->>'failed_slot',''),NULLIF($6::jsonb->>'boot_attempt_id',''),NULLIF($6::jsonb->>'boot_health_deadline',''),
|
||
|
|
CASE WHEN jsonb_typeof($6::jsonb->'rollback_applied')='boolean' THEN ($6::jsonb->>'rollback_applied')::boolean ELSE NULL END,
|
||
|
|
NULLIF($6::jsonb->>'rollback_version',''),NULLIF($6::jsonb->>'installed_version',''),NULLIF($6::jsonb->>'verified_sha256',''),
|
||
|
|
NULLIF($6::jsonb->>'verified_signing_key_id',''),$5,$6::jsonb
|
||
|
|
FROM firmware_assignment fa
|
||
|
|
WHERE fa.command_id=$1::uuid
|
||
|
|
ON CONFLICT(assignment_id,command_status,result_digest) DO NOTHING`,
|
||
|
|
commandID, commandStatus, assignmentStatus, progress, hex.EncodeToString(digest[:]), resultJSON)
|
||
|
|
return err
|
||
|
|
}
|