/// <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); }
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; }
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; }
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); } }
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 }; }
/// <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)); }