/// <summary> /// Serializes the metric to JSON. /// </summary> /// <param name="writer">The JSON Writer.</param> /// <param name="recording">The metric recording.</param> /// <remarks> /// Implementation note, for performance and correctness: /// 1. Don't emit null fields at all if the value isn't populated. /// No need for that space in the content on the wire. /// 2. Design this method to be repeatable for multiple metrics in case /// we want to batch. /// </remarks> private static void MetricToJson(JsonTextWriter writer, ref PcfMetricRecording recording) { writer.WriteStartObject(); writer.WritePropertyName(MetricName); writer.WriteValue(recording.Name); writer.WritePropertyName(MetricType); writer.WriteValue(recording.Type); writer.WritePropertyName(MetricValue); writer.WriteValue(recording.Value); writer.WritePropertyName(Timestamp); writer.WriteValue(recording.Timestamp); if (!string.IsNullOrEmpty(recording.Unit)) { writer.WritePropertyName(MetricUnit); writer.WriteValue(recording.Unit); } writer.WritePropertyName(Tags); writer.WriteStartObject(); if (recording.Tags != null) { foreach (var t in recording.Tags) { writer.WritePropertyName(t.Key); writer.WriteValue(t.Value); } } writer.WriteEndObject(); writer.WriteEndObject(); }
public void Serialize(Stream stream, PcfMetricRecording metric, PcfMetricForwarderSettings settings) { using (var writer = new JsonTextWriter(new StreamWriter(stream, Encoding.Default, 2048, true))) { WriteHeaders(writer, settings); MetricToJson(writer, ref metric); CloseHeaders(writer); } }
public void ShouldSerializeMetricIntoJson() { var serializer = new JsonMetricSerializer(); var recording = new PcfMetricRecording("hi", 0, "foos", Settings.TimeProvider.NowUnixEpoch, null); var stream = new MemoryStream(); serializer.Serialize(stream, recording, Settings); var actualOutput = stream.ToArray(); var jsonStr = Encoding.UTF8.GetString(actualOutput); stream.Flush(); stream.Dispose(); }