Currently, if Kinesis passes invalid JSON - responders naively trying to parse and then printing stacktrace into stdout:
NOTIFICATION: [Received Kinesis Record from anton-smoke-test].
[ERROR] [08/14/2017 15:28:26.283] [sauna-akka.actor.default-dispatcher-2] [akka://sauna/user/$a/me.chuwy.MyHipchatResponder] Unrecognized token 'foo': was expecting 'null', 'true', 'false' or NaN
at [Source: foo; line: 1, column: 7]
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'foo': was expecting 'null', 'true', 'false' or NaN
at [Source: foo; line: 1, column: 7]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1581)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:533)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2462)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2439)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._matchToken(ReaderBasedJsonParser.java:2291)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._matchFalse(ReaderBasedJsonParser.java:2258)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:661)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3776)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3694)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2005)
at play.api.libs.json.jackson.JacksonJson$.parseJsValue(JacksonJson.scala:226)
at play.api.libs.json.Json$.parse(Json.scala:21)
at com.snowplowanalytics.sauna.responders.hipchat.SendRoomNotificationResponder.extractEvent(SendRoomNotificationResponder.scala:47)
at com.snowplowanalytics.sauna.responders.Responder$$anonfun$receive$1.applyOrElse(Responder.scala:50)
at akka.actor.Actor$class.aroundReceive(Actor.scala:484)
at com.snowplowanalytics.sauna.responders.hipchat.SendRoomNotificationResponder.aroundReceive(SendRoomNotificationResponder.scala:43)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
at akka.actor.ActorCell.invoke(ActorCell.scala:495)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
at akka.dispatch.Mailbox.run(Mailbox.scala:224)
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Instead, this should be handled much earlier and "Invalid command" message should be logged.
Currently, if Kinesis passes invalid JSON - responders naively trying to parse and then printing stacktrace into stdout:
Instead, this should be handled much earlier and "Invalid command" message should be logged.