Skip to content

Commit

Permalink
#3 Architecture for Observed Activity.
Browse files Browse the repository at this point in the history
  • Loading branch information
baardl committed Mar 2, 2016
1 parent e80b8b5 commit 8e38f32
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 0 deletions.
67 changes: 67 additions & 0 deletions src/main/java/org/valuereporter/activity/ActivitiesResource.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package org.valuereporter.activity;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

import static org.slf4j.LoggerFactory.getLogger;

/**
* Created by baardl on 02.03.16.
*/
@Component
@Path("/activities")
public class ActivitiesResource {
private static final Logger log = getLogger(ActivitiesResource.class);

private final ObjectMapper mapper;

@Autowired
public ActivitiesResource(ObjectMapper mapper) {
this.mapper = mapper;
}

@POST
@Path("/{prefix}")
@Produces(MediaType.APPLICATION_JSON)
public Response addObservationActivity(@PathParam("prefix") String prefix, String jsonBody){
log.trace("addObservationMethod prefix {} , jsonBody {}.", prefix, jsonBody);
List<ObservedActivity> observedActivities = null;
try {
observedActivities = mapper.readValue(jsonBody, new TypeReference<ArrayList<ObservedActivityJson>>(){ });
if (observedActivities != null) {
for (ObservedActivity observedActivity : observedActivities) {
observedActivity.setPrefix(prefix);
}
}
} catch (IOException e) {
log.warn("Unexpected error trying to produce list of ObservedActivity from \n prefix {} \n json {}, \n Reason {}",prefix, jsonBody, e.getMessage());
return Response.status(Response.Status.NOT_ACCEPTABLE).entity("Error converting to requested format.").build();
}

long updatedCount = observedActivities.size(); //writeOperations.addObservations(prefix,observedMethods);
String message = "added " + updatedCount + " observedMethods.";
Writer strWriter = new StringWriter();
try {
mapper.writeValue(strWriter, message);
} catch (IOException e) {
log.error("Could not convert {} to JSON.", updatedCount, e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Error converting to requested format.").build();
}
return Response.ok(strWriter.toString()).build();
}
}
58 changes: 58 additions & 0 deletions src/main/java/org/valuereporter/activity/ObservedActivity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.valuereporter.activity;

import java.util.Map;

/**
* This class will represent an activity. This activity will have some main characteristics:
* - name: Unique identifier for a type of activity
* - startTime: When the activity occured
* - data: map of parameters, aka payload
*
* These methods will be forwarded to the Valuereporter analyzer, as an activity that has occured.
*
* @author <a href="[email protected]">Bard Lind</a>
*/
public class ObservedActivity {
//The name is the identification of a method. Typically the name is the full name, including class, and package.
private String prefix = "";

public String getPrefix() {
return prefix;
}

public void setPrefix(String prefix) {
this.prefix = prefix;
}

private final String name;
private final long startTime;
private final Map<String,Object> data;

public ObservedActivity(String name, long startTime, Map<String,Object> data) {
this.name = name;
this.startTime = startTime;
this.data = data;
}

public String getName() {
return name;
}

public long getStartTime() {
return startTime;
}


public Map<String, Object> getData() {
return data;
}

@Override
public String toString() {
return "ObservedActivity{" +
"name='" + name + '\'' +
", startTime=" + startTime +
", data=" + data +
'}';
}
}
17 changes: 17 additions & 0 deletions src/main/java/org/valuereporter/activity/ObservedActivityJson.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.valuereporter.activity;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.Map;

/**
* @author <a href="[email protected]">Bard Lind</a>
*/
public class ObservedActivityJson extends ObservedActivity {

@JsonCreator
public ObservedActivityJson(@JsonProperty("name") String name, @JsonProperty("startTime") long startTime, @JsonProperty("data") Map<String,Object> data) {
super(name, startTime, data);
}
}

0 comments on commit 8e38f32

Please sign in to comment.