You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/12/20 12:54:54 UTC

svn commit: r1552600 - in /jena/branches/jena-fuseki-new-ui/src: main/java/org/apache/jena/fuseki/ main/java/org/apache/jena/fuseki/mgt/ main/java/org/apache/jena/fuseki/servlets/ test/java/org/apache/jena/fuseki/

Author: andy
Date: Fri Dec 20 11:54:54 2013
New Revision: 1552600

URL: http://svn.apache.org/r1552600
Log:
Testing admin functions.

Modified:
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/X_Config.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
    jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/X_Config.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/X_Config.java?rev=1552600&r1=1552599&r2=1552600&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/X_Config.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/X_Config.java Fri Dec 20 11:54:54 2013
@@ -54,13 +54,13 @@ public class X_Config {
         X_Config.addJMX(dsDesc) ;
     }
     
-    public static void XaddJMX() {
-        DatasetRegistry registry = DatasetRegistry.get() ;
-        for (String ds : registry.keys()) {
-            DatasetRef dsRef = registry.get(ds) ;
-            addJMX(dsRef) ;
-        }
-    }
+//    public static void addJMX() {
+//        DatasetRegistry registry = DatasetRegistry.get() ;
+//        for (String ds : registry.keys()) {
+//            DatasetRef dsRef = registry.get(ds) ;
+//            addJMX(dsRef) ;
+//        }
+//    }
 
     private static void addJMX(DatasetRef dsRef) {
         String x = dsRef.name ;

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java?rev=1552600&r1=1552599&r2=1552600&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java Fri Dec 20 11:54:54 2013
@@ -67,6 +67,8 @@ import com.hp.hpl.jena.update.UpdateFact
 import com.hp.hpl.jena.update.UpdateRequest ;
 
 public class ActionDatasets extends ActionCtl {
+    // XXX ActionContainerItem
+    
     // XXX DatasetRef to include UUID : see execPostDataset
     // DatasetRef ref = processService(s) ;
     //   Needs to do the state.
@@ -128,16 +130,15 @@ public class ActionDatasets extends Acti
             out.flush() ;
             ServletOps.success(action);
         } catch (IOException ex) { ServletOps.errorOccurred(ex) ; }
-        
     }
     
     // This does not consult the system database for dormant etc.
     private JsonValue execGetContainer(HttpAction action) { 
         JsonBuilder builder = new JsonBuilder() ;
-        builder.startObject() ;
+        builder.startObject("D") ;
         builder.key("datasets") ;
         JsonDescription.arrayDatasets(builder, DatasetRegistry.get());
-        builder.finishObject() ;
+        builder.finishObject("D") ;
         return builder.build() ;
     }
 
@@ -164,6 +165,8 @@ public class ActionDatasets extends Acti
     
     // An action on a dataset.
     // XXX extend to backup etc??
