in s2rest_play/app/org/apache/s2graph/rest/play/controllers/CounterController.scala [533:588]
def deleteRankingCount(service: String, action: String) = Action.async { implicit request =>
lazy val intervalUnits = getQueryString("interval", getQueryString("step", "t")).split(',').toSeq
.map(IntervalUnit.withName)
lazy val limit = getQueryString("limit", "1").toInt
// find dimension
lazy val dimensionMap = request.queryString.filterKeys { k => k.charAt(0) == ':' }.map { case (k, v) =>
(k.substring(1), v.mkString(",").split(',').toList)
}
val dimensions = {
for {
values <- CartesianProduct(dimensionMap.values.toList).toSeq
} yield {
dimensionMap.keys.zip(values).toMap
}
}
Future {
counterModel.findByServiceAction(service, action) match {
case Some(policy) =>
val tqs = TimedQualifier.getQualifiersToLimit(intervalUnits, limit)
val keys = {
for {
dimension <- dimensions
tq <- tqs
} yield {
RankingKey(policy.id, policy.version, ExactQualifier(tq, dimension))
}
}
for {
key <- keys
} {
rankingCounter(policy.version).delete(key)
}
Ok(JsObject(
Seq(
("msg", Json.toJson(s"delete ranking in $service.$action")),
("items", Json.toJson({
for {
key <- keys
} yield {
s"${key.eq.tq.q}.${key.eq.tq.ts}.${key.eq.dimension}"
}
}))
)
))
case None =>
NotFound(Json.toJson(
Map("msg" -> s"$service.$action not found")
))
}
}
}