public static TelemetrySchema parseFiles()

in telemetry/src/software/aws/toolkits/telemetry/generator/TelemetryParser.java [32:74]


    public static TelemetrySchema parseFiles(final File definitionsDirectory) {
        ResourceLoader resourceLoader = new ResourceLoader(definitionsDirectory);

        List<String> files = new ArrayList<>();
        files.addAll(resourceLoader.getDefinitionsFiles());

        JSONObject rawSchema = new JSONObject(new JSONTokener(resourceLoader.getSchemaFile()));
        Schema schema = SchemaLoader.load(rawSchema);
        files.forEach(f -> validate(f, schema));

        TelemetryDefinition telemetryDefinition = files.stream()
                .map(TelemetryParser::parse)
                .collect(Collectors.collectingAndThen(
                        Collectors.toList(),
                        defs -> new TelemetryDefinition(
                                defs.stream().flatMap(d -> d.types().stream()).distinct().collect(Collectors.toList()),
                                defs.stream().flatMap(d -> d.metrics().stream()).distinct().collect(Collectors.toList())
                        )
                ));

        Map<String, TelemetryMetricType> metadataTypes = telemetryDefinition.types().stream()
                .collect(Collectors.toMap(TelemetryMetricType::name, t -> t));

        List<MetricSchema> resolvedMetricTypes = telemetryDefinition.metrics().stream()
                .map(m -> new MetricSchema(
                        m.name(),
                        m.description(),
                        m.unit(),
                        m.metadata().stream()
                                .map(md -> new MetadataSchema(
                                        metadataTypes.get(md.type()),
                                        md.required()
                                ))
                                .collect(Collectors.toList()),
                        m.passive()
                ))
                .collect(Collectors.toList());

        return new TelemetrySchema(
                telemetryDefinition.types(),
                resolvedMetricTypes
        );
    }