Skip to content

Commit b8b0d63

Browse files
Merge pull request #298 from erikdarlingdata/feature/installer-fixes-and-agent-cleanup
Fix installer upgrade bugs and add Agent job cleanup
2 parents 31fbc12 + 62c1949 commit b8b0d63

5 files changed

Lines changed: 41 additions & 14 deletions

File tree

Dashboard/RemoveServerDialog.xaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
<!-- Drop database checkbox -->
2424
<CheckBox Grid.Row="1" x:Name="DropDatabaseCheckBox" Margin="0,0,0,5"
2525
Foreground="{DynamicResource ForegroundBrush}">
26-
<TextBlock Text="Also drop the PerformanceMonitor database on this server" TextWrapping="Wrap"/>
26+
<TextBlock Text="Also drop the PerformanceMonitor database and SQL Agent jobs on this server" TextWrapping="Wrap"/>
2727
</CheckBox>
28-
<TextBlock Grid.Row="2" Text="Warning: all collected monitoring data on the server will be permanently deleted."
28+
<TextBlock Grid.Row="2" Text="Warning: all collected monitoring data and scheduled collection jobs on the server will be permanently deleted."
2929
FontSize="11" Foreground="{DynamicResource ErrorBrush}" Margin="20,0,0,15"
3030
TextWrapping="Wrap" Visibility="{Binding ElementName=DropDatabaseCheckBox, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}"/>
3131

Dashboard/Services/ServerManager.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,17 @@ public async Task DropMonitorDatabaseAsync(ServerConnection server)
152152
using var connection = new SqlConnection(builder.ConnectionString);
153153
await connection.OpenAsync();
154154

155+
// Remove SQL Agent jobs before dropping the database
156+
using var jobCmd = new SqlCommand(@"
157+
IF EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = N'PerformanceMonitor - Collection')
158+
EXEC msdb.dbo.sp_delete_job @job_name = N'PerformanceMonitor - Collection', @delete_unused_schedule = 1;
159+
IF EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = N'PerformanceMonitor - Data Retention')
160+
EXEC msdb.dbo.sp_delete_job @job_name = N'PerformanceMonitor - Data Retention', @delete_unused_schedule = 1;
161+
IF EXISTS (SELECT 1 FROM msdb.dbo.sysjobs WHERE name = N'PerformanceMonitor - Hung Job Monitor')
162+
EXEC msdb.dbo.sp_delete_job @job_name = N'PerformanceMonitor - Hung Job Monitor', @delete_unused_schedule = 1;", connection);
163+
jobCmd.CommandTimeout = 30;
164+
await jobCmd.ExecuteNonQueryAsync();
165+
155166
// Close active connections before dropping
156167
using var killCmd = new SqlCommand(@"
157168
IF DB_ID('PerformanceMonitor') IS NOT NULL
@@ -162,7 +173,7 @@ IF DB_ID('PerformanceMonitor') IS NOT NULL
162173
killCmd.CommandTimeout = 30;
163174
await killCmd.ExecuteNonQueryAsync();
164175

165-
Logger.Info($"Dropped PerformanceMonitor database on '{server.DisplayName}'");
176+
Logger.Info($"Dropped PerformanceMonitor database and Agent jobs on '{server.DisplayName}'");
166177
}
167178

168179
public void UpdateLastConnected(string id)

Installer/Program.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ INSERT...WHERE NOT EXISTS re-populates with current recommended values
649649
*/
650650
if (resetSchedule && fileName.StartsWith("04_", StringComparison.Ordinal))
651651
{
652-
sqlContent = "TRUNCATE TABLE config.collection_schedule;\nGO\n" + sqlContent;
652+
sqlContent = "TRUNCATE TABLE [PerformanceMonitor].[config].[collection_schedule];\nGO\n" + sqlContent;
653653
Console.Write("(resetting schedule) ");
654654
}
655655

@@ -1155,17 +1155,22 @@ private static List<string> GetApplicableUpgrades(
11551155
return upgradeFolders;
11561156
}
11571157

1158-
/*Parse current version - if invalid, skip upgrades*/
1159-
if (!Version.TryParse(currentVersion, out var current))
1158+
/*Parse current version - if invalid, skip upgrades
1159+
Normalize to 3-part (Major.Minor.Build) to avoid Revision mismatch:
1160+
folder names use 3-part "1.3.0" but DB stores 4-part "1.3.0.0"
1161+
Version(1,3,0).Revision=-1 which breaks >= comparison with Version(1,3,0,0)*/
1162+
if (!Version.TryParse(currentVersion, out var currentRaw))
11601163
{
11611164
return upgradeFolders;
11621165
}
1166+
var current = new Version(currentRaw.Major, currentRaw.Minor, currentRaw.Build);
11631167

