in hollow-explorer-ui/src/main/java/com/netflix/hollow/explorer/ui/pages/ShowAllTypesPage.java [45:112]
protected void setUpContext(HttpServletRequest req, HollowUISession session, VelocityContext ctx) {
String sort = req.getParameter("sort") == null ? "primaryKey" : req.getParameter("sort");
List<TypeOverview> typeOverviews = new ArrayList<TypeOverview>();
for(HollowTypeReadState typeState : ui.getStateEngine().getTypeStates()) {
String typeName = typeState.getSchema().getName();
BitSet populatedOrdinals = typeState.getPopulatedOrdinals();
int numRecords = populatedOrdinals == null ? Integer.MIN_VALUE : populatedOrdinals.cardinality();
int numHoles = populatedOrdinals == null ? Integer.MIN_VALUE : populatedOrdinals.length()-populatedOrdinals.cardinality();
long approxHoleFootprint = typeState.getApproximateHoleCostInBytes();
PrimaryKey primaryKey = typeState.getSchema().getSchemaType() == SchemaType.OBJECT ? ((HollowObjectSchema)typeState.getSchema()).getPrimaryKey() : null;
long approxHeapFootprint = typeState.getApproximateHeapFootprintInBytes();
HollowSchema schema = typeState.getSchema();
int numShards = typeState.numShards();
typeOverviews.add(new TypeOverview(typeName, numRecords, numHoles, approxHoleFootprint, approxHeapFootprint, primaryKey, schema, numShards));
}
switch(sort) {
case "typeName":
Collections.sort(typeOverviews, new Comparator<TypeOverview>() {
public int compare(TypeOverview o1, TypeOverview o2) {
return o1.getTypeName().compareTo(o2.getTypeName());
}
});
break;
case "numRecords":
Collections.sort(typeOverviews, new Comparator<TypeOverview>() {
public int compare(TypeOverview o1, TypeOverview o2) {
return Integer.compare(o2.getNumRecordsInt(), o1.getNumRecordsInt());
}
});
break;
case "numHoles":
typeOverviews.sort((o1, o2) -> Integer.compare(o2.getNumHolesInt(), o1.getNumHolesInt()));
break;
case "holeSize":
typeOverviews.sort((o1, o2) -> Long.compare(o2.getApproxHoleFootprintLong(), o1.getApproxHoleFootprintLong()));
break;
case "heapSize":
Collections.sort(typeOverviews, new Comparator<TypeOverview>() {
public int compare(TypeOverview o1, TypeOverview o2) {
return Long.compare(o2.getApproxHeapFootprintLong(), o1.getApproxHeapFootprintLong());
}
});
break;
case "numShards":
typeOverviews.sort((o1, o2) -> Integer.compare(o2.getNumShardsInt(), o1.getNumShardsInt()));
break;
default:
Collections.sort(typeOverviews, new Comparator<TypeOverview>() {
public int compare(TypeOverview o1, TypeOverview o2) {
if(!"".equals(o1.getPrimaryKey()) && "".equals(o2.getPrimaryKey()))
return -1;
if("".equals(o1.getPrimaryKey()) && !"".equals(o2.getPrimaryKey()))
return 1;
return o1.getTypeName().compareTo(o2.getTypeName());
}
});
}
ctx.put("totalHoleFootprint", totalApproximateHoleFootprint(typeOverviews));
ctx.put("totalHeapFootprint", totalApproximateHeapFootprint(typeOverviews));
ctx.put("typeOverviews", typeOverviews);
}