public void SerializeTo(ref StatsServiceCheck sc, SerializedMetric serializedMetric)
        {
            serializedMetric.Reset();

            var builder = serializedMetric.Builder;

            string processedName    = EscapeName(sc.Name);
            string processedMessage = EscapeMessage(sc.ServiceCheckMessage);

            builder.Append("_sc|");
            builder.Append(processedName);
            builder.AppendFormat(CultureInfo.InvariantCulture, "|{0}", sc.Status);

            if (sc.Timestamp != null)
            {
                builder.AppendFormat(CultureInfo.InvariantCulture, "|d:{0}", sc.Timestamp.Value);
            }

            SerializerHelper.AppendIfNotNull(builder, "|h:", sc.Hostname);

            _serializerHelper.AppendTags(builder, sc.Tags);

            // Note: this must always be appended to the result last.
            SerializerHelper.AppendIfNotNull(builder, "|m:", processedMessage);

            sc.ServiceCheckMessage = TruncateMessageIfRequired(sc.Name, builder, sc.TruncateIfTooLong, processedMessage);
            if (sc.ServiceCheckMessage != null)
            {
                sc.TruncateIfTooLong = true;
                SerializeTo(ref sc, serializedMetric);
            }
        }
Exemplo n.º 2
0
        public SerializedMetric Serialize <T>(
            MetricType metricType,
            string name,
            T value,
            double sampleRate = 1.0,
            string[] tags     = null)
        {
            var serializedMetric = _serializerHelper.GetOptionalSerializedMetric();

            if (serializedMetric == null)
            {
                return(null);
            }

            var builder = serializedMetric.Builder;
            var unit    = _commandToUnit[metricType];

            builder.Append(_prefix);
            builder.Append(name);
            builder.Append(':');
            builder.AppendFormat(CultureInfo.InvariantCulture, "{0}", value);
            builder.Append('|');
            builder.Append(unit);

            if (sampleRate != 1.0)
            {
                builder.AppendFormat(CultureInfo.InvariantCulture, "|@{0}", sampleRate);
            }

            _serializerHelper.AppendTags(builder, tags);
            return(serializedMetric);
        }
        public void SerializeTo(ref StatsMetric metricStats, SerializedMetric serializedMetric)
        {
            serializedMetric.Reset();

            var builder = serializedMetric.Builder;
            var unit    = _commandToUnit[metricStats.MetricType];

            builder.Append(_prefix);
            builder.Append(metricStats.StatName);
            builder.Append(':');
            switch (metricStats.MetricType)
            {
            case MetricType.Set: builder.Append(metricStats.StringValue); break;

            default: builder.AppendFormat(CultureInfo.InvariantCulture, "{0}", metricStats.NumericValue); break;
            }

            builder.Append('|');
            builder.Append(unit);

            if (metricStats.SampleRate != 1.0)
            {
                builder.AppendFormat(CultureInfo.InvariantCulture, "|@{0}", metricStats.SampleRate);
            }

            _serializerHelper.AppendTags(builder, metricStats.Tags);
        }
Exemplo n.º 4
0
        public void SerializeTo(ref StatsEvent statsEvent, SerializedMetric serializedMetric)
        {
            serializedMetric.Reset();
            string processedTitle = SerializerHelper.EscapeContent(statsEvent.Title);
            string processedText  = SerializerHelper.EscapeContent(statsEvent.Text);
            var    builder        = serializedMetric.Builder;

            builder.Append("_e{");
            builder.AppendFormat(CultureInfo.InvariantCulture, "{0}", processedTitle.Length);
            builder.Append(',');
            builder.AppendFormat(CultureInfo.InvariantCulture, "{0}", processedText.Length);
            builder.Append("}:");
            builder.Append(processedTitle);
            builder.Append('|');
            builder.Append(processedText);

            if (statsEvent.DateHappened != null)
            {
                builder.AppendFormat(CultureInfo.InvariantCulture, "|d:{0}", statsEvent.DateHappened.Value);
            }

            SerializerHelper.AppendIfNotNull(builder, "|h:", statsEvent.Hostname);
            SerializerHelper.AppendIfNotNull(builder, "|k:", statsEvent.AggregationKey);
            SerializerHelper.AppendIfNotNull(builder, "|p:", statsEvent.Priority);
            SerializerHelper.AppendIfNotNull(builder, "|s:", statsEvent.SourceType);
            SerializerHelper.AppendIfNotNull(builder, "|t:", statsEvent.AlertType);

            _serializerHelper.AppendTags(builder, statsEvent.Tags);

            if (builder.Length > MaxSize)
            {
                if (statsEvent.TruncateIfTooLong)
                {
                    var overage = builder.Length - MaxSize;
                    if (statsEvent.Title.Length > statsEvent.Text.Length)
                    {
                        statsEvent.Title = SerializerHelper.TruncateOverage(statsEvent.Title, overage);
                    }
                    else
                    {
                        statsEvent.Text = SerializerHelper.TruncateOverage(statsEvent.Text, overage);
                    }

                    statsEvent.TruncateIfTooLong = true;
                    SerializeTo(ref statsEvent, serializedMetric);
                }
                else
                {
                    throw new Exception(string.Format("Event {0} payload is too big (more than 8kB)", statsEvent.Title));
                }
            }
        }
