in app/agent/collector.scala [181:223]
def update(label: Label): Unit = {
sourceStatusAgent.alter { previousMap =>
val key = (label.resourceType, label.origin)
val previous = previousMap.get(key)
val next = label match {
case good if !good.isError => SourceStatus(good)
case bad =>
SourceStatus(previous.map(_.state).getOrElse(bad), Some(bad))
}
previousMap + (key -> next)
} onComplete {
case Success(newMap) =>
if (!initialisedResources.getOrElse(label.resourceType, false)) {
val timeSpent = prismRunTimeStopWatch.elapsed
val uninitialisedSources =
newMap.values.count(_.state.status != "success")
val marker = Markers.appendEntries(
Map(
"totalSourcesToCrawl" -> newMap.size,
"resource" -> label.resourceType.name,
"sourcesYetToCrawl" -> uninitialisedSources,
"duration" -> timeSpent,
"durationType" -> "healthcheck",
"percentageCrawled" -> math.floor(
(newMap.size - uninitialisedSources) / newMap.size.toFloat
)
).asJava
)
if (uninitialisedSources == 0) {
initialisedResources += (label.resourceType -> true)
log.info(
s"Healthcheck passed successfully for ${label.resourceType.name} after ${timeSpent}ms"
)(marker)
} else {
log.info(
s"$uninitialisedSources out of ${newMap.size} still not healthy after ${timeSpent}ms"
)(marker)
}
}
case Failure(_) =>
log.warn(s"failed to update resource ${label.resourceType.name}")
}
}