Avoid repeated NTFS engine logger initialization

This commit is contained in:
Meik
2026-07-16 13:11:40 +02:00
parent 0b1dbd7925
commit dd0ebd3d6d
2 changed files with 84 additions and 39 deletions

View File

@@ -1335,9 +1335,17 @@ namespace C4IT.LIAM
IEnumerable<string> readerSids, IEnumerable<string> readerSids,
IEnumerable<string> writerSids) IEnumerable<string> writerSids)
{ {
var stopwatch = Stopwatch.StartNew();
LogEntry(
$"NTFS filesystem engine creation stage. Stage=Start Path='{folderPath}', ParentPath='{parentFolderPath}'",
LogLevels.Debug);
var requiresDomainLocalTag = this.GroupStrategy == eLiamGroupStrategies.Ntfs_AGDLP var requiresDomainLocalTag = this.GroupStrategy == eLiamGroupStrategies.Ntfs_AGDLP
|| (NamingConventions ?? Enumerable.Empty<cLiamNamingConvention>()) || (NamingConventions ?? Enumerable.Empty<cLiamNamingConvention>())
.Any(i => i.Scope == eLiamAccessRoleScopes.DomainLocal); .Any(i => i.Scope == eLiamAccessRoleScopes.DomainLocal);
LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=ResolveStrategy Path='{folderPath}', RequiresDomainLocalTag={requiresDomainLocalTag}, Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
var mergedCustomTags = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); var mergedCustomTags = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
foreach (var tag in CustomTags) foreach (var tag in CustomTags)
@@ -1347,49 +1355,70 @@ namespace C4IT.LIAM
foreach (var tag in customTags) foreach (var tag in customTags)
mergedCustomTags[tag.Key] = tag.Value; mergedCustomTags[tag.Key] = tag.Value;
} }
LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=MergeCustomTags Path='{folderPath}', CustomTags={mergedCustomTags.Count}, Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
var engine = new DataArea_FileSystem LogEntry(
{ $"NTFS filesystem engine creation stage. Stage=ConstructEngine Path='{folderPath}'",
ConfigID = "manual", LogLevels.Debug);
domainName = this.Domain, var engine = new DataArea_FileSystem();
effectiveDomainController = activeDirectoryBase.EffectiveDomainController, LogEntry(
username = this.Credential.Identification, $"NTFS filesystem engine creation stage finished. Stage=ConstructEngine Path='{folderPath}', Elapsed='{stopwatch.Elapsed}'",
password = new NetworkCredential("", this.Credential.Secret).SecurePassword, LogLevels.Debug);
baseFolder = this.RootPath,
newFolderPath = folderPath, LogEntry(
newFolderParent = parentFolderPath, $"NTFS filesystem engine creation stage. Stage=AssignEngineProperties Path='{folderPath}'",
groupPrefix = GetRequiredCustomTag("Filesystem_GroupPrefixTag"), LogLevels.Debug);
groupOUPath = this.GroupPath, engine.ConfigID = "manual";
groupPermissionStrategy = (C4IT_IAM_GET.PermissionGroupStrategy)this.GroupStrategy, engine.domainName = this.Domain;
groupCustomTags = mergedCustomTags, engine.effectiveDomainController = activeDirectoryBase.EffectiveDomainController;
ownerUserSids = ownerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>(), engine.username = this.Credential.Identification;
readerUserSids = readerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>(), engine.password = new NetworkCredential("", this.Credential.Secret).SecurePassword;
writerUserSids = writerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>(), engine.baseFolder = this.RootPath;
groupOwnerTag = GetRequiredCustomTag("Filesystem_GroupOwnerTag"), engine.newFolderPath = folderPath;
groupWriteTag = GetRequiredCustomTag("Filesystem_GroupWriteTag"), engine.newFolderParent = parentFolderPath;
groupReadTag = GetRequiredCustomTag("Filesystem_GroupReadTag"), engine.groupPrefix = GetRequiredCustomTag("Filesystem_GroupPrefixTag");
groupTraverseTag = GetRequiredCustomTag("Filesystem_GroupTraverseTag"), engine.groupOUPath = this.GroupPath;
groupDLTag = requiresDomainLocalTag ? GetRequiredCustomTag("Filesystem_GroupDomainLocalTag") : string.Empty, engine.groupPermissionStrategy = (C4IT_IAM_GET.PermissionGroupStrategy)this.GroupStrategy;
groupGTag = GetRequiredCustomTag("Filesystem_GroupGlobalTag"), engine.groupCustomTags = mergedCustomTags;
CanManagePermissionsForPath = IsPermissionManagedFolderPath, engine.ownerUserSids = ownerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>();
CanManageTraversePermissionsForPath = IsTraversePermissionManagedPath, engine.readerUserSids = readerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>();
forceStrictAdGroupNames = IsAdditionalConfigurationEnabled("ForceStrictAdGroupNames"), engine.writerUserSids = writerSids?.Where(i => !string.IsNullOrWhiteSpace(i)).Distinct(StringComparer.OrdinalIgnoreCase).ToList() ?? new List<string>();
groupNameSanitizeReplacement = GetAdditionalConfigurationValueOrDefault( engine.groupOwnerTag = GetRequiredCustomTag("Filesystem_GroupOwnerTag");
engine.groupWriteTag = GetRequiredCustomTag("Filesystem_GroupWriteTag");
engine.groupReadTag = GetRequiredCustomTag("Filesystem_GroupReadTag");
engine.groupTraverseTag = GetRequiredCustomTag("Filesystem_GroupTraverseTag");
engine.groupDLTag = requiresDomainLocalTag ? GetRequiredCustomTag("Filesystem_GroupDomainLocalTag") : string.Empty;
engine.groupGTag = GetRequiredCustomTag("Filesystem_GroupGlobalTag");
engine.CanManagePermissionsForPath = IsPermissionManagedFolderPath;
engine.CanManageTraversePermissionsForPath = IsTraversePermissionManagedPath;
engine.forceStrictAdGroupNames = IsAdditionalConfigurationEnabled("ForceStrictAdGroupNames");
engine.groupNameSanitizeReplacement = GetAdditionalConfigurationValueOrDefault(
AdditionalConfigurationGroupNameSanitizeReplacementKey, AdditionalConfigurationGroupNameSanitizeReplacementKey,
Helper.DefaultGroupNameSanitizeReplacement), Helper.DefaultGroupNameSanitizeReplacement);
preserveAdGroupNameCase = IsAdditionalConfigurationEnabled(AdditionalConfigurationPreserveAdGroupNameCaseKey), engine.preserveAdGroupNameCase = IsAdditionalConfigurationEnabled(AdditionalConfigurationPreserveAdGroupNameCaseKey);
OwnerACLPermission = this.OwnerACLPermission, engine.OwnerACLPermission = this.OwnerACLPermission;
WriteACLPermission = this.WriteACLPermission, engine.WriteACLPermission = this.WriteACLPermission;
ReadACLPermission = this.ReadACLPermission engine.ReadACLPermission = this.ReadACLPermission;
}; LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=AssignEngineProperties Path='{folderPath}', Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
engine.traverseBoundaryPath = GetEffectiveTraverseBoundaryPath(); engine.traverseBoundaryPath = GetEffectiveTraverseBoundaryPath();
LogEntry( LogEntry(
$"NTFS filesystem engine ACL permissions: Owner=0x{engine.OwnerACLPermission:X}, Write=0x{engine.WriteACLPermission:X}, Read=0x{engine.ReadACLPermission:X}", $"NTFS filesystem engine ACL permissions: Owner=0x{engine.OwnerACLPermission:X}, Write=0x{engine.WriteACLPermission:X}, Read=0x{engine.ReadACLPermission:X}",
LogLevels.Debug); LogLevels.Debug);
LogEntry(
$"NTFS filesystem engine creation stage. Stage=BuildSecurityGroupTemplates Path='{folderPath}'",
LogLevels.Debug);
foreach (var template in BuildSecurityGroupTemplates()) foreach (var template in BuildSecurityGroupTemplates())
engine.templates.Add(template); engine.templates.Add(template);
LogEntry(
$"NTFS filesystem engine creation stage finished. Stage=BuildSecurityGroupTemplates Path='{folderPath}', Templates={engine.templates.Count}, Elapsed='{stopwatch.Elapsed}'",
LogLevels.Debug);
return engine; return engine;
} }

