Refactor code to enable local access to JSON stats building.
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
index b44e678..fc95331 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
@@ -30,6 +30,7 @@
import javax.servlet.http.HttpServletResponse ;
import org.apache.jena.atlas.json.JsonBuilder ;
+import org.apache.jena.atlas.json.JsonObject ;
import org.apache.jena.atlas.json.JsonValue ;
import org.apache.jena.fuseki.server.* ;
import org.apache.jena.fuseki.servlets.HttpAction ;
@@ -44,21 +45,20 @@
@Override
protected JsonValue execGetContainer(HttpAction action) {
action.log.info(format("[%d] GET stats all", action.id)) ;
- JsonBuilder builder = new JsonBuilder() ;
- builder.startObject("top") ;
-
- builder.key(JsonConst.datasets) ;
- builder.startObject("datasets") ;
- for ( String ds : action.getDataAccessPointRegistry().keys() ) {
- DataAccessPoint access = action.getDataAccessPointRegistry().get(ds) ;
- statsDataset(builder, access) ;
- }
- builder.finishObject("datasets") ;
-
- builder.finishObject("top") ;
- return builder.build() ;
+ return generateStats(action.getDataAccessPointRegistry()) ;
}
+ public static JsonObject generateStats(DataAccessPointRegistry registry) {
+ JsonBuilder builder = new JsonBuilder() ;
+ builder.startObject("top") ;
+ builder.key(JsonConst.datasets) ;
+ builder.startObject("datasets") ;
+ registry.forEach((name, access)->statsDataset(builder, access));
+ builder.finishObject("datasets") ;
+ builder.finishObject("top") ;
+ return builder.build().getAsObject() ;
+ }
+
@Override
protected JsonValue execGetItem(HttpAction action) {
action.log.info(format("[%d] GET stats dataset %s", action.id, action.getDatasetName())) ;
@@ -75,13 +75,19 @@
builder.finishObject("TOP") ;
return builder.build() ;
}
-
+
+ public static JsonObject generateStats(DataAccessPoint access) {
+ JsonBuilder builder = new JsonBuilder() ;
+ statsDataset(builder, access) ;
+ return builder.build().getAsObject() ;
+ }
+
private void statsDataset(JsonBuilder builder, String name, DataAccessPointRegistry registry) {
DataAccessPoint access = registry.get(name) ;
statsDataset(builder, access);
}
- private void statsDataset(JsonBuilder builder, DataAccessPoint access) {
+ private static void statsDataset(JsonBuilder builder, DataAccessPoint access) {
// Object started
builder.key(access.getName()) ;
DataService dSrv = access.getDataService() ;
@@ -91,29 +97,13 @@
builder.key(CounterName.RequestsGood.name()).value(dSrv.getCounters().value(CounterName.RequestsGood)) ;
builder.key(CounterName.RequestsBad.name()).value(dSrv.getCounters().value(CounterName.RequestsBad)) ;
-
- // Build the operation -> endpoint list map.
-
-// MultiMap<OperationName, Endpoint> map = MultiMap.createMapList() ;
-// for ( OperationName operName : dSrv.getOperations() ) {
-// List<Endpoint> endpoints = access.getDataService().getOperation(operName) ;
-// for ( Endpoint endpoint : endpoints )
-// map.put(operName, endpoint) ;
-// }
-
-
builder.key(JsonConst.endpoints).startObject("endpoints") ;
for ( OperationName operName : dSrv.getOperations() ) {
List<Endpoint> endpoints = access.getDataService().getOperation(operName) ;
-// System.err.println(operName+" : "+endpoints.size()) ;
-// for ( Endpoint endpoint : endpoints )
-// System.err.println(" "+endpoint.getEndpoint()) ;
for ( Endpoint endpoint : endpoints ) {
-
- // Endpoint names are unique but not services.
-
+ // Endpoint names are unique for a given service.
builder.key(endpoint.getEndpoint()) ;
builder.startObject() ;
@@ -126,10 +116,9 @@
}
builder.finishObject("endpoints") ;
builder.finishObject("counters") ;
-
}
- private void operationCounters(JsonBuilder builder, Endpoint operation) {
+ private static void operationCounters(JsonBuilder builder, Endpoint operation) {
for (CounterName cn : operation.getCounters().counters()) {
Counter c = operation.getCounters().get(cn) ;
builder.key(cn.name()).value(c.value()) ;