+    // XXX Constant (throughout)
+    
     private void execPostDataset(HttpAction action) {
         String name = action.dsRef.name ;
         if ( name == null )
@@ -173,7 +176,7 @@ public class ActionDatasets extends Acti
         if ( action.dsRef.dataset == null )
             ServletOps.errorNotFound("Not found: dataset "+action.dsRef.name);
         DatasetRef dsDesc = action.dsRef ;
-        String s = action.request.getParameter("status") ;
+        String s = action.request.getParameter("state") ;
         if ( s == null || s.isEmpty() )
             ServletOps.errorBadRequest("No state change given") ;
 

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java?rev=1552600&r1=1552599&r2=1552600&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java Fri Dec 20 11:54:54 2013
@@ -18,6 +18,8 @@
 
 package org.apache.jena.fuseki.mgt;
 
+import static java.lang.String.format ;
+
 import java.io.IOException ;
 import java.util.Iterator ;
 
@@ -25,10 +27,7 @@ import javax.servlet.ServletOutputStream
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
-import org.apache.jena.atlas.io.IO ;
-import org.apache.jena.atlas.json.JSON ;
-import org.apache.jena.atlas.json.JsonArray ;
-import org.apache.jena.atlas.json.JsonObject ;
+import org.apache.jena.atlas.json.* ;
 import org.apache.jena.fuseki.server.* ;
 import org.apache.jena.fuseki.servlets.HttpAction ;
 import org.apache.jena.fuseki.servlets.ServletOps ;
@@ -45,74 +44,99 @@ public class ActionStats extends ActionC
     
     @Override
     protected void perform(HttpAction action) {
-        try {
-            perform$(action) ;
-            ServletOps.success(action) ;
-        } catch (IOException ex) { IO.exception(ex) ; }
-    }
-    
-    protected void perform$(HttpAction action) throws IOException {
-        HttpServletResponse response = action.response ;
-        ServletOutputStream out = action.response.getOutputStream() ;
-        response.setContentType(WebContent.contentTypeJSON);
-        response.setCharacterEncoding(WebContent.charsetUTF8) ;
-
-        /*
-         * { "server" : ....   
-         *    "datasets" : {
-         *       "ds1": { counters... }
-         *       GSP stucture?
-         *         
-         */
-
-        JsonObject obj = new JsonObject() ;
-        JsonObject datasets = new JsonObject() ;
+        execGet(action) ;
+    }
 
-        JsonObject server = new JsonObject() ;
-        server.put("host", action.request.getLocalName()+":"+action.request.getLocalPort()) ;
+    protected void execGet(HttpAction action) {
+        JsonValue v ;
+        if (action.dsRef.name == null )
+            v = execGetContainer(action) ;
+        else
+            v = execGetDataset(action) ;
+        try {
+            HttpServletResponse response = action.response ;
+            ServletOutputStream out = response.getOutputStream() ;
+            response.setContentType(WebContent.contentTypeJSON);
+            response.setCharacterEncoding(WebContent.charsetUTF8) ;
+            JSON.write(out, v) ;
+            out.println() ; 
+            out.flush() ;
+            ServletOps.success(action);
+        } catch (IOException ex) { ServletOps.errorOccurred(ex) ; }
+    }
+    
+    // This does not consult the system database for dormant etc.
+    private JsonValue execGetContainer(HttpAction action) { 
+        action.log.info(format("[%d] GET stats all", action.id)) ;
+        JsonBuilder builder = new JsonBuilder() ;
+        builder.startObject("top") ;
+
+        builder.key("server") ;
+        builder.startObject("server") ;
+        builder.key("host").value(action.request.getLocalName()+":"+action.request.getLocalPort()) ;
+        builder.finishObject("server") ;
 
+        builder.key("datasets") ;
+        builder.startObject("datasets") ;
         for ( String ds : DatasetRegistry.get().keys() )
-            statsJSON(datasets, ds) ; 
-
-        obj.put("server", server) ;
-        obj.put("datasets", datasets) ;
+            statsDataset(builder, ds) ; 
+        builder.finishObject("datasets") ;
+        
+        builder.finishObject("top") ;
+        return builder.build() ;
+    }
 
-        JSON.write(out, obj) ;
-        out.flush() ;
+    private JsonValue execGetDataset(HttpAction action) {
+        action.log.info(format("[%d] GET stats dataset %s", action.id, action.dsRef.name)) ;
+        
+        JsonBuilder builder = new JsonBuilder() ;
+        String datasetPath = DatasetRef.canocialDatasetPath(action.dsRef.name) ;
+        builder.startObject("TOP") ;
+        
+        builder.key("datasets") ;
+        builder.startObject("datasets") ;
+        statsDataset(builder, datasetPath) ;
+        builder.finishObject("datasets") ;
+        
+        builder.finishObject("TOP") ;
+        return builder.build() ;
     }
-    
-    private void statsJSON(JsonObject datasets, String ds) {
+
+    private void statsDataset(JsonBuilder builder, String ds) {
+        // Object started
+        builder.key(ds) ;
+        
         DatasetRef desc = DatasetRegistry.get().get(ds) ;
-        JsonObject stats = new JsonObject() ;
-        datasets.put(ds, stats) ;
-        stats.put(CounterName.Requests.name(),      desc.getCounters().value(CounterName.Requests)) ;
-        stats.put(CounterName.RequestsGood.name(),  desc.getCounters().value(CounterName.RequestsGood)) ;
-        stats.put(CounterName.RequestsBad.name(),   desc.getCounters().value(CounterName.RequestsBad)) ;
-        JsonObject services = new JsonObject() ;
-
-//        JsonArray endpoints = new JsonArray() ;
-//        services.put("endpoints", endpoints) ;
-//        JsonArray srvNames = new JsonArray() ;
-//        services.put("names", srvNames) ;
+        builder.startObject("counters") ;
         
-        // There can be several endpoints for one service.
+        builder.key(CounterName.Requests.name()).value(desc.getCounters().value(CounterName.Requests)) ;
+        builder.key(CounterName.RequestsGood.name()).value(desc.getCounters().value(CounterName.RequestsGood)) ;
+        builder.key(CounterName.RequestsBad.name()).value(desc.getCounters().value(CounterName.RequestsBad)) ;
+
+        
+        builder.key("services").startObject("services") ;
         for ( ServiceRef srvRef : desc.getServiceRefs() ) {
-            JsonObject epStats = new JsonObject() ;
-            statsJSON(epStats, srvRef) ;
-            services.put(srvRef.name, epStats) ;
-            JsonArray endpoints = new JsonArray() ;
-            epStats.put("endpoints", endpoints) ;
-            for ( String ep : srvRef.endpoints) {
-                endpoints.add(ep) ;
-            }
+            builder.key(srvRef.name).startObject("service") ;
+            statsService(builder, srvRef) ;
+
+            
+            builder.key("endpoints") ;
+            builder.startArray() ;
+            for ( String ep : srvRef.endpoints)
+                builder.value(ep) ;
+            builder.finishArray() ;
+            
+            builder.finishObject("service") ;
         }
-        stats.put("services", services) ;
+        builder.finishObject("services") ;
+        builder.finishObject("counters") ;
+
     }
 
-    private void statsJSON(JsonObject epStats, ServiceRef srvRef) {
+    private void statsService(JsonBuilder builder, ServiceRef srvRef) {
         for (CounterName cn : srvRef.getCounters().counters()) {
             Counter c = srvRef.getCounters().get(cn) ;
-            epStats.put(cn.name(), c.value()) ;
+            builder.key(cn.name()).value(c.value()) ;
         }
     }
 

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java?rev=1552600&r1=1552599&r2=1552600&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java Fri Dec 20 11:54:54 2013
@@ -77,8 +77,8 @@ public class ManagementServer
         if ( !base.startsWith("/"))
             throw new FusekiException("Base URI does nto start with a '/'") ; 
         addServlet(context, new MgtCmdServlet(),        base+"mgt") ;       // XXX Old - remove.
-        addServlet(context, new ActionStats(),          base+"stats") ;
-        addServlet(context, new ActionDatasets(),       base+"datasets/*") ; // Covers ".../datasets" as well. 
+        addServlet(context, new ActionStats(),          base+"stats/*") ;   // "/abc/*" covers ".../abc" as well.
+        addServlet(context, new ActionDatasets(),       base+"datasets/*") ;  
     }
 
     // SHARE

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java?rev=1552600&r1=1552599&r2=1552600&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java Fri Dec 20 11:54:54 2013
@@ -57,6 +57,8 @@ public abstract class ActionSPARQL exten
                 ServletOps.errorNotFound("No dataset for URI: "+datasetUri) ;
                 return ;
             }
+            if ( !dsRef.isActive() )
+                ServletOps.errorNotFound("Dataset not active: "+datasetUri) ;
         } else
             dsRef = FusekiConfig.serviceOnlyDatasetRef() ;
 

