in src/main/java/com/amazonaws/services/neptune/propertygraph/ExportStats.java [101:211]
public void addTo(ObjectNode rootNode, GraphSchema graphSchema) {
ObjectNode statsNode = JsonNodeFactory.instance.objectNode();
rootNode.set("stats", statsNode);
statsNode.put("nodes", nodeStats.values().stream().map(LabelStats::count).reduce(0L, Long::sum));
statsNode.put("edges", edgeStats.values().stream().map(LabelStats::count).reduce(0L, Long::sum));
statsNode.put("properties", getNumberOfProperties(graphSchema));
ObjectNode detailsNode = JsonNodeFactory.instance.objectNode();
statsNode.set("details", detailsNode);
ArrayNode nodesArrayNode = JsonNodeFactory.instance.arrayNode();
detailsNode.set("nodes", nodesArrayNode);
GraphElementSchemas nodeSchemas = graphSchema.graphElementSchemasFor(GraphElementType.nodes);
for (Map.Entry<Label, LabelStats> entry : nodeStats.entrySet()) {
Label label = entry.getKey();
LabelStats labelStats = entry.getValue();
LabelSchema labelSchema = nodeSchemas.getSchemaFor(label);
ObjectNode nodeNode = JsonNodeFactory.instance.objectNode();
nodesArrayNode.add(nodeNode);
nodeNode.put("description", label.fullyQualifiedLabel());
nodeNode.set("labels", arrayNodeFromList(label.labels()));
nodeNode.put("count", labelStats.count());
ArrayNode propertiesArray = JsonNodeFactory.instance.arrayNode();
for (PropertySchemaStats stats : labelSchema.propertySchemaStats()) {
PropertySchema propertySchema = labelSchema.getPropertySchema(stats.property());
ObjectNode propertyNode = JsonNodeFactory.instance.objectNode();
propertyNode.put("name", stats.property().toString());
propertyNode.put("count", stats.observationCount());
propertyNode.put("numberOfRecords", stats.numberValuesCount());
propertyNode.put("minCardinality", stats.minCardinality());
propertyNode.put("maxCardinality", stats.maxCardinality());
propertyNode.put("isNullable", propertySchema.isNullable());
ObjectNode dataTypesNode = JsonNodeFactory.instance.objectNode();
ArrayNode dataTypeCountsNode = JsonNodeFactory.instance.arrayNode();
for (Map.Entry<DataType, Integer> e : stats.dataTypeCounts().entrySet()) {
ObjectNode n = JsonNodeFactory.instance.objectNode();
n.put(e.getKey().name(), e.getValue());
dataTypeCountsNode.add(n);
}
dataTypesNode.put("inferred", propertySchema.dataType().name());
dataTypesNode.set("counts", dataTypeCountsNode);
propertyNode.set("dataTypes", dataTypesNode);
propertiesArray.add(propertyNode);
}
nodeNode.set("properties", propertiesArray);
}
ArrayNode edgesArrayNode = JsonNodeFactory.instance.arrayNode();
detailsNode.set("edges", edgesArrayNode);
GraphElementSchemas edgeSchemas = graphSchema.graphElementSchemasFor(GraphElementType.edges);
for (Map.Entry<Label, LabelStats> entry : edgeStats.entrySet()) {
Label label = entry.getKey();
LabelStats labelStats = entry.getValue();
LabelSchema labelSchema = edgeSchemas.getSchemaFor(label);
ObjectNode edgeNode = JsonNodeFactory.instance.objectNode();
edgesArrayNode.add(edgeNode);
edgeNode.put("description", label.fullyQualifiedLabel());
ObjectNode labelsNode = JsonNodeFactory.instance.objectNode();
if (label.hasFromLabels()) {
labelsNode.set("from", arrayNodeFromList(label.fromLabels().labels()));
}
labelsNode.set("edge", arrayNodeFromList(label.labels()));
if (label.hasToLabels()) {
labelsNode.set("to", arrayNodeFromList(label.toLabels().labels()));
}
edgeNode.set("labels", labelsNode);
edgeNode.put("count", labelStats.count());
ArrayNode propertiesArray = JsonNodeFactory.instance.arrayNode();
for (PropertySchemaStats stats : labelSchema.propertySchemaStats()) {
PropertySchema propertySchema = labelSchema.getPropertySchema(stats.property());
ObjectNode propertyNode = JsonNodeFactory.instance.objectNode();
propertyNode.put("name", stats.property().toString());
propertyNode.put("count", stats.observationCount());
propertyNode.put("numberOfRecords", stats.numberValuesCount());
propertyNode.put("minCardinality", stats.minCardinality());
propertyNode.put("maxCardinality", stats.maxCardinality());
propertyNode.put("isNullable", propertySchema.isNullable());
ObjectNode dataTypesNode = JsonNodeFactory.instance.objectNode();
ArrayNode dataTypeCountsNode = JsonNodeFactory.instance.arrayNode();
for (Map.Entry<DataType, Integer> e : stats.dataTypeCounts().entrySet()) {
ObjectNode n = JsonNodeFactory.instance.objectNode();
n.put(e.getKey().name(), e.getValue());
dataTypeCountsNode.add(n);
}
dataTypesNode.put("inferred", propertySchema.dataType().name());
dataTypesNode.set("counts", dataTypeCountsNode);
propertyNode.set("dataTypes", dataTypesNode);
propertiesArray.add(propertyNode);
}
edgeNode.set("properties", propertiesArray);
}
}