in app/services/MissingFilesReceiver.scala [48:104]
def makeConsumer(channel:Channel): DefaultConsumer = {
new DefaultConsumer(channel) {
override def handleShutdownSignal(consumerTag: String, sig: ShutdownSignalException): Unit = super.handleShutdownSignal(consumerTag, sig)
override def handleCancel(consumerTag: String): Unit = super.handleCancel(consumerTag)
override def handleCancelOk(consumerTag: String): Unit = super.handleCancelOk(consumerTag)
override def handleConsumeOk(consumerTag: String): Unit = super.handleConsumeOk(consumerTag)
override def handleDelivery(consumerTag: String, envelope: Envelope, properties: AMQP.BasicProperties, body: Array[Byte]): Unit = {
loadEvent(body) match {
case Left(err)=>
logger.error(s"Received invalid message with key ${envelope.getRoutingKey} from exchange ${envelope.getExchange}: ${err.getMessage}", err)
case Right(messageData)=>
handleEvent(messageData).map({
case true=>
channel.basicAck(envelope.getDeliveryTag, false)
case false=>
logger.warn("Could not handle message, leaving it on-queue")
channel.basicNack(envelope.getDeliveryTag, false, true)
})
}
}
def handleEvent(messageData: MissingFile): Future[Boolean] = {
if (messageData.project_id.toInt.isValidInt) {
if (messageData.file_path.startsWith("/")) {
if (messageData.file_path.startsWith("/Volumes/Multimedia2/Media Production/Assets/Branding")) {
logger.debug(s"'Missing file' at path: ${messageData.file_path} is branding. Ignoring.")
} else {
logger.debug(s"Missing file at path: ${messageData.file_path} is used by project ${messageData.project_id}")
missingAssetFileEntryDAO.entryFor(messageData.file_path, messageData.project_id.toInt).map({
case Success(filesList) =>
if (filesList.isEmpty) {
//No file entries exist already, create one and proceed
logger.debug(s"Attempting to create record for missing file used by project ${messageData.project_id} at path ${messageData.file_path}")
missingAssetFileEntryDAO.save(MissingAssetFileEntry(None, messageData.project_id.toInt, messageData.file_path))
} else {
logger.debug(s"Missing file used by project ${messageData.project_id} at path ${messageData.file_path} already logged in the database.")
}
case Failure(error) =>
logger.debug(s"Could not load data on the missing file used by project ${messageData.project_id} at path ${messageData.file_path}. Error was $error")
})
}
} else {
logger.debug(s"Recorded 'missing file' at path: ${messageData.file_path} does not with a /. Ignoring.")
}
Future(true)
} else Future(false)
}
override def handleRecoverOk(consumerTag: String): Unit = super.handleRecoverOk(consumerTag)
}
}