fun generateTelemetryFromFiles()

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