public void Run(DbProviderFactory factory) { IDbTransaction transaction = null; api.ResetCounter(); DateTime start = DateTime.Now; try { var connectionStringBuilder = factory.CreateConnectionStringBuilder(); connectionStringBuilder.ConnectionString = $"Server={cfg.Host};Database={cfg.Database};User ID={cfg.User};Password={cfg.Password}"; using (DatabaseWrapper client = new DatabaseWrapper(factory, connectionStringBuilder.ToString())) { client.Open(); transaction = client.BeginTransaction(); if (cfg.Clean) { client.ClearAlerts(); client.ClearActivities(); client.ClearFactTrackers(); client.ClearZones(); client.ClearRules(); client.ClearDimTrackers(); } FirstPhase(client); SecondPhase(client, cfg.Interval); string[] serials = client.GetDimTrackers().Select(x => x.Serial).ToArray(); ThirdPhase(client, serials); transaction.Commit(); transaction = null; } } catch (SqlException e) { Serilog.Log.Error(e.Message); Serilog.Log.Error(e.StackTrace); transaction?.Rollback(); return; } catch (ArgumentException e) { //wrong SQL Connection string Serilog.Log.Error("Wrong SQL Connection string: " + $"Server={cfg.Host};Database={cfg.Database};User ID={cfg.User};Password=*****"); Serilog.Log.Error(e.Message); Serilog.Log.Error(e.StackTrace); return; } catch (Exception e) { Serilog.Log.Error("Unexpected error"); Serilog.Log.Error(e.Message); Serilog.Log.Error(e.StackTrace); return; } TimeSpan duration = DateTime.Now - start; try { var connectionStringBuilder = factory.CreateConnectionStringBuilder(); connectionStringBuilder.ConnectionString = $"Server={cfg.Host};Database={cfg.Database};User ID={cfg.User};Password={cfg.Password}"; using (DatabaseWrapper client = new DatabaseWrapper(factory, connectionStringBuilder.ToString())) { client.Open(); IDbCommand cmd = client.CreateCommand(); cmd.CommandText = $"INSERT INTO log (ts, duration, reqcount, initevent) VALUES ({SqlConvert.Convert(DateTime.Now)}, {duration.TotalMilliseconds}, {api.Count}, 'TS')"; cmd.ExecuteNonQuery(); } } catch (Exception e) { Serilog.Log.Error("Could not make log record"); Serilog.Log.Error(e.Message); Serilog.Log.Error(e.StackTrace); return; } Serilog.Log.Information($"ts: {DateTime.Now}, duration: {duration.TotalMilliseconds}, reqCount: {api.Count}, initevent: TS"); }