use of org.jboss.resteasy.annotations.GZIP in project scheduling by ow2-proactive.
the class SchedulerStateRest method getJobTaskStatesPaginated.
/**
* Returns a list of taskState with pagination
*
* @param sessionId
* a valid session id
* @param jobId
* the job id
* @param offset
* the index of the first TaskState to return
* @param limit
* the index (non inclusive) of the last TaskState to return
* @return a list of task' states of the job <code>jobId</code>
*/
@Override
@GET
@GZIP
@Path("jobs/{jobid}/taskstates/paginated")
@Produces("application/json")
public RestPage<TaskStateData> getJobTaskStatesPaginated(@HeaderParam("sessionid") String sessionId, @PathParam("jobid") String jobId, @QueryParam("offset") @DefaultValue("0") int offset, @QueryParam("limit") @DefaultValue("-1") int limit) throws NotConnectedRestException, UnknownJobRestException, PermissionRestException {
if (limit == -1)
limit = TASKS_PAGE_SIZE;
try {
Scheduler s = checkAccess(sessionId, "jobs/" + jobId + "/taskstates/paginated");
JobState jobState = s.getJobState(jobId);
TaskStatesPage page = jobState.getTasksPaginated(offset, limit);
List<TaskStateData> tasks = map(page.getTaskStates(), TaskStateData.class);
return new RestPage<TaskStateData>(tasks, page.getSize());
} catch (PermissionException e) {
throw new PermissionRestException(e);
} catch (UnknownJobException e) {
throw new UnknownJobRestException(e);
} catch (NotConnectedException e) {
throw new NotConnectedRestException(e);
}
}
use of org.jboss.resteasy.annotations.GZIP in project scheduling by ow2-proactive.
the class SchedulerStateRest method jobResultValue.
/**
* Returns all the task results of this job as a map whose the key is the
* name of the task and its task result.<br>
* If the result cannot be instantiated, the content is replaced by the
* string 'Unknown value type'. To get the serialized form of a given
* result, one has to call the following restful service
* jobs/{jobid}/tasks/{taskname}/result/serializedvalue
*
* @param sessionId
* a valid session id
* @param jobId
* a job id
*/
@Override
@GET
@GZIP
@Path("jobs/{jobid}/result/value")
@Produces("application/json")
public Map<String, String> jobResultValue(@HeaderParam("sessionid") String sessionId, @PathParam("jobid") String jobId) throws NotConnectedRestException, PermissionRestException, UnknownJobRestException {
try {
Scheduler s = checkAccess(sessionId, "jobs/" + jobId + "/result/value");
JobResult jobResult = PAFuture.getFutureValue(s.getJobResult(jobId));
if (jobResult == null) {
return null;
}
Map<String, TaskResult> allResults = jobResult.getAllResults();
Map<String, String> res = new HashMap<>(allResults.size());
for (final Entry<String, TaskResult> entry : allResults.entrySet()) {
TaskResult taskResult = entry.getValue();
String value = getTaskResultValueAsStringOrExceptionStackTrace(taskResult);
res.put(entry.getKey(), value);
}
return res;
} catch (PermissionException e) {
throw new PermissionRestException(e);
} catch (UnknownJobException e) {
throw new UnknownJobRestException(e);
} catch (NotConnectedException e) {
throw new NotConnectedRestException(e);
}
}
use of org.jboss.resteasy.annotations.GZIP in project scheduling by ow2-proactive.
the class SchedulerStateRest method valueOfTaskResult.
/**
* Returns the value of the task result of task <code>taskName</code> of the
* job <code>jobId</code> <strong>the result is deserialized before sending
* to the client, if the class is not found the content is replaced by the
* string 'Unknown value type' </strong>. To get the serialized form of a
* given result, one has to call the following restful service
* jobs/{jobid}/tasks/{taskname}/result/serializedvalue
*
* @param sessionId
* a valid session id
* @param jobId
* the id of the job
* @param taskname
* the name of the task
* @return the value of the task result
*/
@Override
@GET
@GZIP
@Path("jobs/{jobid}/tasks/{taskname}/result/value")
@Produces("*/*")
public Serializable valueOfTaskResult(@HeaderParam("sessionid") String sessionId, @PathParam("jobid") String jobId, @PathParam("taskname") String taskname) throws Throwable {
Scheduler s = checkAccess(sessionId, "jobs/" + jobId + "/tasks/" + taskname + "/result/value");
TaskResult taskResult = s.getTaskResult(jobId, taskname);
return getTaskResultValueAsStringOrExceptionStackTrace(taskResult);
}
use of org.jboss.resteasy.annotations.GZIP in project scheduling by ow2-proactive.
the class SchedulerStateRest method taskLogByTag.
/**
* Returns all the logs generated by a set of the tasks (either stdout and
* stderr) filtered by a tag.
*
* @param sessionId
* a valid session id
* @param jobId
* the id of the job
* @param taskTag
* the tag used to filter the tasks.
* @return the list of logs generated by each filtered task (either stdout
* and stderr) or an empty string if the result is not yet available
*/
@Override
@GET
@GZIP
@Path("jobs/{jobid}/tasks/tag/{tasktag}/result/log/all")
@Produces("application/json")
public String taskLogByTag(@HeaderParam("sessionid") String sessionId, @PathParam("jobid") String jobId, @PathParam("tasktag") String taskTag) throws NotConnectedRestException, UnknownJobRestException, PermissionRestException {
try {
Scheduler s = checkAccess(sessionId, "jobs/" + jobId + "/tasks/tag/" + taskTag + "/result/log/err");
List<TaskResult> trs = s.getTaskResultsByTag(jobId, taskTag);
StringBuffer buf = new StringBuffer();
for (TaskResult tr : trs) {
if (tr.getOutput() != null) {
buf.append(tr.getOutput().getAllLogs(true));
}
}
return buf.toString();
} catch (PermissionException e) {
throw new PermissionRestException(e);
} catch (UnknownJobException e) {
throw new UnknownJobRestException(e);
} catch (NotConnectedException e) {
throw new NotConnectedRestException(e);
}
}
use of org.jboss.resteasy.annotations.GZIP in project scheduling by ow2-proactive.
the class RMRest method getStatHistory.
/**
* Return the statistic history contained in the RM's RRD database,
* without redundancy, in a friendly JSON format.
*
* The following sources will be queried from the RRD DB :<pre>
* { "BusyNodesCount",
* "FreeNodesCount",
* "DownNodesCount",
* "AvailableNodesCount",
* "AverageActivity" }</pre>
*
* @param sessionId a valid session
* @param range a String of 5 chars, one for each stat history source, indicating the time range to fetch
* for each source. Each char can be:<ul>
* <li>'a' 1 minute
* <li>'m' 10 minutes
* <li>'h' 1 hour
* <li>'H' 8 hours
* <li>'d' 1 day
* <li>'w' 1 week
* <li>'M' 1 month
* <li>'y' 1 year</ul>
* @return a JSON object containing a key for each source
* @throws InstanceNotFoundException
* @throws IntrospectionException
* @throws ReflectionException
* @throws IOException
* @throws MalformedObjectNameException
* @throws NullPointerException
* @throws InterruptedException
* @throws NotConnectedException
*/
@Override
@GET
@GZIP
@Path("stathistory")
@Produces("application/json")
public String getStatHistory(@HeaderParam("sessionid") String sessionId, @QueryParam("range") String range) throws InstanceNotFoundException, IntrospectionException, ReflectionException, IOException, MalformedObjectNameException, NullPointerException, InterruptedException, NotConnectedException {
RMProxyUserInterface rm = checkAccess(sessionId);
// to make it recognizable by StatHistoryCaching
if (range.length() > dataSources.length) {
range = range.substring(0, dataSources.length);
}
// complete range if too short
while (range.length() < dataSources.length) {
range += 'a';
}
StatHistoryCacheEntry cache = StatHistoryCaching.getInstance().getEntry(range);
// found unexpired cache entry matching the parameters: return it immediately
if (cache != null) {
return cache.getValue();
}
long l1 = System.currentTimeMillis();
ObjectName on = new ObjectName(RMJMXBeans.RUNTIMEDATA_MBEAN_NAME);
AttributeList attrs = rm.getMBeanAttributes(on, new String[] { "StatisticHistory" });
Attribute attr = (Attribute) attrs.get(0);
// content of the RRD4J database backing file
byte[] rrd4j = (byte[]) attr.getValue();
File rrd4jDb = File.createTempFile("database", "rr4dj");
rrd4jDb.deleteOnExit();
try (OutputStream out = new FileOutputStream(rrd4jDb)) {
out.write(rrd4j);
}
// create RRD4J DB, should be identical to the one held by the RM
RrdDb db = new RrdDb(rrd4jDb.getAbsolutePath(), true);
long timeEnd = db.getLastUpdateTime();
// force float separator for JSON parsing
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.US);
otherSymbols.setDecimalSeparator('.');
// formatting will greatly reduce response size
DecimalFormat formatter = new DecimalFormat("###.###", otherSymbols);
// construct the JSON response directly in a String
StringBuilder result = new StringBuilder();
result.append("{");
for (int i = 0; i < dataSources.length; i++) {
String dataSource = dataSources[i];
char zone = range.charAt(i);
long timeStart;
switch(zone) {
default:
case // 1 minute
'a':
timeStart = timeEnd - 60;
break;
case // 10 minute
'm':
timeStart = timeEnd - 60 * 10;
break;
case // 1 hours
'h':
timeStart = timeEnd - 60 * 60;
break;
case // 8 hours
'H':
timeStart = timeEnd - 60 * 60 * 8;
break;
case // 1 day
'd':
timeStart = timeEnd - 60 * 60 * 24;
break;
case // 1 week
'w':
timeStart = timeEnd - 60 * 60 * 24 * 7;
break;
case // 1 month
'M':
timeStart = timeEnd - 60 * 60 * 24 * 28;
break;
case // 1 year
'y':
timeStart = timeEnd - 60 * 60 * 24 * 365;
break;
}
FetchRequest req = db.createFetchRequest(ConsolFun.AVERAGE, timeStart, timeEnd);
req.setFilter(dataSource);
FetchData fetchData = req.fetchData();
result.append("\"").append(dataSource).append("\":[");
double[] values = fetchData.getValues(dataSource);
for (int j = 0; j < values.length; j++) {
if (Double.compare(Double.NaN, values[j]) == 0) {
result.append("null");
} else {
result.append(formatter.format(values[j]));
}
if (j < values.length - 1)
result.append(',');
}
result.append(']');
if (i < dataSources.length - 1)
result.append(',');
}
result.append("}");
db.close();
rrd4jDb.delete();
String ret = result.toString();
StatHistoryCaching.getInstance().addEntry(range, l1, ret);
return ret;
}
Aggregations