Beispiel #1
0
        private void ProcessLogItems(SqliteProfilerDataService dataService)
        {
            if (logItemsQueue.Count == 0)
            {
                return;
            }
            var watch = Stopwatch.StartNew();

            dataService.BeginTransaction();
            try
            {
                int itemCount = 0;
                while (TryDequeue())
                {
                    foreach (var item in logItemBuffer)
                    {
                        dataService.LogCommandExecution(item, this.FullLogging);
                        itemCount++;
                    }
                }
                dataService.Commit();
                Log?.LogTrace("Logged {Count} command executions in {Elapsed}", itemCount, watch.Elapsed);
            }
            catch
            {
                try { dataService.Rollback(); } catch { }
                throw;
            }
            watch.Stop();
        }
Beispiel #2
0
 private static void TryDisposeDataService(SqliteProfilerDataService dataService)
 {
     if (dataService != null)
     {
         try
         {
             dataService.Dispose();
         }
         catch (Exception ex)
         {
             Log?.LogError(ex, "Error disposing data service");
         }
     }
 }
Beispiel #3
0
        private void ProcessLogItems()
        {
            SqliteProfilerDataService dataService = null;
            var startTime = DateTime.UtcNow;
            int attempt   = 1;

            try {
                while (IsRunning)
                {
                    signal.WaitOne();

                    try
                    {
                        dataService = EnsureDataServiceAndDeleteOldFiles(dataService);
                        // Log?.LogTrace("DataService Ensured");
                        startTime = DateTime.UtcNow;
                        attempt   = 1;
                    }
#pragma warning disable CA1031 // I don't care which exception is thrown, it it fails I need to retry.
                    catch (Exception ex)
#pragma warning restore CA1031 // Do not catch general exception types
                    {
                        if (++attempt > 10 && DateTime.UtcNow.Subtract(startTime) > TimeSpan.FromMinutes(2))
                        {
                            Log?.LogError(ex, "Error opening SqliteProfilerDataService");
                            return;
                        }
                        continue;
                    }
                    var processLogItemsStartTime = DateTime.UtcNow;
                    try
                    {
                        ProcessLogItems(dataService);
                    }
#pragma warning disable CA1031 // I don't care which exception is thrown. If it fails I need to log it and continue
                    catch (Exception ex)
#pragma warning restore CA1031 // Do not catch general exception types
                    {
                        Log?.LogError(ex, "Error processing log items after {Elapsed}", DateTime.UtcNow.Subtract(processLogItemsStartTime));
                        signal.Set();
                    }
                }
            }
            finally
            {
                IsRunning = false;
                TryDisposeDataService(dataService);
                Log?.LogInformation("SqliteProfiler stoped");
            }
        }
Beispiel #4
0
        private void ProcessLogItems(SqliteProfilerDataService dataService)
        {
            LogItem item = null;

            while (!logItems.IsEmpty)
            {
                dataService.BeginTransaction();
                int itemCount = 0;
                while (logItems.Dequeue(out item))
                {
                    dataService.LogCommandExecution(item, this.FullLogging);
                    itemCount++;
                }
                dataService.Commit();
            }
        }
Beispiel #5
0
        private SqliteProfilerDataService EnsureDataServiceAndDeleteOldFiles(SqliteProfilerDataService dataService)
        {
            string filePath = null;

            if (dataService == null || (DateTime.Today != this.lastDataServiceCreateDay && dataService.FilePath != (filePath = this.GetDatabaseFilePath())))
            {
                TryDisposeDataService(dataService);
                if (filePath == null)
                {
                    filePath = this.GetDatabaseFilePath();
                }
                dataService = SqliteProfilerDataService.Create(filePath);
                lastDataServiceCreateDay = DateTime.Today;
                dataService.OpenConnection();
                ThreadPool.QueueUserWorkItem(DeleteOldFiles);
            }
            return(dataService);
        }
Beispiel #6
0
        private SqliteProfilerDataService EnsureDataServiceAndDeleteOldFiles(SqliteProfilerDataService dataService)
        {
            string filePath = null;

            if (dataService == null || (DateTime.Today != this.lastDataServiceCreateDay && dataService.FilePath != (filePath = this.GetDatabaseFilePath())))
            {
                TryDisposeDataService(dataService);
                if (filePath == null)
                {
                    filePath = this.GetDatabaseFilePath();
                }
                int attempt = 1;
                while (true)
                {
                    try
                    {
                        dataService = SqliteProfilerDataService.Create(filePath);
                        lastDataServiceCreateDay = DateTime.Today;
                        dataService.OpenConnection();
                        ThreadPool.QueueUserWorkItem(DeleteOldFiles);
                        return(dataService);
                    }
                    catch
                    {
                        TryDisposeDataService(dataService);
                        if (++attempt > 20)
                        {
                            throw;
                        }
                        Thread.Sleep(200);
                    }
                    finally
                    {
                        if (attempt > MaxDataServiceAttempts)
                        {
                            MaxDataServiceAttempts = attempt;
                        }
                    }
                }
            }
            return(dataService);
        }
Beispiel #7
0
        private void ProcessLogItems()
        {
            SqliteProfilerDataService dataService = null;

            try
            {
                while (true)
                {
                    signal.WaitOne();
                    dataService = EnsureDataServiceAndDeleteOldFiles(dataService);
                    try
                    {
                        ProcessLogItems(dataService);
                    }
                    catch (Exception ex)
                    {
                        Log.LogError(ex, "Error Profiling");
                    }
                    if (!IsRunning)
                    {
                        TryDisposeDataService(dataService);
                        dataService = null;
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.LogError(ex, "Error Profiling");
            }
            finally
            {
                this.IsRunning = false;
                TryDisposeDataService(dataService);
                dataService = null;
            }
        }