in usage/app/lib/CrierEventProcessor.scala [119:178]
def getContentItem(content: Content, time: DateTime): ContentContainer
private def processEvent(event: Event): Unit = {
implicit val logMarker: LogMarker = MarkerMap(
"payloadId" -> event.payloadId,
"requestId" -> UUID.randomUUID().toString
)
Try {
val dateTime: DateTime = new DateTime(event.dateTime)
event.eventType match {
case EventType.Update =>
event.payload match {
case Some(content: EventPayload.Content) =>
getContentItem(content.content, dateTime)
.emitAsUsageGroup(CrierUsageStream.observable, usageGroupOps)
case _ =>
logger.warn(logMarker, s"Received crier update for ${event.payloadId} without payload")
}
case EventType.Delete =>
//TODO: how do we deal with a piece of content that has been deleted?
case EventType.RetrievableUpdate =>
event.payload match {
case Some(retrievableContent: EventPayload.RetrievableContent) =>
val capiUrl = retrievableContent.retrievableContent.capiUrl
val query = contentApiClient.usageQuery(retrievableContent.retrievableContent.id)
logger.info(logMarker, s"retrieving content event at $capiUrl parsed to id ${query.toString}")
contentApiClient.getResponse(query).map(response => {
response.content match {
case Some(content) =>
getContentItem(content, dateTime)
.emitAsUsageGroup(CrierUsageStream.observable, usageGroupOps)
case _ =>
logger.debug(
logMarker,
s"Received retrievable update for ${retrievableContent.retrievableContent.id} without content"
)
}
}).recover {
case e: ContentApiError =>
logger.error(logMarker, s"CAPI error when fetching content update for ${event.payloadId}: ${e.httpStatus} ${e.httpMessage} ${e.errorResponse}", e)
case e =>
logger.error(logMarker, s"Failed to fetch or process content update for ${event.payloadId}", e)
}
case _ => logger.warn(logMarker, s"Received crier update for ${event.payloadId} without payload")
}
case _ => logger.warn(logMarker, s"Unsupported event type $EventType")
}
}.recover {
case e => logger.error(logMarker, s"Failed to process event ${event.payloadId}", e)
}
}