|
6 | 6 | using EventLogExpert.Eventing.Providers; |
7 | 7 | using Microsoft.Extensions.DependencyInjection; |
8 | 8 | using System.CommandLine; |
| 9 | +using System.Text.RegularExpressions; |
9 | 10 |
|
10 | 11 | namespace EventLogExpert.EventDbTool; |
11 | 12 |
|
@@ -83,50 +84,59 @@ private void CreateDatabase(string path, string? source, string? filter, string? |
83 | 84 | return; |
84 | 85 | } |
85 | 86 |
|
86 | | - if (source is not null && !ProviderSource.TryValidate(source, Logger)) { return; } |
| 87 | + if (!RegexHelper.TryCreate(filter, Logger, out _)) { return; } |
87 | 88 |
|
88 | | - HashSet<string> skipProviderNames = new(StringComparer.OrdinalIgnoreCase); |
| 89 | + if (source is not null && !ProviderSource.TryValidate(source, Logger)) { return; } |
89 | 90 |
|
90 | | - if (!string.IsNullOrWhiteSpace(skipProvidersInFile)) |
| 91 | + try |
91 | 92 | { |
92 | | - if (!ProviderSource.TryValidate(skipProvidersInFile, Logger)) { return; } |
| 93 | + HashSet<string> skipProviderNames = new(StringComparer.OrdinalIgnoreCase); |
93 | 94 |
|
94 | | - foreach (var name in ProviderSource.LoadProviderNames(skipProvidersInFile, Logger)) |
| 95 | + if (!string.IsNullOrWhiteSpace(skipProvidersInFile)) |
95 | 96 | { |
96 | | - skipProviderNames.Add(name); |
97 | | - } |
| 97 | + if (!ProviderSource.TryValidate(skipProvidersInFile, Logger)) { return; } |
98 | 98 |
|
99 | | - Logger.Info($"Found {skipProviderNames.Count} providers in {skipProvidersInFile}. These will not be included in the new database."); |
100 | | - } |
| 99 | + foreach (var name in ProviderSource.LoadProviderNames(skipProvidersInFile, Logger)) |
| 100 | + { |
| 101 | + skipProviderNames.Add(name); |
| 102 | + } |
101 | 103 |
|
102 | | - IEnumerable<ProviderDetails> providersToAdd = source is null |
103 | | - ? LoadLocalProviders(filter, skipProviderNames) |
104 | | - : ProviderSource.LoadProviders(source, Logger, filter, skipProviderNames); |
| 104 | + Logger.Info($"Found {skipProviderNames.Count} providers in {skipProvidersInFile}. These will not be included in the new database."); |
| 105 | + } |
105 | 106 |
|
106 | | - var providersNotSkipped = providersToAdd.ToList(); |
| 107 | + IEnumerable<ProviderDetails> providersToAdd = source is null |
| 108 | + ? LoadLocalProviders(filter, skipProviderNames) |
| 109 | + : ProviderSource.LoadProviders(source, Logger, filter, skipProviderNames); |
107 | 110 |
|
108 | | - if (providersNotSkipped.Count == 0) |
109 | | - { |
110 | | - Logger.Warn($"No providers to add to the new database."); |
111 | | - return; |
112 | | - } |
| 111 | + var providersNotSkipped = providersToAdd.ToList(); |
| 112 | + |
| 113 | + if (providersNotSkipped.Count == 0) |
| 114 | + { |
| 115 | + Logger.Warn($"No providers to add to the new database."); |
| 116 | + return; |
| 117 | + } |
113 | 118 |
|
114 | | - using var dbContext = new EventProviderDbContext(path, false, Logger); |
| 119 | + using var dbContext = new EventProviderDbContext(path, false, Logger); |
115 | 120 |
|
116 | | - LogProviderDetailHeader(providersNotSkipped.Select(p => p.ProviderName)); |
| 121 | + LogProviderDetailHeader(providersNotSkipped.Select(p => p.ProviderName)); |
117 | 122 |
|
118 | | - foreach (var details in providersNotSkipped) |
119 | | - { |
120 | | - dbContext.ProviderDetails.Add(details); |
121 | | - LogProviderDetails(details); |
122 | | - } |
| 123 | + foreach (var details in providersNotSkipped) |
| 124 | + { |
| 125 | + dbContext.ProviderDetails.Add(details); |
| 126 | + LogProviderDetails(details); |
| 127 | + } |
123 | 128 |
|
124 | | - Logger.Info($""); |
125 | | - Logger.Info($"Saving database. Please wait..."); |
| 129 | + Logger.Info($""); |
| 130 | + Logger.Info($"Saving database. Please wait..."); |
126 | 131 |
|
127 | | - dbContext.SaveChanges(); |
| 132 | + dbContext.SaveChanges(); |
128 | 133 |
|
129 | | - Logger.Info($"Done!"); |
| 134 | + Logger.Info($"Done!"); |
| 135 | + } |
| 136 | + catch (RegexMatchTimeoutException) |
| 137 | + { |
| 138 | + Logger.Error($"The --filter regex timed out. The pattern may cause catastrophic backtracking."); |
| 139 | + } |
130 | 140 | } |
131 | 141 |
|
132 | 142 | } |
0 commit comments