public override async Task ScanEventLogsAsync() { ScanCompleted.Value = false; BlackoutDates.Clear(); var oldest = DateTime.Today - TimeSpan.FromDays(PreferenceService.Preference.MaxDays); DateTime?lastDate = oldest - TimeSpan.FromDays(30); // To easy recognission of oldest date ScannedDate.Value = oldest; AllPowerLogs.Clear(); long maxTimeDiff = PreferenceService.Preference.MaxDays * 86400000L; var queryStr = "<QueryList><Query Id=\"0\" Path=\"System\">" + "<Select Path =\"System\">" + "*[System[Provider[@Name = 'Microsoft-Windows-Kernel-Boot'" + " or @Name = 'Microsoft-Windows-Kernel-General'" + " or @Name = 'Microsoft-Windows-Kernel-Power'" + " or @Name = 'EventLog'] " + " and TimeCreated[timediff(@SystemTime) <= " + $"{maxTimeDiff}" + "]]] </Select></Query></QueryList>"; var query = new EventLogQuery("System", PathType.LogName, queryStr); EventLogReader reader = new EventLogReader(query); EventRecord record = reader.ReadEvent(); while (record != null && !ScanCompleted.Value) { PowerLogEntry pwle = ToPowerLogEntry(record); if (pwle != null) { AllPowerLogs.Add(pwle); if (lastDate != pwle.Timestamp.Date) { UpdateBlackoutDateRange(lastDate, pwle.Timestamp.Date); ScannedDate.Value = lastDate = pwle.Timestamp.Date; await Task.Yield(); } } record = reader.ReadEvent(); } Logger.Debug("AllPowerLogs.Count = {0}", AllPowerLogs.Count); if (AllPowerLogs.Count > 0) { UpdateBlackoutDateRange(lastDate, DateTime.Today + TimeSpan.FromDays(1)); if (!ScanCompleted.Value) // not aborted { ScannedDate.Value = AllPowerLogs[AllPowerLogs.Count - 1].Timestamp.Date; } } else { UpdateBlackoutDateRange(lastDate, DateTime.Today + TimeSpan.FromDays(1)); } BlackoutDateArray = BlackoutDates.ToArray(); ScanCompleted.Value = true; Logger.Debug("Scan completed"); }
public PowerLogEntry[] GetPowerLogEntries(DateTime date) { return(AllPowerLogs.Where(x => x.Timestamp.Date == date.Date).OrderBy(x => x.Timestamp).ToArray()); }