Ejemplo n.º 1
0
        /// <summary>
        /// Returns the created Metric Tree with all data values and metadata included
        /// </summary>
        /// <param name="metricInstanceSetRequest">The request originally passed to the metric service, containing the domain-specific context.</param>
        /// <param name="metricMetadataNode">Should already Filtered by MetricNodeId</param>
        /// <param name="metricDataContainer">Should already be filtered by the domain entity key</param>
        /// <returns>An instance of a class derived from <see cref="MetricBase"/>, and all its descendents.</returns>
        public MetricBase CreateTree(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metricMetadataNode, MetricDataContainer metricDataContainer)
        {
            // Get the custom metric initialization activity data
            var initializationActivityData = GetMetricInitializationActivityData(metricInstanceSetRequest);

            return CreateMetric(metricInstanceSetRequest, metricMetadataNode, metricDataContainer, null, initializationActivityData);
        }
Ejemplo n.º 2
0
        private Dictionary<string, object> GetMetricInitializationActivityData(MetricInstanceSetRequestBase metricInstanceSetRequest)
        {
            var data = new Dictionary<string, object>();

            foreach (var activityDataProvider in metricInitializationActivityDataProviders)
            {
                var activityData = activityDataProvider.GetInitializationActivityData(metricInstanceSetRequest);

                // Ignore activity data if null is returned.
                if (activityData == null)
                    continue;

                // Make sure we're not trying to overwrite already retrieved data
                if (data.ContainsKey(activityData.Key))
					throw new InvalidOperationException(string.Format("Initialization activity data already exists for '{0}'.", activityData.Key));

                // Add the entry to the data
                data.Add(activityData.Key, activityData.Data);
            }

            return data;
        }
Ejemplo n.º 3
0
        private MetricBase CreateMetric(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metricMetadataNode, MetricDataContainer metricDataContainer, 
                                        MetricBase parentMetric, Dictionary<string, object> initializationActivityData)
        {
            MetricBase metric;
            var metricData = metricDataContainer.GetMetricData(metricMetadataNode);

            switch (metricMetadataNode.MetricType)
            {
                case MetricType.ContainerMetric:
                    metric = containerMetricFactory.CreateMetric(metricInstanceSetRequest, metricMetadataNode, metricData, parentMetric);
                    break;

                case MetricType.AggregateMetric:
                    metric = aggregateMetricFactory.CreateMetric(metricInstanceSetRequest, metricMetadataNode, metricData, parentMetric);
                    break;

                case MetricType.GranularMetric:
                    metric = granularMetricFactory.CreateMetric(metricInstanceSetRequest, metricMetadataNode, metricData, parentMetric);
                    break;

                default:
                    throw new NotSupportedException(string.Format("Unsupported metric type '{0}'.", metricMetadataNode.MetricType));
            }

            // Process children
            var metricWithChildren = metric as ContainerMetric;

            // If this is a node type that has children
            if (metricWithChildren != null)
                ProcessForChildren(metricInstanceSetRequest, metricMetadataNode, metricDataContainer, metricWithChildren, initializationActivityData);

            // Execute initialization activities
            InvokeInitializationActivities(metric, metricInstanceSetRequest, metricMetadataNode, metricData, initializationActivityData);

            return metric;
        }
Ejemplo n.º 4
0
        protected virtual void ProcessForChildren(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metricMetadataNode, MetricDataContainer metricDataContainer, 
                                                  ContainerMetric parentMetric, Dictionary<string, object> initializationActivityData)
        {
            // Initialize the list if it's not already initialized
            if (parentMetric.Children == null)
                parentMetric.Children = new List<MetricBase>();

            // Iterate through the children in the metadata
            foreach (var node in metricMetadataNode.Children)
            {
                // Call recursively to create the tree
                var newChildMetric = CreateMetric(metricInstanceSetRequest, node, metricDataContainer, parentMetric, initializationActivityData);
                parentMetric.Children.Add(newChildMetric);
            }
        }
Ejemplo n.º 5
0
 protected virtual void InvokeInitializationActivities(MetricBase metric, MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metadataNode, 
                                                       MetricData metricData, Dictionary<string, object> initializationActivityData)
 {
     foreach (var initializationActivity in metricInitializationActivities)
         initializationActivity.InitializeMetric(metric, metricInstanceSetRequest, metadataNode, metricData, initializationActivityData);
 }
 public static MetricActionRouteProviderChainRequest Create(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricAction action)
 {
     return new MetricActionRouteProviderChainRequest { MetricInstanceSetRequest = metricInstanceSetRequest, Action = action };
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Throws an exception describing the unhandled request for a metric route.
 /// </summary>
 /// <param name="metricInstanceSetRequest">The metric instance set request providing the domain-specific context for the metric.</param>
 /// <param name="metadataNode">The metadata for the metric.</param>
 /// <returns>The URL for the application-specific location for the metric.</returns>
 public IEnumerable<Link> GetRoute(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metadataNode)
 {
     throw new NotSupportedException(
         string.Format("Metric route generation for request type '{0}' was unhandled.", metricInstanceSetRequest.GetType().Name));
 }
 public static MetricRouteProviderChainRequest Create(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricMetadataNode metadataNode)
 {
     return new MetricRouteProviderChainRequest { MetricInstanceSetRequest = metricInstanceSetRequest, MetadataNode = metadataNode };
 }
 public MetricInitializationActivityData GetInitializationActivityData(MetricInstanceSetRequestBase metricInstanceSetRequest)
 {
     return null;
 }
 /// <summary>
 /// Throws an exception describing the unhandled request for a metric route.
 /// </summary>
 /// <param name="metricInstanceSetRequest">The metric instance set request providing the domain-specific context for the metric.</param>
 /// <param name="metadataNode">The metadata for the metric.</param>
 /// <returns>The URL for the application-specific location for the metric.</returns>
 public string GetRoute(MetricInstanceSetRequestBase metricInstanceSetRequest, MetricAction action)
 {
     throw new NotSupportedException(
         string.Format("Metric Action route generation for request type '{0}' was unhandled.", metricInstanceSetRequest.GetType().Name));
 }