11641168
/*Parse target version - if invalid, skip upgrades*/
1165-
if (!Version.TryParse(targetVersion, out var target))
1169+
if (!Version.TryParse(targetVersion, out var targetRaw))
11661170
{
11671171
return upgradeFolders;
11681172
}
1173+
var target = new Version(targetRaw.Major, targetRaw.Minor, targetRaw.Build);
11691174

11701175
/*
11711176
Find all upgrade folders matching pattern: {from}-to-{to}

InstallerGui/MainWindow.xaml.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,20 @@ public partial class MainWindow : Window
4040
private static readonly SolidColorBrush WarningBrush = new(Color.FromRgb(0xFF, 0xC1, 0x07)); // Yellow
4141

4242
/*
43-
Cached version string
43+
Cached version strings
44+
Display version includes git hash suffix for UI/logs
45+
Assembly version is clean (e.g. "2.0.0.0") for upgrade version comparison
4446
*/
4547
private static readonly string AppVersion =
4648
Assembly.GetExecutingAssembly()
4749
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion
4850
?? Assembly.GetExecutingAssembly().GetName().Version?.ToString()
4951
?? "Unknown";
5052

53+
private static readonly string AppAssemblyVersion =
54+
Assembly.GetExecutingAssembly().GetName().Version?.ToString()
55+
?? "Unknown";
56+
5157
private static readonly char[] NewLineChars = { '\r', '\n' };
5258

5359
public MainWindow()
@@ -260,7 +266,7 @@ private async void TestConnection_Click(object sender, RoutedEventArgs e)
260266
var upgrades = InstallationService.GetApplicableUpgrades(
261267
_monitorRootDirectory,
262268
_installedVersion,
263-
AppVersion);
269+
AppAssemblyVersion);
264270
if (upgrades.Count > 0)
265271
{
266272
LogMessage($"Found {upgrades.Count} upgrade(s) to apply", "Warning");
@@ -377,7 +383,7 @@ private async void Install_Click(object sender, RoutedEventArgs e)
377383
_monitorRootDirectory,
378384
_connectionString,
379385
_installedVersion,
380-
AppVersion,
386+
AppAssemblyVersion,
381387
progress,
382388
cancellationToken);
383389

InstallerGui/Services/InstallationService.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ Execute SQL files
414414
/*Reset schedule to defaults if requested*/
415415
if (resetSchedule && fileName.StartsWith("04_", StringComparison.Ordinal))
416416
{
417-
sqlContent = "TRUNCATE TABLE config.collection_schedule;\nGO\n" + sqlContent;
417+
sqlContent = "TRUNCATE TABLE [PerformanceMonitor].[config].[collection_schedule];\nGO\n" + sqlContent;
418418
progress?.Report(new InstallationProgress
419419
{
420420
Message = "Resetting schedule to recommended defaults...",
@@ -1053,17 +1053,22 @@ public static List<UpgradeInfo> GetApplicableUpgrades(
10531053
return upgrades;
10541054
}
10551055

1056-
/*Parse current version - if invalid, skip upgrades*/
1057-
if (!Version.TryParse(currentVersion, out var current))
1056+
/*Parse current version - if invalid, skip upgrades
1057+
Normalize to 3-part (Major.Minor.Build) to avoid Revision mismatch:
1058+
folder names use 3-part "1.3.0" but DB stores 4-part "1.3.0.0"
1059+
Version(1,3,0).Revision=-1 which breaks >= comparison with Version(1,3,0,0)*/
1060+
if (!Version.TryParse(currentVersion, out var currentRaw))
10581061
{
10591062
return upgrades;
10601063
}
1064+
var current = new Version(currentRaw.Major, currentRaw.Minor, currentRaw.Build);
10611065

10621066
/*Parse target version - if invalid, skip upgrades*/
1063-
if (!Version.TryParse(targetVersion, out var target))
1067+
if (!Version.TryParse(targetVersion, out var targetRaw))
10641068
{
10651069
return upgrades;
10661070
}
1071+
var target = new Version(targetRaw.Major, targetRaw.Minor, targetRaw.Build);
10671072

10681073
/*
10691074
Find all upgrade folders matching pattern: {from}-to-{to}

0 commit comments

Comments
 (0)