Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Dashboard/Controls/FinOpsContent.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -431,10 +431,11 @@

<!-- Empty State -->
<TextBlock x:Name="NoUtilizationMessage"
Grid.Row="1" Grid.RowSpan="3"
Grid.Row="1" Grid.RowSpan="4"
Text="No utilization data collected yet. Select a server above."
FontSize="14" Foreground="{DynamicResource ForegroundMutedBrush}"
HorizontalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Center" VerticalAlignment="Top"
Margin="0,20,0,0"
Visibility="Collapsed"/>
</Grid>
</TabItem>
Expand Down
15 changes: 14 additions & 1 deletion Dashboard/Controls/FinOpsContent.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,13 @@ await Task.WhenAll(
LoadDatabaseResourcesAsync(),
LoadDatabaseSizesAsync(),
LoadApplicationConnectionsAsync(),
LoadServerInventoryAsync()
LoadServerInventoryAsync(),
LoadStorageGrowthAsync(),
LoadIdleDatabasesAsync(),
LoadTempdbSummaryAsync(),
LoadWaitCategorySummaryAsync(),
LoadExpensiveQueriesAsync(),
LoadMemoryGrantEfficiencyAsync()
);
}
catch (Exception ex)
Expand Down Expand Up @@ -133,6 +139,13 @@ private async Task LoadUtilizationAsync()
DbSizeChart.ItemsSource = await _databaseService.GetFinOpsDatabaseSizeSummaryAsync();
ProvisioningTrendGrid.ItemsSource = await _databaseService.GetFinOpsProvisioningTrendAsync();
}
else
{
TopTotalGrid.ItemsSource = null;
TopAvgGrid.ItemsSource = null;
DbSizeChart.ItemsSource = null;
ProvisioningTrendGrid.ItemsSource = null;
}
}
catch (Exception ex)
{
Expand Down
5 changes: 3 additions & 2 deletions Lite/Controls/FinOpsTab.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -430,10 +430,11 @@

<!-- Empty State -->
<TextBlock x:Name="NoUtilizationMessage"
Grid.Row="1" Grid.RowSpan="3"
Grid.Row="1" Grid.RowSpan="4"
Text="No utilization data collected yet. Select a server above."
FontSize="14" Foreground="{DynamicResource ForegroundMutedBrush}"
HorizontalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Center" VerticalAlignment="Top"
Margin="0,20,0,0"
Visibility="Collapsed"/>
</Grid>
</TabItem>
Expand Down
23 changes: 19 additions & 4 deletions Lite/Controls/FinOpsTab.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,18 @@ private async System.Threading.Tasks.Task LoadPerServerDataAsync()
var serverId = GetSelectedServerId();
if (serverId == 0 || _dataService == null) return;

await LoadUtilizationAsync(serverId);
await LoadDatabaseResourcesAsync(serverId);
await LoadApplicationConnectionsAsync(serverId);
await LoadDatabaseSizesAsync(serverId);
await System.Threading.Tasks.Task.WhenAll(
LoadUtilizationAsync(serverId),
LoadDatabaseResourcesAsync(serverId),
LoadApplicationConnectionsAsync(serverId),
LoadDatabaseSizesAsync(serverId),
LoadStorageGrowthAsync(serverId),
LoadIdleDatabasesAsync(serverId),
LoadTempdbSummaryAsync(serverId),
LoadWaitCategorySummaryAsync(serverId),
LoadExpensiveQueriesAsync(serverId),
LoadMemoryGrantEfficiencyAsync(serverId)
);
}

private async System.Threading.Tasks.Task LoadUtilizationAsync(int serverId)
Expand All @@ -132,6 +140,13 @@ private async System.Threading.Tasks.Task LoadUtilizationAsync(int serverId)
DbSizeChart.ItemsSource = await _dataService.GetDatabaseSizeSummaryAsync(serverId);
ProvisioningTrendGrid.ItemsSource = await _dataService.GetProvisioningTrendAsync(serverId);
}
else
{
TopTotalGrid.ItemsSource = null;
TopAvgGrid.ItemsSource = null;
DbSizeChart.ItemsSource = null;
ProvisioningTrendGrid.ItemsSource = null;
}
}
catch (Exception ex)
{
Expand Down
2 changes: 1 addition & 1 deletion Lite/Services/LocalDataService.FinOps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,7 @@ LIMIT 1
s.cpu_count
FROM cpu_stats c
CROSS JOIN mem_latest m
CROSS JOIN server_info s";
LEFT JOIN server_info s ON true";

command.Parameters.Add(new DuckDBParameter { Value = serverId });
command.Parameters.Add(new DuckDBParameter { Value = cutoff });
Expand Down
144 changes: 0 additions & 144 deletions collection_schedule.json

This file was deleted.

4 changes: 3 additions & 1 deletion install/04_create_schedule_table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ FROM
(N'plan_cache_stats_collector', 1, 5, 5, 30, N'Plan cache composition statistics - single-use plans and plan cache bloat detection'),
(N'session_stats_collector', 1, 1, 2, 30, N'Session and connection statistics - connection leaks and application patterns'),
(N'waiting_tasks_collector', 1, 1, 2, 30, N'Currently waiting tasks - blocking chains and wait analysis'),
(N'running_jobs_collector', 1, 1, 2, 7, N'Currently running SQL Agent jobs with historical duration comparison')
(N'running_jobs_collector', 1, 1, 2, 7, N'Currently running SQL Agent jobs with historical duration comparison'),
(N'database_size_stats_collector', 1, 60, 10, 90, N'Database file sizes for growth trending and capacity planning'),
(N'server_properties_collector', 1, 1440, 5, 365, N'Server edition, licensing, CPU/memory hardware metadata for license audit')
) AS v (collector_name, enabled, frequency_minutes, max_duration_minutes, retention_days, description)
WHERE NOT EXISTS
(
Expand Down
3 changes: 0 additions & 3 deletions servers.json

This file was deleted.

Loading