in s2counter_core/src/main/scala/org/apache/s2graph/counter/core/v2/RankingStorageGraph.scala [347:404]
override def prepare(policy: Counter): Unit = {
val service = policy.service
val action = policy.action
val graphLabel = {
policy.rateActionId match {
case Some(rateId) =>
counterModel.findById(rateId, useCache = false).flatMap { ratePolicy =>
Label.findByName(ratePolicy.action)
}
case None =>
Label.findByName(action)
}
}
if (graphLabel.isEmpty) {
throw new Exception(s"label not found. $service.$action")
}
if (!existsLabel(policy, useCache = false)) {
// find input label to specify target column
val inputLabelName = policy.rateActionId.flatMap { id =>
counterModel.findById(id, useCache = false).map(_.action)
}.getOrElse(action)
val label = graphLabel.get
val counterLabelName = action + labelPostfix
val defaultJson =
s"""
|{
| "label": "$counterLabelName",
| "srcServiceName": "$SERVICE_NAME",
| "srcColumnName": "$BUCKET_COLUMN_NAME",
| "srcColumnType": "string",
| "tgtServiceName": "$service",
| "tgtColumnName": "${label.tgtColumnName}",
| "tgtColumnType": "${label.tgtColumnType}",
| "indices": [
| {"name": "time", "propNames": ["time_unit", "time_value", "score"]}
| ],
| "props": [
| {"name": "time_unit", "dataType": "string", "defaultValue": ""},
| {"name": "time_value", "dataType": "long", "defaultValue": 0},
| {"name": "date_time", "dataType": "long", "defaultValue": 0},
| {"name": "score", "dataType": "float", "defaultValue": 0.0}
| ],
| "hTableName": "${policy.hbaseTable.get}"
|}
""".stripMargin
val json = policy.dailyTtl.map(ttl => ttl * 24 * 60 * 60) match {
case Some(ttl) =>
Json.parse(defaultJson).as[JsObject] + ("hTableTTL" -> Json.toJson(ttl))
case None =>
Json.parse(defaultJson)
}
graphOp.createLabel(json)
}
}