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