in telemetry/jetbrains/src/main/kotlin/software/aws/toolkits/telemetry/generator/TelemetryParser.kt [95:132]
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
)
}