in telemetry/jetbrains/src/main/kotlin/software/aws/toolkits/telemetry/generator/TelemetryGenerator.kt [41:101]
fun generateTelemetryFromFiles(
inputFiles: List<File>,
defaultDefinitions: List<String> = ResourceLoader.DEFINITIONS_FILES,
outputFolder: File,
) {
val telemetry = TelemetryParser.parseFiles(defaultDefinitions, inputFiles)
val commonMetadataTypes =
setOf(
"duration",
"httpStatusCode",
"reason",
"reasonDesc",
"requestId",
"requestServiceType",
"result",
"traceId",
"metricId",
"parentId",
)
val metricsWithCommonMetadata =
telemetry.metrics.map { metric ->
// compute [MetadataSchema] for any common types not already declared in the schema
val commonMetadata =
commonMetadataTypes.mapNotNull { commonMetadataType ->
val type = telemetry.types.firstOrNull { it.name == commonMetadataType }
if (type != null && metric.metadata.none { it.type.name == commonMetadataType }) {
MetadataSchema(type, false)
} else {
null
}
}
// metadata will be sorted during generation
metric.copy(metadata = metric.metadata + commonMetadata)
}
val indent = " ".repeat(4)
// make sure the output directory exists before writing to it
outputFolder.mkdirs()
FileSpec.builder(PACKAGE_NAME, "TelemetryEnums")
.indent(indent)
.generateHeader()
.generateTelemetryEnumTypes(telemetry.types)
.generateDeprecatedOverloads(RESULT)
.build()
.writeTo(outputFolder)
// Namespaced metrics
metricsWithCommonMetadata.groupBy { it.namespace() }
.toSortedMap()
.forEach { (namespace, metrics) ->
FileSpec.builder(PACKAGE_NAME, namespace.capitalize() + "Telemetry")
.indent(indent)
.generateHeader()
.generateNamespaces(namespace, metrics)
.build()
.writeTo(outputFolder)
}
}