diff --git a/Core/src/main/java/com/microsoft/applicationinsights/channel/GzipTelemetrySerializer.java b/Core/src/main/java/com/microsoft/applicationinsights/channel/GzipTelemetrySerializer.java index b09a4f208a..5e581d382e 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/channel/GzipTelemetrySerializer.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/channel/GzipTelemetrySerializer.java @@ -5,7 +5,7 @@ import java.io.StringWriter; import java.util.Collection; import java.util.zip.GZIPOutputStream; -import com.microsoft.applicationinsights.datacontracts.JsonWriter; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; import com.google.common.base.Optional; import com.google.common.base.Preconditions; @@ -42,7 +42,7 @@ public final class GzipTelemetrySerializer implements TelemetrySerializer { try { int counter = 0; StringWriter writer = new StringWriter(); - JsonWriter jsonWriter = new com.microsoft.applicationinsights.implementation.JsonWriter(writer); + JsonTelemetryDataSerializer jsonWriter = new JsonTelemetryDataSerializer(writer); // The format is: // 1. Telemetry is written in Json @@ -57,11 +57,14 @@ public final class GzipTelemetrySerializer implements TelemetrySerializer { ++counter; telemetry.serialize(jsonWriter); + jsonWriter.close(); + String asJson = writer.toString(); zipStream.write(asJson.getBytes()); if (counter < telemetries.size()) { writer.getBuffer().setLength(0); + jsonWriter.reset(writer); } } } finally { diff --git a/Core/src/main/java/com/microsoft/applicationinsights/channel/SimpleHttpChannel.java b/Core/src/main/java/com/microsoft/applicationinsights/channel/SimpleHttpChannel.java index 08437a35c3..2c81c267bb 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/channel/SimpleHttpChannel.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/channel/SimpleHttpChannel.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.io.StringWriter; import java.util.concurrent.TimeUnit; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; import com.microsoft.applicationinsights.implementation.JsonWriter; import org.apache.http.HttpEntity; @@ -38,7 +39,8 @@ public class SimpleHttpChannel implements TelemetryChannel { // Establish the payload. StringWriter writer = new StringWriter(); - item.serialize(new JsonWriter(writer)); +// item.serialize(new JsonWriter(writer)); + item.serialize(new JsonTelemetryDataSerializer(writer)); // Send it. diff --git a/Core/src/main/java/com/microsoft/applicationinsights/channel/StdOutChannel.java b/Core/src/main/java/com/microsoft/applicationinsights/channel/StdOutChannel.java index d7d9310039..3df143a830 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/channel/StdOutChannel.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/channel/StdOutChannel.java @@ -1,5 +1,6 @@ package com.microsoft.applicationinsights.channel; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; import com.microsoft.applicationinsights.implementation.JsonWriter; import java.io.IOException; @@ -25,7 +26,8 @@ public class StdOutChannel implements TelemetryChannel public void send(Telemetry item) { try { StringWriter writer = new StringWriter(); - item.serialize(new JsonWriter(writer)); +// item.serialize(new JsonWriter(writer)); + item.serialize(new JsonTelemetryDataSerializer(writer)); System.out.println("TELEMETRY: " + writer.toString()); } catch (IOException ioe) { ioe.printStackTrace(System.err); diff --git a/Core/src/main/java/com/microsoft/applicationinsights/channel/TransmissionNetworkOutput.java b/Core/src/main/java/com/microsoft/applicationinsights/channel/TransmissionNetworkOutput.java index c74fb8ee00..7b91e468b4 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/channel/TransmissionNetworkOutput.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/channel/TransmissionNetworkOutput.java @@ -1,6 +1,9 @@ package com.microsoft.applicationinsights.channel; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.util.concurrent.TimeUnit; import com.google.common.base.Strings; @@ -80,12 +83,11 @@ public final class TransmissionNetworkOutput implements TransmissionOutput { response = httpClient.execute(request); HttpEntity respEntity = response.getEntity(); - if (respEntity != null) { - respEntity.getContent().close(); - } int code = response.getStatusLine().getStatusCode(); if (code != 200) { - // TODO: check more and log + if (respEntity != null) { + logError(respEntity); + } } } catch (IOException ioe) { ioe.printStackTrace(System.err); @@ -104,6 +106,20 @@ public final class TransmissionNetworkOutput implements TransmissionOutput { return true; } + private void logError(HttpEntity respEntity) { + InputStream inputStream = null; + try { + inputStream = respEntity.getContent(); + InputStreamReader streamReader = new InputStreamReader(inputStream, "UTF-8"); + BufferedReader reader = new BufferedReader(streamReader); + String responseLine = reader.readLine(); + respEntity.getContent().close(); + // TODO: check more and log + } catch (IOException e) { + e.printStackTrace(); + } + } + private HttpPost createTransmissionPostRequest(Transmission transmission) { HttpPost request = new HttpPost(serverUri); request.addHeader(CONTENT_TYPE_HEADER, transmission.getWebContentType()); diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/BaseTelemetry.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/BaseTelemetry.java index f4ee06697f..1b76527f7e 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/BaseTelemetry.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/BaseTelemetry.java @@ -1,6 +1,11 @@ package com.microsoft.applicationinsights.datacontracts; import com.microsoft.applicationinsights.channel.Telemetry; +import com.microsoft.applicationinsights.implementation.schemav2.Data; +import com.microsoft.applicationinsights.implementation.schemav2.Envelope; +import com.microsoft.applicationinsights.implementation.schemav2.SendableData; +import com.microsoft.applicationinsights.util.LocalStringsUtils; +import com.microsoft.applicationinsights.util.MapUtil; import java.io.IOException; import java.util.Date; @@ -10,47 +15,58 @@ import java.util.Map; /** * Superclass for all telemetry data classes. */ -public abstract class BaseTelemetry implements Telemetry +public abstract class BaseTelemetry implements Telemetry { private TelemetryContext context; - private Date timestamp; + private Date timestamp; - protected BaseTelemetry() - { + protected BaseTelemetry() { } - protected void initialize(Map properties) - { + protected void initialize(Map properties) { this.context = new TelemetryContext(properties, new HashMap()); } @Override - public Date getTimestamp() - { + public Date getTimestamp() { return timestamp; } @Override - public void setTimestamp(Date date) - { + public void setTimestamp(Date date) { this.timestamp = date; } @Override - public TelemetryContext getContext() - { + public TelemetryContext getContext() { return context; } @Override - public Map getProperties() - { + public Map getProperties() { return this.context.getProperties(); } @Override - public abstract void sanitize(); + public void sanitize() { + MapUtil.sanitizeProperties(this.getProperties()); + additionalSanitize(); + } @Override - public abstract void serialize(JsonWriter writer) throws IOException; + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + + Envelope envelope = new Envelope(); + + envelope.setIKey(context.getInstrumentationKey()); + envelope.setData(new Data(getData())); + envelope.setTime(LocalStringsUtils.getDateFormatter().format(getTimestamp())); + envelope.setTags(context.getProperties()); + + envelope.serialize(writer); + } + + protected abstract void additionalSanitize(); + + protected abstract T getData(); } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/EventTelemetry.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/EventTelemetry.java index cf19a1e098..2484579009 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/EventTelemetry.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/EventTelemetry.java @@ -1,9 +1,8 @@ package com.microsoft.applicationinsights.datacontracts; -import java.io.IOException; import java.util.Map; -import com.microsoft.applicationinsights.extensibility.model.EventData; +import com.microsoft.applicationinsights.implementation.schemav2.*; import com.microsoft.applicationinsights.util.LocalStringsUtils; import com.microsoft.applicationinsights.util.MapUtil; @@ -12,79 +11,44 @@ import com.google.common.base.Strings; /** * Telemetry used to track events. */ -public class EventTelemetry extends BaseTelemetry -{ +public class EventTelemetry extends BaseTelemetry { private final EventData data; - public EventTelemetry() - { + public EventTelemetry() { super(); this.data = new EventData(); initialize(this.data.getProperties()); } - public EventTelemetry(String name) - { + public EventTelemetry(String name) { this(); this.setName(name); } - public Map getMetrics() - { + public Map getMetrics() { return this.data.getMeasurements(); } - public String getName() - { + public String getName() { return this.data.getName(); } - public void setName(String name) - { - if (Strings.isNullOrEmpty(name)) + public void setName(String name) { + if (Strings.isNullOrEmpty(name)) { throw new IllegalArgumentException("The event name cannot be null or empty"); + } + this.data.setName(name); } @Override - public void sanitize() - { + protected void additionalSanitize() { this.data.setName(LocalStringsUtils.sanitize(this.data.getName(), 1024)); - MapUtil.sanitizeProperties(this.getProperties()); MapUtil.sanitizeMeasurements(this.getMetrics()); } @Override - public void serialize(JsonWriter writer) throws IOException - { - writer.writeStartObject(); - - writer.writeProperty("ver", 1); - writer.writeProperty("name", "Microsoft.ApplicationInsights.Event"); - writer.writeProperty("time", this.getTimestamp()); - - getContext().serialize(writer); - - writer.writePropertyName("data"); - - { - writer.writeStartObject(); - - writer.writeProperty("type", "Microsoft.ApplicationInsights.EventData"); - - writer.writePropertyName("item"); - { - writer.writeStartObject(); - writer.writeProperty("ver", this.data.getVer()); - writer.writeProperty("name", LocalStringsUtils.populateRequiredStringWithNullValue(this.data.getName(), "name", EventTelemetry.class.getName())); - writer.writeMetricsProperty("measurements", this.data.getMeasurements()); - writer.writeProperty("properties", this.data.getProperties()); - writer.writeEndObject(); - } - - writer.writeEndObject(); - } - - writer.writeEndObject(); + protected EventData getData() { + return data; } } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/ExceptionTelemetry.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/ExceptionTelemetry.java index 6c23bea455..dcea2ebec4 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/ExceptionTelemetry.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/ExceptionTelemetry.java @@ -1,13 +1,12 @@ package com.microsoft.applicationinsights.datacontracts; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; -import com.microsoft.applicationinsights.extensibility.model.ExceptionData; -import com.microsoft.applicationinsights.extensibility.model.ExceptionDetails; -import com.microsoft.applicationinsights.extensibility.model.StackFrame; +import com.microsoft.applicationinsights.implementation.schemav2.ExceptionData; +import com.microsoft.applicationinsights.implementation.schemav2.ExceptionDetails; +import com.microsoft.applicationinsights.implementation.schemav2.StackFrame; import com.microsoft.applicationinsights.util.LocalStringsUtils; import com.microsoft.applicationinsights.util.MapUtil; @@ -16,206 +15,80 @@ import com.google.common.base.Strings; /** * Telemetry used to track events. */ -public class ExceptionTelemetry extends BaseTelemetry -{ +public class ExceptionTelemetry extends BaseTelemetry { private final ExceptionData data; private Exception exception; - private ExceptionTelemetry() - { + private ExceptionTelemetry() { super(); this.data = new ExceptionData(); initialize(this.data.getProperties()); this.setExceptionHandledAt(ExceptionHandledAt.Unhandled); } - public ExceptionTelemetry(Exception exception) - { + public ExceptionTelemetry(Exception exception) { this(); this.setException(exception); } - public Exception getException() - { + public Exception getException() { return exception; } - public void setException(Exception exception) - { + public void setException(Exception exception) { this.exception = exception; updateException(exception); } - public ExceptionHandledAt getExceptionHandledAt() - { + public ExceptionHandledAt getExceptionHandledAt() { return Enum.valueOf(ExceptionHandledAt.class, this.data.getHandledAt()); } - public void setExceptionHandledAt(ExceptionHandledAt value) - { + public void setExceptionHandledAt(ExceptionHandledAt value) { this.data.setHandledAt(value.toString()); } - public Map getMetrics() - { + public Map getMetrics() { return this.data.getMeasurements(); } - public List getExceptions() - { + public List getExceptions() { return this.data.getExceptions(); } - - @Override - public void sanitize() - { - MapUtil.sanitizeProperties(this.getProperties()); + protected void additionalSanitize() { MapUtil.sanitizeMeasurements(this.getMetrics()); } @Override - public void serialize(JsonWriter writer) throws IOException - { - writer.writeStartObject(); - - writer.writeProperty("ver", 1); - writer.writeProperty("name", "Microsoft.ApplicationInsights.Exception"); - writer.writeProperty("time", this.getTimestamp()); - - getContext().serialize(writer); - - writer.writePropertyName("data"); - - { - writer.writeStartObject(); - - writer.writeProperty("type", "Microsoft.ApplicationInsights.ExceptionData"); - - writer.writePropertyName("item"); - { - writer.writeStartObject(); - - writer.writeProperty("ver", this.data.getVer()); - writer.writeProperty("handledAt", - LocalStringsUtils.populateRequiredStringWithNullValue(this.data.getHandledAt(), "handledAt", ExceptionTelemetry.class.getName())); - writer.writeMetricsProperty("measurements", this.data.getMeasurements()); - writer.writeProperty("properties", this.data.getProperties()); - - writer.writePropertyName("exceptions"); - { - writer.writeStartArray(); - - serialize(this.getExceptions(), writer); - - writer.writeEndArray(); - } - - writer.writeEndObject(); - } - - writer.writeEndObject(); - } - - writer.writeEndObject(); + protected ExceptionData getData() { + return data; } - private void serialize(List exceptions, JsonWriter writer) throws IOException - { - int index = 0; - - for (ExceptionDetails exceptionDetails : exceptions) - { - if (index++ != 0) - writer.writeComma(); - - writer.writeStartObject(); - - writer.writeProperty("id", exceptionDetails.getId()); - if (exceptionDetails.getOuterId() != 0) - writer.writeProperty("outerId", exceptionDetails.getOuterId()); - - writer.writeProperty("typeName", - LocalStringsUtils.populateRequiredStringWithNullValue(exceptionDetails.getTypeName(), "typeName", ExceptionTelemetry.class.getName())); - writer.writeProperty("message", - LocalStringsUtils.populateRequiredStringWithNullValue(exceptionDetails.getMessage(), "message", ExceptionTelemetry.class.getName())); - - if (exceptionDetails.getHasFullStack()) - writer.writeProperty("hasFullStack", exceptionDetails.getHasFullStack()); - - writer.writeProperty("stack", exceptionDetails.getStack()); - - if (exceptionDetails.getParsedStack().size() > 0) - { - writer.writePropertyName("parsedStack"); - { - writer.writeStartArray(); - - int frameIdx = 0; - - for (StackFrame frame: exceptionDetails.getParsedStack()) - { - if (frameIdx++ != 0) - writer.writeComma(); - - writer.writeStartObject(); - - serialize(frame, writer); - - writer.writeEndObject(); - } - - writer.writeEndArray(); - } - } - - writer.writeEndObject(); - } - } - - private void serialize(StackFrame frame, JsonWriter writer) throws IOException - { - writer.writeProperty("level", frame.getLevel()); - writer.writeProperty( - "method", - LocalStringsUtils.populateRequiredStringWithNullValue(frame.getMethod(), "StackFrameMethod", ExceptionTelemetry.class.getName())); - writer.writeProperty("fileName", frame.getFileName()); - - // 0 means it is unavailable - if (frame.getLine() != 0) - { - writer.writeProperty("line", frame.getLine()); - } - } - - private void updateException(Exception exception) - { + private void updateException(Exception exception) { ArrayList exceptions = new ArrayList(); convertExceptionTree(exception, null, exceptions); this.data.setExceptions(exceptions); } - private static void convertExceptionTree(Throwable exception, ExceptionDetails parentExceptionDetails, List exceptions) - { - if (exception == null) + private static void convertExceptionTree(Throwable exception, ExceptionDetails parentExceptionDetails, List exceptions) { + if (exception == null) { exception = new Exception(""); + } ExceptionDetails exceptionDetails = createWithStackInfo(exception, parentExceptionDetails); exceptions.add(exceptionDetails); - if (exception.getCause() != null) - { + if (exception.getCause() != null) { convertExceptionTree(exception.getCause(), exceptionDetails, exceptions); } } - private static ExceptionDetails createWithStackInfo(Throwable exception, ExceptionDetails parentExceptionDetails) - { - if (exception == null) - { + private static ExceptionDetails createWithStackInfo(Throwable exception, ExceptionDetails parentExceptionDetails) { + if (exception == null) { throw new IllegalArgumentException("exception cannot be null"); } @@ -224,22 +97,23 @@ public class ExceptionTelemetry extends BaseTelemetry exceptionDetails.setTypeName(exception.getClass().getName()); exceptionDetails.setMessage(exception.getMessage()); - if (parentExceptionDetails != null) + if (parentExceptionDetails != null) { exceptionDetails.setOuterId(parentExceptionDetails.getId()); + } StackTraceElement[] trace = exception.getStackTrace(); - if (trace != null && trace.length > 0) - { + if (trace != null && trace.length > 0) { List stack = exceptionDetails.getParsedStack(); // We need to present the stack trace in reverse order. - for (int idx = 0; idx < trace.length; idx++) - { + for (int idx = 0; idx < trace.length; idx++) { StackTraceElement elem = trace[idx]; - if (elem.isNativeMethod()) continue; + if (elem.isNativeMethod()) { + continue; + } String className = elem.getClassName(); @@ -248,10 +122,13 @@ public class ExceptionTelemetry extends BaseTelemetry frame.setFileName(elem.getFileName()); frame.setLine(elem.getLineNumber()); - if (!Strings.isNullOrEmpty(className)) + if (!Strings.isNullOrEmpty(className)) { frame.setMethod(elem.getClassName() + "." + elem.getMethodName()); - else + } + else { frame.setMethod(elem.getMethodName()); + } + stack.add(frame); } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/HttpRequestTelemetry.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/HttpRequestTelemetry.java index 5f81e3b3ed..eec2983d1d 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/HttpRequestTelemetry.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/HttpRequestTelemetry.java @@ -1,12 +1,11 @@ package com.microsoft.applicationinsights.datacontracts; -import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Date; import java.util.Map; -import com.microsoft.applicationinsights.extensibility.model.RequestData; +import com.microsoft.applicationinsights.implementation.schemav2.RequestData; import com.microsoft.applicationinsights.util.LocalStringsUtils; import com.microsoft.applicationinsights.util.MapUtil; @@ -15,15 +14,13 @@ import com.google.common.base.Strings; /** * Telemetry used to track events. */ -public class HttpRequestTelemetry extends BaseTelemetry -{ +public class HttpRequestTelemetry extends BaseTelemetry { private final RequestData data; /** * Initializes a new instance of the RequestTelemetry class. */ - public HttpRequestTelemetry() - { + public HttpRequestTelemetry() { super(); this.data = new RequestData(); initialize(this.data.getProperties()); @@ -40,29 +37,27 @@ public class HttpRequestTelemetry extends BaseTelemetry * @param responseCode The HTTP response code. * @param success 'true' if the request was a success, 'false' otherwise. */ - public HttpRequestTelemetry(String name, Date timestamp, long duration, String responseCode, boolean success) - { + public HttpRequestTelemetry(String name, Date timestamp, long duration, String responseCode, boolean success) { this(); this.setName(name); - this.setTimestamp(timestamp); this.setDuration(duration); this.setResponseCode(responseCode); this.setSuccess(success); + + this.setTimestamp(timestamp); + this.data.setStartTime(LocalStringsUtils.getDateFormatter().format(timestamp)); } - Map getMetrics() - { + Map getMetrics() { return this.data.getMeasurements(); } - public String getName() - { + public String getName() { return this.data.getName(); } - public void setName(String name) - { + public void setName(String name) { if (Strings.isNullOrEmpty(name)) { throw new IllegalArgumentException("The event name cannot be null or empty"); } @@ -74,116 +69,66 @@ public class HttpRequestTelemetry extends BaseTelemetry return this.data.getId(); } - public void setId(String id) - { + public void setId(String id) { this.data.setId(id); } - public String getResponseCode() - { + public String getResponseCode() { return this.data.getResponseCode(); } - public void setResponseCode(String responseCode) - { + public void setResponseCode(String responseCode) { // Validate int code = Integer.parseInt(responseCode); setSuccess(code < 400); this.data.setResponseCode(responseCode); } - public boolean isSuccess() - { + public boolean isSuccess() { return this.data.getSuccess(); } - public void setSuccess(boolean success) - { + public void setSuccess(boolean success) { this.data.setSuccess(success); } - public void setDuration(long milliSeconds) - { + public void setDuration(long milliSeconds) { this.data.setDuration(LocalStringsUtils.formatDuration(milliSeconds)); } - public URL getUrl() throws MalformedURLException - { + public URL getUrl() throws MalformedURLException { if (LocalStringsUtils.isNullOrEmpty(this.data.getUrl())) { return null; } + return new URL(this.data.getUrl()); } - public void setUrl(URL url) - { + public void setUrl(URL url) { this.data.setUrl(url.toString()); } - public void setUrl(String url) throws MalformedURLException - { + public void setUrl(String url) throws MalformedURLException { URL u = new URL(url); // to validate and normalize this.data.setUrl(u.toString()); } - public String getHttpMethod() - { + public String getHttpMethod() { return this.data.getHttpMethod(); } - public void setHttpMethod(String httpMethod) - { + public void setHttpMethod(String httpMethod) { this.data.setHttpMethod(httpMethod); } @Override - public void sanitize() - { + protected void additionalSanitize() { this.data.setName(LocalStringsUtils.sanitize(this.data.getName(), 1024)); - MapUtil.sanitizeProperties(this.getProperties()); MapUtil.sanitizeMeasurements(this.getMetrics()); } @Override - public void serialize(JsonWriter writer) throws IOException - { - writer.writeStartObject(); - - writer.writeProperty("ver", 1); - writer.writeProperty("name", "Microsoft.ApplicationInsights.Request"); - writer.writeProperty("time", this.getTimestamp()); - - getContext().serialize(writer); - - writer.writePropertyName("data"); - - { - writer.writeStartObject(); - - writer.writeProperty("type", "Microsoft.ApplicationInsights.RequestData"); - - writer.writePropertyName("item"); - { - writer.writeStartObject(); - writer.writeProperty("ver", this.data.getVer()); - writer.writeProperty("id", - LocalStringsUtils.populateRequiredStringWithNullValue(this.data.getId(), "id", HttpRequestTelemetry.class.getName())); - writer.writeProperty("name", this.data.getName()); - writer.writeProperty("startTime", this.getTimestamp()); - writer.writeProperty("duration", this.data.getDuration()); - writer.writeProperty("success", this.data.getSuccess()); - writer.writeProperty("responseCode", - LocalStringsUtils.populateRequiredStringWithNullValue(this.data.getResponseCode(), "responseCode", HttpRequestTelemetry.class.getName())); - writer.writeProperty("url", this.data.getUrl()); - writer.writeMetricsProperty("measurements", this.data.getMeasurements()); - writer.writeProperty("httpMethod", this.data.getHttpMethod()); - writer.writeProperty("properties", this.data.getProperties()); - writer.writeEndObject(); - } - - writer.writeEndObject(); - } - - writer.writeEndObject(); + protected RequestData getData() { + return data; } } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/IJsonPropertiesContainer.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/IJsonPropertiesContainer.java new file mode 100644 index 0000000000..e08b0c093c --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/IJsonPropertiesContainer.java @@ -0,0 +1,10 @@ +package com.microsoft.applicationinsights.datacontracts; + +import java.io.IOException; + +/** + * Created by gupele on 12/25/2014. + */ +public interface IJsonPropertiesContainer { + void serialize(StringBuilder stringBuilder) throws IOException; +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/IJsonSerializable.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/IJsonSerializable.java new file mode 100644 index 0000000000..f68dc81598 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/IJsonSerializable.java @@ -0,0 +1,10 @@ +package com.microsoft.applicationinsights.datacontracts; + +import java.io.IOException; + +/** + * Created by gupele on 12/24/2014. + */ +public interface IJsonSerializable { + void serialize(JsonTelemetryDataSerializer serializer) throws IOException; +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/JsonSerializable.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/JsonSerializable.java index 1549b13680..45a56f2e6c 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/JsonSerializable.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/JsonSerializable.java @@ -10,5 +10,5 @@ public interface JsonSerializable /** * Writes JSON representation of the object to the specified writer. */ - void serialize(JsonWriter writer) throws IOException; + void serialize(JsonTelemetryDataSerializer serializer) throws IOException; } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/JsonTelemetryDataSerializer.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/JsonTelemetryDataSerializer.java new file mode 100644 index 0000000000..e4ac833bb1 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/JsonTelemetryDataSerializer.java @@ -0,0 +1,276 @@ +package com.microsoft.applicationinsights.datacontracts; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.google.common.base.Strings; + +import com.microsoft.applicationinsights.util.LocalStringsUtils; + +/** + * Created by gupele on 12/24/2014. + */ +public class JsonTelemetryDataSerializer { + + private final static String JSON_SEPARATOR = ","; + private final static String JSON_START_OBJECT = "{"; + private final static String JSON_CLOSE_OBJECT = "}"; + private final static String JSON_START_ARRAY = "["; + private final static String JSON_CLOSE_ARRAY = "]"; + private final static String JSON_COMMA = "\""; + private final static String JSON_NAME_VALUE_SEPARATOR = ":"; + private final static String JSON_EMPTY_OBJECT = "{}"; + + private Writer out; + + private String separator = ""; + + public JsonTelemetryDataSerializer(Writer out) throws IOException { + reset(out); + } + + public void reset(Writer out) throws IOException { + separator = ""; + this.out = out; + this.out.write(JSON_START_OBJECT); + } + + public void close() throws IOException { + out.write(JSON_CLOSE_OBJECT); + out.close(); + } + + public void write(String name, int value) throws IOException { + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, Integer value) throws IOException { + if (value == null) { + return; + } + + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, double value) throws IOException { + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, Double value) throws IOException { + if (value == null) { + return; + } + + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, short value) throws IOException { + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, Short value) throws IOException { + if (value == null) { + return; + } + + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, long value) throws IOException { + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, Long value) throws IOException { + if (value == null) { + return; + } + + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, boolean value) throws IOException { + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, Boolean value) throws IOException { + if (value == null) { + return; + } + + writeName(name); + out.write(JSON_COMMA); + out.write(String.valueOf(value)); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, Date value) throws IOException { + if (value == null) { + return; + } + + writeName(name); + write(LocalStringsUtils.getDateFormatter().format(value)); + separator = JSON_SEPARATOR; + } + + public void write(String name, String value) throws IOException { + if (value == null) { + return; + } + + writeName(name); + out.write(JSON_COMMA); + out.write(value); + out.write(JSON_COMMA); + separator = JSON_SEPARATOR; + } + + public void write(String name, T value) throws IOException { + if (value == null) { + return; + } + + String jsonStringToAppend = createJsonFor(value); + if (Strings.isNullOrEmpty(jsonStringToAppend)) { + return; + } + + writeName(name); + out.write(jsonStringToAppend); + + separator = JSON_SEPARATOR; + } + + public void write(String name, Map map) throws IOException { + if (map == null) { + return; + } + + writeName(name); + try { + if (map == null || map.size() < 1) { + out.write("null"); + } else { + out.write(JSON_START_OBJECT); + + separator = ""; + for (Map.Entry entry : map.entrySet()) { + writeName(entry.getKey()); + write(entry.getValue()); + separator = JSON_SEPARATOR; + } + + out.write(JSON_CLOSE_OBJECT); + } + } finally { + separator = JSON_SEPARATOR; + } + } + + public void write(String name, List list) throws IOException { + if (list == null) { + return; + } + + writeName(name); + try { + if (list == null || list.size() < 1) { + out.write("null"); + } else { + out.write(JSON_START_ARRAY); + separator = ""; + for (T item : list) { + out.write(separator); + write(item); + separator = JSON_SEPARATOR; + } + + out.write(JSON_CLOSE_ARRAY); + } + } finally { + separator = JSON_SEPARATOR; + } + } + + private void write(T item) throws IOException { + if (item instanceof JsonSerializable) { + StringWriter stringWriter = new StringWriter(); + JsonTelemetryDataSerializer temp = new JsonTelemetryDataSerializer(new BufferedWriter(stringWriter)); + + String jsonStringToAppend = createJsonFor((JsonSerializable)item); + if (Strings.isNullOrEmpty(jsonStringToAppend)) { + return; + } + + out.write(jsonStringToAppend); + } else { + out.write(JSON_COMMA); + out.write(String.valueOf(item)); + out.write(JSON_COMMA); + } + } + + private String createJsonFor(T value) throws IOException { + StringWriter stringWriter = new StringWriter(); + JsonTelemetryDataSerializer temp = new JsonTelemetryDataSerializer(new BufferedWriter(stringWriter)); + + value.serialize(temp); + temp.close(); + String jsonStringToAppend = stringWriter.toString(); + if (Strings.isNullOrEmpty(jsonStringToAppend) || JSON_EMPTY_OBJECT.equals(jsonStringToAppend)) { + return ""; + } + + return jsonStringToAppend; + } + + private void writeName(String name) throws IOException { + out.write(separator); + out.write(JSON_COMMA); + out.write(name); + out.write(JSON_COMMA); + out.write(JSON_NAME_VALUE_SEPARATOR); + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/MetricTelemetry.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/MetricTelemetry.java index 4f1dd30041..9171831c28 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/MetricTelemetry.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/MetricTelemetry.java @@ -1,24 +1,21 @@ package com.microsoft.applicationinsights.datacontracts; -import java.io.IOException; +import com.microsoft.applicationinsights.implementation.schemav2.DataPoint; +import com.microsoft.applicationinsights.implementation.schemav2.DataPointType; -import com.microsoft.applicationinsights.extensibility.model.DataPoint; -import com.microsoft.applicationinsights.extensibility.model.MetricData; +import com.microsoft.applicationinsights.implementation.schemav2.MetricData; import com.microsoft.applicationinsights.util.LocalStringsUtils; -import com.microsoft.applicationinsights.util.MapUtil; import com.google.common.base.Strings; /** * Telemetry used to track events. */ -public class MetricTelemetry extends BaseTelemetry -{ +public class MetricTelemetry extends BaseTelemetry { private final MetricData data; - private final DataPoint metric; + private final DataPoint metric; - public MetricTelemetry() - { + public MetricTelemetry() { super(); this.data = new MetricData(); this.metric = new DataPoint(); @@ -26,114 +23,74 @@ public class MetricTelemetry extends BaseTelemetry this.data.getMetrics().add(this.metric); } - public MetricTelemetry(String name, double value) - { + public MetricTelemetry(String name, double value) { this(); this.setName(name); this.metric.setValue(value); } - public String getName() - { + public String getName() { return this.metric.getName(); } - public void setName(String name) - { + public void setName(String name) { if (Strings.isNullOrEmpty(name)) { throw new IllegalArgumentException("The metric name cannot be null or empty"); } + this.metric.setName(name); } - public double getValue() { return this.metric.getValue(); } + public double getValue() { + return this.metric.getValue(); + } - public void setValue(double value) { this.metric.setValue(value); } + public void setValue(double value) { + this.metric.setValue(value); + } - public Integer getCount() { return this.metric.getCount();} + public void setCount(Integer count) { + this.metric.setCount(count); updateKind(); + } - public void setCount(Integer count) { this.metric.setCount(count); updateKind();} + public void setMin(Double value) { + this.metric.setMin(value); updateKind(); + } - public Double getMin() { return this.metric.getMin();} + public Double getMax() { + return this.metric.getMax(); + } - public void setMin(Double value) { this.metric.setMin(value); updateKind();} + public void setMax(Double value) { + this.metric.setMax(value); updateKind(); + } - public Double getMax() { return this.metric.getMax();} - - public void setMax(Double value) { this.metric.setMax(value); updateKind();} - - public Double getStandardDeviation() { return this.metric.getStdDev();} - - public void setStandardDeviation(Double value) { this.metric.setStdDev(value); updateKind();} + public void setStandardDeviation(Double value) { + this.metric.setStdDev(value); updateKind(); + } @Override - public void sanitize() - { + protected void additionalSanitize() { this.metric.setName(LocalStringsUtils.sanitize(this.metric.getName(), 1024)); - MapUtil.sanitizeProperties(this.getProperties()); } @Override - public void serialize(JsonWriter writer) throws IOException - { - writer.writeStartObject(); - - writer.writeProperty("ver", 1); - writer.writeProperty("name", "Microsoft.ApplicationInsights.Metric"); - writer.writeProperty("time", this.getTimestamp()); - - getContext().serialize(writer); - - writer.writePropertyName("data"); - - { - writer.writeStartObject(); - - writer.writeProperty("type", "Microsoft.ApplicationInsights.MetricData"); - writer.writePropertyName("item"); - - { - writer.writeStartObject(); - writer.writeProperty("ver", this.data.getVer()); - writer.writePropertyName("metrics"); - - { - writer.writeStartArray(); - writer.writeStartObject(); - writer.writeProperty("name", LocalStringsUtils.populateRequiredStringWithNullValue(this.metric.getName(), "name", MetricTelemetry.class.getName())); - writer.writeProperty("kind", this.metric.getKind()); - writer.writeProperty("value", this.metric.getValue()); - writer.writeProperty("count", this.metric.getCount()); - writer.writeProperty("min", this.metric.getMin()); - writer.writeProperty("max", this.metric.getMax()); - writer.writeProperty("stdDev", this.metric.getStdDev()); - writer.writeEndObject(); - writer.writeEndArray(); - } - - writer.writeProperty("properties", this.data.getProperties()); - - writer.writeEndObject(); - } - - writer.writeEndObject(); - } - - writer.writeEndObject(); + protected MetricData getData() { + return data; } - private void updateKind() - { + private void updateKind() { boolean isAggregation = (metric.getCount() != null) || (metric.getMin() != null) || (metric.getMax() != null) || (metric.getStdDev() != null); - if ((metric.getCount() != null) && metric.getCount() == 1) + if ((metric.getCount() != null) && metric.getCount() == 1) { // Singular data point. This is not an aggregation. isAggregation = false; + } - this.metric.setKind(isAggregation ? "Aggregation" : "Measurement"); + this.metric.setKind(isAggregation ? DataPointType.Aggregation : DataPointType.Measurement); } } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/RemoteDependencyTelemetry.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/RemoteDependencyTelemetry.java index bd5abbd26f..2fe50177b1 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/RemoteDependencyTelemetry.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/RemoteDependencyTelemetry.java @@ -1,151 +1,54 @@ package com.microsoft.applicationinsights.datacontracts; -import java.io.IOException; - -import com.microsoft.applicationinsights.extensibility.model.DependencyKind; -import com.microsoft.applicationinsights.extensibility.model.RddSourceType; -import com.microsoft.applicationinsights.extensibility.model.RemoteDependencyData; +import com.microsoft.applicationinsights.implementation.schemav2.RemoteDependencyData; import com.microsoft.applicationinsights.util.LocalStringsUtils; -import com.microsoft.applicationinsights.util.MapUtil; import com.google.common.base.Strings; /** * Telemetry used to track events. */ -public class RemoteDependencyTelemetry extends BaseTelemetry -{ +public class RemoteDependencyTelemetry extends BaseTelemetry { private final RemoteDependencyData data; - public RemoteDependencyTelemetry() - { + public RemoteDependencyTelemetry() { super(); this.data = new RemoteDependencyData(); initialize(this.data.getProperties()); } - public RemoteDependencyTelemetry(String name) - { + public RemoteDependencyTelemetry(String name) { this(); this.setName(name); } - public String getName() - { + public String getName() { return this.data.getName(); } - public void setName(String name) - { - if (Strings.isNullOrEmpty(name)) + public void setName(String name) { + if (Strings.isNullOrEmpty(name)) { throw new IllegalArgumentException("The event name cannot be null or empty"); + } + this.data.setName(name); } - public DependencyKind getDependencyKind() - { - return this.data.getDependencyKind(); - } - - public void setDependencyKind(DependencyKind dependencyKind) - { - this.data.setDependencyKind(dependencyKind); - } - - public double getValue() - { + public double getValue() { return this.data.getValue(); } - public void setValue(double value) - { + public void setValue(double value) { this.data.setValue(value); } - public Integer getCount() - { - return this.data.getCount(); - } - - public void setCount(Integer count) - { - this.data.setCount(count); - } - - public Boolean getSuccess() - { - return this.data.getSuccess(); - } - - public void setSuccess(Boolean success) - { - this.data.setSuccess(success); - } - - public Boolean getAsync() - { - return this.data.getAsync(); - } - - public void setAsync(Boolean async) - { - this.data.setAsync(async); - } - - public RddSourceType getRddSource() - { - return this.data.getRddSource(); - } - - public void setRddSource(RddSourceType rddSource) - { - this.data.setRddSource(rddSource); - } - @Override - public void sanitize() - { + protected void additionalSanitize() { this.data.setName(LocalStringsUtils.sanitize(this.data.getName(), 1024)); - MapUtil.sanitizeProperties(this.getProperties()); } @Override - public void serialize(JsonWriter writer) throws IOException - { - writer.writeStartObject(); - - writer.writeProperty("ver", 1); - writer.writeProperty("name", "Microsoft.ApplicationInsights.RemoteDependency"); - writer.writeProperty("time", this.getTimestamp()); - - getContext().serialize(writer); - - writer.writePropertyName("data"); - - { - writer.writeStartObject(); - - writer.writeProperty("type", "Microsoft.ApplicationInsights.RemoteDependencyData"); - - writer.writePropertyName("item"); - { - writer.writeStartObject(); - writer.writeProperty("ver", this.data.getVer()); - writer.writeProperty("name", this.data.getName()); - writer.writeProperty("kind", this.data.getKind()); - writer.writeProperty("value", this.data.getValue()); - writer.writeProperty("count", this.data.getCount()); - writer.writeProperty("dependencyKind", this.data.getDependencyKind().toString()); - writer.writeProperty("success", this.data.getSuccess()); - writer.writeProperty("async", this.data.getAsync()); - writer.writeProperty("source", this.data.getRddSource().getValue()); - writer.writeProperty("properties", this.data.getProperties()); - writer.writeEndObject(); - } - - writer.writeEndObject(); - } - - writer.writeEndObject(); + protected RemoteDependencyData getData() { + return data; } } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/TelemetryContext.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/TelemetryContext.java index 4db954f382..a6431a9ec1 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/TelemetryContext.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/TelemetryContext.java @@ -4,7 +4,13 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import com.microsoft.applicationinsights.implementation.*; +import com.microsoft.applicationinsights.implementation.ComponentContext; +import com.microsoft.applicationinsights.implementation.DeviceContext; +import com.microsoft.applicationinsights.implementation.SessionContext; +import com.microsoft.applicationinsights.implementation.UserContext; +import com.microsoft.applicationinsights.implementation.OperationContext; +import com.microsoft.applicationinsights.implementation.LocationContext; +import com.microsoft.applicationinsights.implementation.InternalContext; import com.microsoft.applicationinsights.util.MapUtil; import com.google.common.base.Strings; @@ -12,8 +18,7 @@ import com.google.common.base.Strings; /** * Represents a context for sending telemetry to the Application Insights service. */ -public class TelemetryContext implements JsonSerializable -{ +public class TelemetryContext implements JsonSerializable { private Map properties; private Map tags; @@ -26,108 +31,116 @@ public class TelemetryContext implements JsonSerializable private LocationContext location; private InternalContext internal; - public TelemetryContext() - { + public TelemetryContext() { // TODO: create a SnapshottingMap, just like the .NET version has. this(new HashMap(), new HashMap()); } - public TelemetryContext(Map properties, Map tags) - { - if (properties == null) + public TelemetryContext(Map properties, Map tags) { + if (properties == null) { throw new IllegalArgumentException("properties cannot be null"); - if (tags == null) + } + + if (tags == null) { throw new IllegalArgumentException("tags cannot be null"); + } + this.properties = properties; this.tags = tags; } - public ComponentContext getComponent() - { - if (component == null) component = new ComponentContext(tags); + public ComponentContext getComponent() { + if (component == null) { + component = new ComponentContext(tags); + } + return component; } - public DeviceContext getDevice() - { - if (device == null) device = new DeviceContext(tags); + public DeviceContext getDevice() { + if (device == null) { + device = new DeviceContext(tags); + } + return device; } - public SessionContext getSession() - { - if (session == null) session = new SessionContext(tags); + public SessionContext getSession() { + if (session == null) { + session = new SessionContext(tags); + } + return session; } - public UserContext getUser() - { - if (user == null) user = new UserContext(tags); + public UserContext getUser() { + if (user == null) { + user = new UserContext(tags); + } + return user; } - public OperationContext getOperation() - { - if (operation == null) operation = new OperationContext(tags); + public OperationContext getOperation() { + if (operation == null) { + operation = new OperationContext(tags); + } + return operation; } - public LocationContext getLocation() - { - if (location == null) location = new LocationContext(tags); + public LocationContext getLocation() { + if (location == null) { + location = new LocationContext(tags); + } + return location; } - public InternalContext getInternal() - { - if (internal == null) internal = new InternalContext(tags); + public InternalContext getInternal() { + if (internal == null) { + internal = new InternalContext(tags); + } + return internal; } - public String getInstrumentationKey() - { + public String getInstrumentationKey() { return instrumentationKey; } - public void setInstrumentationKey(String instrumentationKey) - { + public void setInstrumentationKey(String instrumentationKey) { this.instrumentationKey = instrumentationKey; } - public Map getProperties() - { + public Map getProperties() { return properties; } - public Map getTags() - { + public Map getTags() { return tags; } @Override - public void serialize(JsonWriter writer) throws IOException - { - writer.writeProperty("iKey", this.getInstrumentationKey()); - writer.writeProperty("device", this.getDevice()); - writer.writeProperty("application", this.getComponent()); - writer.writeProperty("user", this.getUser()); - writer.writeProperty("operation", this.getOperation()); - writer.writeProperty("session", this.getSession()); - writer.writeProperty("location", this.getLocation()); - writer.writeProperty("internal", this.getInternal()); + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("iKey", this.getInstrumentationKey()); + writer.write("device", this.getDevice()); + writer.write("application", this.getComponent()); + writer.write("user", this.getUser()); + writer.write("operation", this.getOperation()); + writer.write("session", this.getSession()); + writer.write("location", this.getLocation()); + writer.write("internal", this.getInternal()); } - public void Initialize(TelemetryContext source) - { + public void Initialize(TelemetryContext source) { if (!Strings.isNullOrEmpty(source.getInstrumentationKey())) setInstrumentationKey(source.getInstrumentationKey()); - if (source.tags != null && source.tags.size() > 0) - { + if (source.tags != null && source.tags.size() > 0) { MapUtil.copy(source.tags, this.tags); } - if (source.properties != null && source.properties.size() > 0) - { + if (source.properties != null && source.properties.size() > 0) { MapUtil.copy(source.properties, this.properties); } } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/TraceTelemetry.java b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/TraceTelemetry.java index fa6ab74eed..6b0bcae5e3 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/TraceTelemetry.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/datacontracts/TraceTelemetry.java @@ -1,78 +1,36 @@ package com.microsoft.applicationinsights.datacontracts; -import com.microsoft.applicationinsights.extensibility.model.MessageData; +import com.microsoft.applicationinsights.implementation.schemav2.MessageData; import com.microsoft.applicationinsights.util.LocalStringsUtils; -import com.microsoft.applicationinsights.util.MapUtil; - -import java.io.IOException; /** * Telemetry used to track events. */ -public class TraceTelemetry extends BaseTelemetry -{ +public class TraceTelemetry extends BaseTelemetry { private final MessageData data; - public TraceTelemetry() - { + public TraceTelemetry() { super(); this.data = new MessageData(); initialize(this.data.getProperties()); } - public TraceTelemetry(String message) - { + public TraceTelemetry(String message) { this(); this.setMessage(message); } - public String getMessage() - { - return this.data.getMessage(); - } - - public void setMessage(String message) - { + public void setMessage(String message) { this.data.setMessage(message); } @Override - public void sanitize() - { + protected void additionalSanitize() { this.data.setMessage(LocalStringsUtils.sanitize(this.data.getMessage(), 32768)); - MapUtil.sanitizeProperties(this.getProperties()); } @Override - public void serialize(JsonWriter writer) throws IOException - { - writer.writeStartObject(); - - writer.writeProperty("ver", 1); - writer.writeProperty("name", "Microsoft.ApplicationInsights.Message"); - writer.writeProperty("time", this.getTimestamp()); - - getContext().serialize(writer); - - writer.writePropertyName("data"); - - { - writer.writeStartObject(); - - writer.writeProperty("type", "Microsoft.ApplicationInsights.MessageData"); - - writer.writePropertyName("item"); - { - writer.writeStartObject(); - writer.writeProperty("ver", this.data.getVer()); - writer.writeProperty("message", LocalStringsUtils.populateRequiredStringWithNullValue(this.data.getMessage(), "message", TraceTelemetry.class.getName())); - writer.writeProperty("properties", this.data.getProperties()); - writer.writeEndObject(); - } - - writer.writeEndObject(); - } - - writer.writeEndObject(); + protected MessageData getData() { + return data; } } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/ComponentContext.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/ComponentContext.java index f7abefe22d..ef1c3bc276 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/implementation/ComponentContext.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/ComponentContext.java @@ -1,14 +1,14 @@ package com.microsoft.applicationinsights.implementation; -import com.microsoft.applicationinsights.datacontracts.*; +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; import com.microsoft.applicationinsights.extensibility.model.ContextTagKeys; import com.microsoft.applicationinsights.util.MapUtil; import java.io.IOException; import java.util.Map; -public class ComponentContext implements JsonSerializable -{ +public class ComponentContext implements JsonSerializable { private final Map tags; public ComponentContext(Map tags) @@ -26,11 +26,8 @@ public class ComponentContext implements JsonSerializable MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getApplicationVersion(), version); } - //@Override - public void serialize(com.microsoft.applicationinsights.datacontracts.JsonWriter writer) throws IOException - { - writer.writeStartObject(); - writer.writeProperty("version", this.getVersion()); - writer.writeEndObject(); + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("version", this.getVersion()); } } \ No newline at end of file diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/DeviceContext.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/DeviceContext.java index 2541230be1..c53772f4cd 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/implementation/DeviceContext.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/DeviceContext.java @@ -118,19 +118,16 @@ public class DeviceContext implements JsonSerializable } @Override - public void serialize(com.microsoft.applicationinsights.datacontracts.JsonWriter writer) throws IOException - { - writer.writeStartObject(); - writer.writeProperty("type", this.getType()); - writer.writeProperty("id", LocalStringsUtils.populateRequiredStringWithNullValue(this.getId(), "id", DeviceContext.class.getName())); - writer.writeProperty("osVersion", this.getOperatingSystem()); - writer.writeProperty("oemName", this.getOemName()); - writer.writeProperty("model", this.getModel()); - writer.writeProperty("network", this.getNetworkType()); - writer.writeProperty("resolution", this.getScreenResolution()); - writer.writeProperty("locale", this.getLanguage()); - writer.writeProperty("roleName", this.getRoleName()); - writer.writeProperty("roleInstance", this.getRoleInstance()); - writer.writeEndObject(); + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("type", this.getType()); + writer.write("id", LocalStringsUtils.populateRequiredStringWithNullValue(this.getId(), "id", DeviceContext.class.getName())); + writer.write("osVersion", this.getOperatingSystem()); + writer.write("oemName", this.getOemName()); + writer.write("model", this.getModel()); + writer.write("network", this.getNetworkType()); + writer.write("resolution", this.getScreenResolution()); + writer.write("locale", this.getLanguage()); + writer.write("roleName", this.getRoleName()); + writer.write("roleInstance", this.getRoleInstance()); } } \ No newline at end of file diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/InternalContext.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/InternalContext.java index 7713e08e59..97468f4f1c 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/implementation/InternalContext.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/InternalContext.java @@ -7,8 +7,7 @@ import com.microsoft.applicationinsights.util.MapUtil; import java.io.IOException; import java.util.Map; -public class InternalContext implements JsonSerializable -{ +public class InternalContext implements JsonSerializable { private final Map tags; public InternalContext(Map tags) @@ -21,27 +20,21 @@ public class InternalContext implements JsonSerializable return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getInternalSdkVersion()); } - public void setSdkVersion(String version) - { + public void setSdkVersion(String version) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getInternalSdkVersion(), version); } - String getAgentVersion() - { + String getAgentVersion() { return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getInternalAgentVersion()); } - public void setAgentVersion(String version) - { + public void setAgentVersion(String version) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getInternalAgentVersion(), version); } @Override - public void serialize(com.microsoft.applicationinsights.datacontracts.JsonWriter writer) throws IOException - { - writer.writeStartObject(); - writer.writeProperty("sdkVersion", getSdkVersion()); - writer.writeProperty("agentVersion", getAgentVersion()); - writer.writeEndObject(); + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("sdkVersion", this.getSdkVersion()); + writer.write("agentVersion", this.getAgentVersion()); } } \ No newline at end of file diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/JsonWriter.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/JsonWriter.java index 4321a75ba0..c7e57af32a 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/implementation/JsonWriter.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/JsonWriter.java @@ -116,7 +116,7 @@ public class JsonWriter implements com.microsoft.applicationinsights.datacontrac public void writeProperty(String name, JsonSerializable value) throws IOException { if (!isNullOrEmpty(value)) { writePropertyName(name); - value.serialize(this); + //value.serialize(this); } } @@ -126,7 +126,7 @@ public class JsonWriter implements com.microsoft.applicationinsights.datacontrac } emptyObjectDetector.setEmpty(true); - value.serialize(emptyObjectDetector); + //value.serialize(emptyObjectDetector); return emptyObjectDetector.isEmpty(); } @@ -268,7 +268,7 @@ public class JsonWriter implements com.microsoft.applicationinsights.datacontrac @Override public void writeProperty(String name, JsonSerializable value) throws IOException { if (value != null) { - value.serialize(this); + //value.serialize(this); } } diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/LocationContext.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/LocationContext.java index 4f0ae334c4..ae431f4480 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/implementation/LocationContext.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/LocationContext.java @@ -10,8 +10,7 @@ import com.microsoft.applicationinsights.util.MapUtil; import com.google.common.base.Strings; -public class LocationContext implements JsonSerializable -{ +public class LocationContext implements JsonSerializable { private final Map tags; public LocationContext(Map tags) @@ -24,20 +23,15 @@ public class LocationContext implements JsonSerializable return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getLocationIP()); } - public void setIp(String value) - { - if (!Strings.isNullOrEmpty(value) && isIPV4(value)) - { + public void setIp(String value) { + if (!Strings.isNullOrEmpty(value) && isIPV4(value)) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getLocationIP(), value); } } @Override - public void serialize(com.microsoft.applicationinsights.datacontracts.JsonWriter writer) throws IOException - { - writer.writeStartObject(); - writer.writeProperty("ip", this.getIp()); - writer.writeEndObject(); + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("ip", this.getIp()); } private boolean isIPV4(String ip) { diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/OperationContext.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/OperationContext.java index 1bbd7fb916..c2c9f31a10 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/implementation/OperationContext.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/OperationContext.java @@ -2,13 +2,13 @@ package com.microsoft.applicationinsights.implementation; import com.microsoft.applicationinsights.datacontracts.*; import com.microsoft.applicationinsights.extensibility.model.ContextTagKeys; +import com.microsoft.applicationinsights.util.LocalStringsUtils; import com.microsoft.applicationinsights.util.MapUtil; import java.io.IOException; import java.util.Map; -public class OperationContext implements JsonSerializable -{ +public class OperationContext implements JsonSerializable { private final Map tags; public OperationContext(Map tags) @@ -21,27 +21,21 @@ public class OperationContext implements JsonSerializable return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getOperationId()); } - public void setId(String id) - { + public void setId(String id) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getOperationId(), id); } - String getName() - { + String getName() { return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getOperationName()); } - public void setName(String name) - { + public void setName(String name) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getOperationName(), name); } @Override - public void serialize(com.microsoft.applicationinsights.datacontracts.JsonWriter writer) throws IOException - { - writer.writeStartObject(); - writer.writeProperty("id", this.getId()); - writer.writeProperty("name", this.getName()); - writer.writeEndObject(); + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("id", LocalStringsUtils.populateRequiredStringWithNullValue(this.getId(), "id", DeviceContext.class.getName())); + writer.write("name", this.getName()); } } \ No newline at end of file diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/SessionContext.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/SessionContext.java index 77bd6698de..4d1ed04a9e 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/implementation/SessionContext.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/SessionContext.java @@ -7,52 +7,41 @@ import com.microsoft.applicationinsights.util.MapUtil; import java.io.IOException; import java.util.Map; -public class SessionContext implements JsonSerializable -{ +public class SessionContext implements JsonSerializable { private final Map tags; - public SessionContext(Map tags) - { + public SessionContext(Map tags) { this.tags = tags; } - String getId() - { + String getId() { return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getSessionId()); } - public void setId(String version) - { + public void setId(String version) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getSessionId(), version); } - Boolean getIsFirst() - { + Boolean getIsFirst() { return MapUtil.getBoolValueOrNull(tags, ContextTagKeys.getKeys().getSessionIsFirst()); } - public void setIsFirst(Boolean version) - { + public void setIsFirst(Boolean version) { MapUtil.setBoolValueOrRemove(tags, ContextTagKeys.getKeys().getSessionIsFirst(), version); } - Boolean getIsNewSession() - { + Boolean getIsNewSession() { return MapUtil.getBoolValueOrNull(tags, ContextTagKeys.getKeys().getSessionIsNew()); } - public void setIsNewSession(Boolean version) - { + public void setIsNewSession(Boolean version) { MapUtil.setBoolValueOrRemove(tags, ContextTagKeys.getKeys().getSessionIsNew(), version); } @Override - public void serialize(com.microsoft.applicationinsights.datacontracts.JsonWriter writer) throws IOException - { - writer.writeStartObject(); - writer.writeProperty("id", getId()); - writer.writeProperty("firstSession", getIsFirst()); - writer.writeProperty("isNewSession", getIsNewSession()); - writer.writeEndObject(); + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("id", this.getId()); + writer.write("firstSession", this.getIsFirst()); + writer.write("isNewSession", this.getIsNewSession()); } } \ No newline at end of file diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/UserContext.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/UserContext.java index 067e552f4e..c769073260 100644 --- a/Core/src/main/java/com/microsoft/applicationinsights/implementation/UserContext.java +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/UserContext.java @@ -8,8 +8,7 @@ import java.io.IOException; import java.util.Date; import java.util.Map; -public class UserContext implements JsonSerializable -{ +public class UserContext implements JsonSerializable { private final Map tags; public UserContext(Map tags) @@ -17,54 +16,43 @@ public class UserContext implements JsonSerializable this.tags = tags; } - String getId() - { + String getId() { return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getUserId()); } - public void setId(String version) - { + public void setId(String version) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getUserId(), version); } - String getAccountId() - { + String getAccountId() { return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getUserAccountId()); } - public void setAccountId(String version) - { + public void setAccountId(String version) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getUserAccountId(), version); } - String getUserAgent() - { + String getUserAgent() { return MapUtil.getValueOrNull(tags, ContextTagKeys.getKeys().getUserAgent()); } - public void setUserAgent(String version) - { + public void setUserAgent(String version) { MapUtil.setStringValueOrRemove(tags, ContextTagKeys.getKeys().getUserAgent(), version); } - Date getAcquisitionDate() - { + Date getAcquisitionDate() { return MapUtil.getDateValueOrNull(tags, ContextTagKeys.getKeys().getUserAccountAcquisitionDate()); } - public void setgetAcquisitionDate(Date version) - { + public void setgetAcquisitionDate(Date version) { MapUtil.setDateValueOrRemove(tags, ContextTagKeys.getKeys().getUserAccountAcquisitionDate(), version); } @Override - public void serialize(com.microsoft.applicationinsights.datacontracts.JsonWriter writer) throws IOException - { - writer.writeStartObject(); - writer.writeProperty("id", this.getId()); - writer.writeProperty("userAgent", this.getUserAgent()); - writer.writeProperty("accountId", this.getAccountId()); - writer.writeProperty("anonUserAcquisitionDate", this.getAcquisitionDate()); - writer.writeEndObject(); + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("id", this.getId()); + writer.write("userAgent", this.getUserAgent()); + writer.write("accountId", this.getAccountId()); + writer.write("anonUserAcquisitionDate", this.getAcquisitionDate()); } } \ No newline at end of file diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Application.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Application.java new file mode 100644 index 0000000000..4c2ecdf1e9 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Application.java @@ -0,0 +1,79 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class Application. + */ +public class Application implements JsonSerializable { + /** + * Backing field for property Ver. + */ + private String ver; + + /** + * Initializes a new instance of the class. + */ + public Application() + { + this.InitializeFields(); + } + + /** + * Gets the Ver property. + */ + public String getVer() { + return this.ver; + } + + /** + * Sets the Ver property. + */ + public void setVer(String value) { + this.ver = value; + } + + + /** + * Adds all members of this class to a hashmap + * @param map to which the members of this class will be added. + */ + public void addToHashMap(HashMap map) + { + if (this.ver != null) { + map.put("ver", this.ver); + } + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("ver", ver); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Base.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Base.java new file mode 100644 index 0000000000..7cb3c4553c --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Base.java @@ -0,0 +1,64 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class Base. + */ +public abstract class Base implements JsonSerializable, SendableData{ + /** + * Backing field for property BaseType. + */ + private String baseType; + + /** + * Initializes a new instance of the class. + */ + public Base() { + this.InitializeFields(); + } + + /** + * Gets the BaseType property. + */ + public String getBaseType() { + return this.baseType; + } + + /** + * Sets the BaseType property. + */ + public void setBaseType(String baseType) { + this.baseType = baseType; + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("baseType", baseType); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Data.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Data.java new file mode 100644 index 0000000000..244b356301 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Data.java @@ -0,0 +1,82 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; + +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +/** + * Data contract class Data. + */ +public class Data extends Base implements SendableData { + /** + * Backing field for property BaseData. + */ + private TDomain baseData; + + /** + * Initializes a new instance of the class. + */ + public Data() { + this(null); + } + + /** + * Initializes a new instance of the class with base data + */ + public Data(TDomain baseData) { + super(); + setBaseData(baseData); + this.InitializeFields(); + } + + /** + * Gets the BaseData property. + */ + public TDomain getBaseData() { + return this.baseData; + } + + /** + * Sets the BaseData property. + */ + public void setBaseData(TDomain baseData) { + this.baseData = baseData; + if (this.baseData != null) { + setBaseType(baseData.getBaseTypeName()); + } + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + super.serializeContent(writer); + + writer.write("baseData", baseData); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } + + @Override + public String getEnvelopName() { + if (baseData != null) { + return baseData.getEnvelopName(); + } + + return ""; + } + + @Override + public String getBaseTypeName() { + if (baseData != null) { + return baseData.getBaseTypeName(); + } + + return ""; + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DataPoint.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DataPoint.java new file mode 100644 index 0000000000..f4c4df7d42 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DataPoint.java @@ -0,0 +1,200 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class DataPoint. + */ +public final class DataPoint implements JsonSerializable, SendableData { + /** + * Backing field for property Name. + */ + private String name; + + /** + * Backing field for property Kind. + */ + private DataPointType kind = DataPointType.Measurement; + + /** + * Backing field for property Value. + */ + private double value; + + /** + * Backing field for property Count. + */ + private Integer count; + + /** + * Backing field for property Min. + */ + private Double min; + + /** + * Backing field for property Max. + */ + private Double max; + + /** + * Backing field for property StdDev. + */ + private Double stdDev; + + /** + * Initializes a new instance of the class. + */ + public DataPoint() + { + this.InitializeFields(); + } + + /** + * Gets the Name property. + */ + public String getName() { + return this.name; + } + + /** + * Sets the Name property. + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the Kind property. + */ + public DataPointType getKind() { + return this.kind; + } + + /** + * Sets the Kind property. + */ + public void setKind(DataPointType value) { + this.kind = value; + } + + /** + * Gets the Value property. + */ + public double getValue() { + return this.value; + } + + /** + * Sets the Value property. + */ + public void setValue(double value) { + this.value = value; + } + + /** + * Gets the Count property. + */ + public Integer getCount() { + return this.count; + } + + /** + * Sets the Count property. + */ + public void setCount(Integer value) { + this.count = value; + } + + /** + * Gets the Min property. + */ + public Double getMin() { + return this.min; + } + + /** + * Sets the Min property. + */ + public void setMin(Double value) { + this.min = value; + } + + /** + * Gets the Max property. + */ + public Double getMax() { + return this.max; + } + + /** + * Sets the Max property. + */ + public void setMax(Double value) { + this.max = value; + } + + /** + * Gets the StdDev property. + */ + public Double getStdDev() { + return this.stdDev; + } + + /** + * Sets the StdDev property. + */ + public void setStdDev(Double value) { + this.stdDev = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer should be a nno-null value"); + + serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("name", name); + + if (!DataPointType.Measurement.equals(kind)) { + writer.write("kind", kind.getValue()); + } + + writer.write("value", value); + writer.write("count", count); + writer.write("min", min); + writer.write("max", max); + writer.write("stdDev", stdDev); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } + + @Override + public String getEnvelopName() { + throw new UnsupportedOperationException(); + } + + @Override + public String getBaseTypeName() { + throw new UnsupportedOperationException(); + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DataPointType.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DataPointType.java new file mode 100644 index 0000000000..b77001c9ae --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DataPointType.java @@ -0,0 +1,20 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +/** + * Enum DataPointType. + */ +public enum DataPointType +{ + Measurement(0), + Aggregation(1); + + private final int id; + + public int getValue() { + return id; + } + + DataPointType(int id) { + this.id = id; + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DependencyKind.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DependencyKind.java new file mode 100644 index 0000000000..2ee82dfb25 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DependencyKind.java @@ -0,0 +1,22 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +/** + * Enum DependencyKind. + */ +public enum DependencyKind +{ + Undefind(0), + HttpOnly(1), + HttpAny(2), + SQL(3); + + private final int id; + + public int getValue() { + return id; + } + + DependencyKind(int id) { + this.id = id; + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DependencySourceType.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DependencySourceType.java new file mode 100644 index 0000000000..5c7c186a30 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/DependencySourceType.java @@ -0,0 +1,20 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +/** + * Enum DependencySourceType. + */ +public enum DependencySourceType { + Undefined(0), + Aic(1), + Apmc(2); + + private final int id; + + public int getValue() { + return id; + } + + DependencySourceType(int id) { + this.id = id; + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Device.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Device.java new file mode 100644 index 0000000000..9c11bbeeb9 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Device.java @@ -0,0 +1,370 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class Device. + */ +public class Device implements JsonSerializable { + /** + * Backing field for property Id. + */ + private String id; + + /** + * Backing field for property Ip. + */ + private String ip; + + /** + * Backing field for property Language. + */ + private String language; + + /** + * Backing field for property Locale. + */ + private String locale; + + /** + * Backing field for property Model. + */ + private String model; + + /** + * Backing field for property Network. + */ + private String network; + + /** + * Backing field for property OemName. + */ + private String oemName; + + /** + * Backing field for property Os. + */ + private String os; + + /** + * Backing field for property OsVersion. + */ + private String osVersion; + + /** + * Backing field for property RoleInstance. + */ + private String roleInstance; + + /** + * Backing field for property RoleName. + */ + private String roleName; + + /** + * Backing field for property ScreenResolution. + */ + private String screenResolution; + + /** + * Backing field for property Type. + */ + private String type; + + /** + * Backing field for property VmName. + */ + private String vmName; + + /** + * Initializes a new instance of the class. + */ + public Device() { + this.InitializeFields(); + } + + /** + * Gets the Id property. + */ + public String getId() { + return this.id; + } + + /** + * Sets the Id property. + */ + public void setId(String value) { + this.id = value; + } + + /** + * Gets the Ip property. + */ + public String getIp() { + return this.ip; + } + + /** + * Sets the Ip property. + */ + public void setIp(String value) { + this.ip = value; + } + + /** + * Gets the Language property. + */ + public String getLanguage() { + return this.language; + } + + /** + * Sets the Language property. + */ + public void setLanguage(String value) { + this.language = value; + } + + /** + * Gets the Locale property. + */ + public String getLocale() { + return this.locale; + } + + /** + * Sets the Locale property. + */ + public void setLocale(String value) { + this.locale = value; + } + + /** + * Gets the Model property. + */ + public String getModel() { + return this.model; + } + + /** + * Sets the Model property. + */ + public void setModel(String value) { + this.model = value; + } + + /** + * Gets the Network property. + */ + public String getNetwork() { + return this.network; + } + + /** + * Sets the Network property. + */ + public void setNetwork(String value) { + this.network = value; + } + + /** + * Gets the OemName property. + */ + public String getOemName() { + return this.oemName; + } + + /** + * Sets the OemName property. + */ + public void setOemName(String value) { + this.oemName = value; + } + + /** + * Gets the Os property. + */ + public String getOs() { + return this.os; + } + + /** + * Sets the Os property. + */ + public void setOs(String value) { + this.os = value; + } + + /** + * Gets the OsVersion property. + */ + public String getOsVersion() { + return this.osVersion; + } + + /** + * Sets the OsVersion property. + */ + public void setOsVersion(String value) { + this.osVersion = value; + } + + /** + * Gets the RoleInstance property. + */ + public String getRoleInstance() { + return this.roleInstance; + } + + /** + * Sets the RoleInstance property. + */ + public void setRoleInstance(String value) { + this.roleInstance = value; + } + + /** + * Gets the RoleName property. + */ + public String getRoleName() { + return this.roleName; + } + + /** + * Sets the RoleName property. + */ + public void setRoleName(String value) { + this.roleName = value; + } + + /** + * Gets the ScreenResolution property. + */ + public String getScreenResolution() { + return this.screenResolution; + } + + /** + * Sets the ScreenResolution property. + */ + public void setScreenResolution(String value) { + this.screenResolution = value; + } + + /** + * Gets the Type property. + */ + public String getType() { + return this.type; + } + + /** + * Sets the Type property. + */ + public void setType(String value) { + this.type = value; + } + + /** + * Gets the VmName property. + */ + public String getVmName() { + return this.vmName; + } + + /** + * Sets the VmName property. + */ + public void setVmName(String value) { + this.vmName = value; + } + + + /** + * Adds all members of this class to a hashmap + * @param map to which the members of this class will be added. + */ + public void addToHashMap(HashMap map) + { + if (this.id != null) { + map.put("id", this.id); + } + if (this.ip != null) { + map.put("ip", this.ip); + } + if (this.language != null) { + map.put("language", this.language); + } + if (this.locale != null) { + map.put("locale", this.locale); + } + if (this.model != null) { + map.put("model", this.model); + } + if (this.network != null) { + map.put("network", this.network); + } + if (this.oemName != null) { + map.put("oemName", this.oemName); + } + if (this.os != null) { + map.put("os", this.os); + } + if (this.osVersion != null) { + map.put("osVersion", this.osVersion); + } + if (this.roleInstance != null) { + map.put("roleInstance", this.roleInstance); + } + if (this.roleName != null) { + map.put("roleName", this.roleName); + } + if (this.screenResolution != null) { + map.put("screenResolution", this.screenResolution); + } + if (this.type != null) { + map.put("type", this.type); + } + if (this.vmName != null) { + map.put("vmName", this.vmName); + } + } + + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("id", id); + writer.write("ip", ip); + writer.write("language", language); + writer.write("locale", locale); + writer.write("model", model); + writer.write("locale", locale); + writer.write("network", network); + writer.write("oemName", oemName); + writer.write("os", os); + writer.write("osVersion", osVersion); + writer.write("roleInstance", roleInstance); + writer.write("roleName", roleName); + writer.write("screenResolution", screenResolution); + writer.write("type", type); + writer.write("vmName", vmName); + } + + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Domain.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Domain.java new file mode 100644 index 0000000000..4d9bb893a1 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Domain.java @@ -0,0 +1,63 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class Domain. + */ +public class Domain implements SendableData +{ + /** + * Envelope Name for this telemetry. + */ + private static final String DOMAIN_ENVELOPE_NAME = "Microsoft.ApplicationInsights.Do"; + + /** + * Base Type for this telemetry. + */ + private static final String DOMAIN_BASE_TYPE = "Microsoft.ApplicationInsights.Domain"; + + /** + * Initializes a new instance of the class. + */ + public Domain() { + this.InitializeFields(); + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + } + + protected void InitializeFields() { + } + + @Override + public String getEnvelopName() { + return DOMAIN_ENVELOPE_NAME; + } + + @Override + public String getBaseTypeName() { + return DOMAIN_BASE_TYPE; + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Envelope.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Envelope.java new file mode 100644 index 0000000000..470df5bab5 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Envelope.java @@ -0,0 +1,349 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class Envelope. + */ +public class Envelope implements JsonSerializable +{ + /** + * Backing field for property Ver. + */ + private int ver = 1; + + /** + * Backing field for property Name. + */ + private String name; + + /** + * Backing field for property Time. + */ + private String time; + + /** + * Backing field for property SampleRate. + */ + private double sampleRate = 100.0; + + /** + * Backing field for property Seq. + */ + private String seq; + + /** + * Backing field for property IKey. + */ + private String iKey; + + /** + * Backing field for property Flags. + */ + private long flags; + + /** + * Backing field for property DeviceId. + */ + private String deviceId; + + /** + * Backing field for property Os. + */ + private String os; + + /** + * Backing field for property OsVer. + */ + private String osVer; + + /** + * Backing field for property AppId. + */ + private String appId; + + /** + * Backing field for property AppVer. + */ + private String appVer; + + /** + * Backing field for property UserId. + */ + private String userId; + + /** + * Backing field for property Tags. + */ + private Map tags; + + /** + * Backing field for property Data. + */ + private Base data; + + /** + * Initializes a new instance of the class. + */ + public Envelope() { + this.InitializeFields(); + } + + /** + * Gets the Ver property. + */ + public int getVer() { + return this.ver; + } + + /** + * Sets the Ver property. + */ + public void setVer(int value) { + this.ver = value; + } + + /** + * Gets the Name property. + */ + public String getName() { + return this.name; + } + + /** + * Sets the Name property. + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the Time property. + */ + public String getTime() { + return this.time; + } + + /** + * Sets the Time property. + */ + public void setTime(String value) { + this.time = value; + } + + /** + * Gets the SampleRate property. + */ + public double getSampleRate() { + return this.sampleRate; + } + + /** + * Sets the SampleRate property. + */ + public void setSampleRate(double value) { + this.sampleRate = value; + } + + /** + * Gets the Seq property. + */ + public String getSeq() { + return this.seq; + } + + /** + * Sets the Seq property. + */ + public void setSeq(String value) { + this.seq = value; + } + + /** + * Gets the IKey property. + */ + public String getIKey() { + return this.iKey; + } + + /** + * Sets the IKey property. + */ + public void setIKey(String value) { + this.iKey = value; + } + + /** + * Gets the Flags property. + */ + public long getFlags() { + return this.flags; + } + + /** + * Sets the Flags property. + */ + public void setFlags(long value) { + this.flags = value; + } + + /** + * Gets the DeviceId property. + */ + public String getDeviceId() { + return this.deviceId; + } + + /** + * Sets the DeviceId property. + */ + public void setDeviceId(String value) { + this.deviceId = value; + } + + /** + * Gets the Os property. + */ + public String getOs() { + return this.os; + } + + /** + * Sets the Os property. + */ + public void setOs(String value) { + this.os = value; + } + + /** + * Gets the OsVer property. + */ + public String getOsVer() { + return this.osVer; + } + + /** + * Sets the OsVer property. + */ + public void setOsVer(String value) { + this.osVer = value; + } + + /** + * Gets the AppId property. + */ + public String getAppId() { + return this.appId; + } + + /** + * Sets the AppId property. + */ + public void setAppId(String value) { + this.appId = value; + } + + /** + * Gets the AppVer property. + */ + public String getAppVer() { + return this.appVer; + } + + /** + * Sets the AppVer property. + */ + public void setAppVer(String value) { + this.appVer = value; + } + + /** + * Gets the UserId property. + */ + public String getUserId() { + return this.userId; + } + + /** + * Sets the UserId property. + */ + public void setUserId(String value) { + this.userId = value; + } + + /** + * Gets the Tags property. + */ + public Map getTags() { + if (this.tags == null) { + this.tags = new HashMap(); + } + + return this.tags; + } + + /** + * Sets the Tags property. + */ + public void setTags(Map value) { + this.tags = value; + } + + /** + * Gets the Data property. + */ + public Base getData() { + return this.data; + } + + /** + * Sets the Data property. + */ + public void setData(Base value) { + this.data = value; + this.setName(data.getEnvelopName()); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("ver", ver); + writer.write("name", name); + writer.write("time", time); + writer.write("sampleRate", sampleRate); + writer.write("seq", seq); + writer.write("iKey", iKey); + writer.write("flags", flags); + writer.write("deviceId", deviceId); + writer.write("os", os); + writer.write("osVer", osVer); + writer.write("appId", appId); + writer.write("appVer", appVer); + writer.write("userId", userId); + writer.write("tags", tags); + writer.write("data", data); + } + + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/EventData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/EventData.java new file mode 100644 index 0000000000..e65730f75c --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/EventData.java @@ -0,0 +1,142 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class EventData. + */ +public class EventData extends Domain { + /** + * Envelope Name for this telemetry. + */ + private static final String EVENT_ENVELOPE_NAME = "Microsoft.ApplicationInsights.Event"; + + /** + * Base Type for this telemetry. + */ + private static final String EVENT_BASE_TYPE = "Microsoft.ApplicationInsights.EventData"; + + /** + * Backing field for property Ver. + */ + private int ver = 2; + + /** + * Backing field for property Name. + */ + private String name; + + /** + * Backing field for property Properties. + */ + private HashMap properties; + + /** + * Backing field for property Measurements. + */ + private HashMap measurements; + + /** + * Initializes a new instance of the class. + */ + public EventData() { + this.InitializeFields(); + } + + /** + * Gets the Ver property. + */ + public int getVer() { + return this.ver; + } + + /** + * Sets the Ver property. + */ + public void setVer(int value) { + this.ver = value; + } + + /** + * Gets the Name property. + */ + public String getName() { + return this.name; + } + + /** + * Sets the Name property. + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the Properties property. + */ + public HashMap getProperties() { + if (this.properties == null) { + this.properties = new HashMap(); + } + return this.properties; + } + + /** + * Sets the Properties property. + */ + public void setProperties(HashMap value) { + this.properties = value; + } + + /** + * Gets the Measurements property. + */ + public HashMap getMeasurements() { + if (this.measurements == null) { + this.measurements = new HashMap(); + } + return this.measurements; + } + + /** + * Sets the Measurements property. + */ + public void setMeasurements(HashMap value) { + this.measurements = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + writer.write("ver", ver); + writer.write("name", name); + writer.write("properties", properties); + writer.write("measurements", measurements); + } + + @Override + public String getEnvelopName() { + return EVENT_ENVELOPE_NAME; + } + + @Override + public String getBaseTypeName() { + return EVENT_BASE_TYPE; + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/EventDataWrapper.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/EventDataWrapper.java new file mode 100644 index 0000000000..2d1ca751d2 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/EventDataWrapper.java @@ -0,0 +1,30 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import com.google.common.base.Preconditions; +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import java.io.IOException; + +/** + * Created by gupele on 12/24/2014. + */ +public class EventDataWrapper implements JsonSerializable { + private final EventData item; + + public EventDataWrapper() { + item = new EventData(); + } + + public EventData getItem() { + return item; + } + + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + writer.write("type", "Microsoft.ApplicationInsights.EventData"); + writer.write("item", item); + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/ExceptionData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/ExceptionData.java new file mode 100644 index 0000000000..06d173f74b --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/ExceptionData.java @@ -0,0 +1,192 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class ExceptionData. + */ +public class ExceptionData extends Domain implements JsonSerializable { + /** + * Envelope Name for this telemetry. + */ + public static final String EXCEPTION_ENVELOPE_NAME = "Microsoft.ApplicationInsights.Exception"; + + /** + * Base Type for this telemetry. + */ + public static final String EXCEPTION_BASE_TYPE = "Microsoft.ApplicationInsights.ExceptionData"; + + /** + * Backing field for property Ver. + */ + private int ver = 2; + + /** + * Backing field for property HandledAt. + */ + private String handledAt; + + /** + * Backing field for property Exceptions. + */ + private ArrayList exceptions; + + /** + * Backing field for property SeverityLevel. + */ + private int severityLevel; + + /** + * Backing field for property Properties. + */ + private HashMap properties; + + /** + * Backing field for property Measurements. + */ + private HashMap measurements; + + /** + * Initializes a new instance of the class. + */ + public ExceptionData() + { + this.InitializeFields(); + } + + /** + * Gets the Ver property. + */ + public int getVer() { + return this.ver; + } + + /** + * Sets the Ver property. + */ + public void setVer(int value) { + this.ver = value; + } + + /** + * Gets the HandledAt property. + */ + public String getHandledAt() { + return this.handledAt; + } + + /** + * Sets the HandledAt property. + */ + public void setHandledAt(String value) { + this.handledAt = value; + } + + /** + * Gets the Exceptions property. + */ + public ArrayList getExceptions() { + if (this.exceptions == null) { + this.exceptions = new ArrayList(); + } + return this.exceptions; + } + + /** + * Sets the Exceptions property. + */ + public void setExceptions(ArrayList value) { + this.exceptions = value; + } + + /** + * Gets the SeverityLevel property. + */ + public int getSeverityLevel() { + return this.severityLevel; + } + + /** + * Sets the SeverityLevel property. + */ + public void setSeverityLevel(int value) { + this.severityLevel = value; + } + + /** + * Gets the Properties property. + */ + public HashMap getProperties() { + if (this.properties == null) { + this.properties = new HashMap(); + } + return this.properties; + } + + /** + * Sets the Properties property. + */ + public void setProperties(HashMap value) { + this.properties = value; + } + + /** + * Gets the Measurements property. + */ + public HashMap getMeasurements() { + if (this.measurements == null) { + this.measurements = new HashMap(); + } + return this.measurements; + } + + /** + * Sets the Measurements property. + */ + public void setMeasurements(HashMap value) { + this.measurements = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException + { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + super.serializeContent(writer); + + writer.write("ver", ver); + writer.write("handledAt", handledAt); + writer.write("exceptions", exceptions); + writer.write("measurements", measurements); + writer.write("severityLevel", severityLevel); + writer.write("properties", properties); + writer.write("measurements", measurements); + } + + @Override + public String getEnvelopName() { + return EXCEPTION_ENVELOPE_NAME; + } + + @Override + public String getBaseTypeName() { + return EXCEPTION_BASE_TYPE; + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/ExceptionDetails.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/ExceptionDetails.java new file mode 100644 index 0000000000..b3997a4f76 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/ExceptionDetails.java @@ -0,0 +1,192 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.ArrayList; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class ExceptionDetails. + */ +public class ExceptionDetails implements JsonSerializable { + /** + * Backing field for property Id. + */ + private int id; + + /** + * Backing field for property OuterId. + */ + private int outerId; + + /** + * Backing field for property TypeName. + */ + private String typeName; + + /** + * Backing field for property Message. + */ + private String message; + + /** + * Backing field for property HasFullStack. + */ + private boolean hasFullStack = true; + + /** + * Backing field for property Stack. + */ + private String stack; + + /** + * Backing field for property ParsedStack. + */ + private ArrayList parsedStack; + + /** + * Initializes a new instance of the class. + */ + public ExceptionDetails() + { + this.InitializeFields(); + } + + /** + * Gets the Id property. + */ + public int getId() { + return this.id; + } + + /** + * Sets the Id property. + */ + public void setId(int value) { + this.id = value; + } + + /** + * Gets the OuterId property. + */ + public int getOuterId() { + return this.outerId; + } + + /** + * Sets the OuterId property. + */ + public void setOuterId(int value) { + this.outerId = value; + } + + /** + * Gets the TypeName property. + */ + public String getTypeName() { + return this.typeName; + } + + /** + * Sets the TypeName property. + */ + public void setTypeName(String value) { + this.typeName = value; + } + + /** + * Gets the Message property. + */ + public String getMessage() { + return this.message; + } + + /** + * Sets the Message property. + */ + public void setMessage(String value) { + this.message = value; + } + + /** + * Gets the HasFullStack property. + */ + public boolean getHasFullStack() { + return this.hasFullStack; + } + + /** + * Sets the HasFullStack property. + */ + public void setHasFullStack(boolean value) { + this.hasFullStack = value; + } + + /** + * Gets the Stack property. + */ + public String getStack() { + return this.stack; + } + + /** + * Sets the Stack property. + */ + public void setStack(String value) { + this.stack = value; + } + + /** + * Gets the ParsedStack property. + */ + public ArrayList getParsedStack() { + if (this.parsedStack == null) { + this.parsedStack = new ArrayList(); + } + return this.parsedStack; + } + + /** + * Sets the ParsedStack property. + */ + public void setParsedStack(ArrayList value) { + this.parsedStack = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException + { + writer.write("id", id); + writer.write("outerId", outerId); + writer.write("typeName", typeName); + writer.write("message", message); + writer.write("hasFullStack", hasFullStack); + writer.write("stack", stack); + writer.write("parsedStack", parsedStack); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Internal.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Internal.java new file mode 100644 index 0000000000..c68526d56d --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Internal.java @@ -0,0 +1,101 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +public class Internal implements JsonSerializable { + /** + * Backing field for property SdkVersion. + */ + private String sdkVersion; + + /** + * Backing field for property AgentVersion. + */ + private String agentVersion; + + /** + * Initializes a new instance of the class. + */ + public Internal() + { + this.InitializeFields(); + } + + /** + * Gets the SdkVersion property. + */ + public String getSdkVersion() { + return this.sdkVersion; + } + + /** + * Sets the SdkVersion property. + */ + public void setSdkVersion(String value) { + this.sdkVersion = value; + } + + /** + * Gets the AgentVersion property. + */ + public String getAgentVersion() { + return this.agentVersion; + } + + /** + * Sets the AgentVersion property. + */ + public void setAgentVersion(String value) { + this.agentVersion = value; + } + + + /** + * Adds all members of this class to a hashmap + * @param map to which the members of this class will be added. + */ + public void addToHashMap(HashMap map) + { + if (this.sdkVersion != null) { + map.put("sdkVersion", this.sdkVersion); + } + if (this.agentVersion != null) { + map.put("agentVersion", this.agentVersion); + } + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException + { + writer.write("sdkVersion", sdkVersion); + writer.write("agentVersion", agentVersion); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Location.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Location.java new file mode 100644 index 0000000000..8d6fe76761 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Location.java @@ -0,0 +1,81 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class Location. + */ +public class Location implements JsonSerializable { + /** + * Backing field for property Ip. + */ + private String ip; + + /** + * Initializes a new instance of the class. + */ + public Location() + { + this.InitializeFields(); + } + + /** + * Gets the Ip property. + */ + public String getIp() { + return this.ip; + } + + /** + * Sets the Ip property. + */ + public void setIp(String value) { + this.ip = value; + } + + + /** + * Adds all members of this class to a hashmap + * @param map to which the members of this class will be added. + */ + public void addToHashMap(HashMap map) + { + if (!(this.ip == null)) { + map.put("ip", this.ip); + } + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException + { + writer.write("ip", ip); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MessageData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MessageData.java new file mode 100644 index 0000000000..3934a4bc79 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MessageData.java @@ -0,0 +1,141 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +/** + * Data contract class MessageData. + */ +public class MessageData extends Domain implements JsonSerializable { + /** + * Envelope Name for this telemetry. + */ + public static final String MESSAGE_ENVELOPE_NAME = "Microsoft.ApplicationInsights.Message"; + + /** + * Base Type for this telemetry. + */ + public static final String MESSAGE_BASE_TYPE = "Microsoft.ApplicationInsights.MessageData"; + + /** + * Backing field for property Ver. + */ + private int ver = 2; + + /** + * Backing field for property Message. + */ + private String message; + + /** + * Backing field for property SeverityLevel. + */ + private int severityLevel; + + /** + * Backing field for property Properties. + */ + private HashMap properties; + + /** + * Initializes a new instance of the class. + */ + public MessageData() + { + this.InitializeFields(); + } + + /** + * Gets the Ver property. + */ + public int getVer() { + return this.ver; + } + + /** + * Sets the Ver property. + */ + public void setVer(int value) { + this.ver = value; + } + + /** + * Gets the Message property. + */ + public String getMessage() { + return this.message; + } + + /** + * Sets the Message property. + */ + public void setMessage(String value) { + this.message = value; + } + + /** + * Gets the SeverityLevel property. + */ + public int getSeverityLevel() { + return this.severityLevel; + } + + /** + * Sets the SeverityLevel property. + */ + public void setSeverityLevel(int value) { + this.severityLevel = value; + } + + /** + * Gets the Properties property. + */ + public HashMap getProperties() { + if (this.properties == null) { + this.properties = new HashMap(); + } + return this.properties; + } + + /** + * Sets the Properties property. + */ + public void setProperties(HashMap value) { + this.properties = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException + { + super.serializeContent(writer); + + writer.write("ver", ver); + writer.write("message", message); + writer.write("severityLevel", severityLevel); + writer.write("properties", properties); + } + + @Override + public String getEnvelopName() { + return MESSAGE_ENVELOPE_NAME; + } + + @Override + public String getBaseTypeName() { + return MESSAGE_BASE_TYPE; + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MessageDataWrapper.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MessageDataWrapper.java new file mode 100644 index 0000000000..17f88a3915 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MessageDataWrapper.java @@ -0,0 +1,36 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import java.io.IOException; +import java.util.Map; + +/** + * Created by gupele on 12/25/2014. + */ +public class MessageDataWrapper implements JsonSerializable { + private final MessageData item; + + public MessageDataWrapper() { + item = new MessageData(); + } + + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("type", "Microsoft.ApplicationInsights.MessageData"); + writer.write("item", item); + } + + public Map getProperties() { + return item.getProperties(); + } + + public void setMessage(String message) { + item.setMessage(message); + } + + public String getMessage() { + return item.getMessage(); + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MetricData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MetricData.java new file mode 100644 index 0000000000..4ffa088bb5 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MetricData.java @@ -0,0 +1,124 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +/** + * Data contract class MetricData. + */ +public class MetricData extends Domain implements JsonSerializable { + /** + * Envelope Name for this telemetry. + */ + public static final String METRIC_ENVELOPE_NAME = "Microsoft.ApplicationInsights.Metric"; + + /** + * Base Type for this telemetry. + */ + public static final String METRIC_BASE_TYPE = "Microsoft.ApplicationInsights.MetricData"; + + /** + * Backing field for property Ver. + */ + private int ver = 2; + + /** + * Backing field for property Metrics. + */ + private List metrics; + + /** + * Backing field for property Properties. + */ + private HashMap properties; + + /** + * Initializes a new instance of the class. + */ + public MetricData() + { + this.InitializeFields(); + } + + /** + * Gets the Ver property. + */ + public int getVer() { + return this.ver; + } + + /** + * Sets the Ver property. + */ + public void setVer(int value) { + this.ver = value; + } + + /** + * Gets the Metrics property. + */ + public List getMetrics() { + if (this.metrics == null) { + this.metrics = new ArrayList(); + } + return this.metrics; + } + + /** + * Sets the Metrics property. + */ + public void setMetrics(List value) { + this.metrics = value; + } + + /** + * Gets the Properties property. + */ + public HashMap getProperties() { + if (this.properties == null) { + this.properties = new HashMap(); + } + return this.properties; + } + + /** + * Sets the Properties property. + */ + public void setProperties(HashMap value) { + this.properties = value; + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + super.serializeContent(writer); + + writer.write("ver", ver); + writer.write("metrics", metrics); + writer.write("properties", properties); + } + + @Override + public String getEnvelopName() { + return METRIC_ENVELOPE_NAME; + } + + @Override + public String getBaseTypeName() { + return METRIC_BASE_TYPE; + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MetricDataWrapper.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MetricDataWrapper.java new file mode 100644 index 0000000000..f6b0ef7fd2 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/MetricDataWrapper.java @@ -0,0 +1,68 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * Created by gupele on 12/25/2014. + */ +public class MetricDataWrapper implements JsonSerializable { + private final MetricData item; + + public MetricDataWrapper() { + item = new MetricData(); + } + + /** + * Gets the Ver property. + */ + public int getVer() { + return item.getVer(); + } + + /** + * Sets the Ver property. + */ + public void setVer(int value) { + item.setVer(value); + } + + /** + * Gets the Metrics property. + */ + public List getMetrics() { + return item.getMetrics(); + } + + /** + * Sets the Metrics property. + */ + public void setMetrics(ArrayList value) { + item.setMetrics(value); + } + + /** + * Gets the Properties property. + */ + public HashMap getProperties() { + return item.getProperties(); + } + + /** + * Sets the Properties property. + */ + public void setProperties(HashMap value) { + item.setProperties(value); + } + + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("type", "Microsoft.ApplicationInsights.MetricData"); + writer.write("item", item); + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Operation.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Operation.java new file mode 100644 index 0000000000..a58d531564 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Operation.java @@ -0,0 +1,149 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class Operation. + */ +public class Operation implements JsonSerializable { + /** + * Backing field for property Id. + */ + private String id; + + /** + * Backing field for property Name. + */ + private String name; + + /** + * Backing field for property ParentId. + */ + private String parentId; + + /** + * Backing field for property RootId. + */ + private String rootId; + + /** + * Initializes a new instance of the class. + */ + public Operation() + { + this.InitializeFields(); + } + + /** + * Gets the Id property. + */ + public String getId() { + return this.id; + } + + /** + * Sets the Id property. + */ + public void setId(String value) { + this.id = value; + } + + /** + * Gets the Name property. + */ + public String getName() { + return this.name; + } + + /** + * Sets the Name property. + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the ParentId property. + */ + public String getParentId() { + return this.parentId; + } + + /** + * Sets the ParentId property. + */ + public void setParentId(String value) { + this.parentId = value; + } + + /** + * Gets the RootId property. + */ + public String getRootId() { + return this.rootId; + } + + /** + * Sets the RootId property. + */ + public void setRootId(String value) { + this.rootId = value; + } + + + /** + * Adds all members of this class to a hashmap + * @param map to which the members of this class will be added. + */ + public void addToHashMap(HashMap map) + { + if (this.id == null) { + map.put("id", this.id); + } + if (this.name == null) { + map.put("name", this.name); + } + if (this.parentId == null) { + map.put("parentId", this.parentId); + } + if (this.rootId == null) { + map.put("rootId", this.rootId); + } + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("id", id); + writer.write("name", name); + writer.write("parentId", parentId); + writer.write("rootId", rootId); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/PageViewData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/PageViewData.java new file mode 100644 index 0000000000..9ce3caf7c1 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/PageViewData.java @@ -0,0 +1,84 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; + +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +/** + * Data contract class PageViewData. + */ +public class PageViewData extends EventData { + /** + * Envelope Name for this telemetry. + */ + public static final String EnvelopeName = "Microsoft.ApplicationInsights.PageView"; + + /** + * Base Type for this telemetry. + */ + public static final String BaseType = "Microsoft.ApplicationInsights.PageViewData"; + + /** + * Backing field for property Url. + */ + private String url; + + /** + * Backing field for property Duration. + */ + private String duration; + + /** + * Initializes a new instance of the class. + */ + public PageViewData() + { + this.InitializeFields(); + } + + /** + * Gets the Url property. + */ + public String getUrl() { + return this.url; + } + + /** + * Sets the Url property. + */ + public void setUrl(String value) { + this.url = value; + } + + /** + * Gets the Duration property. + */ + public String getDuration() { + return this.duration; + } + + /** + * Sets the Duration property. + */ + public void setDuration(String value) { + this.duration = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + super.serializeContent(writer); + + writer.write("url", url); + writer.write("duration", duration); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/PageViewPerfData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/PageViewPerfData.java new file mode 100644 index 0000000000..9a652d4407 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/PageViewPerfData.java @@ -0,0 +1,145 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; + +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +/** + * Data contract class PageViewPerfData. + */ +public class PageViewPerfData extends PageViewData { + /** + * Envelope Name for this telemetry. + */ + public static final String EnvelopeName = "Microsoft.ApplicationInsights.PageViewPerf"; + + /** + * Base Type for this telemetry. + */ + public static final String BaseType = "Microsoft.ApplicationInsights.PageViewPerfData"; + + /** + * Backing field for property PerfTotal. + */ + private String perfTotal; + + /** + * Backing field for property NetworkConnect. + */ + private String networkConnect; + + /** + * Backing field for property SentRequest. + */ + private String sentRequest; + + /** + * Backing field for property ReceivedResponse. + */ + private String receivedResponse; + + /** + * Backing field for property DomProcessing. + */ + private String domProcessing; + + /** + * Initializes a new instance of the class. + */ + public PageViewPerfData() + { + this.InitializeFields(); + } + + /** + * Gets the PerfTotal property. + */ + public String getPerfTotal() { + return this.perfTotal; + } + + /** + * Sets the PerfTotal property. + */ + public void setPerfTotal(String value) { + this.perfTotal = value; + } + + /** + * Gets the NetworkConnect property. + */ + public String getNetworkConnect() { + return this.networkConnect; + } + + /** + * Sets the NetworkConnect property. + */ + public void setNetworkConnect(String value) { + this.networkConnect = value; + } + + /** + * Gets the SentRequest property. + */ + public String getSentRequest() { + return this.sentRequest; + } + + /** + * Sets the SentRequest property. + */ + public void setSentRequest(String value) { + this.sentRequest = value; + } + + /** + * Gets the ReceivedResponse property. + */ + public String getReceivedResponse() { + return this.receivedResponse; + } + + /** + * Sets the ReceivedResponse property. + */ + public void setReceivedResponse(String value) { + this.receivedResponse = value; + } + + /** + * Gets the DomProcessing property. + */ + public String getDomProcessing() { + return this.domProcessing; + } + + /** + * Sets the DomProcessing property. + */ + public void setDomProcessing(String value) { + this.domProcessing = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + super.serializeContent(writer); + + writer.write("perfTotal", perfTotal); + writer.write("networkConnect", networkConnect); + writer.write("sentRequest", sentRequest); + writer.write("receivedResponse", receivedResponse); + writer.write("domProcessing", domProcessing); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RemoteDependencyData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RemoteDependencyData.java new file mode 100644 index 0000000000..be8c915a44 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RemoteDependencyData.java @@ -0,0 +1,326 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; +import com.sun.org.apache.bcel.internal.generic.DSTORE; + +/** + * Data contract class RemoteDependencyData. + */ +public class RemoteDependencyData extends Domain { + /** + * Envelope Name for this telemetry. + */ + public static final String REMOTE_ENVELOPE_NAME = "Microsoft.ApplicationInsights.RemoteDependency"; + + /** + * Base Type for this telemetry. + */ + public static final String REMOTE_BASE_TYPE = "Microsoft.ApplicationInsights.RemoteDependencyData"; + + /** + * Backing field for property Ver. + */ + private int ver = 2; + + /** + * Backing field for property Name. + */ + private String name; + + /** + * Backing field for property Kind. + */ + private DataPointType kind = DataPointType.Measurement; + + /** + * Backing field for property Value. + */ + private double value; + + /** + * Backing field for property Count. + */ + private Integer count; + + /** + * Backing field for property Min. + */ + private Double min; + + /** + * Backing field for property Max. + */ + private Double max; + + /** + * Backing field for property StdDev. + */ + private Double stdDev; + + /** + * Backing field for property DependencyKind. + */ + private DependencyKind dependencyKind = DependencyKind.Undefind; + + /** + * Backing field for property Success. + */ + private Boolean success = true; + + /** + * Backing field for property Async. + */ + private Boolean async; + + /** + * Backing field for property DependencySource. + */ + private DependencySourceType dependencySource = DependencySourceType.Undefined; + + /** + * Backing field for property Properties. + */ + private HashMap properties; + + /** + * Initializes a new instance of the class. + */ + public RemoteDependencyData() + { + this.InitializeFields(); + } + + /** + * Gets the Ver property. + */ + public int getVer() { + return this.ver; + } + + /** + * Sets the Ver property. + */ + public void setVer(int value) { + this.ver = value; + } + + /** + * Gets the Name property. + */ + public String getName() { + return this.name; + } + + /** + * Sets the Name property. + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the Kind property. + */ + public DataPointType getKind() { + return this.kind; + } + + /** + * Sets the Kind property. + */ + public void setKind(DataPointType value) { + this.kind = value; + } + + /** + * Gets the Value property. + */ + public double getValue() { + return this.value; + } + + /** + * Sets the Value property. + */ + public void setValue(double value) { + this.value = value; + } + + /** + * Gets the Count property. + */ + public Integer getCount() { + return this.count; + } + + /** + * Sets the Count property. + */ + public void setCount(Integer value) { + this.count = value; + } + + /** + * Gets the Min property. + */ + public Double getMin() { + return this.min; + } + + /** + * Sets the Min property. + */ + public void setMin(Double value) { + this.min = value; + } + + /** + * Gets the Max property. + */ + public Double getMax() { + return this.max; + } + + /** + * Sets the Max property. + */ + public void setMax(Double value) { + this.max = value; + } + + /** + * Gets the StdDev property. + */ + public Double getStdDev() { + return this.stdDev; + } + + /** + * Sets the StdDev property. + */ + public void setStdDev(Double value) { + this.stdDev = value; + } + + /** + * Gets the DependencyKind property. + */ + public DependencyKind getDependencyKind() { + return this.dependencyKind; + } + + /** + * Sets the DependencyKind property. + */ + public void setDependencyKind(DependencyKind value) { + this.dependencyKind = value; + } + + /** + * Gets the Success property. + */ + public Boolean getSuccess() { + return this.success; + } + + /** + * Sets the Success property. + */ + public void setSuccess(Boolean value) { + this.success = value; + } + + /** + * Gets the Async property. + */ + public Boolean getAsync() { + return this.async; + } + + /** + * Sets the Async property. + */ + public void setAsync(Boolean value) { + this.async = value; + } + + /** + * Gets the DependencySource property. + */ + public DependencySourceType getDependencySource() { + return this.dependencySource; + } + + /** + * Sets the DependencySource property. + */ + public void setDependencySource(DependencySourceType value) { + this.dependencySource = value; + } + + /** + * Gets the Properties property. + */ + public HashMap getProperties() { + if (this.properties == null) { + this.properties = new HashMap(); + } + return this.properties; + } + + /** + * Sets the Properties property. + */ + public void setProperties(HashMap value) { + this.properties = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + super.serializeContent(writer); + + writer.write("ver", ver); + writer.write("name", name); + + if (!DataPointType.Measurement.equals(kind)) { + writer.write("kind", kind.getValue()); + } + + writer.write("value", value); + writer.write("count", count); + writer.write("min", min); + writer.write("max", max); + writer.write("stdDev", stdDev); + writer.write("dependencyKind", dependencyKind.getValue()); + writer.write("success", success); + writer.write("async", async); + + if (!DependencySourceType.Undefined.equals(dependencyKind)) { + writer.write("dependencySource", dependencySource.getValue()); + } + + writer.write("properties", properties); + } + + public String getEnvelopName() { + return REMOTE_ENVELOPE_NAME; + } + + @Override + public String getBaseTypeName() { + return REMOTE_BASE_TYPE; + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RemoteDependencyDataWrapper.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RemoteDependencyDataWrapper.java new file mode 100644 index 0000000000..ee7ba68e4b --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RemoteDependencyDataWrapper.java @@ -0,0 +1,60 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import java.io.IOException; +import java.util.Map; + +/** + * Created by gupele on 12/25/2014. + */ +public class RemoteDependencyDataWrapper implements JsonSerializable { + private final RemoteDependencyData item; + + public RemoteDependencyDataWrapper() { + item = new RemoteDependencyData(); + } + + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("type", "Microsoft.ApplicationInsights.RemoteDependencyData"); + writer.write("item", item); + } + + public Map getProperties() { + return item.getProperties(); + } + + public String getName() { + return item.getName(); + } + + public void setName(String name) { + item.setName(name); + } + + public DependencyKind getDependencyKind() { + return item.getDependencyKind(); + } + + public void setDependencyKind(DependencyKind dependencyKind) { + item.setDependencyKind(dependencyKind); + } + + public double getValue() { + return item.getValue(); + } + + public void setValue(double value) { + item.setValue(value); + } + + public Integer getCount() { + return item.getCount(); + } + + public void setCount(Integer count) { + item.setCount(count); + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RequestData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RequestData.java new file mode 100644 index 0000000000..8062727d5b --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/RequestData.java @@ -0,0 +1,280 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +/** + * Data contract class RequestData. + */ +public class RequestData extends Domain { + /** + * Envelope Name for this telemetry. + */ + public static final String REQUEST_ENVELOPE_NAME = "Microsoft.ApplicationInsights.Request"; + + /** + * Base Type for this telemetry. + */ + public static final String REQUEST_BASE_TYPE = "Microsoft.ApplicationInsights.RequestData"; + + /** + * Backing field for property Ver. + */ + private int ver = 2; + + /** + * Backing field for property Id. + */ + private String id; + + /** + * Backing field for property Name. + */ + private String name; + + /** + * Backing field for property StartTime. + */ + private String startTime; + + /** + * Backing field for property Duration. + */ + private String duration; + + /** + * Backing field for property ResponseCode. + */ + private String responseCode; + + /** + * Backing field for property Success. + */ + private boolean success; + + /** + * Backing field for property HttpMethod. + */ + private String httpMethod; + + /** + * Backing field for property Url. + */ + private String url; + + /** + * Backing field for property Properties. + */ + private HashMap properties; + + /** + * Backing field for property Measurements. + */ + private HashMap measurements; + + /** + * Initializes a new instance of the class. + */ + public RequestData() + { + this.InitializeFields(); + } + + /** + * Gets the Ver property. + */ + public int getVer() { + return this.ver; + } + + /** + * Sets the Ver property. + */ + public void setVer(int value) { + this.ver = value; + } + + /** + * Gets the Id property. + */ + public String getId() { + return this.id; + } + + /** + * Sets the Id property. + */ + public void setId(String value) { + this.id = value; + } + + /** + * Gets the Name property. + */ + public String getName() { + return this.name; + } + + /** + * Sets the Name property. + */ + public void setName(String value) { + this.name = value; + } + + /** + * Gets the StartTime property. + */ + public String getStartTime() { + return this.startTime; + } + + /** + * Sets the StartTime property. + */ + public void setStartTime(String value) { + this.startTime = value; + } + + /** + * Gets the Duration property. + */ + public String getDuration() { + return this.duration; + } + + /** + * Sets the Duration property. + */ + public void setDuration(String value) { + this.duration = value; + } + + /** + * Gets the ResponseCode property. + */ + public String getResponseCode() { + return this.responseCode; + } + + /** + * Sets the ResponseCode property. + */ + public void setResponseCode(String value) { + this.responseCode = value; + } + + /** + * Gets the Success property. + */ + public boolean getSuccess() { + return this.success; + } + + /** + * Sets the Success property. + */ + public void setSuccess(boolean value) { + this.success = value; + } + + /** + * Gets the HttpMethod property. + */ + public String getHttpMethod() { + return this.httpMethod; + } + + /** + * Sets the HttpMethod property. + */ + public void setHttpMethod(String value) { + this.httpMethod = value; + } + + /** + * Gets the Url property. + */ + public String getUrl() { + return this.url; + } + + /** + * Sets the Url property. + */ + public void setUrl(String value) { + this.url = value; + } + + /** + * Gets the Properties property. + */ + public HashMap getProperties() { + if (this.properties == null) { + this.properties = new HashMap(); + } + return this.properties; + } + + /** + * Sets the Properties property. + */ + public void setProperties(HashMap value) { + this.properties = value; + } + + /** + * Gets the Measurements property. + */ + public HashMap getMeasurements() { + if (this.measurements == null) { + this.measurements = new HashMap(); + } + return this.measurements; + } + + /** + * Sets the Measurements property. + */ + public void setMeasurements(HashMap value) { + this.measurements = value; + } + + @Override + public String getEnvelopName() { + return REQUEST_ENVELOPE_NAME; + } + + @Override + public String getBaseTypeName() { + return REQUEST_BASE_TYPE; + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + super.serializeContent(writer); + + writer.write("ver", ver); + writer.write("id", id); + writer.write("name", name); + writer.write("startTime", startTime); + writer.write("duration", duration); + writer.write("responseCode", responseCode); + writer.write("success", success); + writer.write("httpMethod", httpMethod); + writer.write("url", url); + writer.write("properties", properties); + writer.write("measurements", measurements); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/SendableData.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/SendableData.java new file mode 100644 index 0000000000..62cb5507a8 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/SendableData.java @@ -0,0 +1,12 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; + +/** + * Created by gupele on 12/25/2014. + */ +public interface SendableData extends JsonSerializable { + String getEnvelopName(); + + String getBaseTypeName(); +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Session.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Session.java new file mode 100644 index 0000000000..c872e4b7ee --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/Session.java @@ -0,0 +1,125 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class Session. + */ +public class Session implements JsonSerializable { + /** + * Backing field for property Id. + */ + private String id; + + /** + * Backing field for property IsFirst. + */ + private String isFirst; + + /** + * Backing field for property IsNew. + */ + private String isNew; + + /** + * Initializes a new instance of the class. + */ + public Session() + { + this.InitializeFields(); + } + + /** + * Gets the Id property. + */ + public String getId() { + return this.id; + } + + /** + * Sets the Id property. + */ + public void setId(String value) { + this.id = value; + } + + /** + * Gets the IsFirst property. + */ + public String getIsFirst() { + return this.isFirst; + } + + /** + * Sets the IsFirst property. + */ + public void setIsFirst(String value) { + this.isFirst = value; + } + + /** + * Gets the IsNew property. + */ + public String getIsNew() { + return this.isNew; + } + + /** + * Sets the IsNew property. + */ + public void setIsNew(String value) { + this.isNew = value; + } + + + /** + * Adds all members of this class to a hashmap + * @param map to which the members of this class will be added. + */ + public void addToHashMap(HashMap map) + { + if (!(this.id == null)) { + map.put("id", this.id); + } + if (!(this.isFirst == null)) { + map.put("isFirst", this.isFirst); + } + if (!(this.isNew == null)) { + map.put("isNew", this.isNew); + } + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("id", id); + writer.write("isFirst", isFirst); + writer.write("isNew", isNew); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/SeverityLevel.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/SeverityLevel.java new file mode 100644 index 0000000000..5807e529f0 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/SeverityLevel.java @@ -0,0 +1,22 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +/** + * Enum SeverityLevel. + */ +public enum SeverityLevel { + Verbose(0), + Information(1), + Warning(2), + Error(3), + Critical(4); + + private final int id; + + public int getValue() { + return id; + } + + SeverityLevel(int id) { + this.id = id; + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/StackFrame.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/StackFrame.java new file mode 100644 index 0000000000..e030559f64 --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/StackFrame.java @@ -0,0 +1,147 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class StackFrame. + */ +public class StackFrame implements JsonSerializable { + /** + * Backing field for property Level. + */ + private int level; + + /** + * Backing field for property Method. + */ + private String method; + + /** + * Backing field for property Assembly. + */ + private String assembly; + + /** + * Backing field for property FileName. + */ + private String fileName; + + /** + * Backing field for property Line. + */ + private int line; + + /** + * Initializes a new instance of the class. + */ + public StackFrame() + { + this.InitializeFields(); + } + + /** + * Gets the Level property. + */ + public int getLevel() { + return this.level; + } + + /** + * Sets the Level property. + */ + public void setLevel(int value) { + this.level = value; + } + + /** + * Gets the Method property. + */ + public String getMethod() { + return this.method; + } + + /** + * Sets the Method property. + */ + public void setMethod(String value) { + this.method = value; + } + + /** + * Gets the Assembly property. + */ + public String getAssembly() { + return this.assembly; + } + + /** + * Sets the Assembly property. + */ + public void setAssembly(String value) { + this.assembly = value; + } + + /** + * Gets the FileName property. + */ + public String getFileName() { + return this.fileName; + } + + /** + * Sets the FileName property. + */ + public void setFileName(String value) { + this.fileName = value; + } + + /** + * Gets the Line property. + */ + public int getLine() { + return this.line; + } + + /** + * Sets the Line property. + */ + public void setLine(int value) { + this.line = value; + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("level", level); + writer.write("method", method); + writer.write("assembly", assembly); + writer.write("fileName", fileName); + writer.write("line", line); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + + } +} diff --git a/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/User.java b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/User.java new file mode 100644 index 0000000000..145c4c78ef --- /dev/null +++ b/Core/src/main/java/com/microsoft/applicationinsights/implementation/schemav2/User.java @@ -0,0 +1,148 @@ +package com.microsoft.applicationinsights.implementation.schemav2; + +import java.io.IOException; +import java.util.HashMap; + +import com.microsoft.applicationinsights.datacontracts.JsonSerializable; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; + +import com.google.common.base.Preconditions; + +/** + * Data contract class User. + */ +public class User implements JsonSerializable { + /** + * Backing field for property AccountAcquisitionDate. + */ + private String accountAcquisitionDate; + + /** + * Backing field for property AccountId. + */ + private String accountId; + + /** + * Backing field for property UserAgent. + */ + private String userAgent; + + /** + * Backing field for property Id. + */ + private String id; + + /** + * Initializes a new instance of the class. + */ + public User() + { + this.InitializeFields(); + } + + /** + * Gets the AccountAcquisitionDate property. + */ + public String getAccountAcquisitionDate() { + return this.accountAcquisitionDate; + } + + /** + * Sets the AccountAcquisitionDate property. + */ + public void setAccountAcquisitionDate(String value) { + this.accountAcquisitionDate = value; + } + + /** + * Gets the AccountId property. + */ + public String getAccountId() { + return this.accountId; + } + + /** + * Sets the AccountId property. + */ + public void setAccountId(String value) { + this.accountId = value; + } + + /** + * Gets the UserAgent property. + */ + public String getUserAgent() { + return this.userAgent; + } + + /** + * Sets the UserAgent property. + */ + public void setUserAgent(String value) { + this.userAgent = value; + } + + /** + * Gets the Id property. + */ + public String getId() { + return this.id; + } + + /** + * Sets the Id property. + */ + public void setId(String value) { + this.id = value; + } + + + /** + * Adds all members of this class to a hashmap + * @param map to which the members of this class will be added. + */ + public void addToHashMap(HashMap map) + { + if (!(this.accountAcquisitionDate == null)) { + map.put("accountAcquisitionDate", this.accountAcquisitionDate); + } + if (!(this.accountId == null)) { + map.put("accountId", this.accountId); + } + if (!(this.userAgent == null)) { + map.put("userAgent", this.userAgent); + } + if (!(this.id == null)) { + map.put("id", this.id); + } + } + + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + Preconditions.checkNotNull(writer, "writer must be a non-null value"); + + this.serializeContent(writer); + } + + /** + * Serializes the beginning of this object to the passed in writer. + * @param writer The writer to serialize this object to. + */ + protected void serializeContent(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("accountAcquisitionDate", accountAcquisitionDate); + writer.write("accountId", accountId); + writer.write("userAgent", accountId); + writer.write("id", id); + } + + /** + * Optionally initializes fields for the current context. + */ + protected void InitializeFields() { + } +} diff --git a/Core/src/test/java/com/microsoft/applicationinsights/channel/GzipTelemetrySerializerTest.java b/Core/src/test/java/com/microsoft/applicationinsights/channel/GzipTelemetrySerializerTest.java index dc18a7e3b4..3ccfa6b245 100644 --- a/Core/src/test/java/com/microsoft/applicationinsights/channel/GzipTelemetrySerializerTest.java +++ b/Core/src/test/java/com/microsoft/applicationinsights/channel/GzipTelemetrySerializerTest.java @@ -11,9 +11,9 @@ import java.util.Date; import java.util.List; import java.util.zip.GZIPInputStream; +import com.microsoft.applicationinsights.datacontracts.JsonTelemetryDataSerializer; import org.junit.Test; -import com.microsoft.applicationinsights.datacontracts.JsonWriter; import com.microsoft.applicationinsights.datacontracts.TelemetryContext; import com.google.common.base.Optional; @@ -59,18 +59,6 @@ public class GzipTelemetrySerializerTest { public void sanitize() { } - @Override - public void serialize(JsonWriter writer) throws IOException { - writer.writeStartObject(); - - writer.writeProperty("ver", 1); - writer.writeProperty("telemetryName", telemetryName); - - writer.writeProperty("properties", this.getProperties()); - - writer.writeEndObject(); - } - @Override public boolean equals(Object other) { if (this == other) { @@ -90,6 +78,13 @@ public class GzipTelemetrySerializerTest { public String getTelemetryName() { return telemetryName; } + + @Override + public void serialize(JsonTelemetryDataSerializer writer) throws IOException { + writer.write("ver", 1); + writer.write("telemetryName", telemetryName); + writer.write("properties", this.getProperties()); + } } @Test(expected = NullPointerException.class) diff --git a/Core/src/test/java/com/microsoft/applicationinsights/datacontracts/JsonTelemetryDataSerializerTest.java b/Core/src/test/java/com/microsoft/applicationinsights/datacontracts/JsonTelemetryDataSerializerTest.java new file mode 100644 index 0000000000..e5b7b4ea5d --- /dev/null +++ b/Core/src/test/java/com/microsoft/applicationinsights/datacontracts/JsonTelemetryDataSerializerTest.java @@ -0,0 +1,203 @@ +package com.microsoft.applicationinsights.datacontracts; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.Serializable; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.google.gson.Gson; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class JsonTelemetryDataSerializerTest { + private final static class TestClassWithStrings implements JsonSerializable, Serializable { + private String s1; + private String s2; + + @Override + public void serialize(JsonTelemetryDataSerializer serializer) throws IOException { + serializer.write("s1", s1); + serializer.write("s2", s2); + } + + public String getS1() { + return s1; + } + + public void setS1(String s1) { + this.s1 = s1; + } + + public String getS2() { + return s2; + } + + public void setS2(String s2) { + this.s2 = s2; + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + + if (!(other instanceof TestClassWithStrings)) { + return false; + } + + TestClassWithStrings that = (TestClassWithStrings)other; + return this.s1.equals(that.getS1()) && this.s2.equals(that.getS2()); + } + } + + private final static class StubClass implements JsonSerializable, Serializable { + private int i1; + private int i2; + private String s1; + private Long l1; + private long l2; + private String s2; + private Map m1 = new HashMap(); + private List list1 = new ArrayList(); + + public int getI1() { + return i1; + } + + public void setI1(int i1) { + this.i1 = i1; + } + + public int getI2() { + return i2; + } + + public void setI2(int i2) { + this.i2 = i2; + } + + public String getS1() { + return s1; + } + + public void setS1(String s1) { + this.s1 = s1; + } + + public Long getL1() { + return l1; + } + + public void setL1(Long l1) { + this.l1 = l1; + } + + public long getL2() { + return l2; + } + + public void setL2(long l2) { + this.l2 = l2; + } + + public String getS2() { + return s2; + } + + public void setS2(String s2) { + this.s2 = s2; + } + + public Map getM1() { + return m1; + } + + public void setM1(Map m1) { + this.m1 = m1; + } + + public List getList1() { + return list1; + } + + public void setList1(List list1) { + this.list1 = list1; + } + + @Override + public void serialize(JsonTelemetryDataSerializer serializer) throws IOException { + serializer.write("i1", i1); + serializer.write("i2", i2); + serializer.write("s1", s1); + serializer.write("l1", l1); + serializer.write("l2", l2); + serializer.write("s2", s2); + serializer.write("m1", m1); + serializer.write("list1", list1); + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + + if (!(other instanceof TestClassWithStrings)) { + return false; + } + + StubClass that = (StubClass)other; + return + this.s1.equals(that.getS1()) && this.s2.equals(that.getS2()) && + this.i1 == that.getI1() && this.i2 == that.getI2() && + (this.l1 == null ? that.getL1() == null : this.l1.equals(getL1())) && this.l2 == that.getL2() && + this.list1.equals(that.getList1()) && this.m1.equals(that.getM1()); + } + } + + @Test + public void testStrings() throws IOException { + TestClassWithStrings testClassWithStrings = new TestClassWithStrings(); + testClassWithStrings.setS1("s1"); + testClassWithStrings.setS2("s2"); + + StringWriter stringWriter = new StringWriter(); + BufferedWriter bufferedWriter = new BufferedWriter(stringWriter); + JsonTelemetryDataSerializer tested = new JsonTelemetryDataSerializer(stringWriter); + testClassWithStrings.serialize(tested); + tested.close(); + String str = stringWriter.toString(); + TestClassWithStrings bac = new Gson().fromJson(str, TestClassWithStrings.class); + assertEquals(bac, testClassWithStrings); + } + + @Test + public void test() throws IOException { + StubClass stubClass = new StubClass(); + stubClass.setI1(1); + stubClass.setI2(2); + stubClass.setL1(3L); + stubClass.setL2(4L); + stubClass.getList1().add("str1"); + stubClass.getList1().add("str2"); + stubClass.getM1().put("key1", 5); + stubClass.getM1().put("key2", 6); + stubClass.getM1().put("key3", 7); + + StringWriter stringWriter = new StringWriter(); + BufferedWriter bufferedWriter = new BufferedWriter(stringWriter); + JsonTelemetryDataSerializer tested = new JsonTelemetryDataSerializer(stringWriter); + stubClass.serialize(tested); + tested.close(); + String str = stringWriter.toString(); + StubClass bac = new Gson().fromJson(str, StubClass.class); + System.out.println(str); + } + +} \ No newline at end of file diff --git a/src/main/java/com/microsoft/applicationinsights/tests/manual/Program.java b/src/main/java/com/microsoft/applicationinsights/tests/manual/Program.java index 90a469cd6c..f17c3c5d76 100644 --- a/src/main/java/com/microsoft/applicationinsights/tests/manual/Program.java +++ b/src/main/java/com/microsoft/applicationinsights/tests/manual/Program.java @@ -20,6 +20,7 @@ class Program metrics.put("Answers", (double)15); appInsights.trackEvent("A test event", null, metrics); + appInsights.trackTrace("Things seem to be going well"); MetricTelemetry mt = new MetricTelemetry("Test time", 17.0);