override def prepare()

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