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