more fixing of Kafkatorio packets...

This commit is contained in:
Adam 2022-10-18 23:22:26 +02:00
parent e0574ea8eb
commit f99208b5b2
2 changed files with 29 additions and 14 deletions

View file

@ -26,8 +26,7 @@ import org.apache.kafka.streams.StreamsBuilder
import org.apache.kafka.streams.kstream.KStream import org.apache.kafka.streams.kstream.KStream
private const val PACKET_TAG = "KafkatorioPacket:::" private const val ENCODED_TAG = "encoded:"
private const val PACKET_ENCODED_TAG = "${PACKET_TAG}encoded:"
fun factorioServerPacketStream( fun factorioServerPacketStream(
@ -43,7 +42,7 @@ fun factorioServerPacketStream(
) )
).mapValues("decode-packets") { _: FactorioServerId, value: String? -> ).mapValues("decode-packets") { _: FactorioServerId, value: String? ->
val packet = decodeKafkatorioPacket(value) val packet = decodeKafkatorioPacket(value?.trim())
if (packet.data is KafkatorioPacketDataError) { if (packet.data is KafkatorioPacketDataError) {
println("error parsing $TOPIC_SRC_SERVER_LOG message: $packet") println("error parsing $TOPIC_SRC_SERVER_LOG message: $packet")
@ -76,17 +75,13 @@ private fun decodeKafkatorioPacket(value: String?): KafkatorioPacket = try {
value.isNullOrBlank() -> value.isNullOrBlank() ->
createErrorPacket(message = "null/blank message", rawValue = value) createErrorPacket(message = "null/blank message", rawValue = value)
value.substringAfter(PACKET_TAG).isBlank() ->
createErrorPacket(message = "missing '$PACKET_TAG'", rawValue = value)
else -> { else -> {
val packetJson = if (PACKET_ENCODED_TAG in value) { val packetJson = if (value.startsWith(ENCODED_TAG)) {
val encodedValue = value.substringAfter(PACKET_ENCODED_TAG) val encodedValue = value.substringAfter(ENCODED_TAG)
decodeFactorioEncodedString(encodedValue) decodeFactorioEncodedString(encodedValue)
} else { } else {
value.substringAfter(PACKET_TAG) value
} }
jsonMapper.decodeFromString(KafkatorioPacket.serializer(), packetJson) jsonMapper.decodeFromString(KafkatorioPacket.serializer(), packetJson)
} }
} }

View file

@ -101,9 +101,26 @@ class KafkatorioPacketKafkaProducer(
serverId: FactorioServerId, serverId: FactorioServerId,
syslog: SyslogMsg, syslog: SyslogMsg,
) { ) {
val kafkatorioMessage = syslog.message?.substringAfter(":::") val syslogMessage = syslog.message?.trim()
val record = ProducerRecord<FactorioServerId, String>( if (syslogMessage.isNullOrBlank()) {
// ignore blank messages
return
}
if (!syslogMessage.startsWith(KAFKATORIO_MESSAGE_TAG)) {
// ignore non-Kafkatorio message
return
}
val kafkatorioMessage = syslogMessage.substringAfter(KAFKATORIO_MESSAGE_TAG)
if (kafkatorioMessage.isBlank()) {
produceDlqMessage(syslog, "error - Kafkatorio message was blank $syslogMessage")
return
}
val record = ProducerRecord(
TOPIC_SRC_SERVER_LOG, TOPIC_SRC_SERVER_LOG,
serverId, serverId,
kafkatorioMessage, kafkatorioMessage,
@ -136,6 +153,9 @@ class KafkatorioPacketKafkaProducer(
companion object { companion object {
private const val KAFKATORIO_MESSAGE_TAG = "KafkatorioPacket:::"
private fun log(msg: String) = println("[KafkatorioPacketKafkaProducer] $msg") private fun log(msg: String) = println("[KafkatorioPacketKafkaProducer] $msg")