/// <summary> /// OnMethodBegin callback /// </summary> /// <typeparam name="TTarget">Type of the target</typeparam> /// <param name="instance">Instance value, aka `this` of the instrumented method.</param> /// <param name="cancellationToken">CancellationToken value</param> /// <returns>Calltarget state value</returns> public static CallTargetState OnMethodBegin <TTarget>(TTarget instance, CancellationToken cancellationToken) { var command = (IDbCommand)instance; return(new CallTargetState(DbSpanFactory <TTarget> .CreateSpan(Agent.Instance, command), command)); }
/// <summary> /// OnAsyncMethodEnd callback /// </summary> /// <typeparam name="TTarget">Type of the target</typeparam> /// <typeparam name="TReturn">Type of the return value, in an async scenario will be T of Task of T</typeparam> /// <param name="instance">Instance value, aka `this` of the instrumented method.</param> /// <param name="returnValue">Return value instance</param> /// <param name="exception">Exception instance in case the original code threw an exception.</param> /// <param name="state">Calltarget state value</param> /// <returns>A response value, in an async scenario will be T of Task of T</returns> public static TReturn OnAsyncMethodEnd <TTarget, TReturn>(TTarget instance, TReturn returnValue, Exception exception, CallTargetState state) { DbSpanFactory <TTarget> .EndSpan(Agent.Instance, (IDbCommand)instance, (ISpan)state.Segment, exception); return(returnValue); }
/// <summary> /// OnMethodBegin callback /// </summary> /// <typeparam name="TTarget">Type of the target</typeparam> /// <typeparam name="TBehavior">Command Behavior type</typeparam> /// <param name="instance">Instance value, aka `this` of the instrumented method.</param> /// <param name="commandBehavior">Command behavior</param> /// <returns>Calltarget state value</returns> public static CallTargetState OnMethodBegin <TTarget, TBehavior>(TTarget instance, TBehavior commandBehavior) { var command = (IDbCommand)instance; return(new CallTargetState(DbSpanFactory <TTarget> .CreateSpan(Agent.Instance, command), command)); }