Esempio n. 1
0
        public static DataRetrievalResult TryGetData(EventData eventData, EventMetadata metricMetadata, out MetricData metric)
        {
            Requires.NotNull(eventData, nameof(eventData));
            Requires.NotNull(metricMetadata, nameof(metricMetadata));
            metric = null;

            string metricName = metricMetadata[MetricNameMoniker];

            if (string.IsNullOrEmpty(metricName))
            {
                return(DataRetrievalResult.MissingMetadataProperty(MetricNameMoniker));
            }

            double value = 0.0;

            string metricValueProperty = metricMetadata[MetricValuePropertyMoniker];

            if (string.IsNullOrEmpty(metricValueProperty))
            {
                string rawValue = metricMetadata[MetricValueMoniker];
                if (string.IsNullOrEmpty(rawValue))
                {
                    return(DataRetrievalResult.MissingMetadataProperty(MetricValueMoniker));
                }

                if (!double.TryParse(rawValue, out value))
                {
                    return(DataRetrievalResult.InvalidMetadataPropertyValue(MetricValueMoniker, rawValue));
                }
            }
            else
            {
                if (!eventData.GetValueFromPayload <double>(metricValueProperty, (v) => value = v))
                {
                    return(DataRetrievalResult.DataMissingOrInvalid(metricValueProperty));
                }
            }

            metric            = new MetricData();
            metric.MetricName = metricName;
            metric.Value      = value;
            return(DataRetrievalResult.Success());
        }
Esempio n. 2
0
        public static DataRetrievalResult TryGetData(
            EventData eventData,
            EventMetadata requestMetadata,
            out RequestData request)
        {
            Requires.NotNull(eventData, nameof(eventData));
            Requires.NotNull(requestMetadata, nameof(requestMetadata));
            request = null;

            string requestNameProperty = requestMetadata[RequestNamePropertyMoniker];

            if (string.IsNullOrWhiteSpace(requestNameProperty))
            {
                return(DataRetrievalResult.MissingMetadataProperty(RequestNamePropertyMoniker));
            }

            string requestName = null;

            if (!eventData.GetValueFromPayload <string>(requestNameProperty, (v) => requestName = v))
            {
                return(DataRetrievalResult.DataMissingOrInvalid(requestNameProperty));
            }

            bool?  success           = null;
            string isSuccessProperty = requestMetadata[IsSuccessPropertyMoniker];

            if (!string.IsNullOrWhiteSpace(isSuccessProperty))
            {
                if (!eventData.GetValueFromPayload <bool>(isSuccessProperty, (v) => success = v))
                {
                    return(DataRetrievalResult.DataMissingOrInvalid(isSuccessProperty));
                }
            }

            TimeSpan?duration         = null;
            string   durationProperty = requestMetadata[DurationPropertyMoniker];

            if (!string.IsNullOrWhiteSpace(durationProperty))
            {
                DurationUnit durationUnit;
                string       durationUnitOverride = requestMetadata[DurationUnitMoniker];
                if (string.IsNullOrEmpty(durationUnitOverride) || !Enum.TryParse <DurationUnit>(durationUnitOverride, ignoreCase: true, result: out durationUnit))
                {
                    // By default we assume duration is stored as a double value representing milliseconds
                    durationUnit = DurationUnit.Milliseconds;
                }

                if (durationUnit != DurationUnit.TimeSpan)
                {
                    double tempDuration = 0.0;
                    if (!eventData.GetValueFromPayload <double>(durationProperty, (v) => tempDuration = v))
                    {
                        return(DataRetrievalResult.DataMissingOrInvalid(durationProperty));
                    }
                    duration = ToTimeSpan(tempDuration, durationUnit);
                }
                else
                {
                    if (!eventData.GetValueFromPayload <TimeSpan>(durationProperty, (v) => duration = v))
                    {
                        return(DataRetrievalResult.DataMissingOrInvalid(durationProperty));
                    }
                }
            }

            string responseCode         = null;
            string responseCodeProperty = requestMetadata[ResponseCodePropertyMoniker];

            if (!string.IsNullOrWhiteSpace(responseCodeProperty))
            {
                if (!eventData.GetValueFromPayload <string>(responseCodeProperty, (v) => responseCode = v))
                {
                    return(DataRetrievalResult.DataMissingOrInvalid(responseCodeProperty));
                }
            }

            request              = new RequestData();
            request.RequestName  = requestName;
            request.IsSuccess    = success;
            request.Duration     = duration;
            request.ResponseCode = responseCode;
            return(DataRetrievalResult.Success());
        }