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
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ jobs:
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
organization-id: '7969f8b6-d946-4a74-9bac-a55856d8b8e0'
project-slug: 'PerformanceStudio'
signing-policy-slug: 'test-signing'
signing-policy-slug: 'release-signing'
artifact-configuration-slug: 'App'
github-artifact-id: '${{ steps.upload-unsigned.outputs.artifact-id }}'
wait-for-completion: true
Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,15 @@ The analyzer runs 30 rules against each plan, covering:

Rules can be disabled or have their severity overridden via a `.planview.json` config file. See the `--config` option.

## Sponsors

<table>
<tr>
<td><a href="https://signpath.io"><img src="https://about.signpath.io/wp-content/uploads/2024/01/signpath_logo_blue.svg" alt="SignPath" width="40"></a></td>
<td>Free code signing on Windows provided by <a href="https://signpath.io">SignPath.io</a>, certificate by <a href="https://signpath.org">SignPath Foundation</a></td>
</tr>
</table>

## License

MIT — see [LICENSE](LICENSE).
Expand Down
8 changes: 4 additions & 4 deletions src/PlanViewer.App/AboutWindow.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<TextBlock Grid.Row="0" Text="Performance Studio" FontWeight="Bold" FontSize="20"
Foreground="{DynamicResource ForegroundBrush}" Margin="0,0,0,4"/>
<TextBlock Grid.Row="1" x:Name="VersionText" Text="Version 0.3.0" FontSize="12"
Foreground="{DynamicResource ForegroundMutedBrush}" Margin="0,0,0,4"/>
Foreground="{DynamicResource ForegroundBrush}" Margin="0,0,0,4"/>
<TextBlock Grid.Row="1" x:Name="SubtitleText"
Text="SQL Server Execution Plan Analyzer" FontSize="12"
Foreground="{DynamicResource ForegroundBrush}" Margin="0,16,0,20"/>
Expand All @@ -24,7 +24,7 @@
<TextBlock Text="Copyright (c) 2026 Erik Darling, Darling Data LLC" FontSize="12"
Foreground="{DynamicResource ForegroundBrush}"/>
<TextBlock Text="Licensed under the MIT License" FontSize="12"
Foreground="{DynamicResource ForegroundMutedBrush}"/>
Foreground="{DynamicResource ForegroundBrush}"/>
</StackPanel>

<!-- Links -->
Expand Down Expand Up @@ -72,13 +72,13 @@
VerticalContentAlignment="Center"/>
</StackPanel>
<TextBlock Text="Restart the application after changing MCP settings."
FontSize="11" Foreground="{DynamicResource ForegroundMutedBrush}"
FontSize="11" Foreground="{DynamicResource ForegroundBrush}"
Margin="0,4,0,0"/>
<StackPanel Orientation="Horizontal" Spacing="8" Margin="0,8,0,0">
<Button x:Name="CopyMcpCommandButton" Content="Copy MCP Command"
Click="CopyMcpCommand_Click" Padding="10,4" FontSize="12"/>
<TextBlock x:Name="McpCopyStatus" FontSize="11" VerticalAlignment="Center"
Foreground="{DynamicResource ForegroundMutedBrush}"/>
Foreground="{DynamicResource ForegroundBrush}"/>
</StackPanel>
</StackPanel>

Expand Down
4 changes: 2 additions & 2 deletions src/PlanViewer.App/Controls/PlanViewerControl.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2376,7 +2376,7 @@ private void ShowParameters(PlanStatement statement)
AddParamCell(grid, rowIndex, 0, param.Name, "#E4E6EB", FontWeight.SemiBold);

// Data type
AddParamCell(grid, rowIndex, 1, param.DataType, "#B0B6C0");
AddParamCell(grid, rowIndex, 1, param.DataType, "#E4E6EB");

