/** * @deprecated * Makes sure the data to send is sanitized from bad chars, proper length etc. */ @Override @Deprecated public void sanitize() { Sanitizer.sanitizeProperties(this.getProperties()); additionalSanitize(); }
/** * Uses BaseTelemetry.getBaseTypeName() to find the appropriate function to transform the "internal model" to the protobuf models. * * @param internalModel the BaseTelemetry to transform * @return the given BaseTelemetry as a Telemetry object, or null if no transformer could be found for the given type. * @throws NullPointerException if internalModel is null */ public static Telemetry transform(BaseTelemetry<?> internalModel) { final Function<BaseTelemetry, Telemetry> transformer = transformers.get(internalModel.getBaseTypeName()); if (transformer == null) { return null; } return transformer.apply(internalModel); } }
@VisibleForTesting static String generateDataTypeName(String iKey, String envelopName) { return BaseTelemetry.getTelemetryName(BaseTelemetry.normalizeInstrumentationKey(iKey), envelopName); }
/** * Serializes this object in JSON format. * * @param writer The writer that helps with serializing into Json format * @throws IOException The exception that might be thrown during the serialization */ @Override public void serialize(JsonTelemetryDataSerializer writer) throws IOException { String telemetryName = this.getTelemetryName( this.normalizeInstrumentationKey(context.getInstrumentationKey()), this.getEnvelopName()); Envelope envelope = new Envelope(); envelope.setName(telemetryName); setSampleRate(envelope); envelope.setIKey(context.getInstrumentationKey()); envelope.setSeq(sequence); Data<T> tmp = new Data<T>(); tmp.setBaseData(getData()); tmp.setBaseType(this.getBaseTypeName()); envelope.setData(tmp); envelope.setTime(LocalStringsUtils.getDateFormatter().format(getTimestamp())); envelope.setTags(context.getTags()); envelope.serialize(writer); }
@VisibleForTesting static <T extends BaseTelemetry> Telemetry.Builder telemetryBuilderWithStandardFields(T telemetry) { Preconditions.checkArgument(telemetry.getContext() != null, "TelemetryContext is null for telemetry with "+telemetry.getBaseTypeName()); TelemetryContext context = telemetry.getContext(); final String iKey = context.getInstrumentationKey(); Preconditions.checkArgument(iKey != null, "The TelemetryContext.InstrumentationKey is null inside "+telemetry.getBaseTypeName()); final Builder tb = Telemetry.newBuilder(); if (telemetry.getTimestamp() != null) tb.setDateTime(LocalStringsUtils.getDateFormatter().format(telemetry.getTimestamp())); if (telemetry.getSequence() != null) tb.setSequenceNumber(telemetry.getSequence()); if (telemetry instanceof BaseSampleSourceTelemetry) { final BaseSampleSourceTelemetry bsst = (BaseSampleSourceTelemetry) telemetry; if (bsst.getSamplingPercentage() != null) tb.setSamplingRate(DoubleValue.of(bsst.getSamplingPercentage())); } tb.setInstrumentationKey(iKey); if (context.getTags() != null) tb.putAllTags(context.getTags()); tb.setVer(CURRENT_ENVELOPE_VERSION); final String envelopName; if (telemetry instanceof PerformanceCounterTelemetry) { envelopName = MetricTelemetry.ENVELOPE_NAME; } else { envelopName = telemetry.getEnvelopName(); } tb.setDataTypeName(generateDataTypeName(iKey, envelopName)); return tb; }
new PerformanceCounterTelemetry() }) { String envelopeName = bt instanceof PerformanceCounterTelemetry ? MetricTelemetry.ENVELOPE_NAME : bt.getEnvelopName(); bt.getContext().setInstrumentationKey(ikey); bt.setTimestamp(date); bt.setSequence(sequence); put("tag2", "something else"); }}; bt.getContext().getTags().putAll(tags);
@Test public void telemetryBuilderWithStandardFieldsMinimalFields() { String ikey = "123"; for (BaseTelemetry<?> bt : new BaseTelemetry[] { new MetricTelemetry(), new TraceTelemetry(), new ExceptionTelemetry(new RuntimeException("fake")), new RemoteDependencyTelemetry(), new EventTelemetry(), new PageViewTelemetry(), new RequestTelemetry(), new PerformanceCounterTelemetry() }) { String envelopeName = bt instanceof PerformanceCounterTelemetry ? MetricTelemetry.ENVELOPE_NAME : bt.getEnvelopName(); bt.getContext().setInstrumentationKey(ikey); final Date date = new Date(); bt.setTimestamp(date); assertEquals(Telemetry.newBuilder() .setDateTime(LocalStringsUtils.getDateFormatter().format(date)) .setVer(LocalForwarderModelTransformer.CURRENT_ENVELOPE_VERSION) .setInstrumentationKey(ikey) .setDataTypeName(String.format("Microsoft.ApplicationInsights.%s.%s", ikey, envelopeName)).buildPartial(), LocalForwarderModelTransformer.telemetryBuilderWithStandardFields(bt).buildPartial()); } }
@Override protected boolean doSend(com.microsoft.applicationinsights.telemetry.Telemetry telemetry) { if (telemetryBuffer == null) { InternalLogger.INSTANCE.error("Cannot send telemetry. telemetryBuffer is null"); return false; } BaseTelemetry base = (BaseTelemetry) telemetry; if (base == null) { InternalLogger.INSTANCE.warn("Received null telemetry item. Skipping..."); } try { Telemetry toSend = LocalForwarderModelTransformer.transform(base); if (toSend == null) { InternalLogger.INSTANCE.error("Could not find transformer for type='%s'", base.getBaseTypeName()); return false; } telemetryBuffer.add(toSend); telemetry.reset(); return true; } catch (java.lang.Exception e) { InternalLogger.INSTANCE.error("Failed to transform telemetry: %s%nException: %s", telemetry.toString(), ExceptionUtils.getStackTrace(e)); } return false; }