Modified: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java?rev=1552600&r1=1552599&r2=1552600&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAdmin.java Fri Dec 20 11:54:54 2013
@@ -49,6 +49,12 @@ import org.junit.Test ;
 
 /** Tests of the admin functionality */
 public class TestAdmin extends BaseTest {
+    
+    // Name of the dataset in the assembler file.
+    static String dsTest = "test-ds2" ;
+
+    
+    
     @BeforeClass
     public static void beforeClass() {
         ServerTest.allocServer() ;
@@ -114,27 +120,33 @@ public class TestAdmin extends BaseTest 
 
     // -- Add
     
-    // Specific dataset
-    @Test public void add_dataset_1() {
-        String dsTest = "test-ds2" ;
-        checkNotThere(dsTest) ;
-
+    private static void addTestDataset() {
         File f = new File("testing/config-ds-1.ttl") ;
         org.apache.http.entity.ContentType ct = org.apache.http.entity.ContentType.parse(WebContent.contentTypeTurtle+"; charset="+WebContent.charsetUTF8) ;
         HttpEntity e = new FileEntity(f, ct) ;
         execHttpPost(ServerTest.urlRoot+"$/"+opDatasets, e) ;
+    }
+    
+    private static void deleteTestDataset() {
+        execHttpDelete(ServerTest.urlRoot+"$/"+opDatasets+"/"+dsTest) ;
+    }
+
+    // Specific dataset
+    @Test public void add_dataset_1() {
+        checkNotThere(dsTest) ;
+
+        addTestDataset() ;
         
         // Check exists.
         checkExists(dsTest) ;
         
         // Remove it.
-        execHttpDelete(ServerTest.urlRoot+"$/"+opDatasets+"/"+dsTest) ;
-        checkNotThere("test-ds") ;
+        deleteTestDataset() ;
+        checkNotThere(dsTest) ;
     }
 
     // Try to add twice
     @Test public void add_dataset_2() {
-        String dsTest = "test-ds2" ;
         checkNotThere(dsTest) ;
 
         File f = new File("testing/config-ds-1.ttl") ;
@@ -157,6 +169,33 @@ public class TestAdmin extends BaseTest 
     }
     
     // ---- Active/dormant.
+
+    @Test public void state_1() {
+        // Add one
+        addTestDataset() ;
+        execHttpPost(ServerTest.urlRoot+"$/"+opDatasets+"/"+dsTest+"?state=dormant", null) ;
+
+        checkExistsNotActive(dsTest); 
+        
+        execHttpPost(ServerTest.urlRoot+"$/"+opDatasets+"/"+dsTest+"?state=active", null) ;
+        
+        checkExists(dsTest) ;
+        deleteTestDataset() ;
+    }
+    
+    @Test public void state_2() {
+        addTestDataset() ;
+        execHttpPost(ServerTest.urlRoot+"$/"+opDatasets+"/"+dsTest+"?state=dormant", null) ;
+        deleteTestDataset() ;
+        checkNotThere(dsTest) ;
+    }
+
+    @Test public void state_3() {
+        addTestDataset() ;
+        try {
+            execHttpPost(ServerTest.urlRoot+"$/"+opDatasets+"/DoesNotExist?state=dormant", null) ;
+        } catch (HttpException ex) { assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ; }
+    }
     
     // ---- Backup
 
@@ -169,33 +208,54 @@ public class TestAdmin extends BaseTest 
         checkJsonStatsAll(v); 
     }
     
+    @Test public void stats_2() {
+        JsonValue v = execGetJSON(urlRoot+"$/"+opStats+datasetPath) ;
+        checkJsonStatsAll(v); 
+    }
+
+    @Test public void stats_3() {
+        try {
+            JsonValue v = execGetJSON(urlRoot+"$/"+opStats+"/DoesNotExist") ;
+            checkJsonStatsAll(v);
+        } catch (HttpException ex) { assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()); }
+    }
+
     // Auxilary
     
-    private static void checkExists(String name)  {
+    private static void askPing(String name) {
         if ( name.startsWith("/") )
             name = name.substring(1) ;
-        TypedInputStream in = execHttpGet(urlRoot+"$/"+opDatasets+"/"+name) ; 
+        TypedInputStream in = execHttpGet(urlRoot+name+"/sparql?query=ASK%7B%7D") ; 
         IO.close(in) ;
-        in = execHttpGet(urlRoot+name+"/sparql?query=ASK%7B%7D") ;
+    }
+    
+    private static void adminPing(String name) {
+        TypedInputStream in = execHttpGet(urlRoot+"$/"+opDatasets+"/"+name) ; 
         IO.close(in) ;
     }
+
+    private static void checkExists(String name)  {
+        adminPing(name) ;
+        askPing(name) ;
+    }
     
+    private static void checkExistsNotActive(String name)  {
+        adminPing(name) ;
+        try { askPing(name) ; 
+            fail("askPing did not cause an Http Exception") ;
+        } catch ( HttpException ex ) {}
+    }
+
     private static void checkNotThere(String name) {
         if ( name.startsWith("/") )
             name = name.substring(1) ;
         // Check gone exists.
-        try { 
-            TypedInputStream in = execHttpGet(urlRoot+"$/"+opDatasets+"/"+name) ; 
-            IO.close(in) ;
-        }
+        try { adminPing(name) ; }
         catch (HttpException ex) {
             assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
         }
         
-        try { 
-            TypedInputStream in = execHttpGet(urlRoot+name+"/sparql?query=ASK%7B%7D") ;
-            IO.close(in) ;
-        }
+        try { askPing(name) ; }
         catch (HttpException ex) {
             assertEquals(HttpSC.NOT_FOUND_404, ex.getResponseCode()) ;
         }
@@ -204,10 +264,8 @@ public class TestAdmin extends BaseTest 
     private static void checkJsonDatasetsAll(JsonValue v) {
         assertNotNull(v.getAsObject().get("datasets")) ; 
         JsonArray a = v.getAsObject().get("datasets").getAsArray() ;
-        for ( JsonValue v2 : a ) {
+        for ( JsonValue v2 : a )
             checkJsonDatasetsOne(v2) ;
-        }
-
     }
     
     private static void checkJsonDatasetsOne(JsonValue v) {