Skip to content

Commit 2903941

Browse files
committed
add raw,timecreated,provider filter(#(#6,#4)
1 parent 7667962 commit 2903941

File tree

8 files changed

+213
-64
lines changed

8 files changed

+213
-64
lines changed

src/WEventViewer/DetailedLogMessageWIndow.axaml

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -32,45 +32,11 @@
3232
>
3333

3434
</DataGrid>
35-
<!--<Grid Margin="10">
36-
<Grid.ColumnDefinitions>
37-
<ColumnDefinition Width="Auto"/>
38-
<ColumnDefinition Width="*"/>
39-
</Grid.ColumnDefinitions>
40-
<Grid.RowDefinitions>
41-
<RowDefinition Height="Auto"/>
42-
<RowDefinition Height="Auto"/>
43-
<RowDefinition Height="Auto"/>
44-
<RowDefinition Height="Auto"/>
45-
<RowDefinition Height="Auto"/>
46-
<RowDefinition Height="Auto"/>
47-
</Grid.RowDefinitions>
48-
<Label Content="TimeCreated" Grid.Column="0" Grid.Row="0"/>
49-
<TextBlock Text="{Binding TimeCreated}" Grid.Column="1" Grid.Row="0"/>
50-
<Label Content="Level" Grid.Column="0" Grid.Row="1"/>
51-
<TextBlock Text="{Binding LevelDisplayName}" Grid.Column="1" Grid.Row="1"/>
52-
<Label Content="LogName" Grid.Column="0" Grid.Row="2"/>
53-
<TextBlock Text="{Binding LogName}" Grid.Column="1" Grid.Row="2"/>
54-
--><!--<StackPanel Orientation="Horizontal" Margin="10">
55-
</StackPanel>
56-
<StackPanel Orientation="Horizontal" Margin="10">
57-
<Label Content="LogName"/>
58-
<TextBlock Text="{Binding LogName}"/>
59-
</StackPanel>
60-
<StackPanel Orientation="Horizontal" Margin="10">
61-
<Label Content="ProviderName"/>
62-
<TextBlock Text="{Binding ProviderName}"/>
63-
</StackPanel>
64-
<StackPanel Orientation="Horizontal" Margin="10">
65-
<Label Content="FormattedString"/>
66-
<TextBlock Text="{Binding FormattedString}"/>
67-
</StackPanel>--><!--
68-
</Grid>-->
6935
</ScrollViewer>
7036
</TabItem>
7137
<TabItem Header="XML">
7238
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
73-
<TextBlock Text="{Binding XmlString,Mode=OneTime}" Margin="10"/>
39+
<SelectableTextBlock Text="{Binding XmlString,Mode=OneTime}" Margin="10"/>
7440
</ScrollViewer>
7541
</TabItem>
7642
</TabControl>

src/WEventViewer/MainWindow.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@
3535
<DataGrid.Columns>
3636

3737
<DataGridTextColumn Header="TimeCreated" Binding="{Binding TimeCreated}"/>
38-
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
3938
<DataGridTextColumn Header="LogName" Binding="{Binding LogName}"/>
39+
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
40+
<DataGridTextColumn Header="Level" Binding="{Binding Level}"/>
4041
<DataGridTextColumn Header="Description" Binding="{Binding Formatted}"/>
4142
</DataGrid.Columns>
4243
<DataGrid.RowHeight>50</DataGrid.RowHeight>

src/WEventViewer/MainWindow.axaml.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public MainWindow()
2525
var ret = await dlg.ShowDialog<bool>(this);
2626
if(ret && DataContext is MainWindowViewModel mwvm)
2727
{
28-
WeakReferenceMessenger.Default.Send<LoadLogMessage>(new(vm.LogName, vm.CurrentSelected.PathType));
28+
WeakReferenceMessenger.Default.Send<LoadLogMessage>(new(vm.LogName, vm.CurrentSelected.PathType, vm.QueryString));
2929
}
3030
});
3131
WeakReferenceMessenger.Default.Register<MainWindow, OpenErrorLogWindow>(this, async (mw, msg) =>
@@ -45,9 +45,9 @@ private void Window_SizeChanged(object? sender, Avalonia.Controls.SizeChangedEve
4545
}
4646
}
4747

