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) {