Skip to content

Commit

Permalink
trace-server: Update experiment handling to use query parameters
Browse files Browse the repository at this point in the history
[Changed] Update experiment handling to use query parameters
[Fixed] Index experiment after creation
[Fixed] Serialization of experiments

Change-Id: If6369d2e098894402bca9fed6c0dae7f5179e758
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/160319
Tested-by: Trace Compass Bot <tracecompass-bot@eclipse.org>
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
  • Loading branch information
bhufmann committed Apr 9, 2020
1 parent ac0abb4 commit 3d5221a
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 15 deletions.
Expand Up @@ -13,14 +13,19 @@

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.Response;

import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views.QueryParameters;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services.ExperimentManagerService;
import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.ExperimentModelStub;
import org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.TraceModelStub;
Expand Down Expand Up @@ -57,11 +62,16 @@ public void testExperiment() {

assertEquals("experiment set should be empty at this point", Collections.emptySet(), getExperiments(expTarget));

Form form = new Form(NAME, TEST);
form.param(TRACES, CONTEXT_SWITCHES_KERNEL_UUID.toString());
form.param(TRACES, CONTEXT_SWITCHES_UST_UUID.toString());
List<String> traceUUIDs = new ArrayList<>();
traceUUIDs.add(CONTEXT_SWITCHES_KERNEL_UUID.toString());
traceUUIDs.add(CONTEXT_SWITCHES_UST_UUID.toString());

assertEquals("Failed to POST the experiment", EXPECTED, expTarget.request().post(Entity.form(form)).readEntity(ExperimentModelStub.class));
Map<String, Object> parameters = new HashMap<>();
parameters.put(NAME, EXPECTED.getName());
parameters.put(TRACES, traceUUIDs);

Response response = expTarget.request().post(Entity.json(new QueryParameters(parameters , Collections.emptyList())));
assertEquals("Failed to POST the experiment", EXPECTED, response.readEntity(ExperimentModelStub.class));
assertEquals("Failed to add experiment to set of experiments", Collections.singleton(EXPECTED), getExperiments(expTarget));
assertEquals("Adding an experiment should not change the trace set", CONTEXT_SWITCH_SET, getTraces(traces));
assertEquals("Failed to get the experiment by its UUID", EXPECTED, expTarget.path(EXPERIMENT_UUID).request().get(ExperimentModelStub.class));
Expand Down
Expand Up @@ -12,11 +12,11 @@
package org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.services;

import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
Expand All @@ -30,11 +30,13 @@
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.tracecompass.incubator.internal.trace.server.jersey.rest.core.model.views.QueryParameters;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
Expand Down Expand Up @@ -115,18 +117,26 @@ public Response deleteExperiment(@PathParam("uuid") UUID uuid) {
* Post a new experiment encapsulating the traces from the list of
* {@link UUID}s.
*
* @param name
* name for the experiment.
* @param traceUUIDs
* {@link UUID}s of the traces to add to the experiment
* @param queryParameters
* Parameters to post a experiment as described by
* {@link QueryParameters}
* - name -> name for the experiment.
* - traces -> List of UUID strings of the traces to add to the experiment
*
* @return no content response if one of the trace {@link UUID}s does not map to
* any trace.
*/
@POST
@Consumes({ MediaType.APPLICATION_FORM_URLENCODED })
@Produces({ MediaType.APPLICATION_JSON })
public Response postExperiment(@FormParam("name") String name,
@FormParam("traces") List<UUID> traceUUIDs) {
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response postExperiment(QueryParameters queryParameters) {
Map<String, Object> parameters = queryParameters.getParameters();
String name = (String) parameters.get("name"); //$NON-NLS-1$
Object traces = parameters.get("traces"); //$NON-NLS-1$
if (! (traces instanceof List<?>)) {
return Response.status(Status.BAD_REQUEST).build();
}
List<?> traceUUIDs = (List<?>) traces;
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IPath ipath = root.getLocation().append(EXPERIMENTS).append(name);
IResource resource = root.findMember(ipath);
Expand All @@ -137,7 +147,14 @@ public Response postExperiment(@FormParam("name") String name,

ITmfTrace[] array = new ITmfTrace[traceUUIDs.size()];
int i = 0;
for (UUID uuid : traceUUIDs) {
for (Object uuidObj : traceUUIDs) {
String uuidStr;
if (uuidObj instanceof String) {
uuidStr = (String) uuidObj;
} else {
return Response.status(Status.BAD_REQUEST).build();
}
UUID uuid = UUID.fromString(uuidStr);
ITmfTrace trace = TraceManagerService.getTraceByUUID(uuid);
if (trace == null) {
return Response.noContent().build();
Expand All @@ -151,7 +168,14 @@ public Response postExperiment(@FormParam("name") String name,
return Response.serverError().entity(e.getMessage()).build();
}
}

TmfExperiment experiment = new TmfExperiment(ITmfEvent.class, ipath.toOSString(), array, TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, resource);
experiment.indexTrace(false);
// read first event to make sure start time is initialized
ITmfContext ctx = experiment.seekEvent(0);
experiment.getNext(ctx);
ctx.dispose();

TmfSignalManager.dispatchSignal(new TmfTraceOpenedSignal(this, experiment, null));
return Response.ok(experiment).build();
}
Expand Down
Expand Up @@ -48,6 +48,8 @@ public void serialize(TmfExperiment value, JsonGenerator gen, SerializerProvider
gen.writeNumberField("nbEvents", value.getNbEvents()); //$NON-NLS-1$
gen.writeNumberField("start", value.getStartTime().toNanos()); //$NON-NLS-1$
gen.writeNumberField("end", value.getEndTime().toNanos()); //$NON-NLS-1$
String indexingStatus = value.isIndexing() ? "RUNNING" : "COMPLETED"; //$NON-NLS-1$ //$NON-NLS-2$
gen.writeStringField("indexingStatus", indexingStatus); //$NON-NLS-1$
gen.writeObjectField("traces", value.getTraces()); //$NON-NLS-1$
gen.writeEndObject();
}
Expand Down

0 comments on commit 3d5221a

Please sign in to comment.