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); }
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); } }
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); } }
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); }
public MetricsAspect(IAppMetrics metrics) { this.Metrics = metrics; }