From 723fd60494c3dab966548fca523e3ebda86729b6 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Mon, 5 Oct 2026 06:46:31 +0000 Subject: [PATCH] runtime: publish SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1 --- ...05-SNIKKET-OPS-GAPS-RECONCILE-99577R1.json | 38 + ...005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.txt | 148 ++ runtime/latest.json | 22 +- runtime/latest.txt | 2306 +---------------- 4 files changed, 315 insertions(+), 2199 deletions(-) create mode 100644 runtime/history/SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.json create mode 100644 runtime/history/SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.txt diff --git a/runtime/history/SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.json b/runtime/history/SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.json new file mode 100644 index 00000000..8c274cf4 --- /dev/null +++ b/runtime/history/SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "snikket-ops-gaps-reconcile", + "started_at_utc": "2026-10-05T06:46:19Z", + "finished_at_utc": "2026-10-05T06:46:30Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "42c5c98e1e7e36e4af7ab23f644308660eed0d45271f7207290956264ade5a2a", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "b273ebd9e84019c6ed048e74e5e888c0818a877184fc6e455881b787ece315f4", + "sanitized_output_sha256": "b273ebd9e84019c6ed048e74e5e888c0818a877184fc6e455881b787ece315f4", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "SNIKKET_OPS_GAPS_RECONCILE_WRAPPER=V1\nMODE=read-only\nNO_DNS_MUTATION=true\nNO_VM_MUTATION=true\nNO_CONTAINER_RESTART=true\nNO_SERVICE_START=true\nNO_SOURCE_MUTATION=true\nHOST_PVE01=true\nINGRESS_HOSTKEY_SELF_BOUND=true\nVM150_INVENTORY_PRESENT=true\nVM150_RUNNING=true\nVM150_EXPECTED_NODE=true\nVM130_INVENTORY_PRESENT=true\nVM130_RUNNING=true\nVM130_EXPECTED_NODE=true\nVM150_ONBOOT=true\nVM150_AGENT_CONFIG_LINE_PRESENT=true\nVM150_QGA_PING=true\nPVE_BACKUP_JOBS_QUERY_RC=0\nPVE_BACKUP_JOB_COVERAGE_COUNT=0\nPVE_BACKUP_JOB_ENABLED_COVERAGE_COUNT=0\nPVE_BACKUP_STORAGE_QUERY_RC=0\nPVE_BACKUP_STORAGE_COUNT=1\nPVE_BACKUP_STORAGE_TYPE_COUNT=1\nPVE_VM150_BACKUP_OBJECT_COUNT=0\nPVE_VM150_BACKUP_STORAGE_WITH_OBJECT_COUNT=0\nPVE_VM150_NEWEST_BACKUP_AGE_HOURS=-1\nPVE_VM150_BACKUP_WITHIN_48H=false\nPVE_VM150_BACKUP_WITHIN_7D=false\nHOMELAB_BACKUP_V2_TIMER_ACTIVE=active\nHOMELAB_BACKUP_V2_TIMER_ENABLED=enabled\nHOMELAB_BACKUP_V2_TIMER_RESULT=success\nHOMELAB_BACKUP_V2_TIMER_EXEC_MAIN_STATUS=\nHOMELAB_BACKUP_V2_SERVICE_ACTIVE=activating\nHOMELAB_BACKUP_V2_SERVICE_ENABLED=static\nHOMELAB_BACKUP_V2_SERVICE_RESULT=success\nHOMELAB_BACKUP_V2_SERVICE_EXEC_MAIN_STATUS=0\nHOMELAB_BACKUP_AUDIT_TIMER_ACTIVE=active\nHOMELAB_BACKUP_AUDIT_TIMER_ENABLED=enabled\nHOMELAB_BACKUP_AUDIT_TIMER_RESULT=success\nHOMELAB_BACKUP_AUDIT_TIMER_EXEC_MAIN_STATUS=\nHOMELAB_BACKUP_AUDIT_SERVICE_ACTIVE=inactive\nHOMELAB_BACKUP_AUDIT_SERVICE_ENABLED=static\nHOMELAB_BACKUP_AUDIT_SERVICE_RESULT=success\nHOMELAB_BACKUP_AUDIT_SERVICE_EXEC_MAIN_STATUS=0\nBACKUP_V2_14D_VM150_REF_COUNT=40\nBACKUP_V2_14D_VM150_SUCCESS_COUNT=40\nBACKUP_V2_14D_VM150_FAIL_COUNT=0\nBACKUP_AUDIT_30D_VM150_REF_COUNT=2379\nBACKUP_AUDIT_30D_VM150_RESTORE_REF_COUNT=764\nBACKUP_AUDIT_30D_VM150_PASS_REF_COUNT=763\nBACKUP_SOURCE_FILE_COUNT=135\nBACKUP_SOURCE_VM150_EXPLICIT_REF_FILE_COUNT=17\nBACKUP_SOURCE_DYNAMIC_VM_DISCOVERY_FILE_COUNT=46\nSOURCE_GIT_REPO_SCAN_COUNT=64\nSOURCE_RECON_EXACT_SHA_MATCH_COUNT=0\nSOURCE_RECON_CORRECT_LOGIC_TRACKED_COUNT=0\nSOURCE_DNS_ALL3_TRACKED_COUNT=343\nSOURCE_DNS_ALL3_CURRENT_TARGET_TRACKED_COUNT=294\nMONITOR_SOURCE_FILE_COUNT=86\nMONITOR_CHAT_DOMAIN_REF_FILE_COUNT=0\nMONITOR_ALL3_DOMAIN_REF_FILE_COUNT=0\nMONITOR_XMPP_5222_REF_FILE_COUNT=0\nMONITOR_XMPP_5269_REF_FILE_COUNT=0\nMONITOR_TURN_3479_REF_FILE_COUNT=0\nMONITOR_TURN_STUN_REF_FILE_COUNT=0\nMONITOR_CERT_EXPIRY_REF_FILE_COUNT=2\nHOMELAB_EXTERNAL_PROBE_VPS_HEALTH_TIMER_ACTIVE=active\nHOMELAB_EXTERNAL_PROBE_VPS_HEALTH_TIMER_ENABLED=enabled\nHOMELAB_KUMA_MONITOR_POLICY_TIMER_ACTIVE=active\nHOMELAB_KUMA_MONITOR_POLICY_TIMER_ENABLED=enabled\nHOMELAB_OVERALL_HEALTH_TIMER_ACTIVE=active\nHOMELAB_OVERALL_HEALTH_TIMER_ENABLED=enabled\nHOMELAB_ALERTING_HEALTH_TIMER_ACTIVE=active\nHOMELAB_ALERTING_HEALTH_TIMER_ENABLED=enabled\nPUBLIC_DNS_OK_COUNT=3\nPUBLIC_HTTPS_OK_COUNT=3\nPUBLIC_STUN_3479_PASS=true\nPUBLIC_STUN_3479_CLASS=BINDING_SUCCESS\nVM150_QGA_EXEC_INIT_RC=0\nVM150_QGA_POLL_RC=0\nVM150_GUEST_EXITCODE=0\nVM150_GUEST_OUTPUT_MARKER=true\nSNIKKET_OPS_GAPS_GUEST=V1\nMODE=read-only\nNO_DNS_MUTATION=true\nNO_VM_MUTATION=true\nNO_CONTAINER_RESTART=true\nNO_SERVICE_START=true\nNO_SOURCE_MUTATION=true\nGUEST_HOSTNAME_SNIKKET=true\nDOCKER_OK=true\nCONTAINER_SNIKKET_PRESENT=true\nCONTAINER_SNIKKET_RUNNING=true\nCONTAINER_SNIKKET_IMAGE_ID=c392b78a2bd3447d314054caa75b3556cf4fc3579288599e2d0a15dbcd690972\nCONTAINER_SNIKKET_IMAGE_CREATED=2026-06-12T14:41:53.\nPROSODY_ABOUT_PRESENT=true\nPROSODY_ABOUT_SHA256=df326196b07e19c252252fd9213b8920957e8ff733d5b7a548ef1b004586ff38\nSNIKKET_UPDATE_CHECK_EFFECTIVE=true\nSNIKKET_RETENTION_EXPLICIT=false\nSNIKKET_UPLOAD_LIMIT_EXPLICIT=false\nCERT_DAYS_REMAINING=-1\nROOT_FS_USED_PERCENT=4\nGUEST_AUDIT_DONE=true\nUPSTREAM_COMPOSE_FETCH_RC=0\nUPSTREAM_COMPOSE_PRESENT=true\nUPSTREAM_COMPOSE_SHA256=5773abc3efc852e3d4082de5947b7e93acdf3708e416272f6edd7c3f00de69b8\nUPSTREAM_SNIKKET_IMAGE_LINE_COUNT=4\nOPS_GAPS_RECONCILE_COMPLETE=true\nDECISION=ANALYZE_EXACT_99577_EVIDENCE\nNEXT_GATE=APPLY_ONLY_PROVEN_OPERATIONAL_GAPS\nTASK_RESULT=SNIKKET_OPS_GAPS_RECONCILE\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\n" +} diff --git a/runtime/history/SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.txt b/runtime/history/SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.txt new file mode 100644 index 00000000..07f78fad --- /dev/null +++ b/runtime/history/SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1.txt @@ -0,0 +1,148 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=snikket-ops-gaps-reconcile +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=42c5c98e1e7e36e4af7ab23f644308660eed0d45271f7207290956264ade5a2a +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=b273ebd9e84019c6ed048e74e5e888c0818a877184fc6e455881b787ece315f4 +SANITIZED_OUTPUT_SHA256=b273ebd9e84019c6ed048e74e5e888c0818a877184fc6e455881b787ece315f4 +OUTPUT_BEGIN +SNIKKET_OPS_GAPS_RECONCILE_WRAPPER=V1 +MODE=read-only +NO_DNS_MUTATION=true +NO_VM_MUTATION=true +NO_CONTAINER_RESTART=true +NO_SERVICE_START=true +NO_SOURCE_MUTATION=true +HOST_PVE01=true +INGRESS_HOSTKEY_SELF_BOUND=true +VM150_INVENTORY_PRESENT=true +VM150_RUNNING=true +VM150_EXPECTED_NODE=true +VM130_INVENTORY_PRESENT=true +VM130_RUNNING=true +VM130_EXPECTED_NODE=true +VM150_ONBOOT=true +VM150_AGENT_CONFIG_LINE_PRESENT=true +VM150_QGA_PING=true +PVE_BACKUP_JOBS_QUERY_RC=0 +PVE_BACKUP_JOB_COVERAGE_COUNT=0 +PVE_BACKUP_JOB_ENABLED_COVERAGE_COUNT=0 +PVE_BACKUP_STORAGE_QUERY_RC=0 +PVE_BACKUP_STORAGE_COUNT=1 +PVE_BACKUP_STORAGE_TYPE_COUNT=1 +PVE_VM150_BACKUP_OBJECT_COUNT=0 +PVE_VM150_BACKUP_STORAGE_WITH_OBJECT_COUNT=0 +PVE_VM150_NEWEST_BACKUP_AGE_HOURS=-1 +PVE_VM150_BACKUP_WITHIN_48H=false +PVE_VM150_BACKUP_WITHIN_7D=false +HOMELAB_BACKUP_V2_TIMER_ACTIVE=active +HOMELAB_BACKUP_V2_TIMER_ENABLED=enabled +HOMELAB_BACKUP_V2_TIMER_RESULT=success +HOMELAB_BACKUP_V2_TIMER_EXEC_MAIN_STATUS= +HOMELAB_BACKUP_V2_SERVICE_ACTIVE=activating +HOMELAB_BACKUP_V2_SERVICE_ENABLED=static +HOMELAB_BACKUP_V2_SERVICE_RESULT=success +HOMELAB_BACKUP_V2_SERVICE_EXEC_MAIN_STATUS=0 +HOMELAB_BACKUP_AUDIT_TIMER_ACTIVE=active +HOMELAB_BACKUP_AUDIT_TIMER_ENABLED=enabled +HOMELAB_BACKUP_AUDIT_TIMER_RESULT=success +HOMELAB_BACKUP_AUDIT_TIMER_EXEC_MAIN_STATUS= +HOMELAB_BACKUP_AUDIT_SERVICE_ACTIVE=inactive +HOMELAB_BACKUP_AUDIT_SERVICE_ENABLED=static +HOMELAB_BACKUP_AUDIT_SERVICE_RESULT=success +HOMELAB_BACKUP_AUDIT_SERVICE_EXEC_MAIN_STATUS=0 +BACKUP_V2_14D_VM150_REF_COUNT=40 +BACKUP_V2_14D_VM150_SUCCESS_COUNT=40 +BACKUP_V2_14D_VM150_FAIL_COUNT=0 +BACKUP_AUDIT_30D_VM150_REF_COUNT=2379 +BACKUP_AUDIT_30D_VM150_RESTORE_REF_COUNT=764 +BACKUP_AUDIT_30D_VM150_PASS_REF_COUNT=763 +BACKUP_SOURCE_FILE_COUNT=135 +BACKUP_SOURCE_VM150_EXPLICIT_REF_FILE_COUNT=17 +BACKUP_SOURCE_DYNAMIC_VM_DISCOVERY_FILE_COUNT=46 +SOURCE_GIT_REPO_SCAN_COUNT=64 +SOURCE_RECON_EXACT_SHA_MATCH_COUNT=0 +SOURCE_RECON_CORRECT_LOGIC_TRACKED_COUNT=0 +SOURCE_DNS_ALL3_TRACKED_COUNT=343 +SOURCE_DNS_ALL3_CURRENT_TARGET_TRACKED_COUNT=294 +MONITOR_SOURCE_FILE_COUNT=86 +MONITOR_CHAT_DOMAIN_REF_FILE_COUNT=0 +MONITOR_ALL3_DOMAIN_REF_FILE_COUNT=0 +MONITOR_XMPP_5222_REF_FILE_COUNT=0 +MONITOR_XMPP_5269_REF_FILE_COUNT=0 +MONITOR_TURN_3479_REF_FILE_COUNT=0 +MONITOR_TURN_STUN_REF_FILE_COUNT=0 +MONITOR_CERT_EXPIRY_REF_FILE_COUNT=2 +HOMELAB_EXTERNAL_PROBE_VPS_HEALTH_TIMER_ACTIVE=active +HOMELAB_EXTERNAL_PROBE_VPS_HEALTH_TIMER_ENABLED=enabled +HOMELAB_KUMA_MONITOR_POLICY_TIMER_ACTIVE=active +HOMELAB_KUMA_MONITOR_POLICY_TIMER_ENABLED=enabled +HOMELAB_OVERALL_HEALTH_TIMER_ACTIVE=active +HOMELAB_OVERALL_HEALTH_TIMER_ENABLED=enabled +HOMELAB_ALERTING_HEALTH_TIMER_ACTIVE=active +HOMELAB_ALERTING_HEALTH_TIMER_ENABLED=enabled +PUBLIC_DNS_OK_COUNT=3 +PUBLIC_HTTPS_OK_COUNT=3 +PUBLIC_STUN_3479_PASS=true +PUBLIC_STUN_3479_CLASS=BINDING_SUCCESS +VM150_QGA_EXEC_INIT_RC=0 +VM150_QGA_POLL_RC=0 +VM150_GUEST_EXITCODE=0 +VM150_GUEST_OUTPUT_MARKER=true +SNIKKET_OPS_GAPS_GUEST=V1 +MODE=read-only +NO_DNS_MUTATION=true +NO_VM_MUTATION=true +NO_CONTAINER_RESTART=true +NO_SERVICE_START=true +NO_SOURCE_MUTATION=true +GUEST_HOSTNAME_SNIKKET=true +DOCKER_OK=true +CONTAINER_SNIKKET_PRESENT=true +CONTAINER_SNIKKET_RUNNING=true +CONTAINER_SNIKKET_IMAGE_ID=c392b78a2bd3447d314054caa75b3556cf4fc3579288599e2d0a15dbcd690972 +CONTAINER_SNIKKET_IMAGE_CREATED=2026-06-12T14:41:53. +PROSODY_ABOUT_PRESENT=true +PROSODY_ABOUT_SHA256=df326196b07e19c252252fd9213b8920957e8ff733d5b7a548ef1b004586ff38 +SNIKKET_UPDATE_CHECK_EFFECTIVE=true +SNIKKET_RETENTION_EXPLICIT=false +SNIKKET_UPLOAD_LIMIT_EXPLICIT=false +CERT_DAYS_REMAINING=-1 +ROOT_FS_USED_PERCENT=4 +GUEST_AUDIT_DONE=true +UPSTREAM_COMPOSE_FETCH_RC=0 +UPSTREAM_COMPOSE_PRESENT=true +UPSTREAM_COMPOSE_SHA256=5773abc3efc852e3d4082de5947b7e93acdf3708e416272f6edd7c3f00de69b8 +UPSTREAM_SNIKKET_IMAGE_LINE_COUNT=4 +OPS_GAPS_RECONCILE_COMPLETE=true +DECISION=ANALYZE_EXACT_99577_EVIDENCE +NEXT_GATE=APPLY_ONLY_PROVEN_OPERATIONAL_GAPS +TASK_RESULT=SNIKKET_OPS_GAPS_RECONCILE +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index af2186db..8c274cf4 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-261005-SKLADCHIK-DURABILITY-BACKUP-PRODUCER-RCA-99578R1", - "status": "FAIL", - "rc": 43, + "command_id": "SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1", + "status": "OK", + "rc": 0, "host": "pve01", "mode": "read-only", - "component": "skladchik-durability-backup-producer-rca", - "started_at_utc": "2026-10-05T06:43:36Z", - "finished_at_utc": "2026-10-05T06:44:06Z", + "component": "snikket-ops-gaps-reconcile", + "started_at_utc": "2026-10-05T06:46:19Z", + "finished_at_utc": "2026-10-05T06:46:30Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "6d4e000caabe0b4f15d31ba419f9633c5004c1b83d9c535098b8901ae634bb59", + "command_sha256": "42c5c98e1e7e36e4af7ab23f644308660eed0d45271f7207290956264ade5a2a", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -21,7 +21,7 @@ "result_contract_valid": true, "result_contract_status": null, "result_contract_error": null, - "command_rc": 43, + "command_rc": 0, "changes_made": false, "rollback_started": false, "rollback_restored": null, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "16ba01850d81f6abbd81c5322dfb90ebe83f2780ce7f91f057ae10bce56216b0", - "sanitized_output_sha256": "16ba01850d81f6abbd81c5322dfb90ebe83f2780ce7f91f057ae10bce56216b0", + "raw_evidence_sha256": "b273ebd9e84019c6ed048e74e5e888c0818a877184fc6e455881b787ece315f4", + "sanitized_output_sha256": "b273ebd9e84019c6ed048e74e5e888c0818a877184fc6e455881b787ece315f4", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "SKLADCHIK_DURABILITY_BACKUP_PRODUCER_RCA=V1\nNO_MAIL_SEND=true\nNO_SERVICE_RESTART=true\nNO_TIMER_MUTATION=true\nNO_NETWORK_MUTATION=true\nNO_SOURCE_MUTATION=true\nNO_BACKUP_MUTATION=true\nNO_GIT_PUSH=true\nMODE=read-only\nHOST_PVE01=true\nPRODUCER_VM170_QM_RC=0\nPRODUCER_VM170_STDERR_PRESENT=false\nPRODUCER_VM170_JSON=true\nPRODUCER_VM170_GUEST_EXITCODE=0\nVM170_MONITOR_SHA=19123e359f2f7b9a2d373fd7e4464dd426d31b91cabc567c252e70cad40d77c8\nVM170_TIMER_ACTIVE=active\nVM170_TIMER_ENABLED=enabled\nVM170_SERVICE_RESULT=success\nVM170_HEALTH_STATUS=OK\\nVM170_HEALTH_TS=2026-10-05T06:43:23Z\\nVM170_HEALTH_REPORTS=22\\nVM170_HEALTH_OPEN=13\\nVM170_HEALTH_RESOLVED=9\\n\nVM170_BASELINE_OK=false\nSUPERVISOR_PRESENT=true\nSUPERVISOR_SHA=3a9bf9f3f9c28dbf670300f0851a5b7f86eb41fa41cdf44d0935337ae8ef02a2\nSUPERVISOR_BASENAME=skladchik-reports-monitor-supervisor\nSUPERVISOR_AST_OK=true\nSUPERVISOR_FUNCTION_COUNT=16\nSUPERVISOR_FUNCTIONS=now,iso,log,run,parse_env_text,read_env_file,age_seconds_from_ts,ssh_edge,edge_mail,systemctl_props,gather,render_body,write_health,read_state,write_state,main\nSUPERVISOR_CLI_OPTION_COUNT=0\nSUPERVISOR_CLI_OPTIONS=NONE\nSUPERVISOR_ENV_NAME_COUNT=5\nSUPERVISOR_ENV_NAMES=SKLADCHIK_BACKUP_HEALTH_MAX_SECONDS,SKLADCHIK_COOKIE_EXPIRY_WARN_SECONDS,SKLADCHIK_EDGE,SKLADCHIK_MONITOR_HEALTH_MAX_SECONDS,SKLADCHIK_RESTORE_HEALTH_MAX_SECONDS\nSUPERVISOR_RELEVANT_FUNCTION_COUNT=4\nSUPERVISOR_FUNC_1_NAME=parse_env_text\nSUPERVISOR_FUNC_1_LINENO=51\nSUPERVISOR_FUNC_1_ENDLINENO=58\nSUPERVISOR_FUNC_1_NAMES=d,k,line,split,splitlines,startswith,strip,text,v\nSUPERVISOR_FUNC_1_AST_BEGIN\nFunctionDef(\n name='parse_env_text',\n args=arguments(\n args=[\n arg(arg='text')]),\n body=[\n Assign(\n targets=[\n Name(id='d', ctx=Store())],\n value=Dict()),\n For(\n target=Name(id='line', ctx=Store()),\n iter=Call(\n func=Attribute(\n value=BoolOp(\n op=Or(),\n values=[\n Name(id='text', ctx=Load()),\n Constant(value='')]),\n attr='splitlines',\n ctx=Load())),\n body=[\n If(\n test=BoolOp(\n op=Or(),\n values=[\n UnaryOp(\n op=Not(),\n operand=Name(id='line', ctx=Load())),\n Call(\n func=Attribute(\n value=Name(id='line', ctx=Load()),\n attr='startswith',\n ctx=Load()),\n args=[\n Constant(value='#')]),\n Compare(\n left=Constant(value='='),\n ops=[\n NotIn()],\n comparators=[\n Name(id='line', ctx=Load())])]),\n body=[\n Continue()]),\n Assign(\n targets=[\n Tuple(\n elts=[\n Name(id='k', ctx=Store()),\n Name(id='v', ctx=Store())],\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='line', ctx=Load()),\n attr='split',\n ctx=Load()),\n args=[\n Constant(value='='),\n Constant(value=1)])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='d', ctx=Load()),\n slice=Call(\n func=Attribute(\n value=Name(id='k', ctx=Load()),\n attr='strip',\n ctx=Load())),\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='v', ctx=Load()),\n attr='strip',\n ctx=Load())))]),\n Return(\n value=Name(id='d', ctx=Load()))])\nSUPERVISOR_FUNC_1_AST_END\nSUPERVISOR_FUNC_2_NAME=gather\nSUPERVISOR_FUNC_2_LINENO=110\nSUPERVISOR_FUNC_2_ENDLINENO=347\nSUPERVISOR_FUNC_2_NAMES=APP_FRESHNESS_PROBE,Exception,M,MONITOR_HEALTH_AGE_MAX,Path,S,age_seconds_from_ts,append,base,core_cmd,facts,files,get,group,health_age,int,items,k,local_units,m,mon,name,opened,out,p,parse_env_text,probe,probe_out,probe_rc,problems,props,quote,rc,re,read_text,reg_cmd,reg_out,reg_rc,registry_source,replace,reports,resolved,route,route_lines,run,search,section,shlex,splitlines,ssh_edge,startswith,str,strip,systemctl_props,timer_active,timer_enabled,timers_text,u,wm,worker_path,worker_target,worker_text\nSUPERVISOR_FUNC_2_AST_BEGIN\nFunctionDef(\n name='gather',\n args=arguments(),\n body=[\n Assign(\n targets=[\n Name(id='facts', ctx=Store())],\n value=Dict()),\n Assign(\n targets=[\n Name(id='problems', ctx=Store())],\n value=List(ctx=Load())),\n Assign(\n targets=[\n Name(id='core_cmd', ctx=Store())],\n value=Constant(value='')),\n Assign(\n targets=[\n Tuple(\n elts=[\n Name(id='rc', ctx=Store()),\n Name(id='out', ctx=Store())],\n ctx=Store())],\n value=Call(\n func=Name(id='ssh_edge', ctx=Load()),\n args=[\n Name(id='core_cmd', ctx=Load())],\n keywords=[\n keyword(\n arg='timeout',\n value=Constant(value=45))])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='core_ssh_rc'),\n ctx=Store())],\n value=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Name(id='rc', ctx=Load())])),\n If(\n test=Compare(\n left=Name(id='rc', ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value=0)]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='core_ssh_failed')]))]),\n FunctionDef(\n name='section',\n args=arguments(\n args=[\n arg(arg='name')]),\n body=[\n Assign(\n targets=[\n Name(id='m', ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='re', ctx=Load()),\n attr='search',\n ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='__'),\n FormattedValue(\n value=Name(id='name', ctx=Load()),\n conversion=-1),\n Constant(value='_BEGIN__\\\\n(.*?)\\\\n__'),\n FormattedValue(\n value=Name(id='name', ctx=Load()),\n conversion=-1),\n Constant(value='_END__')]),\n Name(id='out', ctx=Load()),\n Attribute(\n value=Name(id='re', ctx=Load()),\n attr='S',\n ctx=Load())])),\n Return(\n value=IfExp(\n test=Name(id='m', ctx=Load()),\n body=Call(\n func=Attribute(\n value=Call(\n func=Attribute(\n value=Name(id='m', ctx=Load()),\n attr='group',\n ctx=Load()),\n args=[\n Constant(value=1)]),\n attr='strip',\n ctx=Load())),\n orelse=Constant(value='')))]),\n Assign(\n targets=[\n Name(id='mon', ctx=Store())],\n value=Call(\n func=Name(id='parse_env_text', ctx=Load()),\n args=[\n Call(\n func=Name(id='section', ctx=Load()),\n args=[\n Constant(value='MONITOR_HEALTH')])])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_status'),\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='mon', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='STATUS'),\n Constant(value='MISSING')])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_reports'),\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='mon', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='reports'),\n Constant(value='')])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_open'),\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='mon', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='open'),\n Constant(value='')])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_resolved'),\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='mon', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='resolved'),\n Constant(value='')])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_smtp_configured'),\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='mon', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='smtp_configured'),\n Constant(value='')])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_health_age_seconds'),\n ctx=Store())],\n value=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Name(id='age_seconds_from_ts', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='mon', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='TS')])])])),\n If(\n test=Compare(\n left=Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_status'),\n ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value='OK')]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_status_not_ok')]))]),\n Try(\n body=[\n Assign(\n targets=[\n Name(id='health_age', ctx=Store())],\n value=Call(\n func=Name(id='int', ctx=Load()),\n args=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_health_age_seconds'),\n ctx=Load())])),\n If(\n test=Compare(\n left=Name(id='health_age', ctx=Load()),\n ops=[\n Gt()],\n comparators=[\n Name(id='MONITOR_HEALTH_AGE_MAX', ctx=Load())]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_health_stale')]))])],\n handlers=[\n ExceptHandler(\n type=Name(id='Exception', ctx=Load()),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_health_age_invalid')]))])]),\n Try(\n body=[\n Assign(\n targets=[\n Name(id='reports', ctx=Store())],\n value=Call(\n func=Name(id='int', ctx=Load()),\n args=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_reports'),\n ctx=Load())])),\n Assign(\n targets=[\n Name(id='opened', ctx=Store())],\n value=Call(\n func=Name(id='int', ctx=Load()),\n args=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_open'),\n ctx=Load())])),\n Assign(\n targets=[\n Name(id='resolved', ctx=Store())],\n value=Call(\n func=Name(id='int', ctx=Load()),\n args=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_resolved'),\n ctx=Load())])),\n If(\n test=Compare(\n left=Name(id='reports', ctx=Load()),\n ops=[\n LtE()],\n comparators=[\n Constant(value=0)]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_reports_zero_or_missing')]))]),\n If(\n test=BoolOp(\n op=Or(),\n values=[\n Compare(\n left=Name(id='opened', ctx=Load()),\n ops=[\n Lt()],\n comparators=[\n Constant(value=0)]),\n Compare(\n left=Name(id='resolved', ctx=Load()),\n ops=[\n Lt()],\n comparators=[\n Constant(value=0)]),\n Compare(\n left=BinOp(\n left=Name(id='opened', ctx=Load()),\n op=Add(),\n right=Name(id='resolved', ctx=Load())),\n ops=[\n NotEq()],\n comparators=[\n Name(id='reports', ctx=Load())])]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_counts_invalid')]))])],\n handlers=[\n ExceptHandler(\n type=Name(id='Exception', ctx=Load()),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_counts_missing')]))])]),\n If(\n test=Compare(\n left=Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_smtp_configured'),\n ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value='yes')]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_smtp_not_configured')]))]),\n Assign(\n targets=[\n Name(id='timers_text', ctx=Store())],\n value=Call(\n func=Name(id='section', ctx=Load()),\n args=[\n Constant(value='TIMERS')])),\n Assign(\n targets=[\n Name(id='m', ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='re', ctx=Load()),\n attr='search',\n ctx=Load()),\n args=[\n Constant(value='skladchik-reports-monitor\\\\.timer\\\\s+enabled=([^\\\\s]+)\\\\s+active=([^\\\\s]+)'),\n Name(id='timers_text', ctx=Load())])),\n Assign(\n targets=[\n Name(id='timer_enabled', ctx=Store())],\n value=IfExp(\n test=Name(id='m', ctx=Load()),\n body=Call(\n func=Attribute(\n value=Name(id='m', ctx=Load()),\n attr='group',\n ctx=Load()),\n args=[\n Constant(value=1)]),\n orelse=Constant(value='missing'))),\n Assign(\n targets=[\n Name(id='timer_active', ctx=Store())],\n value=IfExp(\n test=Name(id='m', ctx=Load()),\n body=Call(\n func=Attribute(\n value=Name(id='m', ctx=Load()),\n attr='group',\n ctx=Load()),\n args=[\n Constant(value=2)]),\n orelse=Constant(value='missing'))),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_timer_enabled'),\n ctx=Store())],\n value=Name(id='timer_enabled', ctx=Load())),\n Assign(\n targets=[\n Subscript(\n value=Name(id='facts', ctx=Load()),\n slice=Constant(value='monitor_timer_active'),\n ctx=Store())],\n value=Name(id='timer_active', ctx=Load())),\n If(\n test=Compare(\n left=Name(id='timer_enabled', ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value='enabled')]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_timer_not_enabled')]))]),\n If(\n test=Compare(\n left=Name(id='timer_active', ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value='active')]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='monitor_timer_not_active')]))]),\n Assign(\n targets=[\n Name(id='route_lines', ctx=Store())],\n value=Call(\n func=Attribute(\n value=Call(\n func=Name(id='section', ctx=Load()),\n args=[\n Constant(value='ROUTE')]),\n att\n\nSUPERVISOR_FUNC_2_AST_END\nSUPERVISOR_FUNC_3_NAME=render_body\nSUPERVISOR_FUNC_3_LINENO=349\nSUPERVISOR_FUNC_3_ENDLINENO=378\nSUPERVISOR_FUNC_3_NAMES=facts,get,join,lines,none_text,problems,status,str\nSUPERVISOR_FUNC_3_AST_BEGIN\nFunctionDef(\n name='render_body',\n args=arguments(\n args=[\n arg(arg='status'),\n arg(arg='facts'),\n arg(arg='problems'),\n arg(arg='mode')]),\n body=[\n Assign(\n targets=[\n Name(id='none_text', ctx=Store())],\n value=Constant(value='нет')),\n Assign(\n targets=[\n Name(id='lines', ctx=Store())],\n value=List(\n elts=[\n Constant(value='Надзор мониторинга жалоб Складчика'),\n Constant(value=''),\n BinOp(\n left=Constant(value='Статус: '),\n op=Add(),\n right=Name(id='status', ctx=Load())),\n BinOp(\n left=Constant(value='Проблемы: '),\n op=Add(),\n right=IfExp(\n test=Name(id='problems', ctx=Load()),\n body=Call(\n func=Attribute(\n value=Constant(value=', '),\n attr='join',\n ctx=Load()),\n args=[\n Name(id='problems', ctx=Load())]),\n orelse=Name(id='none_text', ctx=Load()))),\n Constant(value=''),\n Constant(value='Основной монитор:'),\n Constant(value=''),\n BinOp(\n left=Constant(value='- status: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='monitor_status'),\n Constant(value='')])])),\n BinOp(\n left=Constant(value='- reports: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='monitor_reports'),\n Constant(value='')])])),\n BinOp(\n left=Constant(value='- open: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='monitor_open'),\n Constant(value='')])])),\n BinOp(\n left=Constant(value='- resolved: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='monitor_resolved'),\n Constant(value='')])])),\n BinOp(\n left=Constant(value='- route: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='netbird_route'),\n Constant(value='')])])),\n Constant(value=''),\n Constant(value='Canonical backup:'),\n BinOp(\n left=Constant(value='- decision: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='canonical_backup_decision'),\n Constant(value='')])])),\n BinOp(\n left=Constant(value='- generation: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='canonical_backup_generation'),\n Constant(value='')])])),\n BinOp(\n left=Constant(value='- registry source: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='registry_source'),\n Constant(value='')])])),\n BinOp(\n left=Constant(value='- worker target: '),\n op=Add(),\n right=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='worker_target'),\n Constant(value='')])]))],\n ctx=Load())),\n Return(\n value=Call(\n func=Attribute(\n value=Constant(value='\\n'),\n attr='join',\n ctx=Load()),\n args=[\n Name(id='lines', ctx=Load())]))])\nSUPERVISOR_FUNC_3_AST_END\nSUPERVISOR_FUNC_4_NAME=main\nSUPERVISOR_FUNC_4_LINENO=395\nSUPERVISOR_FUNC_4_ENDLINENO=515\nSUPERVISOR_FUNC_4_NAMES=append,argv,edge_mail,facts,gather,get,join,len,log,mail_sent,mode,old,old_status,print,problems,read_state,render_body,status,stderr,subject,sys,write_health,write_state\nSUPERVISOR_FUNC_4_AST_BEGIN\nFunctionDef(\n name='main',\n args=arguments(),\n body=[\n Assign(\n targets=[\n Name(id='mode', ctx=Store())],\n value=IfExp(\n test=Compare(\n left=Call(\n func=Name(id='len', ctx=Load()),\n args=[\n Attribute(\n value=Name(id='sys', ctx=Load()),\n attr='argv',\n ctx=Load())]),\n ops=[\n Gt()],\n comparators=[\n Constant(value=1)]),\n body=Subscript(\n value=Attribute(\n value=Name(id='sys', ctx=Load()),\n attr='argv',\n ctx=Load()),\n slice=Constant(value=1),\n ctx=Load()),\n orelse=Constant(value='check'))),\n If(\n test=Compare(\n left=Name(id='mode', ctx=Load()),\n ops=[\n NotIn()],\n comparators=[\n Tuple(\n elts=[\n Constant(value='check'),\n Constant(value='test')],\n ctx=Load())]),\n body=[\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n Constant(value='usage: skladchik-reports-monitor-supervisor [check|test]')],\n keywords=[\n keyword(\n arg='file',\n value=Attribute(\n value=Name(id='sys', ctx=Load()),\n attr='stderr',\n ctx=Load()))])),\n Return(\n value=Constant(value=2))]),\n Assign(\n targets=[\n Tuple(\n elts=[\n Name(id='facts', ctx=Store()),\n Name(id='problems', ctx=Store())],\n ctx=Store())],\n value=Call(\n func=Name(id='gather', ctx=Load()))),\n Assign(\n targets=[\n Name(id='status', ctx=Store())],\n value=IfExp(\n test=UnaryOp(\n op=Not(),\n operand=Name(id='problems', ctx=Load())),\n body=Constant(value='OK'),\n orelse=Constant(value='FAIL'))),\n If(\n test=Compare(\n left=Name(id='mode', ctx=Load()),\n ops=[\n Eq()],\n comparators=[\n Constant(value='test')]),\n body=[\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='SUPERVISOR_STATUS='),\n FormattedValue(\n value=Name(id='status', ctx=Load()),\n conversion=-1)])])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n BinOp(\n left=Constant(value='SUPERVISOR_PROBLEMS='),\n op=Add(),\n right=IfExp(\n test=Name(id='problems', ctx=Load()),\n body=Call(\n func=Attribute(\n value=Constant(value=','),\n attr='join',\n ctx=Load()),\n args=[\n Name(id='problems', ctx=Load())]),\n orelse=Constant(value='none')))])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='MONITOR='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='monitor_status')]),\n conversion=-1),\n Constant(value=' reports='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='monitor_reports')]),\n conversion=-1),\n Constant(value=' open='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='monitor_open')]),\n conversion=-1),\n Constant(value=' resolved='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='monitor_resolved')]),\n conversion=-1)])])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='CANONICAL_BACKUP='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='canonical_backup_decision')]),\n conversion=-1),\n Constant(value=' generation='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='canonical_backup_generation')]),\n conversion=-1)])])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='REGISTRY_SOURCE='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='registry_source')]),\n conversion=-1)])])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='WORKER_TARGET='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='worker_target')]),\n conversion=-1)])])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='NETBIRD_ROUTE='),\n FormattedValue(\n value=Call(\n func=Attribute(\n value=Name(id='facts', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='netbird_route')]),\n conversion=-1)])])),\n Return(\n value=IfExp(\n test=Compare(\n left=Name(id='status', ctx=Load()),\n ops=[\n Eq()],\n comparators=[\n Constant(value='OK')]),\n body=Constant(value=0),\n orelse=Constant(value=1)))]),\n Assign(\n targets=[\n Name(id='old', ctx=Store())],\n value=Call(\n func=Name(id='read_state', ctx=Load()))),\n Assign(\n targets=[\n Name(id='old_status', ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='old', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='LAST_STATUS'),\n Constant(value='')])),\n Assign(\n targets=[\n Name(id='mail_sent', ctx=Store())],\n value=Constant(value=False)),\n If(\n test=BoolOp(\n op=And(),\n values=[\n Compare(\n left=Name(id='status', ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value='OK')]),\n Compare(\n left=Name(id='old_status', ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value='FAIL')])]),\n body=[\n Assign(\n targets=[\n Name(id='subject', ctx=Store())],\n value=Constant(value='[Складчик] ТРЕВОГА: мониторинг жалоб')),\n Assign(\n targets=[\n Name(id='mail_sent', ctx=Store())],\n value=Call(\n func=Name(id='edge_mail', ctx=Load()),\n args=[\n Name(id='subject', ctx=Load()),\n Call(\n func=Name(id='render_body', ctx=Load()),\n args=[\n Name(id='status', ctx=Load()),\n Name(id='facts', ctx=Load()),\n Name(id='problems', ctx=Load()),\n Name(id='mode', ctx=Load())])])),\n If(\n test=UnaryOp(\n op=Not(),\n operand=Name(id='mail_sent', ctx=Load())),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='supervisor_mail_send_failed')])),\n Assign(\n targets=[\n Name(id='status', ctx=Store())],\n value=Constant(value='FAIL'))])],\n orelse=[\n If(\n test=BoolOp(\n op=And(),\n values=[\n Compare(\n left=Name(id='status', ctx=Load()),\n ops=[\n Eq()],\n comparators=[\n Constant(value='OK')]),\n Compare(\n left=Name(id='old_status', ctx=Load()),\n ops=[\n Eq()],\n comparators=[\n Constant(value='FAIL')])]),\n body=[\n Assign(\n targets=[\n Name(id='subject', ctx=Store())],\n value=Constant(value='[Складчик] ВОССТАНОВЛЕНО: мониторинг жалоб и backup снова OK')),\n Assign(\n targets=[\n Name(id='mail_sent', ctx=Store())],\n value=Call(\n func=Name(id='edge_mail', ctx=Load()),\n args=[\n Name(id='subject', ctx=Load()),\n Call(\n func=Name(id='render_body', ctx=Load()),\n args=[\n Name(id='status', ctx=Load()),\n Name(id='facts', ctx=Load()),\n Name(id='problems', ctx=Load()),\n Name(id='mode', ctx=Load())])])),\n If(\n test=UnaryOp(\n op=Not(),\n operand=Name(id='mail_sent', ctx=Load())),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='problems', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Constant(value='supervisor_mail_send_failed')])),\n Assign(\n targets=[\n Name(id='status', ctx=Store())],\n value=Constant(value='FAIL'))])])]),\n Expr(\n value=Call(\n func=Name(id='write_health', ctx=Load()),\n args=[\n Name(id='status', ctx=Load()),\n Name(id='facts', ctx=Load()),\n Name(id='problems', ctx=Load()),\n Name(id='mail_sent', ctx=Load())])),\n Expr(\n value=Call(\n func=Name(id='write_state', ctx=Load()),\n args=[\n Name(id='status', ctx=Load()),\n Name(id='problems', ctx=Load())])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='SUPERVISOR_STATUS='),\n FormattedValue(\n value=Name(id='status', ctx=Load()),\n conversion=-1)])])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='SUPERVISOR_MAIL_SENT='),\n FormattedValue(\n value=IfExp(\n test=Name(id='mail_sent', ctx=Load()),\n body=Constant(value='yes'),\n orelse=Constant(value='no')),\n conversion=-1)])])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n BinOp(\n left=Constant(value='SUPERVISOR_PROBLEMS='),\n op=Add(),\n right=IfExp(\n test=Name(id='problems', ctx=Load()),\n body=Call(\n func=Attribute(\n value=Constant(value=','),\n attr='join',\n ctx=Load()),\n args=[\n Name(id='problems', ctx=Load())]),\n orelse=Constant(value='none')))])),\n Expr(\n value=Call(\n func=Name(id='print', ctx=Load()),\n args=[\n JoinedStr(\n values=[\n Constant(value='MONITOR='),\n FormattedValue(\n value=Call(\n \n\nSUPERVISOR_FUNC_4_AST_END\nBACKUP_AUDIT_PRESENT=true\nBACKUP_AUDIT_SHA=1c2cd8a00859492c010ed35baf5eb67f4278544809de8c2563421a6f3e356ed3\nBACKUP_AUDIT_BASENAME=homelab-backup-audit\nBACKUP_AUDIT_AST_OK=true\nBACKUP_AUDIT_FUNCTION_COUNT=7\nBACKUP_AUDIT_FUNCTIONS=run,collect,parse_epoch,latest_legacy,unit_ok,parse_app_plan,expected_v2_heavy_lock_owner\nBACKUP_AUDIT_CLI_OPTION_COUNT=0\nBACKUP_AUDIT_CLI_OPTIONS=NONE\nBACKUP_AUDIT_ENV_NAME_COUNT=0\nBACKUP_AUDIT_ENV_NAMES=NONE\nBACKUP_AUDIT_RELEVANT_FUNCTION_COUNT=4\nBACKUP_AUDIT_FUNC_1_NAME=collect\nBACKUP_AUDIT_FUNC_1_LINENO=34\nBACKUP_AUDIT_FUNC_1_ENDLINENO=39\nBACKUP_AUDIT_FUNC_1_NAMES=append,collect,dict,get,isinstance,list,obj,out,str,v,values\nBACKUP_AUDIT_FUNC_1_AST_BEGIN\nFunctionDef(\n name='collect',\n args=arguments(\n args=[\n arg(arg='obj'),\n arg(arg='out')]),\n body=[\n If(\n test=Call(\n func=Name(id='isinstance', ctx=Load()),\n args=[\n Name(id='obj', ctx=Load()),\n Name(id='dict', ctx=Load())]),\n body=[\n If(\n test=Call(\n func=Name(id='isinstance', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='logical_id')]),\n Name(id='str', ctx=Load())]),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='out', ctx=Load()),\n attr='append',\n ctx=Load()),\n args=[\n Name(id='obj', ctx=Load())]))]),\n For(\n target=Name(id='v', ctx=Store()),\n iter=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='values',\n ctx=Load())),\n body=[\n Expr(\n value=Call(\n func=Name(id='collect', ctx=Load()),\n args=[\n Name(id='v', ctx=Load()),\n Name(id='out', ctx=Load())]))])],\n orelse=[\n If(\n test=Call(\n func=Name(id='isinstance', ctx=Load()),\n args=[\n Name(id='obj', ctx=Load()),\n Name(id='list', ctx=Load())]),\n body=[\n For(\n target=Name(id='v', ctx=Store()),\n iter=Name(id='obj', ctx=Load()),\n body=[\n Expr(\n value=Call(\n func=Name(id='collect', ctx=Load()),\n args=[\n Name(id='v', ctx=Load()),\n Name(id='out', ctx=Load())]))])])])])\nBACKUP_AUDIT_FUNC_1_AST_END\nBACKUP_AUDIT_FUNC_2_NAME=latest_legacy\nBACKUP_AUDIT_FUNC_2_LINENO=53\nBACKUP_AUDIT_FUNC_2_ENDLINENO=77\nBACKUP_AUDIT_FUNC_2_NAMES=APPREST,Exception,QROOT,VMREST,age,best,best_epoch,d,epoch,gen,get,glob,int,is_dir,is_file,json,kind,loads,logical,max,obj,p,parse_epoch,read_text,restore,rev,rj,rroot,score,st_mtime,stat,str,strict,time\nBACKUP_AUDIT_FUNC_2_AST_BEGIN\nFunctionDef(\n name='latest_legacy',\n args=arguments(\n args=[\n arg(arg='logical'),\n arg(arg='kind')]),\n body=[\n Assign(\n targets=[\n Name(id='d', ctx=Store())],\n value=BinOp(\n left=Name(id='QROOT', ctx=Load()),\n op=Div(),\n right=Name(id='logical', ctx=Load()))),\n Assign(\n targets=[\n Name(id='best', ctx=Store())],\n value=Constant(value=None)),\n Assign(\n targets=[\n Name(id='best_epoch', ctx=Store())],\n value=UnaryOp(\n op=USub(),\n operand=Constant(value=1))),\n If(\n test=UnaryOp(\n op=Not(),\n operand=Call(\n func=Attribute(\n value=Name(id='d', ctx=Load()),\n attr='is_dir',\n ctx=Load()))),\n body=[\n Return(\n value=Constant(value=None))]),\n For(\n target=Name(id='p', ctx=Store()),\n iter=Call(\n func=Attribute(\n value=Name(id='d', ctx=Load()),\n attr='glob',\n ctx=Load()),\n args=[\n Constant(value='*.json')]),\n body=[\n Try(\n body=[\n Assign(\n targets=[\n Name(id='obj', ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='json', ctx=Load()),\n attr='loads',\n ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='p', ctx=Load()),\n attr='read_text',\n ctx=Load()),\n keywords=[\n keyword(\n arg='encoding',\n value=Constant(value='utf-8'))])]))],\n handlers=[\n ExceptHandler(\n type=Name(id='Exception', ctx=Load()),\n body=[\n Continue()])]),\n Assign(\n targets=[\n Name(id='epoch', ctx=Store())],\n value=Call(\n func=Name(id='parse_epoch', ctx=Load()),\n args=[\n Name(id='obj', ctx=Load())])),\n Assign(\n targets=[\n Name(id='score', ctx=Store())],\n value=IfExp(\n test=Compare(\n left=Name(id='epoch', ctx=Load()),\n ops=[\n IsNot()],\n comparators=[\n Constant(value=None)]),\n body=Name(id='epoch', ctx=Load()),\n orelse=Call(\n func=Name(id='int', ctx=Load()),\n args=[\n Attribute(\n value=Call(\n func=Attribute(\n value=Name(id='p', ctx=Load()),\n attr='stat',\n ctx=Load())),\n attr='st_mtime',\n ctx=Load())]))),\n If(\n test=Compare(\n left=Name(id='score', ctx=Load()),\n ops=[\n Gt()],\n comparators=[\n Name(id='best_epoch', ctx=Load())]),\n body=[\n Assign(\n targets=[\n Name(id='best_epoch', ctx=Store())],\n value=Name(id='score', ctx=Load())),\n Assign(\n targets=[\n Name(id='best', ctx=Store())],\n value=Tuple(\n elts=[\n Name(id='p', ctx=Load()),\n Name(id='obj', ctx=Load()),\n Name(id='score', ctx=Load())],\n ctx=Load()))])]),\n If(\n test=UnaryOp(\n op=Not(),\n operand=Name(id='best', ctx=Load())),\n body=[\n Return(\n value=Constant(value=None))]),\n Assign(\n targets=[\n Tuple(\n elts=[\n Name(id='p', ctx=Store()),\n Name(id='obj', ctx=Store()),\n Name(id='epoch', ctx=Store())],\n ctx=Store())],\n value=Name(id='best', ctx=Load())),\n Assign(\n targets=[\n Name(id='gen', ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='generation')])),\n Assign(\n targets=[\n Name(id='strict', ctx=Store())],\n value=BoolOp(\n op=And(),\n values=[\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='status')]),\n ops=[\n Eq()],\n comparators=[\n Constant(value='SEALED')]),\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='cloud_quorum')]),\n ops=[\n Eq()],\n comparators=[\n Constant(value=2)]),\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='cloud_a_verified')]),\n ops=[\n Is()],\n comparators=[\n Constant(value=True)]),\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='cloud_b_verified')]),\n ops=[\n Is()],\n comparators=[\n Constant(value=True)]),\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='part_hashes_verified')]),\n ops=[\n Is()],\n comparators=[\n Constant(value=True)]),\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='seal_written')]),\n ops=[\n Is()],\n comparators=[\n Constant(value=True)]),\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='local_payload_present')]),\n ops=[\n Is()],\n comparators=[\n Constant(value=False)]),\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='obj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='local_cleanup')]),\n ops=[\n Eq()],\n comparators=[\n Constant(value='OK')])])),\n Assign(\n targets=[\n Name(id='rroot', ctx=Store())],\n value=IfExp(\n test=Compare(\n left=Name(id='kind', ctx=Load()),\n ops=[\n Eq()],\n comparators=[\n Constant(value='VM')]),\n body=Name(id='VMREST', ctx=Load()),\n orelse=Name(id='APPREST', ctx=Load()))),\n Assign(\n targets=[\n Name(id='rev', ctx=Store())],\n value=IfExp(\n test=Name(id='gen', ctx=Load()),\n body=BinOp(\n left=BinOp(\n left=Name(id='rroot', ctx=Load()),\n op=Div(),\n right=Name(id='logical', ctx=Load())),\n op=Div(),\n right=BinOp(\n left=Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Name(id='gen', ctx=Load())]),\n op=Add(),\n right=Constant(value='.json'))),\n orelse=Constant(value=None))),\n Assign(\n targets=[\n Name(id='restore', ctx=Store())],\n value=Constant(value=False)),\n If(\n test=BoolOp(\n op=And(),\n values=[\n Name(id='rev', ctx=Load()),\n Call(\n func=Attribute(\n value=Name(id='rev', ctx=Load()),\n attr='is_file',\n ctx=Load()))]),\n body=[\n Try(\n body=[\n Assign(\n targets=[\n Name(id='rj', ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='json', ctx=Load()),\n attr='loads',\n ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='rev', ctx=Load()),\n attr='read_text',\n ctx=Load()),\n keywords=[\n keyword(\n arg='encoding',\n value=Constant(value='utf-8'))])])),\n Assign(\n targets=[\n Name(id='restore', ctx=Store())],\n value=Compare(\n left=Call(\n func=Attribute(\n value=Name(id='rj', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='result')]),\n ops=[\n Eq()],\n comparators=[\n Constant(value='OK')]))],\n handlers=[\n ExceptHandler(\n type=Name(id='Exception', ctx=Load()),\n body=[\n Pass()])])]),\n Assign(\n targets=[\n Name(id='age', ctx=Store())],\n value=IfExp(\n test=Name(id='epoch', ctx=Load()),\n body=Call(\n func=Name(id='max', ctx=Load()),\n args=[\n Constant(value=0),\n Call(\n func=Name(id='int', ctx=Load()),\n args=[\n BinOp(\n left=Call(\n func=Attribute(\n value=Name(id='time', ctx=Load()),\n attr='time',\n ctx=Load())),\n op=Sub(),\n right=Name(id='epoch', ctx=Load()))])]),\n orelse=Constant(value=None))),\n Return(\n value=Dict(\n keys=[\n Constant(value='generation'),\n Constant(value='strict'),\n Constant(value='restore_ok'),\n Constant(value='age_seconds'),\n Constant(value='state_file'),\n Constant(value='obj')],\n values=[\n Name(id='gen', ctx=Load()),\n Name(id='strict', ctx=Load()),\n Name(id='restore', ctx=Load()),\n Name(id='age', ctx=Load()),\n Call(\n func=Name(id='str', ctx=Load()),\n args=[\n Name(id='p', ctx=Load())]),\n Name(id='obj', ctx=Load())]))])\nBACKUP_AUDIT_FUNC_2_AST_END\nBACKUP_AUDIT_FUNC_3_NAME=parse_app_plan\nBACKUP_AUDIT_FUNC_3_LINENO=84\nBACKUP_AUDIT_FUNC_3_ENDLINENO=93\nBACKUP_AUDIT_FUNC_3_NAMES=d,get,k,line,r,split,splitlines,startswith,tok,txt,v\nBACKUP_AUDIT_FUNC_3_AST_BEGIN\nFunctionDef(\n name='parse_app_plan',\n args=arguments(\n args=[\n arg(arg='txt')]),\n body=[\n Assign(\n targets=[\n Name(id='d', ctx=Store())],\n value=Dict()),\n For(\n target=Name(id='line', ctx=Store()),\n iter=Call(\n func=Attribute(\n value=Name(id='txt', ctx=Load()),\n attr='splitlines',\n ctx=Load())),\n body=[\n If(\n test=Call(\n func=Attribute(\n value=Name(id='line', ctx=Load()),\n attr='startswith',\n ctx=Load()),\n args=[\n Constant(value='QUEUE_FRESHNESS_PLAN APP=')]),\n body=[\n Assign(\n targets=[\n Name(id='r', ctx=Store())],\n value=Dict()),\n For(\n target=Name(id='tok', ctx=Store()),\n iter=Subscript(\n value=Call(\n func=Attribute(\n value=Name(id='line', ctx=Load()),\n attr='split',\n ctx=Load())),\n slice=Slice(\n lower=Constant(value=1)),\n ctx=Load()),\n body=[\n If(\n test=Compare(\n left=Constant(value='='),\n ops=[\n In()],\n comparators=[\n Name(id='tok', ctx=Load())]),\n body=[\n Assign(\n targets=[\n Tuple(\n elts=[\n Name(id='k', ctx=Store()),\n Name(id='v', ctx=Store())],\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='tok', ctx=Load()),\n attr='split',\n ctx=Load()),\n args=[\n Constant(value='='),\n Constant(value=1)])),\n Assign(\n targets=[\n Subscript(\n value=Name(id='r', ctx=Load()),\n slice=Name(id='k', ctx=Load()),\n ctx=Store())],\n value=Name(id='v', ctx=Load()))])]),\n If(\n test=Call(\n func=Attribute(\n value=Name(id='r', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='APP')]),\n body=[\n Assign(\n targets=[\n Subscript(\n value=Name(id='d', ctx=Load()),\n slice=Subscript(\n value=Name(id='r', ctx=Load()),\n slice=Constant(value='APP'),\n ctx=Load()),\n ctx=Store())],\n value=Call(\n func=Attribute(\n value=Name(id='r', ctx=Load()),\n attr='get',\n ctx=Load()),\n args=[\n Constant(value='DECISION')]))])])]),\n Return(\n value=Name(id='d', ctx=Load()))])\nBACKUP_AUDIT_FUNC_3_AST_END\nBACKUP_AUDIT_FUNC_4_NAME=expected_v2_heavy_lock_owner\nBACKUP_AUDIT_FUNC_4_LINENO=188\nBACKUP_AUDIT_FUNC_4_ENDLINENO=200\nBACKUP_AUDIT_FUNC_4_NAMES=Exception,_,a,add,arc,fe,fo,frc,int,isdigit,owners,pid,pid_text,prc,replace,run,set,split,strip,tok\nBACKUP_AUDIT_FUNC_4_AST_BEGIN\nFunctionDef(\n name='expected_v2_heavy_lock_owner',\n args=arguments(),\n body=[\n Assign(\n targets=[\n Tuple(\n elts=[\n Name(id='arc', ctx=Store()),\n Name(id='a', ctx=Store()),\n Name(id='_', ctx=Store())],\n ctx=Store())],\n value=Call(\n func=Name(id='run', ctx=Load()),\n args=[\n List(\n elts=[\n Constant(value='systemctl'),\n Constant(value='show'),\n Constant(value='homelab-backup-v2.service'),\n Constant(value='-p'),\n Constant(value='ActiveState'),\n Constant(value='--value')],\n ctx=Load()),\n Constant(value=10)])),\n Assign(\n targets=[\n Tuple(\n elts=[\n Name(id='prc', ctx=Store()),\n Name(id='pid_text', ctx=Store()),\n Name(id='_', ctx=Store())],\n ctx=Store())],\n value=Call(\n func=Name(id='run', ctx=Load()),\n args=[\n List(\n elts=[\n Constant(value='systemctl'),\n Constant(value='show'),\n Constant(value='homelab-backup-v2.service'),\n Constant(value='-p'),\n Constant(value='MainPID'),\n Constant(value='--value')],\n ctx=Load()),\n Constant(value=10)])),\n If(\n test=BoolOp(\n op=Or(),\n values=[\n Compare(\n left=Name(id='arc', ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value=0)]),\n Compare(\n left=Name(id='prc', ctx=Load()),\n ops=[\n NotEq()],\n comparators=[\n Constant(value=0)]),\n Compare(\n left=Call(\n func=Attribute(\n value=Name(id='a', ctx=Load()),\n attr='strip',\n ctx=Load())),\n ops=[\n NotIn()],\n comparators=[\n Tuple(\n elts=[\n Constant(value='active'),\n Constant(value='activating')],\n ctx=Load())])]),\n body=[\n Return(\n value=Constant(value=False))]),\n Try(\n body=[\n Assign(\n targets=[\n Name(id='pid', ctx=Store())],\n value=Call(\n func=Name(id='int', ctx=Load()),\n args=[\n Call(\n func=Attribute(\n value=Name(id='pid_text', ctx=Load()),\n attr='strip',\n ctx=Load()))]))],\n handlers=[\n ExceptHandler(\n type=Name(id='Exception', ctx=Load()),\n body=[\n Return(\n value=Constant(value=False))])]),\n If(\n test=Compare(\n left=Name(id='pid', ctx=Load()),\n ops=[\n LtE()],\n comparators=[\n Constant(value=0)]),\n body=[\n Return(\n value=Constant(value=False))]),\n Assign(\n targets=[\n Tuple(\n elts=[\n Name(id='frc', ctx=Store()),\n Name(id='fo', ctx=Store()),\n Name(id='fe', ctx=Store())],\n ctx=Store())],\n value=Call(\n func=Name(id='run', ctx=Load()),\n args=[\n List(\n elts=[\n Constant(value='fuser'),\n Constant(value='/run/homelab-backup-heavy.lock')],\n ctx=Load()),\n Constant(value=10)])),\n Assign(\n targets=[\n Name(id='owners', ctx=Store())],\n value=Call(\n func=Name(id='set', ctx=Load()))),\n For(\n target=Name(id='tok', ctx=Store()),\n iter=Call(\n func=Attribute(\n value=Call(\n func=Attribute(\n value=BinOp(\n left=BinOp(\n left=Name(id='fo', ctx=Load()),\n op=Add(),\n right=Constant(value=' ')),\n op=Add(),\n right=Name(id='fe', ctx=Load())),\n attr='replace',\n ctx=Load()),\n args=[\n Constant(value=':'),\n Constant(value=' ')]),\n attr='split',\n ctx=Load())),\n body=[\n If(\n test=Call(\n func=Attribute(\n value=Name(id='tok', ctx=Load()),\n attr='isdigit',\n ctx=Load())),\n body=[\n Expr(\n value=Call(\n func=Attribute(\n value=Name(id='owners', ctx=Load()),\n attr='add',\n ctx=Load()),\n args=[\n Call(\n func=Name(id='int', ctx=Load()),\n args=[\n Name(id='tok', ctx=Load())])]))])]),\n Return(\n value=BoolOp(\n op=And(),\n values=[\n Compare(\n left=Name(id='frc', ctx=Load()),\n ops=[\n Eq()],\n comparators=[\n Constant(value=0)]),\n Compare(\n left=Name(id='owners', ctx=Load()),\n ops=[\n Eq()],\n comparators=[\n Set(\n elts=[\n Name(id='pid', ctx=Load())])])]))])\nBACKUP_AUDIT_FUNC_4_AST_END\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_PRESENT=true\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_SHA=1f959049cca2710a2cb820cc1f6acab16399c6b6711b9e4522e0ecd49e0e4650\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_BASENAME=homelab-app-cloud-quorum-queue\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_AST_OK=false\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_AST_ERROR=SyntaxError\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_HELP_RC=64\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_HELP_SHA=53bc0423b5ea9142a7be1f687f1572975bc52349a1fd28f97d6c0748b2b445e1\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_HELP_BEGIN\n\nAPP_QUORUM_QUEUE_ERROR=ACTION_INVALID\nQUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_HELP_END\nPRODUCER_SCRIPT_COUNT=3\nPRODUCER_UNIT_COUNT=4\nPRODUCER_UNIT_1_NAME=homelab-app-cloud-quorum-queue.service\nPRODUCER_UNIT_1_SHOW_RC=0\nPRODUCER_UNIT_1_LOADSTATE=loaded\nPRODUCER_UNIT_1_ACTIVESTATE=inactive\nPRODUCER_UNIT_1_UNITFILESTATE=static\nPRODUCER_UNIT_1_RESULT=success\nPRODUCER_UNIT_1_EXECMAINSTATUS=0\nPRODUCER_UNIT_1_FRAGMENT_BASENAME=homelab-app-cloud-quorum-queue.service\nPRODUCER_UNIT_1_FRAGMENT_SHA=afaa997bd85dafdb29d2cd2b53527996171c21fd5e80ae559f8f2bee0dcbbf1a\nPRODUCER_UNIT_1_EXECSTART_SHA=22094bb14d8dc5f7399744e183b096583a9c9625527a2f00981f2ec5cd8e1713\nPRODUCER_UNIT_1_EXEC_COMPONENTS=NONE\nPRODUCER_UNIT_1_ENVFILES_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nPRODUCER_UNIT_2_NAME=homelab-app-cloud-quorum-queue.timer\nPRODUCER_UNIT_2_SHOW_RC=0\nPRODUCER_UNIT_2_LOADSTATE=loaded\nPRODUCER_UNIT_2_ACTIVESTATE=active\nPRODUCER_UNIT_2_UNITFILESTATE=enabled\nPRODUCER_UNIT_2_RESULT=success\nPRODUCER_UNIT_2_EXECMAINSTATUS=\nPRODUCER_UNIT_2_FRAGMENT_BASENAME=homelab-app-cloud-quorum-queue.timer\nPRODUCER_UNIT_2_FRAGMENT_SHA=af2eedce3df53029b591d31715a3f3e6688ddb997b4823f487e70c339ce88078\nPRODUCER_UNIT_2_EXECSTART_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nPRODUCER_UNIT_2_EXEC_COMPONENTS=NONE\nPRODUCER_UNIT_2_ENVFILES_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nPRODUCER_UNIT_3_NAME=skladchik-reports-monitor-supervisor.service\nPRODUCER_UNIT_3_SHOW_RC=0\nPRODUCER_UNIT_3_LOADSTATE=loaded\nPRODUCER_UNIT_3_ACTIVESTATE=inactive\nPRODUCER_UNIT_3_UNITFILESTATE=static\nPRODUCER_UNIT_3_RESULT=success\nPRODUCER_UNIT_3_EXECMAINSTATUS=0\nPRODUCER_UNIT_3_FRAGMENT_BASENAME=skladchik-reports-monitor-supervisor.service\nPRODUCER_UNIT_3_FRAGMENT_SHA=e874fb03573b76181f3eb812c7285848e60705923c172a2f102504a7b9100ef7\nPRODUCER_UNIT_3_EXECSTART_SHA=27a2477643cbfc4f8676fd88ebc5cff23e471bc80f89094941123fa62e3edc5f\nPRODUCER_UNIT_3_EXEC_COMPONENTS=skladchik-reports-monitor-supervisor\nPRODUCER_UNIT_3_ENVFILES_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nPRODUCER_UNIT_4_NAME=skladchik-reports-monitor-supervisor.timer\nPRODUCER_UNIT_4_SHOW_RC=0\nPRODUCER_UNIT_4_LOADSTATE=loaded\nPRODUCER_UNIT_4_ACTIVESTATE=active\nPRODUCER_UNIT_4_UNITFILESTATE=enabled\nPRODUCER_UNIT_4_RESULT=success\nPRODUCER_UNIT_4_EXECMAINSTATUS=\nPRODUCER_UNIT_4_FRAGMENT_BASENAME=skladchik-reports-monitor-supervisor.timer\nPRODUCER_UNIT_4_FRAGMENT_SHA=3c3e38a40b3dfbfaa77d99a1c2bea4b58009130eac7a5197356dead1137a5ef6\nPRODUCER_UNIT_4_EXECSTART_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nPRODUCER_UNIT_4_EXEC_COMPONENTS=NONE\nPRODUCER_UNIT_4_ENVFILES_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nAPPID_CONFIG_MATCH_COUNT=565\nAPPID_CONFIG_1_BASENAME=targets.json\nAPPID_CONFIG_1_PATH_HINT=//etc/homelab-backup/targets.json\nAPPID_CONFIG_1_SHA=2f526330152d49461ff66f50adab57d1a195ea5d1b4c292945d523411b8a68a8\nAPPID_CONFIG_1_LINE_NOS=115\nAPPID_CONFIG_2_BASENAME=targets.json.before-skladchik-core-apps-20261003T205612Z.bak\nAPPID_CONFIG_2_PATH_HINT=//etc/homelab-backup/targets.json.before-skladchik-core-apps-20261003T205612Z.bak\nAPPID_CONFIG_2_SHA=6ecf034ca03b52a1e6beceeae81d86a623885462c095d50b133aea4048a4626e\nAPPID_CONFIG_2_LINE_NOS=115\nAPPID_CONFIG_3_BASENAME=task.json\nAPPID_CONFIG_3_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T192441Z-1666483-preflight/task.json\nAPPID_CONFIG_3_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb\nAPPID_CONFIG_3_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_4_BASENAME=task.json\nAPPID_CONFIG_4_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T192627Z-1668009-prepare/task.json\nAPPID_CONFIG_4_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb\nAPPID_CONFIG_4_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_5_BASENAME=task.json\nAPPID_CONFIG_5_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T192843Z-1681558-dry-run/task.json\nAPPID_CONFIG_5_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb\nAPPID_CONFIG_5_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_6_BASENAME=task.json\nAPPID_CONFIG_6_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T193210Z-1692269-apply/task.json\nAPPID_CONFIG_6_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb\nAPPID_CONFIG_6_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_7_BASENAME=task.json\nAPPID_CONFIG_7_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T193950Z-1722753-preflight/task.json\nAPPID_CONFIG_7_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb\nAPPID_CONFIG_7_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_8_BASENAME=task.json\nAPPID_CONFIG_8_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T193952Z-1722941-prepare/task.json\nAPPID_CONFIG_8_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb\nAPPID_CONFIG_8_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_9_BASENAME=task.json\nAPPID_CONFIG_9_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T193952Z-1723022-dry-run/task.json\nAPPID_CONFIG_9_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb\nAPPID_CONFIG_9_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_10_BASENAME=task.json\nAPPID_CONFIG_10_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T194508Z-1738655-apply/task.json\nAPPID_CONFIG_10_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb\nAPPID_CONFIG_10_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_11_BASENAME=task.json\nAPPID_CONFIG_11_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T200841Z-1818714-preflight/task.json\nAPPID_CONFIG_11_SHA=8741a7407c135ebe5303056da44186d280b410efbca3714054a990d0f0340aec\nAPPID_CONFIG_11_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_12_BASENAME=task.json\nAPPID_CONFIG_12_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T200843Z-1818903-prepare/task.json\nAPPID_CONFIG_12_SHA=8741a7407c135ebe5303056da44186d280b410efbca3714054a990d0f0340aec\nAPPID_CONFIG_12_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_13_BASENAME=task.json\nAPPID_CONFIG_13_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T200843Z-1818980-dry-run/task.json\nAPPID_CONFIG_13_SHA=8741a7407c135ebe5303056da44186d280b410efbca3714054a990d0f0340aec\nAPPID_CONFIG_13_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_14_BASENAME=task.json\nAPPID_CONFIG_14_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T201139Z-1833098-apply/task.json\nAPPID_CONFIG_14_SHA=8741a7407c135ebe5303056da44186d280b410efbca3714054a990d0f0340aec\nAPPID_CONFIG_14_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_15_BASENAME=task.json\nAPPID_CONFIG_15_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T201939Z-1860663-preflight/task.json\nAPPID_CONFIG_15_SHA=c121d768f5aaf7dc111cf176f890bbd7508650813760b99ed97aa19613c94e68\nAPPID_CONFIG_15_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_16_BASENAME=task.json\nAPPID_CONFIG_16_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T201941Z-1860857-prepare/task.json\nAPPID_CONFIG_16_SHA=c121d768f5aaf7dc111cf176f890bbd7508650813760b99ed97aa19613c94e68\nAPPID_CONFIG_16_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_17_BASENAME=task.json\nAPPID_CONFIG_17_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T201941Z-1860933-dry-run/task.json\nAPPID_CONFIG_17_SHA=c121d768f5aaf7dc111cf176f890bbd7508650813760b99ed97aa19613c94e68\nAPPID_CONFIG_17_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_18_BASENAME=task.json\nAPPID_CONFIG_18_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T202241Z-1874939-apply/task.json\nAPPID_CONFIG_18_SHA=c121d768f5aaf7dc111cf176f890bbd7508650813760b99ed97aa19613c94e68\nAPPID_CONFIG_18_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_19_BASENAME=task.json\nAPPID_CONFIG_19_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T204310Z-1946040-preflight/task.json\nAPPID_CONFIG_19_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2\nAPPID_CONFIG_19_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_20_BASENAME=task.json\nAPPID_CONFIG_20_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T204311Z-1946265-prepare/task.json\nAPPID_CONFIG_20_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2\nAPPID_CONFIG_20_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_21_BASENAME=task.json\nAPPID_CONFIG_21_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T204311Z-1946345-dry-run/task.json\nAPPID_CONFIG_21_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2\nAPPID_CONFIG_21_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_22_BASENAME=task.json\nAPPID_CONFIG_22_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T204533Z-1956057-apply/task.json\nAPPID_CONFIG_22_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2\nAPPID_CONFIG_22_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_23_BASENAME=task.json\nAPPID_CONFIG_23_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T205721Z-1989628-preflight/task.json\nAPPID_CONFIG_23_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2\nAPPID_CONFIG_23_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_24_BASENAME=task.json\nAPPID_CONFIG_24_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T205722Z-1989815-prepare/task.json\nAPPID_CONFIG_24_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2\nAPPID_CONFIG_24_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_25_BASENAME=task.json\nAPPID_CONFIG_25_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T205722Z-1989891-dry-run/task.json\nAPPID_CONFIG_25_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2\nAPPID_CONFIG_25_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_26_BASENAME=stderr.log\nAPPID_CONFIG_26_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T210034Z-2011730-apply/stderr.log\nAPPID_CONFIG_26_SHA=bbc5b7b614a73219147a06614942e2c67176375af10bcb85aeac5565cb8c2532\nAPPID_CONFIG_26_LINE_NOS=7,8\nAPPID_CONFIG_27_BASENAME=stdout.log\nAPPID_CONFIG_27_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T210034Z-2011730-apply/stdout.log\nAPPID_CONFIG_27_SHA=cdf49d288d7b019b1a5f5099fe8b3e4f5ed1432294051a3c2020a4369c4afd41\nAPPID_CONFIG_27_LINE_NOS=24,31,32,35\nAPPID_CONFIG_28_BASENAME=task.json\nAPPID_CONFIG_28_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T210034Z-2011730-apply/task.json\nAPPID_CONFIG_28_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2\nAPPID_CONFIG_28_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_29_BASENAME=task.json\nAPPID_CONFIG_29_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T211239Z-2049968-preflight/task.json\nAPPID_CONFIG_29_SHA=4d850b025c6a9ad347015321775f9d0466149fb9d5a70212f91b6535adc3c0e3\nAPPID_CONFIG_29_LINE_NOS=44,55,56,81,86\nAPPID_CONFIG_30_BASENAME=task.json\nAPPID_CONFIG_30_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T213313Z-2127686-preflight/task.json\nAPPID_CONFIG_30_SHA=d98bdf83ab6a9fda0d864e3ccac4a0d01e7813fec9f1173a6d4d5e8712c8e238\nAPPID_CONFIG_30_LINE_NOS=44,55,56,81,86\nGEN_JOURNAL_MATCH_COUNT=3\nGEN_JOURNAL_1_UNIT=skladchik-reports-monitor-supervisor.service\nGEN_JOURNAL_1_IDENT=skladchik-reports-monitor-supervisor\nGEN_JOURNAL_1_EXE_BASENAME=python3.13\nGEN_JOURNAL_1_PID=932988\nGEN_JOURNAL_1_MESSAGE_SHA=93a0f7b08cf701cc4f77f2d02c659932db4ca849640cbbe55327693c1e4365eb\nGEN_JOURNAL_1_FLAGS=generation,backup,sealed\nGEN_JOURNAL_2_UNIT=homelab-backup-audit.service\nGEN_JOURNAL_2_IDENT=homelab-backup-audit\nGEN_JOURNAL_2_EXE_BASENAME=python3.13\nGEN_JOURNAL_2_PID=966882\nGEN_JOURNAL_2_MESSAGE_SHA=c8c9e905543f63dbee767d26e1c1824c99e7a23094405dba984b18361a36527f\nGEN_JOURNAL_2_FLAGS=generation,fresh,skip_fresh\nGEN_JOURNAL_3_UNIT=skladchik-reports-monitor-supervisor.service\nGEN_JOURNAL_3_IDENT=skladchik-reports-monitor-supervisor\nGEN_JOURNAL_3_EXE_BASENAME=python3.13\nGEN_JOURNAL_3_PID=968339\nGEN_JOURNAL_3_MESSAGE_SHA=93a0f7b08cf701cc4f77f2d02c659932db4ca849640cbbe55327693c1e4365eb\nGEN_JOURNAL_3_FLAGS=generation,backup,sealed\nQUORUM_SCRIPT_READY=false\nQUORUM_UNIT_READY=true\nAPPID_CONFIG_READY=true\nBACKUP_PRODUCER_TOPOLOGY_READY=false\nMAIL_SENT_BY_COMMAND=false\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\nDECISION=HOLD_BACKUP_PRODUCER_RCA\nNEXT_GATE=BACKUP_PRODUCER_RECONCILE\nTASK_RESULT=SKLADCHIK_DURABILITY_BACKUP_PRODUCER_RCA\n" + "output": "SNIKKET_OPS_GAPS_RECONCILE_WRAPPER=V1\nMODE=read-only\nNO_DNS_MUTATION=true\nNO_VM_MUTATION=true\nNO_CONTAINER_RESTART=true\nNO_SERVICE_START=true\nNO_SOURCE_MUTATION=true\nHOST_PVE01=true\nINGRESS_HOSTKEY_SELF_BOUND=true\nVM150_INVENTORY_PRESENT=true\nVM150_RUNNING=true\nVM150_EXPECTED_NODE=true\nVM130_INVENTORY_PRESENT=true\nVM130_RUNNING=true\nVM130_EXPECTED_NODE=true\nVM150_ONBOOT=true\nVM150_AGENT_CONFIG_LINE_PRESENT=true\nVM150_QGA_PING=true\nPVE_BACKUP_JOBS_QUERY_RC=0\nPVE_BACKUP_JOB_COVERAGE_COUNT=0\nPVE_BACKUP_JOB_ENABLED_COVERAGE_COUNT=0\nPVE_BACKUP_STORAGE_QUERY_RC=0\nPVE_BACKUP_STORAGE_COUNT=1\nPVE_BACKUP_STORAGE_TYPE_COUNT=1\nPVE_VM150_BACKUP_OBJECT_COUNT=0\nPVE_VM150_BACKUP_STORAGE_WITH_OBJECT_COUNT=0\nPVE_VM150_NEWEST_BACKUP_AGE_HOURS=-1\nPVE_VM150_BACKUP_WITHIN_48H=false\nPVE_VM150_BACKUP_WITHIN_7D=false\nHOMELAB_BACKUP_V2_TIMER_ACTIVE=active\nHOMELAB_BACKUP_V2_TIMER_ENABLED=enabled\nHOMELAB_BACKUP_V2_TIMER_RESULT=success\nHOMELAB_BACKUP_V2_TIMER_EXEC_MAIN_STATUS=\nHOMELAB_BACKUP_V2_SERVICE_ACTIVE=activating\nHOMELAB_BACKUP_V2_SERVICE_ENABLED=static\nHOMELAB_BACKUP_V2_SERVICE_RESULT=success\nHOMELAB_BACKUP_V2_SERVICE_EXEC_MAIN_STATUS=0\nHOMELAB_BACKUP_AUDIT_TIMER_ACTIVE=active\nHOMELAB_BACKUP_AUDIT_TIMER_ENABLED=enabled\nHOMELAB_BACKUP_AUDIT_TIMER_RESULT=success\nHOMELAB_BACKUP_AUDIT_TIMER_EXEC_MAIN_STATUS=\nHOMELAB_BACKUP_AUDIT_SERVICE_ACTIVE=inactive\nHOMELAB_BACKUP_AUDIT_SERVICE_ENABLED=static\nHOMELAB_BACKUP_AUDIT_SERVICE_RESULT=success\nHOMELAB_BACKUP_AUDIT_SERVICE_EXEC_MAIN_STATUS=0\nBACKUP_V2_14D_VM150_REF_COUNT=40\nBACKUP_V2_14D_VM150_SUCCESS_COUNT=40\nBACKUP_V2_14D_VM150_FAIL_COUNT=0\nBACKUP_AUDIT_30D_VM150_REF_COUNT=2379\nBACKUP_AUDIT_30D_VM150_RESTORE_REF_COUNT=764\nBACKUP_AUDIT_30D_VM150_PASS_REF_COUNT=763\nBACKUP_SOURCE_FILE_COUNT=135\nBACKUP_SOURCE_VM150_EXPLICIT_REF_FILE_COUNT=17\nBACKUP_SOURCE_DYNAMIC_VM_DISCOVERY_FILE_COUNT=46\nSOURCE_GIT_REPO_SCAN_COUNT=64\nSOURCE_RECON_EXACT_SHA_MATCH_COUNT=0\nSOURCE_RECON_CORRECT_LOGIC_TRACKED_COUNT=0\nSOURCE_DNS_ALL3_TRACKED_COUNT=343\nSOURCE_DNS_ALL3_CURRENT_TARGET_TRACKED_COUNT=294\nMONITOR_SOURCE_FILE_COUNT=86\nMONITOR_CHAT_DOMAIN_REF_FILE_COUNT=0\nMONITOR_ALL3_DOMAIN_REF_FILE_COUNT=0\nMONITOR_XMPP_5222_REF_FILE_COUNT=0\nMONITOR_XMPP_5269_REF_FILE_COUNT=0\nMONITOR_TURN_3479_REF_FILE_COUNT=0\nMONITOR_TURN_STUN_REF_FILE_COUNT=0\nMONITOR_CERT_EXPIRY_REF_FILE_COUNT=2\nHOMELAB_EXTERNAL_PROBE_VPS_HEALTH_TIMER_ACTIVE=active\nHOMELAB_EXTERNAL_PROBE_VPS_HEALTH_TIMER_ENABLED=enabled\nHOMELAB_KUMA_MONITOR_POLICY_TIMER_ACTIVE=active\nHOMELAB_KUMA_MONITOR_POLICY_TIMER_ENABLED=enabled\nHOMELAB_OVERALL_HEALTH_TIMER_ACTIVE=active\nHOMELAB_OVERALL_HEALTH_TIMER_ENABLED=enabled\nHOMELAB_ALERTING_HEALTH_TIMER_ACTIVE=active\nHOMELAB_ALERTING_HEALTH_TIMER_ENABLED=enabled\nPUBLIC_DNS_OK_COUNT=3\nPUBLIC_HTTPS_OK_COUNT=3\nPUBLIC_STUN_3479_PASS=true\nPUBLIC_STUN_3479_CLASS=BINDING_SUCCESS\nVM150_QGA_EXEC_INIT_RC=0\nVM150_QGA_POLL_RC=0\nVM150_GUEST_EXITCODE=0\nVM150_GUEST_OUTPUT_MARKER=true\nSNIKKET_OPS_GAPS_GUEST=V1\nMODE=read-only\nNO_DNS_MUTATION=true\nNO_VM_MUTATION=true\nNO_CONTAINER_RESTART=true\nNO_SERVICE_START=true\nNO_SOURCE_MUTATION=true\nGUEST_HOSTNAME_SNIKKET=true\nDOCKER_OK=true\nCONTAINER_SNIKKET_PRESENT=true\nCONTAINER_SNIKKET_RUNNING=true\nCONTAINER_SNIKKET_IMAGE_ID=c392b78a2bd3447d314054caa75b3556cf4fc3579288599e2d0a15dbcd690972\nCONTAINER_SNIKKET_IMAGE_CREATED=2026-06-12T14:41:53.\nPROSODY_ABOUT_PRESENT=true\nPROSODY_ABOUT_SHA256=df326196b07e19c252252fd9213b8920957e8ff733d5b7a548ef1b004586ff38\nSNIKKET_UPDATE_CHECK_EFFECTIVE=true\nSNIKKET_RETENTION_EXPLICIT=false\nSNIKKET_UPLOAD_LIMIT_EXPLICIT=false\nCERT_DAYS_REMAINING=-1\nROOT_FS_USED_PERCENT=4\nGUEST_AUDIT_DONE=true\nUPSTREAM_COMPOSE_FETCH_RC=0\nUPSTREAM_COMPOSE_PRESENT=true\nUPSTREAM_COMPOSE_SHA256=5773abc3efc852e3d4082de5947b7e93acdf3708e416272f6edd7c3f00de69b8\nUPSTREAM_SNIKKET_IMAGE_LINE_COUNT=4\nOPS_GAPS_RECONCILE_COMPLETE=true\nDECISION=ANALYZE_EXACT_99577_EVIDENCE\nNEXT_GATE=APPLY_ONLY_PROVEN_OPERATIONAL_GAPS\nTASK_RESULT=SNIKKET_OPS_GAPS_RECONCILE\nCHANGES_MADE=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nMUTATION_OUTCOME=NO_MUTATION\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 01211539..07f78fad 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,22 +1,22 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-261005-SKLADCHIK-DURABILITY-BACKUP-PRODUCER-RCA-99578R1 -STATUS=FAIL -RC=43 +COMMAND_ID=SUPPORT-261005-SNIKKET-OPS-GAPS-RECONCILE-99577R1 +STATUS=OK +RC=0 HOST=pve01 MODE=read-only -COMPONENT=skladchik-durability-backup-producer-rca +COMPONENT=snikket-ops-gaps-reconcile REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=6d4e000caabe0b4f15d31ba419f9633c5004c1b83d9c535098b8901ae634bb59 +COMMAND_SHA256=42c5c98e1e7e36e4af7ab23f644308660eed0d45271f7207290956264ade5a2a DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false RESULT_CONTRACT_VALID=true RESULT_CONTRACT_STATUS=NOT_APPLICABLE RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=43 +COMMAND_RC=0 CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null @@ -24,2195 +24,125 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=16ba01850d81f6abbd81c5322dfb90ebe83f2780ce7f91f057ae10bce56216b0 -SANITIZED_OUTPUT_SHA256=16ba01850d81f6abbd81c5322dfb90ebe83f2780ce7f91f057ae10bce56216b0 +RAW_EVIDENCE_SHA256=b273ebd9e84019c6ed048e74e5e888c0818a877184fc6e455881b787ece315f4 +SANITIZED_OUTPUT_SHA256=b273ebd9e84019c6ed048e74e5e888c0818a877184fc6e455881b787ece315f4 OUTPUT_BEGIN -SKLADCHIK_DURABILITY_BACKUP_PRODUCER_RCA=V1 -NO_MAIL_SEND=true -NO_SERVICE_RESTART=true -NO_TIMER_MUTATION=true -NO_NETWORK_MUTATION=true -NO_SOURCE_MUTATION=true -NO_BACKUP_MUTATION=true -NO_GIT_PUSH=true +SNIKKET_OPS_GAPS_RECONCILE_WRAPPER=V1 MODE=read-only +NO_DNS_MUTATION=true +NO_VM_MUTATION=true +NO_CONTAINER_RESTART=true +NO_SERVICE_START=true +NO_SOURCE_MUTATION=true HOST_PVE01=true -PRODUCER_VM170_QM_RC=0 -PRODUCER_VM170_STDERR_PRESENT=false -PRODUCER_VM170_JSON=true -PRODUCER_VM170_GUEST_EXITCODE=0 -VM170_MONITOR_SHA=19123e359f2f7b9a2d373fd7e4464dd426d31b91cabc567c252e70cad40d77c8 -VM170_TIMER_ACTIVE=active -VM170_TIMER_ENABLED=enabled -VM170_SERVICE_RESULT=success -VM170_HEALTH_STATUS=OK\nVM170_HEALTH_TS=2026-10-05T06:43:23Z\nVM170_HEALTH_REPORTS=22\nVM170_HEALTH_OPEN=13\nVM170_HEALTH_RESOLVED=9\n -VM170_BASELINE_OK=false -SUPERVISOR_PRESENT=true -SUPERVISOR_SHA=3a9bf9f3f9c28dbf670300f0851a5b7f86eb41fa41cdf44d0935337ae8ef02a2 -SUPERVISOR_BASENAME=skladchik-reports-monitor-supervisor -SUPERVISOR_AST_OK=true -SUPERVISOR_FUNCTION_COUNT=16 -SUPERVISOR_FUNCTIONS=now,iso,log,run,parse_env_text,read_env_file,age_seconds_from_ts,ssh_edge,edge_mail,systemctl_props,gather,render_body,write_health,read_state,write_state,main -SUPERVISOR_CLI_OPTION_COUNT=0 -SUPERVISOR_CLI_OPTIONS=NONE -SUPERVISOR_ENV_NAME_COUNT=5 -SUPERVISOR_ENV_NAMES=SKLADCHIK_BACKUP_HEALTH_MAX_SECONDS,SKLADCHIK_COOKIE_EXPIRY_WARN_SECONDS,SKLADCHIK_EDGE,SKLADCHIK_MONITOR_HEALTH_MAX_SECONDS,SKLADCHIK_RESTORE_HEALTH_MAX_SECONDS -SUPERVISOR_RELEVANT_FUNCTION_COUNT=4 -SUPERVISOR_FUNC_1_NAME=parse_env_text -SUPERVISOR_FUNC_1_LINENO=51 -SUPERVISOR_FUNC_1_ENDLINENO=58 -SUPERVISOR_FUNC_1_NAMES=d,k,line,split,splitlines,startswith,strip,text,v -SUPERVISOR_FUNC_1_AST_BEGIN -FunctionDef( - name='parse_env_text', - args=arguments( - args=[ - arg(arg='text')]), - body=[ - Assign( - targets=[ - Name(id='d', ctx=Store())], - value=Dict()), - For( - target=Name(id='line', ctx=Store()), - iter=Call( - func=Attribute( - value=BoolOp( - op=Or(), - values=[ - Name(id='text', ctx=Load()), - Constant(value='')]), - attr='splitlines', - ctx=Load())), - body=[ - If( - test=BoolOp( - op=Or(), - values=[ - UnaryOp( - op=Not(), - operand=Name(id='line', ctx=Load())), - Call( - func=Attribute( - value=Name(id='line', ctx=Load()), - attr='startswith', - ctx=Load()), - args=[ - Constant(value='#')]), - Compare( - left=Constant(value='='), - ops=[ - NotIn()], - comparators=[ - Name(id='line', ctx=Load())])]), - body=[ - Continue()]), - Assign( - targets=[ - Tuple( - elts=[ - Name(id='k', ctx=Store()), - Name(id='v', ctx=Store())], - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='line', ctx=Load()), - attr='split', - ctx=Load()), - args=[ - Constant(value='='), - Constant(value=1)])), - Assign( - targets=[ - Subscript( - value=Name(id='d', ctx=Load()), - slice=Call( - func=Attribute( - value=Name(id='k', ctx=Load()), - attr='strip', - ctx=Load())), - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='v', ctx=Load()), - attr='strip', - ctx=Load())))]), - Return( - value=Name(id='d', ctx=Load()))]) -SUPERVISOR_FUNC_1_AST_END -SUPERVISOR_FUNC_2_NAME=gather -SUPERVISOR_FUNC_2_LINENO=110 -SUPERVISOR_FUNC_2_ENDLINENO=347 -SUPERVISOR_FUNC_2_NAMES=APP_FRESHNESS_PROBE,Exception,M,MONITOR_HEALTH_AGE_MAX,Path,S,age_seconds_from_ts,append,base,core_cmd,facts,files,get,group,health_age,int,items,k,local_units,m,mon,name,opened,out,p,parse_env_text,probe,probe_out,probe_rc,problems,props,quote,rc,re,read_text,reg_cmd,reg_out,reg_rc,registry_source,replace,reports,resolved,route,route_lines,run,search,section,shlex,splitlines,ssh_edge,startswith,str,strip,systemctl_props,timer_active,timer_enabled,timers_text,u,wm,worker_path,worker_target,worker_text -SUPERVISOR_FUNC_2_AST_BEGIN -FunctionDef( - name='gather', - args=arguments(), - body=[ - Assign( - targets=[ - Name(id='facts', ctx=Store())], - value=Dict()), - Assign( - targets=[ - Name(id='problems', ctx=Store())], - value=List(ctx=Load())), - Assign( - targets=[ - Name(id='core_cmd', ctx=Store())], - value=Constant(value='')), - Assign( - targets=[ - Tuple( - elts=[ - Name(id='rc', ctx=Store()), - Name(id='out', ctx=Store())], - ctx=Store())], - value=Call( - func=Name(id='ssh_edge', ctx=Load()), - args=[ - Name(id='core_cmd', ctx=Load())], - keywords=[ - keyword( - arg='timeout', - value=Constant(value=45))])), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='core_ssh_rc'), - ctx=Store())], - value=Call( - func=Name(id='str', ctx=Load()), - args=[ - Name(id='rc', ctx=Load())])), - If( - test=Compare( - left=Name(id='rc', ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value=0)]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='core_ssh_failed')]))]), - FunctionDef( - name='section', - args=arguments( - args=[ - arg(arg='name')]), - body=[ - Assign( - targets=[ - Name(id='m', ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='re', ctx=Load()), - attr='search', - ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='__'), - FormattedValue( - value=Name(id='name', ctx=Load()), - conversion=-1), - Constant(value='_BEGIN__\\n(.*?)\\n__'), - FormattedValue( - value=Name(id='name', ctx=Load()), - conversion=-1), - Constant(value='_END__')]), - Name(id='out', ctx=Load()), - Attribute( - value=Name(id='re', ctx=Load()), - attr='S', - ctx=Load())])), - Return( - value=IfExp( - test=Name(id='m', ctx=Load()), - body=Call( - func=Attribute( - value=Call( - func=Attribute( - value=Name(id='m', ctx=Load()), - attr='group', - ctx=Load()), - args=[ - Constant(value=1)]), - attr='strip', - ctx=Load())), - orelse=Constant(value='')))]), - Assign( - targets=[ - Name(id='mon', ctx=Store())], - value=Call( - func=Name(id='parse_env_text', ctx=Load()), - args=[ - Call( - func=Name(id='section', ctx=Load()), - args=[ - Constant(value='MONITOR_HEALTH')])])), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_status'), - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='mon', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='STATUS'), - Constant(value='MISSING')])), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_reports'), - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='mon', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='reports'), - Constant(value='')])), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_open'), - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='mon', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='open'), - Constant(value='')])), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_resolved'), - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='mon', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='resolved'), - Constant(value='')])), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_smtp_configured'), - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='mon', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='smtp_configured'), - Constant(value='')])), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_health_age_seconds'), - ctx=Store())], - value=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Name(id='age_seconds_from_ts', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='mon', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='TS')])])])), - If( - test=Compare( - left=Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_status'), - ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value='OK')]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_status_not_ok')]))]), - Try( - body=[ - Assign( - targets=[ - Name(id='health_age', ctx=Store())], - value=Call( - func=Name(id='int', ctx=Load()), - args=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_health_age_seconds'), - ctx=Load())])), - If( - test=Compare( - left=Name(id='health_age', ctx=Load()), - ops=[ - Gt()], - comparators=[ - Name(id='MONITOR_HEALTH_AGE_MAX', ctx=Load())]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_health_stale')]))])], - handlers=[ - ExceptHandler( - type=Name(id='Exception', ctx=Load()), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_health_age_invalid')]))])]), - Try( - body=[ - Assign( - targets=[ - Name(id='reports', ctx=Store())], - value=Call( - func=Name(id='int', ctx=Load()), - args=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_reports'), - ctx=Load())])), - Assign( - targets=[ - Name(id='opened', ctx=Store())], - value=Call( - func=Name(id='int', ctx=Load()), - args=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_open'), - ctx=Load())])), - Assign( - targets=[ - Name(id='resolved', ctx=Store())], - value=Call( - func=Name(id='int', ctx=Load()), - args=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_resolved'), - ctx=Load())])), - If( - test=Compare( - left=Name(id='reports', ctx=Load()), - ops=[ - LtE()], - comparators=[ - Constant(value=0)]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_reports_zero_or_missing')]))]), - If( - test=BoolOp( - op=Or(), - values=[ - Compare( - left=Name(id='opened', ctx=Load()), - ops=[ - Lt()], - comparators=[ - Constant(value=0)]), - Compare( - left=Name(id='resolved', ctx=Load()), - ops=[ - Lt()], - comparators=[ - Constant(value=0)]), - Compare( - left=BinOp( - left=Name(id='opened', ctx=Load()), - op=Add(), - right=Name(id='resolved', ctx=Load())), - ops=[ - NotEq()], - comparators=[ - Name(id='reports', ctx=Load())])]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_counts_invalid')]))])], - handlers=[ - ExceptHandler( - type=Name(id='Exception', ctx=Load()), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_counts_missing')]))])]), - If( - test=Compare( - left=Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_smtp_configured'), - ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value='yes')]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_smtp_not_configured')]))]), - Assign( - targets=[ - Name(id='timers_text', ctx=Store())], - value=Call( - func=Name(id='section', ctx=Load()), - args=[ - Constant(value='TIMERS')])), - Assign( - targets=[ - Name(id='m', ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='re', ctx=Load()), - attr='search', - ctx=Load()), - args=[ - Constant(value='skladchik-reports-monitor\\.timer\\s+enabled=([^\\s]+)\\s+active=([^\\s]+)'), - Name(id='timers_text', ctx=Load())])), - Assign( - targets=[ - Name(id='timer_enabled', ctx=Store())], - value=IfExp( - test=Name(id='m', ctx=Load()), - body=Call( - func=Attribute( - value=Name(id='m', ctx=Load()), - attr='group', - ctx=Load()), - args=[ - Constant(value=1)]), - orelse=Constant(value='missing'))), - Assign( - targets=[ - Name(id='timer_active', ctx=Store())], - value=IfExp( - test=Name(id='m', ctx=Load()), - body=Call( - func=Attribute( - value=Name(id='m', ctx=Load()), - attr='group', - ctx=Load()), - args=[ - Constant(value=2)]), - orelse=Constant(value='missing'))), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_timer_enabled'), - ctx=Store())], - value=Name(id='timer_enabled', ctx=Load())), - Assign( - targets=[ - Subscript( - value=Name(id='facts', ctx=Load()), - slice=Constant(value='monitor_timer_active'), - ctx=Store())], - value=Name(id='timer_active', ctx=Load())), - If( - test=Compare( - left=Name(id='timer_enabled', ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value='enabled')]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_timer_not_enabled')]))]), - If( - test=Compare( - left=Name(id='timer_active', ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value='active')]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='monitor_timer_not_active')]))]), - Assign( - targets=[ - Name(id='route_lines', ctx=Store())], - value=Call( - func=Attribute( - value=Call( - func=Name(id='section', ctx=Load()), - args=[ - Constant(value='ROUTE')]), - att - -SUPERVISOR_FUNC_2_AST_END -SUPERVISOR_FUNC_3_NAME=render_body -SUPERVISOR_FUNC_3_LINENO=349 -SUPERVISOR_FUNC_3_ENDLINENO=378 -SUPERVISOR_FUNC_3_NAMES=facts,get,join,lines,none_text,problems,status,str -SUPERVISOR_FUNC_3_AST_BEGIN -FunctionDef( - name='render_body', - args=arguments( - args=[ - arg(arg='status'), - arg(arg='facts'), - arg(arg='problems'), - arg(arg='mode')]), - body=[ - Assign( - targets=[ - Name(id='none_text', ctx=Store())], - value=Constant(value='нет')), - Assign( - targets=[ - Name(id='lines', ctx=Store())], - value=List( - elts=[ - Constant(value='Надзор мониторинга жалоб Складчика'), - Constant(value=''), - BinOp( - left=Constant(value='Статус: '), - op=Add(), - right=Name(id='status', ctx=Load())), - BinOp( - left=Constant(value='Проблемы: '), - op=Add(), - right=IfExp( - test=Name(id='problems', ctx=Load()), - body=Call( - func=Attribute( - value=Constant(value=', '), - attr='join', - ctx=Load()), - args=[ - Name(id='problems', ctx=Load())]), - orelse=Name(id='none_text', ctx=Load()))), - Constant(value=''), - Constant(value='Основной монитор:'), - Constant(value=''), - BinOp( - left=Constant(value='- status: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='monitor_status'), - Constant(value='')])])), - BinOp( - left=Constant(value='- reports: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='monitor_reports'), - Constant(value='')])])), - BinOp( - left=Constant(value='- open: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='monitor_open'), - Constant(value='')])])), - BinOp( - left=Constant(value='- resolved: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='monitor_resolved'), - Constant(value='')])])), - BinOp( - left=Constant(value='- route: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='netbird_route'), - Constant(value='')])])), - Constant(value=''), - Constant(value='Canonical backup:'), - BinOp( - left=Constant(value='- decision: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='canonical_backup_decision'), - Constant(value='')])])), - BinOp( - left=Constant(value='- generation: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='canonical_backup_generation'), - Constant(value='')])])), - BinOp( - left=Constant(value='- registry source: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='registry_source'), - Constant(value='')])])), - BinOp( - left=Constant(value='- worker target: '), - op=Add(), - right=Call( - func=Name(id='str', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='worker_target'), - Constant(value='')])]))], - ctx=Load())), - Return( - value=Call( - func=Attribute( - value=Constant(value='\n'), - attr='join', - ctx=Load()), - args=[ - Name(id='lines', ctx=Load())]))]) -SUPERVISOR_FUNC_3_AST_END -SUPERVISOR_FUNC_4_NAME=main -SUPERVISOR_FUNC_4_LINENO=395 -SUPERVISOR_FUNC_4_ENDLINENO=515 -SUPERVISOR_FUNC_4_NAMES=append,argv,edge_mail,facts,gather,get,join,len,log,mail_sent,mode,old,old_status,print,problems,read_state,render_body,status,stderr,subject,sys,write_health,write_state -SUPERVISOR_FUNC_4_AST_BEGIN -FunctionDef( - name='main', - args=arguments(), - body=[ - Assign( - targets=[ - Name(id='mode', ctx=Store())], - value=IfExp( - test=Compare( - left=Call( - func=Name(id='len', ctx=Load()), - args=[ - Attribute( - value=Name(id='sys', ctx=Load()), - attr='argv', - ctx=Load())]), - ops=[ - Gt()], - comparators=[ - Constant(value=1)]), - body=Subscript( - value=Attribute( - value=Name(id='sys', ctx=Load()), - attr='argv', - ctx=Load()), - slice=Constant(value=1), - ctx=Load()), - orelse=Constant(value='check'))), - If( - test=Compare( - left=Name(id='mode', ctx=Load()), - ops=[ - NotIn()], - comparators=[ - Tuple( - elts=[ - Constant(value='check'), - Constant(value='test')], - ctx=Load())]), - body=[ - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - Constant(value='usage: skladchik-reports-monitor-supervisor [check|test]')], - keywords=[ - keyword( - arg='file', - value=Attribute( - value=Name(id='sys', ctx=Load()), - attr='stderr', - ctx=Load()))])), - Return( - value=Constant(value=2))]), - Assign( - targets=[ - Tuple( - elts=[ - Name(id='facts', ctx=Store()), - Name(id='problems', ctx=Store())], - ctx=Store())], - value=Call( - func=Name(id='gather', ctx=Load()))), - Assign( - targets=[ - Name(id='status', ctx=Store())], - value=IfExp( - test=UnaryOp( - op=Not(), - operand=Name(id='problems', ctx=Load())), - body=Constant(value='OK'), - orelse=Constant(value='FAIL'))), - If( - test=Compare( - left=Name(id='mode', ctx=Load()), - ops=[ - Eq()], - comparators=[ - Constant(value='test')]), - body=[ - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='SUPERVISOR_STATUS='), - FormattedValue( - value=Name(id='status', ctx=Load()), - conversion=-1)])])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - BinOp( - left=Constant(value='SUPERVISOR_PROBLEMS='), - op=Add(), - right=IfExp( - test=Name(id='problems', ctx=Load()), - body=Call( - func=Attribute( - value=Constant(value=','), - attr='join', - ctx=Load()), - args=[ - Name(id='problems', ctx=Load())]), - orelse=Constant(value='none')))])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='MONITOR='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='monitor_status')]), - conversion=-1), - Constant(value=' reports='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='monitor_reports')]), - conversion=-1), - Constant(value=' open='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='monitor_open')]), - conversion=-1), - Constant(value=' resolved='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='monitor_resolved')]), - conversion=-1)])])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='CANONICAL_BACKUP='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='canonical_backup_decision')]), - conversion=-1), - Constant(value=' generation='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='canonical_backup_generation')]), - conversion=-1)])])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='REGISTRY_SOURCE='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='registry_source')]), - conversion=-1)])])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='WORKER_TARGET='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='worker_target')]), - conversion=-1)])])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='NETBIRD_ROUTE='), - FormattedValue( - value=Call( - func=Attribute( - value=Name(id='facts', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='netbird_route')]), - conversion=-1)])])), - Return( - value=IfExp( - test=Compare( - left=Name(id='status', ctx=Load()), - ops=[ - Eq()], - comparators=[ - Constant(value='OK')]), - body=Constant(value=0), - orelse=Constant(value=1)))]), - Assign( - targets=[ - Name(id='old', ctx=Store())], - value=Call( - func=Name(id='read_state', ctx=Load()))), - Assign( - targets=[ - Name(id='old_status', ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='old', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='LAST_STATUS'), - Constant(value='')])), - Assign( - targets=[ - Name(id='mail_sent', ctx=Store())], - value=Constant(value=False)), - If( - test=BoolOp( - op=And(), - values=[ - Compare( - left=Name(id='status', ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value='OK')]), - Compare( - left=Name(id='old_status', ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value='FAIL')])]), - body=[ - Assign( - targets=[ - Name(id='subject', ctx=Store())], - value=Constant(value='[Складчик] ТРЕВОГА: мониторинг жалоб')), - Assign( - targets=[ - Name(id='mail_sent', ctx=Store())], - value=Call( - func=Name(id='edge_mail', ctx=Load()), - args=[ - Name(id='subject', ctx=Load()), - Call( - func=Name(id='render_body', ctx=Load()), - args=[ - Name(id='status', ctx=Load()), - Name(id='facts', ctx=Load()), - Name(id='problems', ctx=Load()), - Name(id='mode', ctx=Load())])])), - If( - test=UnaryOp( - op=Not(), - operand=Name(id='mail_sent', ctx=Load())), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='supervisor_mail_send_failed')])), - Assign( - targets=[ - Name(id='status', ctx=Store())], - value=Constant(value='FAIL'))])], - orelse=[ - If( - test=BoolOp( - op=And(), - values=[ - Compare( - left=Name(id='status', ctx=Load()), - ops=[ - Eq()], - comparators=[ - Constant(value='OK')]), - Compare( - left=Name(id='old_status', ctx=Load()), - ops=[ - Eq()], - comparators=[ - Constant(value='FAIL')])]), - body=[ - Assign( - targets=[ - Name(id='subject', ctx=Store())], - value=Constant(value='[Складчик] ВОССТАНОВЛЕНО: мониторинг жалоб и backup снова OK')), - Assign( - targets=[ - Name(id='mail_sent', ctx=Store())], - value=Call( - func=Name(id='edge_mail', ctx=Load()), - args=[ - Name(id='subject', ctx=Load()), - Call( - func=Name(id='render_body', ctx=Load()), - args=[ - Name(id='status', ctx=Load()), - Name(id='facts', ctx=Load()), - Name(id='problems', ctx=Load()), - Name(id='mode', ctx=Load())])])), - If( - test=UnaryOp( - op=Not(), - operand=Name(id='mail_sent', ctx=Load())), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='problems', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Constant(value='supervisor_mail_send_failed')])), - Assign( - targets=[ - Name(id='status', ctx=Store())], - value=Constant(value='FAIL'))])])]), - Expr( - value=Call( - func=Name(id='write_health', ctx=Load()), - args=[ - Name(id='status', ctx=Load()), - Name(id='facts', ctx=Load()), - Name(id='problems', ctx=Load()), - Name(id='mail_sent', ctx=Load())])), - Expr( - value=Call( - func=Name(id='write_state', ctx=Load()), - args=[ - Name(id='status', ctx=Load()), - Name(id='problems', ctx=Load())])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='SUPERVISOR_STATUS='), - FormattedValue( - value=Name(id='status', ctx=Load()), - conversion=-1)])])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='SUPERVISOR_MAIL_SENT='), - FormattedValue( - value=IfExp( - test=Name(id='mail_sent', ctx=Load()), - body=Constant(value='yes'), - orelse=Constant(value='no')), - conversion=-1)])])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - BinOp( - left=Constant(value='SUPERVISOR_PROBLEMS='), - op=Add(), - right=IfExp( - test=Name(id='problems', ctx=Load()), - body=Call( - func=Attribute( - value=Constant(value=','), - attr='join', - ctx=Load()), - args=[ - Name(id='problems', ctx=Load())]), - orelse=Constant(value='none')))])), - Expr( - value=Call( - func=Name(id='print', ctx=Load()), - args=[ - JoinedStr( - values=[ - Constant(value='MONITOR='), - FormattedValue( - value=Call( - - -SUPERVISOR_FUNC_4_AST_END -BACKUP_AUDIT_PRESENT=true -BACKUP_AUDIT_SHA=1c2cd8a00859492c010ed35baf5eb67f4278544809de8c2563421a6f3e356ed3 -BACKUP_AUDIT_BASENAME=homelab-backup-audit -BACKUP_AUDIT_AST_OK=true -BACKUP_AUDIT_FUNCTION_COUNT=7 -BACKUP_AUDIT_FUNCTIONS=run,collect,parse_epoch,latest_legacy,unit_ok,parse_app_plan,expected_v2_heavy_lock_owner -BACKUP_AUDIT_CLI_OPTION_COUNT=0 -BACKUP_AUDIT_CLI_OPTIONS=NONE -BACKUP_AUDIT_ENV_NAME_COUNT=0 -BACKUP_AUDIT_ENV_NAMES=NONE -BACKUP_AUDIT_RELEVANT_FUNCTION_COUNT=4 -BACKUP_AUDIT_FUNC_1_NAME=collect -BACKUP_AUDIT_FUNC_1_LINENO=34 -BACKUP_AUDIT_FUNC_1_ENDLINENO=39 -BACKUP_AUDIT_FUNC_1_NAMES=append,collect,dict,get,isinstance,list,obj,out,str,v,values -BACKUP_AUDIT_FUNC_1_AST_BEGIN -FunctionDef( - name='collect', - args=arguments( - args=[ - arg(arg='obj'), - arg(arg='out')]), - body=[ - If( - test=Call( - func=Name(id='isinstance', ctx=Load()), - args=[ - Name(id='obj', ctx=Load()), - Name(id='dict', ctx=Load())]), - body=[ - If( - test=Call( - func=Name(id='isinstance', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='logical_id')]), - Name(id='str', ctx=Load())]), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='out', ctx=Load()), - attr='append', - ctx=Load()), - args=[ - Name(id='obj', ctx=Load())]))]), - For( - target=Name(id='v', ctx=Store()), - iter=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='values', - ctx=Load())), - body=[ - Expr( - value=Call( - func=Name(id='collect', ctx=Load()), - args=[ - Name(id='v', ctx=Load()), - Name(id='out', ctx=Load())]))])], - orelse=[ - If( - test=Call( - func=Name(id='isinstance', ctx=Load()), - args=[ - Name(id='obj', ctx=Load()), - Name(id='list', ctx=Load())]), - body=[ - For( - target=Name(id='v', ctx=Store()), - iter=Name(id='obj', ctx=Load()), - body=[ - Expr( - value=Call( - func=Name(id='collect', ctx=Load()), - args=[ - Name(id='v', ctx=Load()), - Name(id='out', ctx=Load())]))])])])]) -BACKUP_AUDIT_FUNC_1_AST_END -BACKUP_AUDIT_FUNC_2_NAME=latest_legacy -BACKUP_AUDIT_FUNC_2_LINENO=53 -BACKUP_AUDIT_FUNC_2_ENDLINENO=77 -BACKUP_AUDIT_FUNC_2_NAMES=APPREST,Exception,QROOT,VMREST,age,best,best_epoch,d,epoch,gen,get,glob,int,is_dir,is_file,json,kind,loads,logical,max,obj,p,parse_epoch,read_text,restore,rev,rj,rroot,score,st_mtime,stat,str,strict,time -BACKUP_AUDIT_FUNC_2_AST_BEGIN -FunctionDef( - name='latest_legacy', - args=arguments( - args=[ - arg(arg='logical'), - arg(arg='kind')]), - body=[ - Assign( - targets=[ - Name(id='d', ctx=Store())], - value=BinOp( - left=Name(id='QROOT', ctx=Load()), - op=Div(), - right=Name(id='logical', ctx=Load()))), - Assign( - targets=[ - Name(id='best', ctx=Store())], - value=Constant(value=None)), - Assign( - targets=[ - Name(id='best_epoch', ctx=Store())], - value=UnaryOp( - op=USub(), - operand=Constant(value=1))), - If( - test=UnaryOp( - op=Not(), - operand=Call( - func=Attribute( - value=Name(id='d', ctx=Load()), - attr='is_dir', - ctx=Load()))), - body=[ - Return( - value=Constant(value=None))]), - For( - target=Name(id='p', ctx=Store()), - iter=Call( - func=Attribute( - value=Name(id='d', ctx=Load()), - attr='glob', - ctx=Load()), - args=[ - Constant(value='*.json')]), - body=[ - Try( - body=[ - Assign( - targets=[ - Name(id='obj', ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='json', ctx=Load()), - attr='loads', - ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='p', ctx=Load()), - attr='read_text', - ctx=Load()), - keywords=[ - keyword( - arg='encoding', - value=Constant(value='utf-8'))])]))], - handlers=[ - ExceptHandler( - type=Name(id='Exception', ctx=Load()), - body=[ - Continue()])]), - Assign( - targets=[ - Name(id='epoch', ctx=Store())], - value=Call( - func=Name(id='parse_epoch', ctx=Load()), - args=[ - Name(id='obj', ctx=Load())])), - Assign( - targets=[ - Name(id='score', ctx=Store())], - value=IfExp( - test=Compare( - left=Name(id='epoch', ctx=Load()), - ops=[ - IsNot()], - comparators=[ - Constant(value=None)]), - body=Name(id='epoch', ctx=Load()), - orelse=Call( - func=Name(id='int', ctx=Load()), - args=[ - Attribute( - value=Call( - func=Attribute( - value=Name(id='p', ctx=Load()), - attr='stat', - ctx=Load())), - attr='st_mtime', - ctx=Load())]))), - If( - test=Compare( - left=Name(id='score', ctx=Load()), - ops=[ - Gt()], - comparators=[ - Name(id='best_epoch', ctx=Load())]), - body=[ - Assign( - targets=[ - Name(id='best_epoch', ctx=Store())], - value=Name(id='score', ctx=Load())), - Assign( - targets=[ - Name(id='best', ctx=Store())], - value=Tuple( - elts=[ - Name(id='p', ctx=Load()), - Name(id='obj', ctx=Load()), - Name(id='score', ctx=Load())], - ctx=Load()))])]), - If( - test=UnaryOp( - op=Not(), - operand=Name(id='best', ctx=Load())), - body=[ - Return( - value=Constant(value=None))]), - Assign( - targets=[ - Tuple( - elts=[ - Name(id='p', ctx=Store()), - Name(id='obj', ctx=Store()), - Name(id='epoch', ctx=Store())], - ctx=Store())], - value=Name(id='best', ctx=Load())), - Assign( - targets=[ - Name(id='gen', ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='generation')])), - Assign( - targets=[ - Name(id='strict', ctx=Store())], - value=BoolOp( - op=And(), - values=[ - Compare( - left=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='status')]), - ops=[ - Eq()], - comparators=[ - Constant(value='SEALED')]), - Compare( - left=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='cloud_quorum')]), - ops=[ - Eq()], - comparators=[ - Constant(value=2)]), - Compare( - left=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='cloud_a_verified')]), - ops=[ - Is()], - comparators=[ - Constant(value=True)]), - Compare( - left=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='cloud_b_verified')]), - ops=[ - Is()], - comparators=[ - Constant(value=True)]), - Compare( - left=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='part_hashes_verified')]), - ops=[ - Is()], - comparators=[ - Constant(value=True)]), - Compare( - left=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='seal_written')]), - ops=[ - Is()], - comparators=[ - Constant(value=True)]), - Compare( - left=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='local_payload_present')]), - ops=[ - Is()], - comparators=[ - Constant(value=False)]), - Compare( - left=Call( - func=Attribute( - value=Name(id='obj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='local_cleanup')]), - ops=[ - Eq()], - comparators=[ - Constant(value='OK')])])), - Assign( - targets=[ - Name(id='rroot', ctx=Store())], - value=IfExp( - test=Compare( - left=Name(id='kind', ctx=Load()), - ops=[ - Eq()], - comparators=[ - Constant(value='VM')]), - body=Name(id='VMREST', ctx=Load()), - orelse=Name(id='APPREST', ctx=Load()))), - Assign( - targets=[ - Name(id='rev', ctx=Store())], - value=IfExp( - test=Name(id='gen', ctx=Load()), - body=BinOp( - left=BinOp( - left=Name(id='rroot', ctx=Load()), - op=Div(), - right=Name(id='logical', ctx=Load())), - op=Div(), - right=BinOp( - left=Call( - func=Name(id='str', ctx=Load()), - args=[ - Name(id='gen', ctx=Load())]), - op=Add(), - right=Constant(value='.json'))), - orelse=Constant(value=None))), - Assign( - targets=[ - Name(id='restore', ctx=Store())], - value=Constant(value=False)), - If( - test=BoolOp( - op=And(), - values=[ - Name(id='rev', ctx=Load()), - Call( - func=Attribute( - value=Name(id='rev', ctx=Load()), - attr='is_file', - ctx=Load()))]), - body=[ - Try( - body=[ - Assign( - targets=[ - Name(id='rj', ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='json', ctx=Load()), - attr='loads', - ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='rev', ctx=Load()), - attr='read_text', - ctx=Load()), - keywords=[ - keyword( - arg='encoding', - value=Constant(value='utf-8'))])])), - Assign( - targets=[ - Name(id='restore', ctx=Store())], - value=Compare( - left=Call( - func=Attribute( - value=Name(id='rj', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='result')]), - ops=[ - Eq()], - comparators=[ - Constant(value='OK')]))], - handlers=[ - ExceptHandler( - type=Name(id='Exception', ctx=Load()), - body=[ - Pass()])])]), - Assign( - targets=[ - Name(id='age', ctx=Store())], - value=IfExp( - test=Name(id='epoch', ctx=Load()), - body=Call( - func=Name(id='max', ctx=Load()), - args=[ - Constant(value=0), - Call( - func=Name(id='int', ctx=Load()), - args=[ - BinOp( - left=Call( - func=Attribute( - value=Name(id='time', ctx=Load()), - attr='time', - ctx=Load())), - op=Sub(), - right=Name(id='epoch', ctx=Load()))])]), - orelse=Constant(value=None))), - Return( - value=Dict( - keys=[ - Constant(value='generation'), - Constant(value='strict'), - Constant(value='restore_ok'), - Constant(value='age_seconds'), - Constant(value='state_file'), - Constant(value='obj')], - values=[ - Name(id='gen', ctx=Load()), - Name(id='strict', ctx=Load()), - Name(id='restore', ctx=Load()), - Name(id='age', ctx=Load()), - Call( - func=Name(id='str', ctx=Load()), - args=[ - Name(id='p', ctx=Load())]), - Name(id='obj', ctx=Load())]))]) -BACKUP_AUDIT_FUNC_2_AST_END -BACKUP_AUDIT_FUNC_3_NAME=parse_app_plan -BACKUP_AUDIT_FUNC_3_LINENO=84 -BACKUP_AUDIT_FUNC_3_ENDLINENO=93 -BACKUP_AUDIT_FUNC_3_NAMES=d,get,k,line,r,split,splitlines,startswith,tok,txt,v -BACKUP_AUDIT_FUNC_3_AST_BEGIN -FunctionDef( - name='parse_app_plan', - args=arguments( - args=[ - arg(arg='txt')]), - body=[ - Assign( - targets=[ - Name(id='d', ctx=Store())], - value=Dict()), - For( - target=Name(id='line', ctx=Store()), - iter=Call( - func=Attribute( - value=Name(id='txt', ctx=Load()), - attr='splitlines', - ctx=Load())), - body=[ - If( - test=Call( - func=Attribute( - value=Name(id='line', ctx=Load()), - attr='startswith', - ctx=Load()), - args=[ - Constant(value='QUEUE_FRESHNESS_PLAN APP=')]), - body=[ - Assign( - targets=[ - Name(id='r', ctx=Store())], - value=Dict()), - For( - target=Name(id='tok', ctx=Store()), - iter=Subscript( - value=Call( - func=Attribute( - value=Name(id='line', ctx=Load()), - attr='split', - ctx=Load())), - slice=Slice( - lower=Constant(value=1)), - ctx=Load()), - body=[ - If( - test=Compare( - left=Constant(value='='), - ops=[ - In()], - comparators=[ - Name(id='tok', ctx=Load())]), - body=[ - Assign( - targets=[ - Tuple( - elts=[ - Name(id='k', ctx=Store()), - Name(id='v', ctx=Store())], - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='tok', ctx=Load()), - attr='split', - ctx=Load()), - args=[ - Constant(value='='), - Constant(value=1)])), - Assign( - targets=[ - Subscript( - value=Name(id='r', ctx=Load()), - slice=Name(id='k', ctx=Load()), - ctx=Store())], - value=Name(id='v', ctx=Load()))])]), - If( - test=Call( - func=Attribute( - value=Name(id='r', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='APP')]), - body=[ - Assign( - targets=[ - Subscript( - value=Name(id='d', ctx=Load()), - slice=Subscript( - value=Name(id='r', ctx=Load()), - slice=Constant(value='APP'), - ctx=Load()), - ctx=Store())], - value=Call( - func=Attribute( - value=Name(id='r', ctx=Load()), - attr='get', - ctx=Load()), - args=[ - Constant(value='DECISION')]))])])]), - Return( - value=Name(id='d', ctx=Load()))]) -BACKUP_AUDIT_FUNC_3_AST_END -BACKUP_AUDIT_FUNC_4_NAME=expected_v2_heavy_lock_owner -BACKUP_AUDIT_FUNC_4_LINENO=188 -BACKUP_AUDIT_FUNC_4_ENDLINENO=200 -BACKUP_AUDIT_FUNC_4_NAMES=Exception,_,a,add,arc,fe,fo,frc,int,isdigit,owners,pid,pid_text,prc,replace,run,set,split,strip,tok -BACKUP_AUDIT_FUNC_4_AST_BEGIN -FunctionDef( - name='expected_v2_heavy_lock_owner', - args=arguments(), - body=[ - Assign( - targets=[ - Tuple( - elts=[ - Name(id='arc', ctx=Store()), - Name(id='a', ctx=Store()), - Name(id='_', ctx=Store())], - ctx=Store())], - value=Call( - func=Name(id='run', ctx=Load()), - args=[ - List( - elts=[ - Constant(value='systemctl'), - Constant(value='show'), - Constant(value='homelab-backup-v2.service'), - Constant(value='-p'), - Constant(value='ActiveState'), - Constant(value='--value')], - ctx=Load()), - Constant(value=10)])), - Assign( - targets=[ - Tuple( - elts=[ - Name(id='prc', ctx=Store()), - Name(id='pid_text', ctx=Store()), - Name(id='_', ctx=Store())], - ctx=Store())], - value=Call( - func=Name(id='run', ctx=Load()), - args=[ - List( - elts=[ - Constant(value='systemctl'), - Constant(value='show'), - Constant(value='homelab-backup-v2.service'), - Constant(value='-p'), - Constant(value='MainPID'), - Constant(value='--value')], - ctx=Load()), - Constant(value=10)])), - If( - test=BoolOp( - op=Or(), - values=[ - Compare( - left=Name(id='arc', ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value=0)]), - Compare( - left=Name(id='prc', ctx=Load()), - ops=[ - NotEq()], - comparators=[ - Constant(value=0)]), - Compare( - left=Call( - func=Attribute( - value=Name(id='a', ctx=Load()), - attr='strip', - ctx=Load())), - ops=[ - NotIn()], - comparators=[ - Tuple( - elts=[ - Constant(value='active'), - Constant(value='activating')], - ctx=Load())])]), - body=[ - Return( - value=Constant(value=False))]), - Try( - body=[ - Assign( - targets=[ - Name(id='pid', ctx=Store())], - value=Call( - func=Name(id='int', ctx=Load()), - args=[ - Call( - func=Attribute( - value=Name(id='pid_text', ctx=Load()), - attr='strip', - ctx=Load()))]))], - handlers=[ - ExceptHandler( - type=Name(id='Exception', ctx=Load()), - body=[ - Return( - value=Constant(value=False))])]), - If( - test=Compare( - left=Name(id='pid', ctx=Load()), - ops=[ - LtE()], - comparators=[ - Constant(value=0)]), - body=[ - Return( - value=Constant(value=False))]), - Assign( - targets=[ - Tuple( - elts=[ - Name(id='frc', ctx=Store()), - Name(id='fo', ctx=Store()), - Name(id='fe', ctx=Store())], - ctx=Store())], - value=Call( - func=Name(id='run', ctx=Load()), - args=[ - List( - elts=[ - Constant(value='fuser'), - Constant(value='/run/homelab-backup-heavy.lock')], - ctx=Load()), - Constant(value=10)])), - Assign( - targets=[ - Name(id='owners', ctx=Store())], - value=Call( - func=Name(id='set', ctx=Load()))), - For( - target=Name(id='tok', ctx=Store()), - iter=Call( - func=Attribute( - value=Call( - func=Attribute( - value=BinOp( - left=BinOp( - left=Name(id='fo', ctx=Load()), - op=Add(), - right=Constant(value=' ')), - op=Add(), - right=Name(id='fe', ctx=Load())), - attr='replace', - ctx=Load()), - args=[ - Constant(value=':'), - Constant(value=' ')]), - attr='split', - ctx=Load())), - body=[ - If( - test=Call( - func=Attribute( - value=Name(id='tok', ctx=Load()), - attr='isdigit', - ctx=Load())), - body=[ - Expr( - value=Call( - func=Attribute( - value=Name(id='owners', ctx=Load()), - attr='add', - ctx=Load()), - args=[ - Call( - func=Name(id='int', ctx=Load()), - args=[ - Name(id='tok', ctx=Load())])]))])]), - Return( - value=BoolOp( - op=And(), - values=[ - Compare( - left=Name(id='frc', ctx=Load()), - ops=[ - Eq()], - comparators=[ - Constant(value=0)]), - Compare( - left=Name(id='owners', ctx=Load()), - ops=[ - Eq()], - comparators=[ - Set( - elts=[ - Name(id='pid', ctx=Load())])])]))]) -BACKUP_AUDIT_FUNC_4_AST_END -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_PRESENT=true -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_SHA=1f959049cca2710a2cb820cc1f6acab16399c6b6711b9e4522e0ecd49e0e4650 -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_BASENAME=homelab-app-cloud-quorum-queue -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_AST_OK=false -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_AST_ERROR=SyntaxError -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_HELP_RC=64 -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_HELP_SHA=53bc0423b5ea9142a7be1f687f1572975bc52349a1fd28f97d6c0748b2b445e1 -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_HELP_BEGIN - -APP_QUORUM_QUEUE_ERROR=ACTION_INVALID -QUORUM_HOMELAB_APP_CLOUD_QUORUM_QUEUE_HELP_END -PRODUCER_SCRIPT_COUNT=3 -PRODUCER_UNIT_COUNT=4 -PRODUCER_UNIT_1_NAME=homelab-app-cloud-quorum-queue.service -PRODUCER_UNIT_1_SHOW_RC=0 -PRODUCER_UNIT_1_LOADSTATE=loaded -PRODUCER_UNIT_1_ACTIVESTATE=inactive -PRODUCER_UNIT_1_UNITFILESTATE=static -PRODUCER_UNIT_1_RESULT=success -PRODUCER_UNIT_1_EXECMAINSTATUS=0 -PRODUCER_UNIT_1_FRAGMENT_BASENAME=homelab-app-cloud-quorum-queue.service -PRODUCER_UNIT_1_FRAGMENT_SHA=afaa997bd85dafdb29d2cd2b53527996171c21fd5e80ae559f8f2bee0dcbbf1a -PRODUCER_UNIT_1_EXECSTART_SHA=22094bb14d8dc5f7399744e183b096583a9c9625527a2f00981f2ec5cd8e1713 -PRODUCER_UNIT_1_EXEC_COMPONENTS=NONE -PRODUCER_UNIT_1_ENVFILES_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -PRODUCER_UNIT_2_NAME=homelab-app-cloud-quorum-queue.timer -PRODUCER_UNIT_2_SHOW_RC=0 -PRODUCER_UNIT_2_LOADSTATE=loaded -PRODUCER_UNIT_2_ACTIVESTATE=active -PRODUCER_UNIT_2_UNITFILESTATE=enabled -PRODUCER_UNIT_2_RESULT=success -PRODUCER_UNIT_2_EXECMAINSTATUS= -PRODUCER_UNIT_2_FRAGMENT_BASENAME=homelab-app-cloud-quorum-queue.timer -PRODUCER_UNIT_2_FRAGMENT_SHA=af2eedce3df53029b591d31715a3f3e6688ddb997b4823f487e70c339ce88078 -PRODUCER_UNIT_2_EXECSTART_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -PRODUCER_UNIT_2_EXEC_COMPONENTS=NONE -PRODUCER_UNIT_2_ENVFILES_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -PRODUCER_UNIT_3_NAME=skladchik-reports-monitor-supervisor.service -PRODUCER_UNIT_3_SHOW_RC=0 -PRODUCER_UNIT_3_LOADSTATE=loaded -PRODUCER_UNIT_3_ACTIVESTATE=inactive -PRODUCER_UNIT_3_UNITFILESTATE=static -PRODUCER_UNIT_3_RESULT=success -PRODUCER_UNIT_3_EXECMAINSTATUS=0 -PRODUCER_UNIT_3_FRAGMENT_BASENAME=skladchik-reports-monitor-supervisor.service -PRODUCER_UNIT_3_FRAGMENT_SHA=e874fb03573b76181f3eb812c7285848e60705923c172a2f102504a7b9100ef7 -PRODUCER_UNIT_3_EXECSTART_SHA=27a2477643cbfc4f8676fd88ebc5cff23e471bc80f89094941123fa62e3edc5f -PRODUCER_UNIT_3_EXEC_COMPONENTS=skladchik-reports-monitor-supervisor -PRODUCER_UNIT_3_ENVFILES_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -PRODUCER_UNIT_4_NAME=skladchik-reports-monitor-supervisor.timer -PRODUCER_UNIT_4_SHOW_RC=0 -PRODUCER_UNIT_4_LOADSTATE=loaded -PRODUCER_UNIT_4_ACTIVESTATE=active -PRODUCER_UNIT_4_UNITFILESTATE=enabled -PRODUCER_UNIT_4_RESULT=success -PRODUCER_UNIT_4_EXECMAINSTATUS= -PRODUCER_UNIT_4_FRAGMENT_BASENAME=skladchik-reports-monitor-supervisor.timer -PRODUCER_UNIT_4_FRAGMENT_SHA=3c3e38a40b3dfbfaa77d99a1c2bea4b58009130eac7a5197356dead1137a5ef6 -PRODUCER_UNIT_4_EXECSTART_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -PRODUCER_UNIT_4_EXEC_COMPONENTS=NONE -PRODUCER_UNIT_4_ENVFILES_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -APPID_CONFIG_MATCH_COUNT=565 -APPID_CONFIG_1_BASENAME=targets.json -APPID_CONFIG_1_PATH_HINT=//etc/homelab-backup/targets.json -APPID_CONFIG_1_SHA=2f526330152d49461ff66f50adab57d1a195ea5d1b4c292945d523411b8a68a8 -APPID_CONFIG_1_LINE_NOS=115 -APPID_CONFIG_2_BASENAME=targets.json.before-skladchik-core-apps-20261003T205612Z.bak -APPID_CONFIG_2_PATH_HINT=//etc/homelab-backup/targets.json.before-skladchik-core-apps-20261003T205612Z.bak -APPID_CONFIG_2_SHA=6ecf034ca03b52a1e6beceeae81d86a623885462c095d50b133aea4048a4626e -APPID_CONFIG_2_LINE_NOS=115 -APPID_CONFIG_3_BASENAME=task.json -APPID_CONFIG_3_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T192441Z-1666483-preflight/task.json -APPID_CONFIG_3_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb -APPID_CONFIG_3_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_4_BASENAME=task.json -APPID_CONFIG_4_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T192627Z-1668009-prepare/task.json -APPID_CONFIG_4_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb -APPID_CONFIG_4_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_5_BASENAME=task.json -APPID_CONFIG_5_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T192843Z-1681558-dry-run/task.json -APPID_CONFIG_5_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb -APPID_CONFIG_5_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_6_BASENAME=task.json -APPID_CONFIG_6_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T193210Z-1692269-apply/task.json -APPID_CONFIG_6_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb -APPID_CONFIG_6_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_7_BASENAME=task.json -APPID_CONFIG_7_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T193950Z-1722753-preflight/task.json -APPID_CONFIG_7_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb -APPID_CONFIG_7_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_8_BASENAME=task.json -APPID_CONFIG_8_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T193952Z-1722941-prepare/task.json -APPID_CONFIG_8_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb -APPID_CONFIG_8_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_9_BASENAME=task.json -APPID_CONFIG_9_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T193952Z-1723022-dry-run/task.json -APPID_CONFIG_9_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb -APPID_CONFIG_9_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_10_BASENAME=task.json -APPID_CONFIG_10_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T194508Z-1738655-apply/task.json -APPID_CONFIG_10_SHA=0574665bd3a394e6471a28f0803d6a0134d61fd382ffe702f923a3336a845bcb -APPID_CONFIG_10_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_11_BASENAME=task.json -APPID_CONFIG_11_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T200841Z-1818714-preflight/task.json -APPID_CONFIG_11_SHA=8741a7407c135ebe5303056da44186d280b410efbca3714054a990d0f0340aec -APPID_CONFIG_11_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_12_BASENAME=task.json -APPID_CONFIG_12_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T200843Z-1818903-prepare/task.json -APPID_CONFIG_12_SHA=8741a7407c135ebe5303056da44186d280b410efbca3714054a990d0f0340aec -APPID_CONFIG_12_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_13_BASENAME=task.json -APPID_CONFIG_13_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T200843Z-1818980-dry-run/task.json -APPID_CONFIG_13_SHA=8741a7407c135ebe5303056da44186d280b410efbca3714054a990d0f0340aec -APPID_CONFIG_13_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_14_BASENAME=task.json -APPID_CONFIG_14_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T201139Z-1833098-apply/task.json -APPID_CONFIG_14_SHA=8741a7407c135ebe5303056da44186d280b410efbca3714054a990d0f0340aec -APPID_CONFIG_14_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_15_BASENAME=task.json -APPID_CONFIG_15_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T201939Z-1860663-preflight/task.json -APPID_CONFIG_15_SHA=c121d768f5aaf7dc111cf176f890bbd7508650813760b99ed97aa19613c94e68 -APPID_CONFIG_15_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_16_BASENAME=task.json -APPID_CONFIG_16_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T201941Z-1860857-prepare/task.json -APPID_CONFIG_16_SHA=c121d768f5aaf7dc111cf176f890bbd7508650813760b99ed97aa19613c94e68 -APPID_CONFIG_16_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_17_BASENAME=task.json -APPID_CONFIG_17_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T201941Z-1860933-dry-run/task.json -APPID_CONFIG_17_SHA=c121d768f5aaf7dc111cf176f890bbd7508650813760b99ed97aa19613c94e68 -APPID_CONFIG_17_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_18_BASENAME=task.json -APPID_CONFIG_18_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T202241Z-1874939-apply/task.json -APPID_CONFIG_18_SHA=c121d768f5aaf7dc111cf176f890bbd7508650813760b99ed97aa19613c94e68 -APPID_CONFIG_18_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_19_BASENAME=task.json -APPID_CONFIG_19_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T204310Z-1946040-preflight/task.json -APPID_CONFIG_19_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2 -APPID_CONFIG_19_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_20_BASENAME=task.json -APPID_CONFIG_20_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T204311Z-1946265-prepare/task.json -APPID_CONFIG_20_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2 -APPID_CONFIG_20_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_21_BASENAME=task.json -APPID_CONFIG_21_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T204311Z-1946345-dry-run/task.json -APPID_CONFIG_21_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2 -APPID_CONFIG_21_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_22_BASENAME=task.json -APPID_CONFIG_22_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T204533Z-1956057-apply/task.json -APPID_CONFIG_22_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2 -APPID_CONFIG_22_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_23_BASENAME=task.json -APPID_CONFIG_23_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T205721Z-1989628-preflight/task.json -APPID_CONFIG_23_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2 -APPID_CONFIG_23_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_24_BASENAME=task.json -APPID_CONFIG_24_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T205722Z-1989815-prepare/task.json -APPID_CONFIG_24_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2 -APPID_CONFIG_24_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_25_BASENAME=task.json -APPID_CONFIG_25_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T205722Z-1989891-dry-run/task.json -APPID_CONFIG_25_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2 -APPID_CONFIG_25_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_26_BASENAME=stderr.log -APPID_CONFIG_26_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T210034Z-2011730-apply/stderr.log -APPID_CONFIG_26_SHA=bbc5b7b614a73219147a06614942e2c67176375af10bcb85aeac5565cb8c2532 -APPID_CONFIG_26_LINE_NOS=7,8 -APPID_CONFIG_27_BASENAME=stdout.log -APPID_CONFIG_27_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T210034Z-2011730-apply/stdout.log -APPID_CONFIG_27_SHA=cdf49d288d7b019b1a5f5099fe8b3e4f5ed1432294051a3c2020a4369c4afd41 -APPID_CONFIG_27_LINE_NOS=24,31,32,35 -APPID_CONFIG_28_BASENAME=task.json -APPID_CONFIG_28_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T210034Z-2011730-apply/task.json -APPID_CONFIG_28_SHA=51ff18905717a2c1871cb25b56f4959d87d7ee798296f720b263332af8785bf2 -APPID_CONFIG_28_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_29_BASENAME=task.json -APPID_CONFIG_29_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T211239Z-2049968-preflight/task.json -APPID_CONFIG_29_SHA=4d850b025c6a9ad347015321775f9d0466149fb9d5a70212f91b6535adc3c0e3 -APPID_CONFIG_29_LINE_NOS=44,55,56,81,86 -APPID_CONFIG_30_BASENAME=task.json -APPID_CONFIG_30_PATH_HINT=lib/homelab-admin/runs/backup-app-cloud-quorum-cutover-v1/20260808T213313Z-2127686-preflight/task.json -APPID_CONFIG_30_SHA=d98bdf83ab6a9fda0d864e3ccac4a0d01e7813fec9f1173a6d4d5e8712c8e238 -APPID_CONFIG_30_LINE_NOS=44,55,56,81,86 -GEN_JOURNAL_MATCH_COUNT=3 -GEN_JOURNAL_1_UNIT=skladchik-reports-monitor-supervisor.service -GEN_JOURNAL_1_IDENT=skladchik-reports-monitor-supervisor -GEN_JOURNAL_1_EXE_BASENAME=python3.13 -GEN_JOURNAL_1_PID=932988 -GEN_JOURNAL_1_MESSAGE_SHA=93a0f7b08cf701cc4f77f2d02c659932db4ca849640cbbe55327693c1e4365eb -GEN_JOURNAL_1_FLAGS=generation,backup,sealed -GEN_JOURNAL_2_UNIT=homelab-backup-audit.service -GEN_JOURNAL_2_IDENT=homelab-backup-audit -GEN_JOURNAL_2_EXE_BASENAME=python3.13 -GEN_JOURNAL_2_PID=966882 -GEN_JOURNAL_2_MESSAGE_SHA=c8c9e905543f63dbee767d26e1c1824c99e7a23094405dba984b18361a36527f -GEN_JOURNAL_2_FLAGS=generation,fresh,skip_fresh -GEN_JOURNAL_3_UNIT=skladchik-reports-monitor-supervisor.service -GEN_JOURNAL_3_IDENT=skladchik-reports-monitor-supervisor -GEN_JOURNAL_3_EXE_BASENAME=python3.13 -GEN_JOURNAL_3_PID=968339 -GEN_JOURNAL_3_MESSAGE_SHA=93a0f7b08cf701cc4f77f2d02c659932db4ca849640cbbe55327693c1e4365eb -GEN_JOURNAL_3_FLAGS=generation,backup,sealed -QUORUM_SCRIPT_READY=false -QUORUM_UNIT_READY=true -APPID_CONFIG_READY=true -BACKUP_PRODUCER_TOPOLOGY_READY=false -MAIL_SENT_BY_COMMAND=false +INGRESS_HOSTKEY_SELF_BOUND=true +VM150_INVENTORY_PRESENT=true +VM150_RUNNING=true +VM150_EXPECTED_NODE=true +VM130_INVENTORY_PRESENT=true +VM130_RUNNING=true +VM130_EXPECTED_NODE=true +VM150_ONBOOT=true +VM150_AGENT_CONFIG_LINE_PRESENT=true +VM150_QGA_PING=true +PVE_BACKUP_JOBS_QUERY_RC=0 +PVE_BACKUP_JOB_COVERAGE_COUNT=0 +PVE_BACKUP_JOB_ENABLED_COVERAGE_COUNT=0 +PVE_BACKUP_STORAGE_QUERY_RC=0 +PVE_BACKUP_STORAGE_COUNT=1 +PVE_BACKUP_STORAGE_TYPE_COUNT=1 +PVE_VM150_BACKUP_OBJECT_COUNT=0 +PVE_VM150_BACKUP_STORAGE_WITH_OBJECT_COUNT=0 +PVE_VM150_NEWEST_BACKUP_AGE_HOURS=-1 +PVE_VM150_BACKUP_WITHIN_48H=false +PVE_VM150_BACKUP_WITHIN_7D=false +HOMELAB_BACKUP_V2_TIMER_ACTIVE=active +HOMELAB_BACKUP_V2_TIMER_ENABLED=enabled +HOMELAB_BACKUP_V2_TIMER_RESULT=success +HOMELAB_BACKUP_V2_TIMER_EXEC_MAIN_STATUS= +HOMELAB_BACKUP_V2_SERVICE_ACTIVE=activating +HOMELAB_BACKUP_V2_SERVICE_ENABLED=static +HOMELAB_BACKUP_V2_SERVICE_RESULT=success +HOMELAB_BACKUP_V2_SERVICE_EXEC_MAIN_STATUS=0 +HOMELAB_BACKUP_AUDIT_TIMER_ACTIVE=active +HOMELAB_BACKUP_AUDIT_TIMER_ENABLED=enabled +HOMELAB_BACKUP_AUDIT_TIMER_RESULT=success +HOMELAB_BACKUP_AUDIT_TIMER_EXEC_MAIN_STATUS= +HOMELAB_BACKUP_AUDIT_SERVICE_ACTIVE=inactive +HOMELAB_BACKUP_AUDIT_SERVICE_ENABLED=static +HOMELAB_BACKUP_AUDIT_SERVICE_RESULT=success +HOMELAB_BACKUP_AUDIT_SERVICE_EXEC_MAIN_STATUS=0 +BACKUP_V2_14D_VM150_REF_COUNT=40 +BACKUP_V2_14D_VM150_SUCCESS_COUNT=40 +BACKUP_V2_14D_VM150_FAIL_COUNT=0 +BACKUP_AUDIT_30D_VM150_REF_COUNT=2379 +BACKUP_AUDIT_30D_VM150_RESTORE_REF_COUNT=764 +BACKUP_AUDIT_30D_VM150_PASS_REF_COUNT=763 +BACKUP_SOURCE_FILE_COUNT=135 +BACKUP_SOURCE_VM150_EXPLICIT_REF_FILE_COUNT=17 +BACKUP_SOURCE_DYNAMIC_VM_DISCOVERY_FILE_COUNT=46 +SOURCE_GIT_REPO_SCAN_COUNT=64 +SOURCE_RECON_EXACT_SHA_MATCH_COUNT=0 +SOURCE_RECON_CORRECT_LOGIC_TRACKED_COUNT=0 +SOURCE_DNS_ALL3_TRACKED_COUNT=343 +SOURCE_DNS_ALL3_CURRENT_TARGET_TRACKED_COUNT=294 +MONITOR_SOURCE_FILE_COUNT=86 +MONITOR_CHAT_DOMAIN_REF_FILE_COUNT=0 +MONITOR_ALL3_DOMAIN_REF_FILE_COUNT=0 +MONITOR_XMPP_5222_REF_FILE_COUNT=0 +MONITOR_XMPP_5269_REF_FILE_COUNT=0 +MONITOR_TURN_3479_REF_FILE_COUNT=0 +MONITOR_TURN_STUN_REF_FILE_COUNT=0 +MONITOR_CERT_EXPIRY_REF_FILE_COUNT=2 +HOMELAB_EXTERNAL_PROBE_VPS_HEALTH_TIMER_ACTIVE=active +HOMELAB_EXTERNAL_PROBE_VPS_HEALTH_TIMER_ENABLED=enabled +HOMELAB_KUMA_MONITOR_POLICY_TIMER_ACTIVE=active +HOMELAB_KUMA_MONITOR_POLICY_TIMER_ENABLED=enabled +HOMELAB_OVERALL_HEALTH_TIMER_ACTIVE=active +HOMELAB_OVERALL_HEALTH_TIMER_ENABLED=enabled +HOMELAB_ALERTING_HEALTH_TIMER_ACTIVE=active +HOMELAB_ALERTING_HEALTH_TIMER_ENABLED=enabled +PUBLIC_DNS_OK_COUNT=3 +PUBLIC_HTTPS_OK_COUNT=3 +PUBLIC_STUN_3479_PASS=true +PUBLIC_STUN_3479_CLASS=BINDING_SUCCESS +VM150_QGA_EXEC_INIT_RC=0 +VM150_QGA_POLL_RC=0 +VM150_GUEST_EXITCODE=0 +VM150_GUEST_OUTPUT_MARKER=true +SNIKKET_OPS_GAPS_GUEST=V1 +MODE=read-only +NO_DNS_MUTATION=true +NO_VM_MUTATION=true +NO_CONTAINER_RESTART=true +NO_SERVICE_START=true +NO_SOURCE_MUTATION=true +GUEST_HOSTNAME_SNIKKET=true +DOCKER_OK=true +CONTAINER_SNIKKET_PRESENT=true +CONTAINER_SNIKKET_RUNNING=true +CONTAINER_SNIKKET_IMAGE_ID=c392b78a2bd3447d314054caa75b3556cf4fc3579288599e2d0a15dbcd690972 +CONTAINER_SNIKKET_IMAGE_CREATED=2026-06-12T14:41:53. +PROSODY_ABOUT_PRESENT=true +PROSODY_ABOUT_SHA256=df326196b07e19c252252fd9213b8920957e8ff733d5b7a548ef1b004586ff38 +SNIKKET_UPDATE_CHECK_EFFECTIVE=true +SNIKKET_RETENTION_EXPLICIT=false +SNIKKET_UPLOAD_LIMIT_EXPLICIT=false +CERT_DAYS_REMAINING=-1 +ROOT_FS_USED_PERCENT=4 +GUEST_AUDIT_DONE=true +UPSTREAM_COMPOSE_FETCH_RC=0 +UPSTREAM_COMPOSE_PRESENT=true +UPSTREAM_COMPOSE_SHA256=5773abc3efc852e3d4082de5947b7e93acdf3708e416272f6edd7c3f00de69b8 +UPSTREAM_SNIKKET_IMAGE_LINE_COUNT=4 +OPS_GAPS_RECONCILE_COMPLETE=true +DECISION=ANALYZE_EXACT_99577_EVIDENCE +NEXT_GATE=APPLY_ONLY_PROVEN_OPERATIONAL_GAPS +TASK_RESULT=SNIKKET_OPS_GAPS_RECONCILE CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null MUTATION_OUTCOME=NO_MUTATION -DECISION=HOLD_BACKUP_PRODUCER_RCA -NEXT_GATE=BACKUP_PRODUCER_RECONCILE -TASK_RESULT=SKLADCHIK_DURABILITY_BACKUP_PRODUCER_RCA OUTPUT_END CHAT_OUTPUT_END