private void Worker()
{
try
{
var databases = GetDatabases();
if (databases.Count > 0)
{
ReportDatabases(databases);
int timeToWait;
do
{
var processingStart = Stopwatch.StartNew();
foreach (var database in databases)
{
var db = database.Value;
var databaseLines = new StringBuilder();
foreach (var catalog in db.Catalogs)
{
databaseLines.AppendLine(
string.Format(databaseLines.Length == 0 ? DatabaseFirstLine : DatabaseLine, catalog));
}
var script = string.Format(InstanceScript, _workDirectory, databaseLines);
var conn = new SqlConnection(db.InstanceConnectionString);
var server = new Server(new ServerConnection(conn));
var result = server.ConnectionContext.ExecuteNonQuery(script);
}
// calculate time to wait
var elapsed = (int) processingStart.ElapsedMilliseconds;
timeToWait = Properties.Settings.Default.SqlTraceManagerWorkerLoopSleep - elapsed;
if (timeToWait < 0) timeToWait = 0;
} while (!_termHandle.WaitOne(timeToWait));
}
else
{
Exit(string.Format("SqlTraceManager worker exiting, no databases to monitor."));
}
}
catch (Exception ex)
{
Exit(string.Format("SqlTraceManager worker exiting because of exception. {0}", ex));
}
}