DERIOX GUARD M8.9

Gateway Agent Heartbeat CLI Stub

CLI pentru heartbeat metadata-only al mini PC gateway-ului. Dry-run implicit; heartbeat real doar cu --send-heartbeat.

Score100
Pages1
Commands7
Downloads1
Dry-run default1
Camera actions0
M8.9 trimite doar heartbeat metadata: gateway UUID, OS/version, IP local, uptime, queue count și camera count numeric. Nu trimite parole, stream, media sau comenzi cameră.
DashboardCommandsScript PreviewAuditDownload CLI .shAPI StatusHeartbeat CLI Manifest APIM8.8 Pairing CLIGuard Navigation

M8.9 Gateway Agent Heartbeat CLI Stub

M8.9 provides the first heartbeat CLI stub for mini PC gateways. Dry-run is default. Real heartbeat is opt-in via --send-heartbeat and sends metadata only. No secrets, camera passwords, stream links, media, billing or camera actions are included.

cli=1 · real_heartbeat_explicit=1 · dry_run=1 · auto_install=0 · autostart=0 · plain_token=0 · camera_cloud=0 · metadata=1

Heartbeat CLI script preview

#!/usr/bin/env bash
set -euo pipefail

API_BASE_URL="${DERIOX_GUARD_API_BASE_URL:-https://guard.deriox.ro}"
HEARTBEAT_ENDPOINT="${API_BASE_URL}/api/gateway/mini-pc/heartbeat"
POLICY_ENDPOINT="${API_BASE_URL}/api/gateway/mini-pc/heartbeat-policy"
VERSION="m8.9-heartbeat-cli-stub"

MODE="dry-run"
GATEWAY_UUID="${DERIOX_GUARD_GATEWAY_UUID:-}"
GATEWAY_NAME="${DERIOX_GUARD_GATEWAY_NAME:-Deriox Guard Mini PC}"
CAMERA_COUNT="0"
QUEUE_COUNT="0"

while [ $# -gt 0 ]; do
  case "$1" in
    --send-heartbeat) MODE="send-heartbeat"; shift ;;
    --show-payload) MODE="show-payload"; shift ;;
    --policy) MODE="policy"; shift ;;
    --gateway-uuid) GATEWAY_UUID="${2:-}"; shift 2 ;;
    --gateway-name) GATEWAY_NAME="${2:-}"; shift 2 ;;
    --camera-count) CAMERA_COUNT="${2:-0}"; shift 2 ;;
    --queue-count) QUEUE_COUNT="${2:-0}"; shift 2 ;;
    --api-base-url) API_BASE_URL="${2:-}"; HEARTBEAT_ENDPOINT="${API_BASE_URL}/api/gateway/mini-pc/heartbeat"; POLICY_ENDPOINT="${API_BASE_URL}/api/gateway/mini-pc/heartbeat-policy"; shift 2 ;;
    --help|-h)
      echo "Deriox Guard Heartbeat CLI - ${VERSION}"
      echo ""
      echo "Dry-run:"
      echo "  ./deriox-guard-heartbeat-cli.sh --gateway-uuid \"GW-...\""
      echo ""
      echo "Payload preview:"
      echo "  ./deriox-guard-heartbeat-cli.sh --show-payload --gateway-uuid \"GW-...\""
      echo ""
      echo "Trimite heartbeat metadata-only:"
      echo "  ./deriox-guard-heartbeat-cli.sh --send-heartbeat --gateway-uuid \"GW-...\""
      echo ""
      echo "Heartbeat policy:"
      echo "  ./deriox-guard-heartbeat-cli.sh --policy"
      exit 0
      ;;
    *)
      echo "Argument necunoscut: $1"
      echo "Rulează cu --help"
      exit 1
      ;;
  esac
done

detect_os() {
  if command -v lsb_release >/dev/null 2>&1; then
    lsb_release -ds 2>/dev/null | tr -d '"'
  elif [ -f /etc/os-release ]; then
    . /etc/os-release
    echo "${PRETTY_NAME:-Linux}"
  else
    echo "Linux"
  fi
}

uptime_seconds() {
  if [ -r /proc/uptime ]; then
    awk '{print int($1)}' /proc/uptime
  else
    echo 0
  fi
}

LOCAL_IP="$(hostname -I 2>/dev/null | awk '{print $1}' || true)"
OS_LABEL="$(detect_os)"
UPTIME="$(uptime_seconds)"

payload() {
  cat <<JSON
{
  "gateway_uuid": "${GATEWAY_UUID}",
  "gateway_name": "${GATEWAY_NAME}",
  "software_version": "${VERSION}",
  "os_label": "${OS_LABEL}",
  "local_ip_hint": "${LOCAL_IP}",
  "camera_count_reported": ${CAMERA_COUNT},
  "queue_count": ${QUEUE_COUNT},
  "uptime_seconds": ${UPTIME},
  "security": {
    "outbound_only": true,
    "metadata_only": true,
    "camera_password_included": false,
    "stream_link_included": false,
    "media_included": false,
    "billing_enabled": false,
    "camera_actions_enabled": false
  }
}
JSON
}

echo "=================================================="
echo "Deriox Guard Heartbeat CLI - ${VERSION}"
echo "=================================================="
echo "Mode: ${MODE}"
echo "API: ${API_BASE_URL}"
echo "Gateway UUID: ${GATEWAY_UUID:-necompletat}"
echo "OS: ${OS_LABEL}"
echo "Security: metadata-only, no camera passwords, no streams, no media, no billing"
echo ""

case "$MODE" in
  dry-run)
    echo "Dry-run. Nu trimit nimic către server."
    echo "Pentru payload: --show-payload"
    echo "Pentru heartbeat real metadata-only: --send-heartbeat --gateway-uuid \"GW-...\""
    ;;
  show-payload)
    if [ -z "$GATEWAY_UUID" ]; then
      echo "EROARE: --gateway-uuid este necesar pentru payload."
      exit 1
    fi
    payload
    ;;
  policy)
    if ! command -v curl >/dev/null 2>&1; then
      echo "EROARE: curl nu este instalat."
      exit 1
    fi
    curl -fsSL "$POLICY_ENDPOINT"
    echo ""
    ;;
  send-heartbeat)
    if [ -z "$GATEWAY_UUID" ]; then
      echo "EROARE: --gateway-uuid este necesar pentru heartbeat."
      exit 1
    fi
    if ! command -v curl >/dev/null 2>&1; then
      echo "EROARE: curl nu este instalat."
      exit 1
    fi
    echo "Trimit heartbeat metadata-only..."
    payload | curl -fsSL -X POST "$HEARTBEAT_ENDPOINT" -H "Content-Type: application/json" --data-binary @-
    echo ""
    ;;
esac