def serialize()

in server/src/main/scala/com/twitter/server/util/MetricSchemaSerializer.scala [51:114]


  def serialize(
    metricBuilder: MetricBuilder,
    jsonGenerator: JsonGenerator,
    serializerProvider: SerializerProvider
  ): Unit = {
    val formattedName = metricBuilder.name.mkString(metadataScopeSeparator())
    jsonGenerator.writeStartObject()
    jsonGenerator.writeStringField("name", formattedName)

    jsonGenerator.writeStringField(
      "dimensional_name",
      metricBuilder.identity.dimensionalName.mkString(MetricBuilder.DimensionalNameScopeSeparator))

    writeArray(
      jsonGenerator,
      "relative_name",
      (if (metricBuilder.relativeName.nonEmpty) metricBuilder.relativeName
       else metricBuilder.name).iterator)

    writeDictionary(jsonGenerator, "labels", metricBuilder.identity.labels)

    jsonGenerator.writeBooleanField(
      "dimensional_support",
      dimensionalSupport(metricBuilder.identity.identityType))

    val dataType = metricBuilder.metricType.toJsonString
    jsonGenerator.writeStringField("kind", dataType)
    jsonGenerator.writeObjectFieldStart("source")
    jsonGenerator.writeStringField("class", metricBuilder.sourceClass.getOrElse("Unspecified"))
    jsonGenerator.writeStringField("category", metricBuilder.role.toString)
    jsonGenerator.writeStringField(
      "process_path",
      metricBuilder.processPath.getOrElse("Unspecified"))
    jsonGenerator.writeEndObject()
    jsonGenerator.writeStringField("description", metricBuilder.description)
    jsonGenerator.writeStringField("unit", metricBuilder.units.toString)
    jsonGenerator.writeStringField("verbosity", metricBuilder.verbosity.toString)
    jsonGenerator.writeBooleanField("key_indicator", metricBuilder.keyIndicator)

    metricBuilder.metricType match {
      case HistogramType =>
        jsonGenerator.writeStringField("histogram_format", metricBuilder.histogramFormat.toString)
        jsonGenerator.writeObjectFieldStart("buckets")
        jsonGenerator.writeStringField("count", statsFormatter.histogramSeparator + "count")
        jsonGenerator.writeStringField("sum", statsFormatter.histogramSeparator + "sum")
        jsonGenerator.writeStringField(
          "average",
          statsFormatter.histogramSeparator + statsFormatter.labelAverage)
        jsonGenerator.writeStringField(
          "minimum",
          statsFormatter.histogramSeparator + statsFormatter.labelMin)
        jsonGenerator.writeStringField(
          "maximum",
          statsFormatter.histogramSeparator + statsFormatter.labelMax)
        metricBuilder.percentiles.foreach(bucket =>
          jsonGenerator.writeStringField(
            bucket.toString,
            statsFormatter.histogramSeparator + statsFormatter.labelPercentile(bucket)))

        jsonGenerator.writeEndObject()
      case _ => // nop
    }
    jsonGenerator.writeEndObject()
  }