fun parseFiles()

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