Ejemplo n.º 1
0
        /// <summary>
        /// Trace the specified log into database.
        /// </summary>
        /// <param name="metricInstance"></param>
        private static void ProcessInstance(MetricInstance metricInstance)
        {
            try
            {
                if (metricInstance == null || !IsActive(metricInstance))
                {
                    return;
                }

                if (metricInstance.Type.Equals(MetricType.Unique))
                {
                    SaveUniqueInstanceMetric(metricInstance);
                }
                else
                {
                    RecordMetric(metricInstance);
                }
            }
            catch (Exception e)
            {
                STrace.Exception(typeof(Consumer).FullName, e);

                ReEqnueue(metricInstance);
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Determines if the givenn metric is an active configured metric that is currently receiving ocurrences.
 /// </summary>
 /// <param name="metricInstance"></param>
 /// <returns></returns>
 private static bool IsActive(MetricInstance metricInstance)
 {
     return(Configuration.Any(metric => metric.Name.Equals(metricInstance.Name) &&
                              metric.Class.Equals(metricInstance.Component) &&
                              (metric.StartDate.Equals(default(DateTime)) || metric.StartDate <= metricInstance.DateTime) &&
                              (metric.EndDate.Equals(default(DateTime)) || metric.EndDate >= metricInstance.DateTime)));
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets the key associated to the current metric instance.
        /// </summary>
        /// <param name="metricInstance"></param>
        /// <returns></returns>
        private static String GenerateKey(MetricInstance metricInstance)
        {
            var vehicleType = metricInstance.VehicleType.HasValue ? metricInstance.VehicleType.Value.ToString() : "-1";
            var deviceType  = metricInstance.DeviceType.HasValue ? metricInstance.DeviceType.Value.ToString() : "-1";

            return(String.Format("{0} - {1} - {2} - {3}", metricInstance.Component, metricInstance.Name, vehicleType, deviceType));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Updates the specified metric value with the givenn metric instance.
        /// </summary>
        /// <param name="metricInstance"></param>
        /// <param name="key"></param>
        private static void UpdateMetricVaslues(MetricInstance metricInstance, String key)
        {
            Metrics[key].Ocurrences++;

            Metrics[key].CurrentValue = GetMetricCurrentValue(Metrics[key], metricInstance);

            Metrics[key].LastInstance = metricInstance.DateTime;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Equeues in the internal metrics queue the given metric instance.
        /// </summary>
        /// <param name="instance"></param>
        public static void Enqueue(MetricInstance instance)
        {
            lock (Metrics)
            {
                Metrics.Add(instance);

                Consumer.Start();
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Tries to re enqueue the log.
        /// </summary>
        /// <param name="metricInstance"></param>
        private static void ReEqnueue(MetricInstance metricInstance)
        {
            Thread.Sleep(ErrorInterval);

            metricInstance.Retries++;

            if (metricInstance.Retries < MaxRetries)
            {
                Queue.Enqueue(metricInstance);
            }

            _semaphore.Release();
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Gets a unique ocurrence metric.
 /// </summary>
 /// <param name="metricInstance"></param>
 /// <returns></returns>
 private static Metric GetUniqueInstance(MetricInstance metricInstance)
 {
     return(new Metric
     {
         Component = metricInstance.Component,
         DeviceType = metricInstance.DeviceType,
         End = metricInstance.DateTime,
         Module = metricInstance.Module,
         Name = metricInstance.Name,
         Start = metricInstance.DateTime,
         Value = metricInstance.Value,
         VehicleType = metricInstance.VehicleType
     });
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Calculates the new metric current value.
        /// </summary>
        /// <param name="metricValue"></param>
        /// <param name="metricInstance"></param>
        /// <returns></returns>
        private static Double GetMetricCurrentValue(MetricValue metricValue, MetricInstance metricInstance)
        {
            var newValue = metricValue.CurrentValue;

            switch (metricInstance.Type)
            {
            case MetricType.Average:
            case MetricType.Sum: newValue += metricInstance.Value; break;

            case MetricType.Max: newValue = Math.Max(newValue, metricInstance.Value); break;

            case MetricType.Min: newValue = Math.Min(newValue, metricInstance.Value); break;
            }

            return(newValue);
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Gets a new current value for the specified metric.
 /// </summary>
 /// <param name="metricInstance"></param>
 /// <returns></returns>
 private static MetricValue GetNewCurrentValue(MetricInstance metricInstance)
 {
     return(new MetricValue
     {
         Module = metricInstance.Module,
         Component = metricInstance.Component,
         Name = metricInstance.Name,
         FirstInstance = metricInstance.DateTime,
         LastInstance = metricInstance.DateTime,
         CurrentValue = metricInstance.Value,
         Ocurrences = 1,
         DeviceType = metricInstance.DeviceType,
         VehicleType = metricInstance.VehicleType,
         Type = metricInstance.Type
     });
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Records the current metric
        /// </summary>
        /// <param name="metricInstance"></param>
        private static void RecordMetric(MetricInstance metricInstance)
        {
            lock (Metrics)
            {
                var key = GenerateKey(metricInstance);

                if (Metrics.ContainsKey(key))
                {
                    UpdateMetricVaslues(metricInstance, key);
                }
                else
                {
                    AddNewMetric(metricInstance, key);
                }
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Saves a unique ocurrence metric into database.
 /// </summary>
 /// <param name="metricInstance"></param>
 private static void SaveUniqueInstanceMetric(MetricInstance metricInstance)
 {
     Save(GetUniqueInstance(metricInstance));
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Adds a new metric value for the current metric instance.
 /// </summary>
 /// <param name="metricInstance"></param>
 /// <param name="key"></param>
 private static void AddNewMetric(MetricInstance metricInstance, String key)
 {
     Metrics.Add(key, GetNewCurrentValue(metricInstance));
 }