in telemetry/jetbrains/src/main/kotlin/software/aws/toolkits/telemetry/generator/TelemetryParser.kt [124:163]
fun parseFiles(
defaultResourcesFiles: List<String>,
paths: List<File> = listOf(),
): TelemetrySchema {
val files = paths.map { it.readText() } + defaultResourcesFiles
val rawSchema = JSONObject(JSONTokener(ResourceLoader.SCHEMA_FILE))
val schema: Schema = SchemaLoader.load(rawSchema)
files.forEach { validate(it, schema) }
val telemetryDefinition =
files.map { parse(it) }.fold(TelemetryDefinition(listOf(), listOf())) { it, it2 ->
TelemetryDefinition(
it.types.plus(it2.types),
it.metrics.plus(it2.metrics),
)
}.let {
TelemetryDefinition(
it.types.distinctBy { t -> t.name },
it.metrics.distinctBy { m -> m.name },
)
}
val metadataTypes = telemetryDefinition.types.associateBy { it.name }
val resolvedMetricTypes =
telemetryDefinition.metrics.map {
MetricSchema(
it.name,
it.description,
it.unit,
it.metadata.map { metadata -> MetadataSchema(metadataTypes.getValue(metadata.type), metadata.required) },
it.passive,
)
}
return TelemetrySchema(
telemetryDefinition.types,
resolvedMetricTypes,
)
}