in s2rest_play/app/org/apache/s2graph/rest/play/controllers/CounterController.scala [183:246]
def updateAction(service: String, action: String) = Action(s2parse.json) { request =>
counterModel.findByServiceAction(service, action, useCache = false) match {
case Some(oldPolicy) =>
val body = request.body
val autoComb = (body \ "autoComb").asOpt[Boolean].getOrElse(oldPolicy.autoComb)
val dimension = (body \ "dimension").asOpt[String].getOrElse(oldPolicy.dimension)
val useProfile = (body \ "useProfile").asOpt[Boolean].getOrElse(oldPolicy.useProfile)
val bucketImpId = (body \ "bucketImpId").asOpt[String] match {
case Some(s) => Some(s)
case None => oldPolicy.bucketImpId
}
val useRank = (body \ "useRank").asOpt[Boolean].getOrElse(oldPolicy.useRank)
val intervalUnit = (body \ "intervalUnit").asOpt[String] match {
case Some(s) => Some(s)
case None => oldPolicy.intervalUnit
}
val rateAction = (body \ "rateAction").asOpt[Map[String, String]]
val rateBase = (body \ "rateBase").asOpt[Map[String, String]]
val rateThreshold = (body \ "rateThreshold").asOpt[Int] match {
case Some(i) => Some(i)
case None => oldPolicy.rateThreshold
}
val rateActionId = {
for {
actionMap <- rateAction
service <- actionMap.get("service")
action <- actionMap.get("action")
policy <- counterModel.findByServiceAction(service, action, useCache = false)
} yield {
policy.id
}
} match {
case Some(i) => Some(i)
case None => oldPolicy.rateActionId
}
val rateBaseId = {
for {
actionMap <- rateBase
service <- actionMap.get("service")
action <- actionMap.get("action")
policy <- counterModel.findByServiceAction(service, action, useCache = false)
} yield {
policy.id
}
} match {
case Some(i) => Some(i)
case None => oldPolicy.rateBaseId
}
// new counter
val policy = Counter(id = oldPolicy.id, useFlag = oldPolicy.useFlag, oldPolicy.version, service, action, oldPolicy.itemType, autoComb = autoComb, dimension,
useProfile = useProfile, bucketImpId, useRank = useRank, oldPolicy.ttl, oldPolicy.dailyTtl, oldPolicy.hbaseTable, intervalUnit,
rateActionId, rateBaseId, rateThreshold)
counterModel.updateServiceAction(policy)
Ok(Json.toJson(Map("msg" -> s"updated $service/$action")))
case None =>
NotFound(Json.toJson(Map("msg" -> s"$service.$action not found")))
}
}