Example #1
0
        private static void Write(IAppMetrics metrics, string owningTypeName, string methodName, long duration, bool success = true)
        {
            var    eventName = $"{owningTypeName}_{methodName}".SafeString();
            double elapsed   = (double)duration / AspectFactory.TickPerMicrosecond;

            metrics.DecGauge($"{eventName}_gauge");
            metrics.IncCounter($"{eventName}_count", success);
            metrics.IncHistogram($"{eventName}_elapsed_microseconds", elapsed, success);
        }
Example #2
0
        private static T Wrap <T>(IAppMetrics metrics, string owningTypeName, string targetName, Func <object[], object> target, object[] args)
        {
            var eventName = $"{AppSettings.ServiceName}_{owningTypeName}_{targetName}".SafeString();
            var sw        = Stopwatch.StartNew();
            var success   = true;

            try
            {
                return((T)target(args));
            }
            catch
            {
                success = false;
                throw;
            }
            finally
            {
                Write(metrics, eventName, sw.ElapsedMilliseconds, success);
            }
        }
Example #3
0
        private static async Task <T> WrapAsync <T>(IAppMetrics metrics, string owningTypeName, string targetName, Func <object[], object> target, object[] args)
        {
            var eventName = $"{owningTypeName}_{targetName}".SafeString();
            var sw        = Stopwatch.StartNew();
            var success   = true;

            metrics.IncGauge($"{eventName}_gauge");
            try
            {
                var result = await(Task <T>) target(args);
                return(result);
            }
            catch
            {
                success = false;
                throw;
            }
            finally
            {
                Write(metrics, owningTypeName, targetName, sw.ElapsedTicks, success);
            }
        }
Example #4
0
 private static void Write(IAppMetrics metrics, string eventName, long duration, bool success = true)
 {
     metrics.IncCounter($"{eventName}_count", success);
     metrics.IncHistogram($"{eventName}_elapsed_ms", duration, success);
 }
Example #5
0
 public MetricsAspect(IAppMetrics metrics)
 {
     this.Metrics = metrics;
 }