|
|
|
@@ -16,7 +16,7 @@ import ( |
|
|
|
// HandleMQTTMessage processes an MQTT message: parses JSON array of RawReading or CSV. |
|
|
|
// For JSON, converts each reading to BeaconAdvertisement and writes to the writer if MAC is in lookup. |
|
|
|
// Hostname is derived from topic (e.g. "publish_out/gateway1" -> "gateway1"). Safe if topic has no "/". |
|
|
|
func HandleMQTTMessage(topic string, payload []byte, appState *appcontext.AppState, writer *kafka.Writer) { |
|
|
|
func HandleMQTTMessage(topic string, payload []byte, appState *appcontext.AppState, writer *kafka.Writer, ctx context.Context) { |
|
|
|
parts := strings.SplitN(topic, "/", 2) |
|
|
|
hostname := "" |
|
|
|
if len(parts) >= 2 { |
|
|
|
@@ -51,7 +51,7 @@ func HandleMQTTMessage(topic string, payload []byte, appState *appcontext.AppSta |
|
|
|
slog.Error("marshaling beacon advertisement", "err", err) |
|
|
|
break |
|
|
|
} |
|
|
|
if err := kafkaclient.Write(context.Background(), writer, kafka.Message{Value: encoded}); err != nil { |
|
|
|
if err := kafkaclient.Write(ctx, writer, kafka.Message{Value: encoded}); err != nil { |
|
|
|
slog.Error("writing to Kafka", "err", err) |
|
|
|
time.Sleep(1 * time.Second) |
|
|
|
break |
|
|
|
|