org.apache.jena.fuseki.mgt.StatsServlet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jena-fuseki1 Show documentation
Show all versions of jena-fuseki1 Show documentation
Fuseki is a SPARQL 1.1 Server
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.fuseki.mgt;
import java.io.IOException ;
import java.util.Iterator ;
import javax.servlet.ServletOutputStream ;
import javax.servlet.http.HttpServlet ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
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.fuseki.server.* ;
import org.apache.jena.riot.WebContent ;
public class StatsServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
//throws ServletException, IOException
{
try {
// Conneg etc.
statsJSON(req, resp) ;
} catch (IOException e)
{ }
}
private void statsJSON(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
ServletOutputStream out = resp.getOutputStream() ;
resp.setContentType(WebContent.contentTypeJSON);
resp.setCharacterEncoding(WebContent.charsetUTF8) ;
/*
* { "server" : ....
* "datasets" : {
* "ds1": { counters... }
* GSP stucture?
*
*/
JsonObject obj = new JsonObject() ;
JsonObject datasets = new JsonObject() ;
JsonObject server = new JsonObject() ;
server.put("host", req.getLocalName()+":"+req.getLocalPort()) ;
for ( String ds : DatasetRegistry.get().keys() )
statsJSON(datasets, ds) ;
obj.put("server", server) ;
obj.put("datasets", datasets) ;
JSON.write(out, obj) ;
out.flush() ;
}
private void statsJSON(JsonObject datasets, String 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) ;
// There can be several endpoints for one service.
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) ;
}
}
stats.put("services", services) ;
}
private void statsJSON(JsonObject epStats, ServiceRef srvRef) {
for (CounterName cn : srvRef.getCounters().counters()) {
Counter c = srvRef.getCounters().get(cn) ;
epStats.put(cn.name(), c.value()) ;
}
}
private void statsTxt(HttpServletResponse resp) throws IOException
{
ServletOutputStream out = resp.getOutputStream() ;
resp.setContentType(WebContent.contentTypeTextPlain);
resp.setCharacterEncoding(WebContent.charsetUTF8) ;
Iterator iter = DatasetRegistry.get().keys().iterator() ;
while(iter.hasNext())
{
String ds = iter.next() ;
DatasetRef desc = DatasetRegistry.get().get(ds) ;
statsTxt(out, desc) ;
if ( iter.hasNext() )
out.println() ;
}
out.flush() ;
}
private void statsTxt(ServletOutputStream out, DatasetRef desc) throws IOException
{
out.println("Dataset: "+desc.name) ;
out.println(" Requests = "+desc.getCounters().value(CounterName.Requests)) ;
out.println(" Good = "+desc.getCounters().value(CounterName.RequestsGood)) ;
out.println(" Bad = "+desc.getCounters().value(CounterName.RequestsBad)) ;
out.println(" SPARQL Query:") ;
out.println(" Request = "+desc.query.getCounters().value(CounterName.Requests)) ;
out.println(" Good = "+desc.query.getCounters().value(CounterName.RequestsGood)) ;
out.println(" Bad requests = "+desc.query.getCounters().value(CounterName.RequestsBad)) ;
out.println(" Timeouts = "+desc.query.getCounters().value(CounterName.QueryTimeouts)) ;
out.println(" Bad exec = "+desc.query.getCounters().value(CounterName.QueryExecErrors)) ;
out.println(" SPARQL Update:") ;
out.println(" Request = "+desc.update.getCounters().value(CounterName.Requests)) ;
out.println(" Good = "+desc.update.getCounters().value(CounterName.RequestsGood)) ;
out.println(" Bad requests = "+desc.update.getCounters().value(CounterName.RequestsBad)) ;
out.println(" Bad exec = "+desc.update.getCounters().value(CounterName.UpdateExecErrors)) ;
out.println(" Upload:") ;
out.println(" Requests = "+desc.upload.getCounters().value(CounterName.Requests)) ;
out.println(" Good = "+desc.upload.getCounters().value(CounterName.RequestsGood)) ;
out.println(" Bad = "+desc.upload.getCounters().value(CounterName.RequestsBad)) ;
out.println(" SPARQL Graph Store Protocol:") ;
out.println(" GETs = "+gspValue(desc, CounterName.GSPget)+ " (good="+gspValue(desc, CounterName.GSPgetGood)+"/bad="+gspValue(desc, CounterName.GSPgetBad)+")") ;
out.println(" PUTs = "+gspValue(desc, CounterName.GSPput)+ " (good="+gspValue(desc, CounterName.GSPputGood)+"/bad="+gspValue(desc, CounterName.GSPputBad)+")") ;
out.println(" POSTs = "+gspValue(desc, CounterName.GSPpost)+ " (good="+gspValue(desc, CounterName.GSPpostGood)+"/bad="+gspValue(desc, CounterName.GSPpostBad)+")") ;
out.println(" DELETEs = "+gspValue(desc, CounterName.GSPdelete)+ " (good="+gspValue(desc, CounterName.GSPdeleteGood)+"/bad="+gspValue(desc, CounterName.GSPdeleteBad)+")") ;
out.println(" HEADs = "+gspValue(desc, CounterName.GSPhead)+ " (good="+gspValue(desc, CounterName.GSPheadGood)+"/bad="+gspValue(desc, CounterName.GSPheadBad)+")") ;
}
private long gspValue(DatasetRef desc, CounterName cn) {
long x1 = desc.readGraphStore.getCounters().value(cn) ;
long x2 = desc.readWriteGraphStore.getCounters().value(cn) ;
return x1+x2 ;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy