public override void OnEntry(MethodExecutionArgs args)
        {
            IPassport thisPassport = null;

            if (_passportParameterIndex >= 0)
            {
                thisPassport = (IPassport)args.Arguments[_passportParameterIndex];
            }

            if (thisPassport == null)
            {
                return;
            }

            var scopeName = args.ScopeName();

            thisPassport.PushScope(scopeName);

            IDictionary <string, object> parameters = new Dictionary <string, object>();

            for (var i = 0; i < args.Arguments.Count; i++)
            {
                if (!_passportParameters.Contains(_parameterNames[i]))
                {
                    parameters[_parameterNames[i]] = args.Arguments[i] ?? "null";
                }
            }
            thisPassport.Scope.RecordParameters(() => parameters, Constants.PassportScope.Enter);
            thisPassport.Debug("Has been entered", includeContext: true, includeScopes: true, scopeDepth: 0);
        }
Пример #2
0
        public static async Task <T> ScopeAsync <T>(this IPassport self, Func <Task <T> > actionAsync)
            where T : StandardResponse
        {
            Stopwatch sw = null;

            try
            {
                sw = Stopwatch.StartNew();
                return(await actionAsync());
            }
            catch (Exception e)
            {
                if (sw != null)
                {
                    sw.Stop();
                }

                if (!PassportSettings.Settings.ExcludedExceptions.Any(x => x.Equals(e.GetType().FullName, StringComparison.InvariantCultureIgnoreCase)))
                {
                    if (sw != null)
                    {
                        sw.Stop();
                        var ElapsedMilliseconds = sw.ElapsedMilliseconds;
                        self.Scope.Record(() => ElapsedMilliseconds, Constants.Passports.KeyOnExit);
                        sw = null;
                    }

                    self.Exception(e);
                }

                var standardError = new StandardError();

                standardError.Errors.Add(Constants.Passports.KeyError);

                var instance = Activator.CreateInstance <T>();
                instance.StandardError = standardError;

                return(instance);
            }
            finally
            {
                if (self != null)
                {
                    if (sw != null)
                    {
                        sw.Stop();
                        var ElapsedMilliseconds = sw.ElapsedMilliseconds;
                        self.Scope.Record(() => ElapsedMilliseconds, Constants.Passports.KeyOnExit);
                    }

                    self.Debug(Constants.Passports.KeyEndOfRequest, includeContext: true, includeScopes: true);
                    //self.PopScope();
                }
            }
        }