#!/usr/bin/env bash # _lib.sh — gedeelde helpers; source vanuit andere scripts : "${AGENT_STATE_DIR:=/var/run/agent}" : "${AGENT_LOG_DIR:=/var/log/agent}" log() { printf '[%s] [%s] %s\n' \ "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ "${0##*/}" \ "$*" >&2 } # Schrijf JSON-state atomisch (write tmp + rename). # Argument: JSON-string. Voegt automatisch $.heartbeatAt = now toe. write_state() { local payload="$1" local tmp="${AGENT_STATE_DIR}/state.json.tmp.$$" local final="${AGENT_STATE_DIR}/state.json" # Merge $payload met heartbeatAt; behoud andere bestaande keys door # de bestaande state in te lezen en payload daarover te leggen. local existing='{}' if [[ -f "$final" ]]; then existing=$(cat "$final" 2>/dev/null || echo '{}') fi jq -n \ --argjson existing "$existing" \ --argjson payload "$payload" \ --arg now "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ '$existing + $payload + {heartbeatAt: $now}' \ > "$tmp" mv "$tmp" "$final" }