def deleteRankingCount()

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")
          ))
      }
    }
  }