48-
private async void DataGrid_DoubleTapped_1(object? sender, Avalonia.Input.TappedEventArgs e)
48+
private void DataGrid_DoubleTapped_1(object? sender, Avalonia.Input.TappedEventArgs e)
4949
{
50-
_DS.Write("OnDataGridDoubleTapped", e);
50+
_DS.Write("OnDataGridDoubleTapped", new { e.Source, e.Pointer });
5151
if(sender is DataGrid dataGrid)
5252
{
5353
if (dataGrid.SelectedItem is LogRecord record)
@@ -57,7 +57,7 @@ private async void DataGrid_DoubleTapped_1(object? sender, Avalonia.Input.Tapped
5757
{
5858
DataContext = vm,
5959
};
60-
await w.ShowDialog(this);
60+
w.Show(this);
6161
}
6262
}
6363
}

src/WEventViewer/Model/EventLogRepository.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ public void Clear()
114114
static readonly DiagnosticListener _DS = new DiagnosticListener(nameof(EventLogRepository));
115115
public async Task Load(string logName, PathType pathType, string? query, CancellationToken token, Action<IList<LogRecord>> dispatch)
116116
{
117-
using var evreader = new EventLogReader(new EventLogQuery(logName, pathType, query));
117+
var evtquery = !string.IsNullOrEmpty(query) ? new EventLogQuery(logName, pathType, query) : new EventLogQuery(logName, pathType);
118+
using var evreader = new EventLogReader(evtquery);
118119
Clear();
119120
long count = 0;
120121
List<LogRecord> lst = [];

src/WEventViewer/OpenLogWindow.axaml

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<RowDefinition Height="*"></RowDefinition>
2020
<RowDefinition Height="Auto"></RowDefinition>
2121
</Grid.RowDefinitions>
22-
<StackPanel Margin="10" Orientation="Vertical" Grid.Row="0">
22+
<StackPanel Margin="10" Orientation="Vertical" Grid.Row="0" Name="OptionPanel">
2323
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Grid.Row="0" VerticalAlignment="Center">
2424
<Label Content="LogName"
2525
Margin="10,10,10,10"
@@ -35,7 +35,7 @@
3535
MinWidth="200" MaxWidth="1000"
3636
/>
3737
</StackPanel>
38-
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" Grid.Row="1" VerticalAlignment="Center">
38+
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Center">
3939
<Label Content="PathType"
4040
Margin="10,10,10,10"
4141
HorizontalAlignment="Left"
@@ -58,24 +58,27 @@
5858
</ComboBox.ItemTemplate>
5959
</ComboBox>
6060
</StackPanel>
61-
<Expander Header="Advanced" Grid.Row="2" HorizontalAlignment="Stretch" MaxHeight="300">
62-
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
63-
<StackPanel Orientation="Vertical" MaxHeight="500">
64-
<CheckBox Name="UseRawQuery" Content="raw query" Margin="10"/>
65-
<TextBox Name="RawQueryInput" Margin="10"/>
66-
<Border BorderThickness="1" BorderBrush="Gray"/>
67-
<CheckBox Name="UseTimeCreated" Content="show ranged time"/>
68-
<StackPanel Orientation="Vertical">
69-
<Label Content="Since:"/>
70-
<DatePicker Name="BeginDate"/>
71-
<TimePicker/>
72-
<Label Content="Until:"/>
73-
<DatePicker Name="EndDate"/>
74-
<TimePicker/>
75-
</StackPanel>
61+
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" VerticalAlignment="Stretch" MaxHeight="300" MaxWidth="{Binding #OptionPanel.Bounds.Width}">
62+
<StackPanel Orientation="Vertical" Margin="10">
63+
<CheckBox Name="UseRawQuery" Content="raw query" Margin="10" IsChecked="{Binding UseRawQuery}"/>
64+
<TextBox Name="RawQueryInput" Margin="10" Text="{Binding RawQuery}" IsEnabled="{Binding UseRawQuery}"/>
65+
<Border BorderThickness="1" BorderBrush="Gray"/>
66+
<StackPanel Orientation="Horizontal">
67+
<CheckBox Content="Since:" IsChecked="{Binding UseBeginDate}" Margin="10"/>
68+
<DatePicker Name="BeginDate" SelectedDate="{Binding BeginDate}" IsEnabled="{Binding UseBeginDate}"/>
69+
<TimePicker Name="BeginTime" SelectedTime="{Binding BeginTime}" IsEnabled="{Binding UseBeginDate}"/>
7670
</StackPanel>
77-
</ScrollViewer>
78-
</Expander>
71+
<StackPanel Orientation="Horizontal">
72+
<CheckBox Content="Until:" IsChecked="{Binding UseEndDate}" Margin="10"/>
73+
<DatePicker Name="EndDate" SelectedDate="{Binding EndDate}" IsEnabled="{Binding UseEndDate}"/>
74+
<TimePicker Name="EndTime" SelectedTime="{Binding EndTime}" IsEnabled="{Binding UseEndDate}"/>
75+
</StackPanel>
76+
<CheckBox Content="filter providers(separeted by ',')" Margin="10" IsChecked="{Binding UseProviderNames}"/>
77+
<TextBox Text="{Binding ProviderNames}" IsEnabled="{Binding UseProviderNames}"/>
78+
</StackPanel>
79+
</ScrollViewer>
80+
<!--<Expander Header="Advanced" Grid.Row="2" HorizontalAlignment="Stretch" MaxHeight="300">
81+
</Expander>-->
7982
</StackPanel>
8083
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="1" VerticalAlignment="Bottom">
8184
<Button Content="OK" Command="{ Binding OkCommand }" Margin="10" Padding="10"/>

src/WEventViewer/ViewModel/DetailedLogViewModel.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ public DetailedLogViewModel(LogRecord? logRecord)
3232
doc.WriteTo(xw);
3333
_FormattedXmlString = tw.ToString();
3434
}
35+
else
36+
{
37+
_FormattedXmlString = string.Empty;
38+
}
3539
if(logRecord != null)
3640
{
3741
Items = new KeyValuePair<string, string?>[]
@@ -41,7 +45,7 @@ public DetailedLogViewModel(LogRecord? logRecord)
4145
new("ActivityId", logRecord.ActivityId?.ToString()),
4246
new("LogName", logRecord.LogName),
4347
new("MachineName", logRecord.MachineName),
44-
new("Level", string.IsNullOrEmpty(logRecord.LevelDisplayName) ? logRecord.Level?.ToString() : logRecord.LevelDisplayName),
48+
new("Level", string.IsNullOrEmpty(logRecord.LevelDisplayName) ? logRecord.Level?.ToString() : $"{logRecord.LevelDisplayName}({logRecord.Level})"),
4549
new("TimeCreated", logRecord.TimeCreated?.ToString("o")),
4650
new("ProviderName", logRecord.ProviderName),
4751
new("OpCode", logRecord.OpCode?.ToString("x")),

src/WEventViewer/ViewModel/MainWindowViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class OpenLogRequest
2828
public string? LogName { get; set; }
2929
public PathType PathType { get; set; }
3030
}
31-
record class LoadLogMessage(string logName, PathType pathType);
31+
record class LoadLogMessage(string logName, PathType pathType, string query);
3232
record class MainWindowCloseMessage();
3333
record class OpenDetailedLogMessage();
3434
internal class MainWindowViewModel : ObservableRecipient
@@ -55,7 +55,7 @@ public MainWindowViewModel()
5555
}, () => LoadTask == null || LoadTask.IsCompleted);
5656
WeakReferenceMessenger.Default.Register<MainWindowViewModel, LoadLogMessage>(this, (vm, msg) =>
5757
{
58-
LoadTask = _EventLogRepository.Load(msg.logName, msg.pathType, null, default, (lst) =>
58+
LoadTask = _EventLogRepository.Load(msg.logName, msg.pathType, msg.query, default, (lst) =>
5959
{
6060
Dispatcher.UIThread.Invoke(() =>
6161
{

src/WEventViewer/ViewModel/OpenLogWindowViewModel.cs

Lines changed: 175 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public OpenLogWindowViewModel()
110110
IsOk = true;
111111
WeakReferenceMessenger.Default.Send<OpenDialogResultMessage>(new(true));
112112
}, () => true);
113-
CancelCommand = new RelayCommand(() => {
113+
CancelCommand = new RelayCommand(() => {
114114
IsOk = false;
115115
WeakReferenceMessenger.Default.Send<OpenDialogResultMessage>(new(false));
116116
}, () => true);
@@ -125,5 +125,179 @@ public void OnSizeChanged(int WindowWidth)
125125
LogNameWidth = WindowWidth;
126126
}
127127
public int LogNameWidth { get; set; }
128+
bool _UseRawQuery = false;
129+
public bool UseRawQuery
130+
{
131+
get => _UseRawQuery;
132+
set
133+
{
134+
var changed = _UseRawQuery != value;
135+
_UseRawQuery = value;
136+
if (changed)
137+
{
138+
if (PropertyChanged != null)
139+
{
140+
PropertyChanged(this, new PropertyChangedEventArgs(nameof(UseRawQuery)));
141+
}
142+
if (_UseRawQuery && _UseTimeCreated)
143+
{
144+
UseTimeCreated = false;
145+
}
146+
}
147+
}
148+
}
149+
public string RawQuery { get; set; } = string.Empty;
150+
public string QueryString => BuildQuery();
151+
string BuildQuery()
152+
{
153+
if (UseRawQuery)
154+
{
155+
return RawQuery;
156+
}
157+
else
158+
{
159+
var conditions = new List<string>();
160+
if (UseBeginDate)
161+
{
162+
var d = BeginDateTime;
163+
if (d != null)
164+
{
165+
conditions.Add($"TimeCreated[@SystemTime >= '{d:yyyy-MM-ddTHH:mm:ss}']");
166+
}
167+
168+
}
169+
if (UseEndDate)
170+
{
171+
var d = EndDateTime;
172+
if (d != null)
173+
{
174+
conditions.Add($"TimeCreated[@SystemTime <= '{d:yyyy-MM-ddTHH:mm:ss}']");
175+
}
176+
}
177+
if (UseProviderNames && !string.IsNullOrEmpty(ProviderNames))
178+
{
179+
var providerConditions = string.Join(" or ", ProviderNames.Split(',').Select(x => $"@Name = '{x.Trim()}'"));
180+
conditions.Add($"Provider[{providerConditions}]");
181+
}
182+
if (conditions.Count > 0)
183+
{
184+
return $"*[System[{string.Join(" and ", conditions)}]]";
185+
}
186+
}
187+
return string.Empty;
188+
}
189+
bool _UseTimeCreated = false;
190+
public bool UseTimeCreated
191+
{
192+
get => _UseTimeCreated;
193+
set
194+
{
195+
var changed = _UseTimeCreated != value;
196+
_UseTimeCreated = value;
197+
if (changed)
198+
{
199+
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(UseTimeCreated)));
200+
if (UseRawQuery && value)
201+
{
202+
UseRawQuery = false;
203+
}
204+
}
205+
}
206+
}
207+
bool _UseBeginDate = false;
208+
public bool UseBeginDate
209+
{
210+
get => _UseBeginDate;
211+
set
212+
{
213+
var changed = _UseBeginDate != value;
214+
_UseBeginDate = value;
215+
if (changed)
216+
{
217+
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(UseBeginDate)));
218+
if (UseRawQuery && value)
219+
{
220+
UseRawQuery = false;
221+
}
222+
}
223+
}
224+
}
225+
bool _UseEndDate = false;
226+
public bool UseEndDate
227+
{
228+
get => _UseEndDate;
229+
set
230+
{
231+
var changed = _UseEndDate != value;
232+
_UseEndDate = value;
233+
if (changed)
234+
{
235+
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(UseEndDate)));
236+
if (UseRawQuery && value)
237+
{
238+
UseRawQuery = false;
239+
}
240+
}
241+
}
242+
}
243+
public DateTime? BeginDateTime
244+
{
245+
get
246+
{
247+
if(BeginDate != null && DateTime.TryParse(BeginDate, out var d))
248+
{
249+
if(BeginTime != null && DateTime.TryParse(BeginTime, out var t))
250+
{
251+
return new DateTime(d.Year, d.Month, d.Day, t.Hour, t.Minute, t.Second);
252+
}
253+
else
254+
{
255+
return d;
256+
}
257+
}
258+
return null;
259+
}
260+
}
261+
public DateTime? EndDateTime
262+
{
263+
get
264+
{
265+
if (EndDate != null && DateTime.TryParse(EndDate, out var d))
266+
{
267+
if (EndTime != null && DateTime.TryParse(EndTime, out var t))
268+
{
269+
return new DateTime(d.Year, d.Month, d.Day, t.Hour, t.Minute, t.Second);
270+
}
271+
else
272+
{
273+
return d;
274+
}
275+
}
276+
return null;
277+
}
278+
}
279+
public string BeginDate { get; set; } = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
280+
public string BeginTime { get; set; } = "00:00:00";
281+
public string EndDate { get; set; } = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
282+
public string EndTime { get; set; } = "00:00:00";
283+
bool _UseProviderNames = false;
284+
public bool UseProviderNames
285+
{
286+
get => _UseProviderNames;
287+
set
288+
{
289+
var changed = _UseProviderNames != value;
290+
_UseProviderNames = value;
291+
if(changed)
292+
{
293+
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs($"{nameof(UseProviderNames)}"));
294+
if(UseRawQuery && value)
295+
{
296+
UseRawQuery = false;
297+
}
298+
}
299+
}
300+
}
301+
public string ProviderNames { get; set; } = string.Empty;
128302
}
129303
}

0 commit comments

Comments
 (0)