public StartDatabaseTracingResult StartDatabaseTracing(StartDatabaseTracingParameters parameters)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                StartDatabaseTracingResult result = null;

                using (IDbConnection connection = new DbConnection(ConnectionString))
                {
                    connection.Open();

                    using (IDbCommand command = connection.CreateCommand())
                    {
                        command.CommandText = "Delphi.Start_Log";
                        ((OracleCommand)command).BindByName = true;

                        foreach (IDbDataParameter parameter in StartDatabaseTracingTranslator.TranslateParameters(parameters))
                        {
                            command.Parameters.Add(parameter);
                        }

                        command.Prepare();
                        command.CommandType = CommandType.StoredProcedure;
                        command.ExecuteNonQuery();
                        result = new StartDatabaseTracingResult();
                    }
                }

                scope.Complete();

                return(result);
            }
        }
        public void Execute(EnableDatabaseTracingParameters parameters)
        {
            ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings[schemaName];
            string connectionString           = settings.ConnectionString;

            if (parameters.IsTracingEnabled)
            {
                TraceContext context = TraceContext.CreateContext(
                    ApplicationContext.Current.UserId,
                    ApplicationContext.Current.TerminalId,
                    ApplicationContext.Current.SessionId);

                context.IsTracingEnabled = true;

                ITracingDao tracingDao = PolicyInjection.Create <TracingDao, ITracingDao>(connectionString);
                StartDatabaseTracingParameters startTracingParameters = new StartDatabaseTracingParameters();

                string userId = ApplicationContext.Current.UserId;

                if ((userId.Contains('\\') || userId.Contains('/')))
                {
                    string[] userIdParts = userId.Split(new char[] { '\\', '/' });
                    userId = userIdParts[1];
                }

                startTracingParameters.UserId      = userId;
                startTracingParameters.TerminalId  = ApplicationContext.Current.TerminalId;
                startTracingParameters.WriteHeader = true;
                tracingDao.StartDatabaseTracing(startTracingParameters);
            }
            else
            {
                TraceContext context = TraceContext.GetContext(
                    ApplicationContext.Current.UserId,
                    ApplicationContext.Current.TerminalId,
                    ApplicationContext.Current.SessionId);

                if (context != null)
                {
                    context.IsTracingEnabled = false;

                    ITracingDao tracingDao = PolicyInjection.Create <TracingDao, ITracingDao>(connectionString);
                    StopDatabaseTracingParameters stopTracingParameters = new StopDatabaseTracingParameters();
                    stopTracingParameters.WriteHeader = true;
                    tracingDao.StopDatabaseTracing(stopTracingParameters);
                }
            }
        }
        public static IList <IDbDataParameter> TranslateParameters(StartDatabaseTracingParameters parameters)
        {
            IList <IDbDataParameter> parameterList = new List <IDbDataParameter>();
            IDbDataParameter         dbParameter;

            dbParameter = new OracleParameter();
            dbParameter.ParameterName = "EMPID_I";
            dbParameter.DbType        = DbTypeConvertor.ConvertToDbType(typeof(string));
            dbParameter.Direction     = ParameterDirection.Input;
            dbParameter.Value         = parameters.UserId;
            parameterList.Add(dbParameter);

            dbParameter = new OracleParameter();
            dbParameter.ParameterName = "TERID_I";
            dbParameter.DbType        = DbTypeConvertor.ConvertToDbType(typeof(string));
            dbParameter.Direction     = ParameterDirection.Input;
            dbParameter.Value         = parameters.TerminalId;
            parameterList.Add(dbParameter);

            dbParameter = new OracleParameter();
            dbParameter.ParameterName = "THREAD_I";
            dbParameter.DbType        = DbTypeConvertor.ConvertToDbType(typeof(string));
            dbParameter.Direction     = ParameterDirection.Input;
            dbParameter.Value         = "0";
            parameterList.Add(dbParameter);

            dbParameter = new OracleParameter();
            dbParameter.ParameterName = "WriteHeader_I";
            dbParameter.DbType        = DbTypeConvertor.ConvertToDbType(typeof(string));
            dbParameter.Direction     = ParameterDirection.Input;

            if (parameters.WriteHeader)
            {
                dbParameter.Value = "1";
            }
            else
            {
                dbParameter.Value = "0";
            }

            parameterList.Add(dbParameter);

            return(parameterList);
        }
Exemple #4
0
        public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
        {
            IMethodReturn msg     = null;
            TraceContext  context = null;

            if (ApplicationContext.Current != null)
            {
                context = TraceContext.GetContext(
                    ApplicationContext.Current.UserId,
                    ApplicationContext.Current.TerminalId,
                    ApplicationContext.Current.SessionId);
            }

            if (context != null && context.IsTracingEnabled)
            {
                lock (context)
                {
                    using (ITransactionScope scope = new TransactionScope())
                    {
                        string userId = context.UserId;

                        if ((userId.Contains('\\') || userId.Contains('/')))
                        {
                            string[] userIdParts = userId.Split(new char[] { '\\', '/' });
                            userId = userIdParts[1];
                        }

                        ITracingDao tracingDao = new TracingDao(connectionString);

                        StartDatabaseTracingParameters startParameters = new StartDatabaseTracingParameters();
                        startParameters.TerminalId  = context.TerminalId;
                        startParameters.UserId      = userId;
                        startParameters.WriteHeader = false;

                        tracingDao.StartDatabaseTracing(startParameters);

                        try
                        {
                            msg = getNext()(input, getNext);
                        }
                        finally
                        {
                            StopDatabaseTracingParameters stopParameters = new StopDatabaseTracingParameters();
                            stopParameters.WriteHeader = false;
                            tracingDao.StopDatabaseTracing(stopParameters);
                        }

                        try
                        {
                            scope.Complete();
                        }
                        catch (InvalidOperationException)
                        {
                        }
                    }
                }
            }
            else
            {
                msg = getNext()(input, getNext);
            }

            return(msg);
        }