View File

@@ -17,6 +17,7 @@ using C4IT.Logging;
using static C4IT.Logging.cLogManager; using static C4IT.Logging.cLogManager;
using System.Reflection; using System.Reflection;
using System.Threading;
using C4IT_IAM_GET; using C4IT_IAM_GET;
using C4IT.LIAM; using C4IT.LIAM;
@@ -75,18 +76,33 @@ namespace C4IT_IAM_SET
public List<IAM_SecurityGroupTemplate> templates; public List<IAM_SecurityGroupTemplate> templates;
public int createTraverseGroupLvl = 0; public int createTraverseGroupLvl = 0;
private static int engineFileLoggerInitialized;
public DataArea_FileSystem() public DataArea_FileSystem()
{ {
EnsureEngineFileLoggerInitialized();
if (DefaultLogger != null)
{
DefaultLogger.LogEntry(LogLevels.Info, "=================================================");
DefaultLogger.LogEntry(LogLevels.Info, $"LIAM engine v{Assembly.GetExecutingAssembly().GetName().Version} started");
}
templates = new List<IAM_SecurityGroupTemplate>();
}
private static void EnsureEngineFileLoggerInitialized()
{
if (DefaultLogger != null)
return;
if (Interlocked.Exchange(ref engineFileLoggerInitialized, 1) != 0)
return;
var logDirectory = Environment.ExpandEnvironmentVariables(constApplicationDataPath); var logDirectory = Environment.ExpandEnvironmentVariables(constApplicationDataPath);
Helper.CreatePathWithWriteAccess(logDirectory); Helper.CreatePathWithWriteAccess(logDirectory);
var LogPath = Path.Combine(logDirectory, "Logs"); var LogPath = Path.Combine(logDirectory, "Logs");
cLogManagerFile.CreateInstance(Path.Combine(LogPath, "LIAM.log")); cLogManagerFile.CreateInstance(Path.Combine(LogPath, "LIAM.log"));
DefaultLogger.LogEntry(LogLevels.Info, "=================================================");
DefaultLogger.LogEntry(LogLevels.Info, $"LIAM engine v{Assembly.GetExecutingAssembly().GetName().Version} started");
templates = new List<IAM_SecurityGroupTemplate>();
} }
private string GetAdServer() private string GetAdServer()