Пример #1
0
        public void TraceTest()
        {
            var trace = new FbTrace();

            trace.ConnectionString = BuildServicesConnectionString(FbServerType, false);
            trace.DatabasesConfigurations.Add(new FbDatabaseTraceConfiguration()
            {
                Enabled       = true,
                Events        = FbDatabaseTraceEvents.Connections | FbDatabaseTraceEvents.Errors,
                TimeThreshold = TimeSpan.FromMilliseconds(1),
            });

            var sessionId = -1;

            trace.ServiceOutput += (sender, e) =>
            {
                if (sessionId == -1)
                {
                    var match = Regex.Match(e.Message, @"Trace session ID (\d+) started");
                    if (match.Success)
                    {
                        sessionId = int.Parse(match.Groups[1].Value);
                    }
                }
                ServiceOutput(sender, e);
            };

            ThreadPool.QueueUserWorkItem(_ =>
            {
                Thread.Sleep(2000);
                new FbTrace(BuildServicesConnectionString(FbServerType, false)).Stop(sessionId);
            });
            trace.Start("test");
        }
Пример #2
0
        public async Task TraceTest()
        {
            var trace = new FbTrace();

            trace.ConnectionString = BuildServicesConnectionString(ServerType, Compression, WireCrypt, false);
            trace.DatabasesConfigurations.Add(new FbDatabaseTraceConfiguration()
            {
                Enabled       = true,
                Events        = FbDatabaseTraceEvents.Connections | FbDatabaseTraceEvents.Errors,
                TimeThreshold = TimeSpan.FromMilliseconds(1),
            });

            var sessionId = -1;

            trace.ServiceOutput += (sender, e) =>
            {
                if (sessionId == -1)
                {
                    var match = Regex.Match(e.Message, @"Trace session ID (\d+) started");
                    if (match.Success)
                    {
                        sessionId = int.Parse(match.Groups[1].Value);
                    }
                }
                ServiceOutput(sender, e);
            };

            async Task Stop()
            {
                await Task.Delay(2000);

                await new FbTrace(connectionString: BuildServicesConnectionString(ServerType, Compression, WireCrypt, false))
                .StopAsync(sessionId);
            }

            var stopTask = Stop();
            await trace.StartAsync("test");

            await stopTask;

            Assert.AreNotEqual(-1, sessionId);
        }
Пример #3
0
        static FbTrace PrepareTrace(string server, int?port, string user, string password, string?database)
        {
            var connectionString = new FbConnectionStringBuilder()
            {
                ServerType = FbServerType.Default,
                Charset    = "utf8",
                DataSource = server,
                Port       = port ?? 3050,
                UserID     = user,
                Password   = password,
                PacketSize = short.MaxValue,
            }.ToString();
            var trace         = new FbTrace(FbTraceVersion.Detect, connectionString);
            var configuration = new FbDatabaseTraceConfiguration()
            {
                Enabled = true,
                Events  = FbDatabaseTraceEvents.Connections | FbDatabaseTraceEvents.Transactions
                          | FbDatabaseTraceEvents.StatementPrepare | FbDatabaseTraceEvents.StatementStart | FbDatabaseTraceEvents.StatementFinish | FbDatabaseTraceEvents.StatementFree
                          | FbDatabaseTraceEvents.FunctionStart | FbDatabaseTraceEvents.FunctionFinish
                          | FbDatabaseTraceEvents.ProcedureStart | FbDatabaseTraceEvents.ProcedureFinish
                          | FbDatabaseTraceEvents.TriggerStart | FbDatabaseTraceEvents.TriggerFinish
                          | FbDatabaseTraceEvents.Context
                          | FbDatabaseTraceEvents.Errors
                          | FbDatabaseTraceEvents.PrintPerf
                          | FbDatabaseTraceEvents.PrintPlan | FbDatabaseTraceEvents.ExplainPlan,
                TimeThreshold     = TimeSpan.Zero,
                MaxArgumentLength = 1000,
                MaxSQLLength      = 10000,
            };

            if (!string.IsNullOrWhiteSpace(database))
            {
                configuration.DatabaseName = database;
            }
            trace.DatabasesConfigurations.Add(configuration);
            trace.QueryBufferSize = short.MaxValue;
            return(trace);
        }