From 6b7a3ba36ed2c4662a3fb0411544fca1ad8ed172 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Fri, 16 Jan 2026 18:36:24 -0600 Subject: [PATCH] Fix binary protobuf encoding for JSON serializer - Use base64-encoded binary in JSON payload instead of {:binary, data} tuples - V1.JSONSerializer cannot encode tuples, needs plain JSON objects - Agent already sends/expects base64-encoded binary in 'binary' key --- lib/towerops_web/channels/agent_channel.ex | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/towerops_web/channels/agent_channel.ex b/lib/towerops_web/channels/agent_channel.ex index 3a9d6c38..ef6ad0df 100644 --- a/lib/towerops_web/channels/agent_channel.ex +++ b/lib/towerops_web/channels/agent_channel.ex @@ -65,19 +65,21 @@ defmodule ToweropsWeb.AgentChannel do job_list = %AgentJobList{jobs: jobs} binary = AgentJobList.encode(job_list) - push(socket, "jobs", {:binary, binary}) + push(socket, "jobs", %{binary: Base.encode64(binary)}) {:noreply, socket} end @impl true - def handle_in("result", {:binary, binary}, socket) do + def handle_in("result", %{"binary" => binary_b64}, socket) do + binary = Base.decode64!(binary_b64) result = SnmpResult.decode(binary) process_snmp_result(socket.assigns.organization_id, result) {:noreply, socket} end @impl true - def handle_in("heartbeat", {:binary, binary}, socket) do + def handle_in("heartbeat", %{"binary" => binary_b64}, socket) do + binary = Base.decode64!(binary_b64) heartbeat = AgentHeartbeat.decode(binary) metadata = %{ @@ -91,7 +93,8 @@ defmodule ToweropsWeb.AgentChannel do end @impl true - def handle_in("error", {:binary, binary}, socket) do + def handle_in("error", %{"binary" => binary_b64}, socket) do + binary = Base.decode64!(binary_b64) error = AgentError.decode(binary) Logger.error("Agent job error",