// Compiled value
if (compiledCol >= 0)
Expand Down Expand Up @@ -3372,7 +3372,7 @@ private IBrush FindBrushResource(string key)
"BackgroundLightBrush" => new SolidColorBrush(Color.FromRgb(0x23, 0x26, 0x2E)),
"BorderBrush" => new SolidColorBrush(Color.FromRgb(0x3A, 0x3D, 0x45)),
"ForegroundBrush" => new SolidColorBrush(Color.FromRgb(0xE4, 0xE6, 0xEB)),
"ForegroundMutedBrush" => TooltipFgBrush,
"ForegroundMutedBrush" => new SolidColorBrush(Color.FromRgb(0xE4, 0xE6, 0xEB)),
_ => Brushes.White
};
}
Expand Down
2 changes: 1 addition & 1 deletion src/PlanViewer.App/Controls/QuerySessionControl.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
</StackPanel>
<TextBlock x:Name="StatusText" DockPanel.Dock="Right"
HorizontalAlignment="Right" VerticalAlignment="Center"
FontSize="11" Foreground="{DynamicResource ForegroundMutedBrush}"
FontSize="11" Foreground="{DynamicResource ForegroundBrush}"
TextTrimming="CharacterEllipsis"/>
</DockPanel>
</Border>
Expand Down
4 changes: 2 additions & 2 deletions src/PlanViewer.App/Controls/QuerySessionControl.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -967,7 +967,7 @@ private async Task CaptureAndShowPlan(bool estimated, string? queryTextOverride
{
Text = $"Capturing {planType.ToLower()} plan...",
FontSize = 14,
Foreground = new SolidColorBrush(Color.Parse("#B0B6C0")),
Foreground = new SolidColorBrush(Color.Parse("#E4E6EB")),
HorizontalAlignment = HorizontalAlignment.Center
};

Expand Down Expand Up @@ -1761,7 +1761,7 @@ private async void GetActualPlan_Click(object? sender, RoutedEventArgs e)
{
Text = "Capturing actual plan...",
FontSize = 14,
Foreground = new SolidColorBrush(Color.Parse("#B0B6C0")),
Foreground = new SolidColorBrush(Color.Parse("#E4E6EB")),
HorizontalAlignment = HorizontalAlignment.Center
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public partial class TimeRangeSlicerControl : UserControl
// Cached brushes and objects to avoid allocations on every Redraw
private static readonly SolidColorBrush FallbackChartFillBrush = new(Color.Parse("#332EAEF1"));
private static readonly SolidColorBrush FallbackChartLineBrush = new(Color.Parse("#2EAEF1"));
private static readonly SolidColorBrush FallbackLabelBrush = new(Color.Parse("#99E4E6EB"));
private static readonly SolidColorBrush FallbackLabelBrush = new(Color.Parse("#E4E6EB"));
private static readonly SolidColorBrush FallbackDayLineBrush = new(Color.Parse("#55E4E6EB"));
private static readonly SolidColorBrush FallbackForegroundBrush = new(Color.Parse("#E4E6EB"));
private static readonly SolidColorBrush FallbackOverlayBrush = new(Color.Parse("#99000000"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ private void Redraw()
orderedCats.Add("Others");

// ── Vertical dashed lines at day boundaries (00:00) ────────────────
var dashBrush = TryFindBrush("SlicerLabelBrush", new SolidColorBrush(Color.Parse("#99E4E6EB")));
var dashBrush = TryFindBrush("SlicerLabelBrush", new SolidColorBrush(Color.Parse("#E4E6EB")));
for (int i = 0; i < n; i++)
{
if (allHours[i].Hour == 0)
Expand Down
6 changes: 3 additions & 3 deletions src/PlanViewer.App/Dialogs/QueryStoreHistoryWindow.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ private void UpdateChart()
_avgLine.LineWidth = 2f;
_avgLine.LinePattern = LinePattern.DenselyDashed;
_avgLine.Text = $"avg: {avg:N0}";
_avgLine.LabelFontColor = ScottPlot.Color.FromHex("#9DA5B4");
_avgLine.LabelFontColor = ScottPlot.Color.FromHex("#E4E6EB");
_avgLine.LabelFontSize = 11;
_avgLine.LabelBackgroundColor = ScottPlot.Color.FromHex("#333333").WithAlpha(170);
_avgLine.LabelOppositeAxis = false;
Expand Down Expand Up @@ -516,7 +516,7 @@ private void ConfigureSmartXAxis()

if (span.TotalHours <= 48)
{
HistoryChart.Plot.Axes.Bottom.TickLabelStyle.ForeColor = ScottPlot.Color.FromHex("#9DA5B4");
HistoryChart.Plot.Axes.Bottom.TickLabelStyle.ForeColor = ScottPlot.Color.FromHex("#E4E6EB");
HistoryChart.Plot.Axes.Bottom.TickGenerator = new ScottPlot.TickGenerators.DateTimeAutomatic
{
LabelFormatter = dt => dt.ToString("HH:mm\nMM/dd")
Expand Down Expand Up @@ -886,7 +886,7 @@ private void ApplyDarkTheme()
{
var fig = ScottPlot.Color.FromHex("#22252b");
var data = ScottPlot.Color.FromHex("#111217");
var text = ScottPlot.Color.FromHex("#9DA5B4");
var text = ScottPlot.Color.FromHex("#E4E6EB");
var grid = ScottPlot.Colors.White.WithAlpha(40);

HistoryChart.Plot.FigureBackground.Color = fig;
Expand Down
2 changes: 1 addition & 1 deletion src/PlanViewer.App/MainWindow.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1055,7 +1055,7 @@ private async Task GetActualPlanFromFile(PlanViewerControl viewer)
{
Text = "Executing query...",
FontSize = 14,
Foreground = new SolidColorBrush(Color.Parse("#B0B6C0")),
Foreground = new SolidColorBrush(Color.Parse("#E4E6EB")),
HorizontalAlignment = HorizontalAlignment.Center
};

Expand Down
2 changes: 1 addition & 1 deletion src/PlanViewer.App/PlanViewer.App.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<ApplicationManifest>app.manifest</ApplicationManifest>
<ApplicationIcon>EDD.ico</ApplicationIcon>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<Version>1.4.0</Version>
<Version>1.4.1</Version>
<Authors>Erik Darling</Authors>
<Company>Darling Data LLC</Company>
<Product>Performance Studio</Product>
Expand Down
4 changes: 2 additions & 2 deletions src/PlanViewer.App/Services/AdviceContentBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ internal static class AdviceContentBuilder
private static readonly SolidColorBrush CriticalBrush = new(Color.Parse("#E57373"));
private static readonly SolidColorBrush WarningBrush = new(Color.Parse("#FFB347"));
private static readonly SolidColorBrush InfoBrush = new(Color.Parse("#6BB5FF"));
private static readonly SolidColorBrush LabelBrush = new(Color.Parse("#9B9EC0"));
private static readonly SolidColorBrush LabelBrush = new(Color.Parse("#E4E6EB"));
private static readonly SolidColorBrush ValueBrush = new(Color.Parse("#E4E6EB"));
private static readonly SolidColorBrush CodeBrush = new(Color.Parse("#7BCF7B"));
private static readonly SolidColorBrush MutedBrush = new(Color.Parse("#8B8FA0"));
private static readonly SolidColorBrush MutedBrush = new(Color.Parse("#E4E6EB"));
private static readonly SolidColorBrush OperatorBrush = new(Color.Parse("#C792EA"));
private static readonly SolidColorBrush SqlKeywordBrush = new(Color.Parse("#569CD6"));
private static readonly SolidColorBrush SeparatorBrush = new(Color.Parse("#2A2D35"));
Expand Down
2 changes: 1 addition & 1 deletion src/PlanViewer.App/Themes/DarkTheme.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
<SolidColorBrush x:Key="SlicerHandleBrush" Color="#E4E6EB"/>
<SolidColorBrush x:Key="SlicerHandleHoverBrush" Color="#2EAEF1"/>
<SolidColorBrush x:Key="SlicerBorderBrush" Color="#3A3D45"/>
<SolidColorBrush x:Key="SlicerLabelBrush" Color="#99E4E6EB"/>
<SolidColorBrush x:Key="SlicerLabelBrush" Color="#E4E6EB"/>
<SolidColorBrush x:Key="SlicerToggleBrush" Color="#E4E6EB"/>

<!-- Wait Stats category colors (fixed per category) -->
Expand Down
Loading