Exemplo n.º 5
0
        public SerializedMetric Serialize(
            string name,
            int status,
            int?timestamp,
            string hostname,
            string[] tags,
            string serviceCheckMessage,
            bool truncateIfTooLong = false)
        {
            var serializedMetric = _serializerHelper.GetOptionalSerializedMetric();

            if (serializedMetric == null)
            {
                return(null);
            }

            var builder = serializedMetric.Builder;

            string processedName    = EscapeName(name);
            string processedMessage = EscapeMessage(serviceCheckMessage);

            builder.Append("_sc|");
            builder.Append(processedName);
            builder.AppendFormat(CultureInfo.InvariantCulture, "|{0}", status);

            if (timestamp != null)
            {
                builder.AppendFormat(CultureInfo.InvariantCulture, "|d:{0}", timestamp.Value);
            }

            SerializerHelper.AppendIfNotNull(builder, "|h:", hostname);

            _serializerHelper.AppendTags(builder, tags);

            // Note: this must always be appended to the result last.
            SerializerHelper.AppendIfNotNull(builder, "|m:", processedMessage);

            var truncatedMessage = TruncateMessageIfRequired(name, builder, truncateIfTooLong, processedMessage);

            if (truncatedMessage != null)
            {
                return(Serialize(name, status, timestamp, hostname, tags, truncatedMessage, true));
            }

            return(serializedMetric);
        }
Exemplo n.º 6
0
        public SerializedMetric Serialize(
            string title,
            string text,
            string alertType,
            string aggregationKey,
            string sourceType,
            int?dateHappened,
            string priority,
            string hostname,
            string[] tags,
            bool truncateIfTooLong = false)
        {
            string processedTitle = SerializerHelper.EscapeContent(title);
            string processedText  = SerializerHelper.EscapeContent(text);

            var serializedMetric = _serializerHelper.GetOptionalSerializedMetric();

            if (serializedMetric == null)
            {
                return(null);
            }

            var builder = serializedMetric.Builder;

            builder.Append("_e{");
            builder.AppendFormat(CultureInfo.InvariantCulture, "{0}", processedTitle.Length);
            builder.Append(',');
            builder.AppendFormat(CultureInfo.InvariantCulture, "{0}", processedText.Length);
            builder.Append("}:");
            builder.Append(processedTitle);
            builder.Append('|');
            builder.Append(processedText);

            if (dateHappened != null)
            {
                builder.AppendFormat(CultureInfo.InvariantCulture, "|d:{0}", dateHappened.Value);
            }

            SerializerHelper.AppendIfNotNull(builder, "|h:", hostname);
            SerializerHelper.AppendIfNotNull(builder, "|k:", aggregationKey);
            SerializerHelper.AppendIfNotNull(builder, "|p:", priority);
            SerializerHelper.AppendIfNotNull(builder, "|s:", sourceType);
            SerializerHelper.AppendIfNotNull(builder, "|t:", alertType);

            _serializerHelper.AppendTags(builder, tags);

            if (builder.Length > MaxSize)
            {
                if (truncateIfTooLong)
                {
                    var overage = builder.Length - MaxSize;
                    if (title.Length > text.Length)
                    {
                        title = SerializerHelper.TruncateOverage(title, overage);
                    }
                    else
                    {
                        text = SerializerHelper.TruncateOverage(text, overage);
                    }

                    return(Serialize(title, text, alertType, aggregationKey, sourceType, dateHappened, priority, hostname, tags, true));
                }
                else
                {
                    throw new Exception(string.Format("Event {0} payload is too big (more than 8kB)", title));
                }
            }

            return(serializedMetric);
        }