public void Initialize()
 {
     this.LoadPlugins();
     this.auditingInstancesReadOnly = this.auditingInstances.AsReadOnly();
     using (IEnumerator <IAuditing2> enumerator = this.auditingInstancesReadOnly.GetEnumerator())
     {
         while (((IEnumerator)enumerator).MoveNext())
         {
             IAuditing2 current = enumerator.Current;
             string     supportedIndicationType = ((IAuditing)current).get_SupportedIndicationType();
             if (this.cacheTypeInstances.ContainsKey(supportedIndicationType))
             {
                 this.cacheTypeInstances[supportedIndicationType].Add(current);
             }
             else
             {
                 Dictionary <string, List <IAuditing2> > cacheTypeInstances = this.cacheTypeInstances;
                 string            key            = supportedIndicationType;
                 List <IAuditing2> iauditing2List = new List <IAuditing2>();
                 iauditing2List.Add(current);
                 cacheTypeInstances.Add(key, iauditing2List);
             }
         }
     }
     using (Dictionary <string, List <IAuditing2> > .Enumerator enumerator = this.cacheTypeInstances.GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             KeyValuePair <string, List <IAuditing2> > current = enumerator.Current;
             this.cacheTypeInstancesReadOnly.Add(current.Key, (IEnumerable <IAuditing2>)current.Value);
         }
     }
     this.init = true;
 }
 public IAuditing2 GetAuditingInstancesOfActionType(AuditActionType actionType)
 {
     if (!this.init)
     {
         throw new InvalidOperationException("Object has not been initialized yet. Call Start method before using.");
     }
     using (Dictionary <string, IEnumerable <IAuditing2> > .Enumerator enumerator1 = this.cacheTypeInstancesReadOnly.GetEnumerator())
     {
         while (enumerator1.MoveNext())
         {
             using (IEnumerator <IAuditing2> enumerator2 = enumerator1.Current.Value.GetEnumerator())
             {
                 while (((IEnumerator)enumerator2).MoveNext())
                 {
                     IAuditing2 current = enumerator2.Current;
                     if (current != null && ((IAuditing)current).get_SupportedActionTypes().Any <AuditActionType>((Func <AuditActionType, bool>)(supportedType => AuditActionType.op_Equality(supportedType, actionType))))
                     {
                         return(current);
                     }
                 }
             }
         }
     }
     return((IAuditing2)null);
 }
示例#3
0
        public Task OnNotificationAsync(Notification notification)
        {
            if (AuditingNotificationSubscriber.log.get_IsDebugEnabled())
            {
                AuditingNotificationSubscriber.log.DebugFormat("OnNotification type: {0} SubscriptionId: {1}", (object)notification.get_IndicationType(), (object)notification.get_SubscriptionId());
            }
            PropertyBag propertyBag1 = new PropertyBag(notification.get_SourceInstanceProperties());
            PropertyBag propertyBag2 = new PropertyBag(notification.get_IndicationProperties());

            if (this.checkAuditingSetting)
            {
                try
                {
                    object obj;
                    if (IndicationHelper.GetIndicationType((IndicationType)2) == notification.get_IndicationType() && propertyBag1 != null && ((string)propertyBag1.TryGet <string>("SettingsID") == "SWNetPerfMon-AuditingTrails" && (string)propertyBag1.TryGet <string>("InstanceType") == "Orion.Settings") && ((Dictionary <string, object>)propertyBag1).TryGetValue("CurrentValue", out obj))
                    {
                        this.AuditingTrailsEnabled = Convert.ToBoolean(obj);
                    }
                    else if (!this.AuditingTrailsEnabled)
                    {
                        return(Task.CompletedTask);
                    }
                }
                catch (Exception ex)
                {
                    AuditingNotificationSubscriber.log.FatalFormat("Auditing check error - will be forciby enabled. {0}", (object)ex);
                    this.AuditingTrailsEnabled = true;
                    this.checkAuditingSetting  = false;
                }
            }
            AuditNotificationContainer auditNotificationContainer = new AuditNotificationContainer(notification.get_IndicationType(), propertyBag2, propertyBag1);
            IEnumerable <IAuditing2>   iauditing2s;

            if (this.subscriptionIdToAuditingInstances.TryGetValue(notification.get_SubscriptionId().ToString(), out iauditing2s))
            {
                using (IEnumerator <IAuditing2> enumerator1 = iauditing2s.GetEnumerator())
                {
                    while (((IEnumerator)enumerator1).MoveNext())
                    {
                        IAuditing2 current1 = enumerator1.Current;
                        try
                        {
                            if (AuditingNotificationSubscriber.log.get_IsTraceEnabled())
                            {
                                AuditingNotificationSubscriber.log.TraceFormat("Trying plugin {0}", new object[1]
                                {
                                    (object)current1
                                });
                            }
                            IEnumerable <AuditDataContainer> source = ((IAuditing)current1).ComposeDataContainers(auditNotificationContainer);
                            if (source != null)
                            {
                                if (AuditingNotificationSubscriber.log.get_IsTraceEnabled())
                                {
                                    AuditingNotificationSubscriber.log.Trace((object)"Storing notification.");
                                }
                                CultureInfo currentUiCulture = Thread.CurrentThread.CurrentUICulture;
                                try
                                {
                                    Thread.CurrentThread.CurrentUICulture = LocaleConfiguration.GetNonNeutralLocale(LocaleConfiguration.get_PrimaryLocale());
                                }
                                catch (Exception ex)
                                {
                                    AuditingNotificationSubscriber.log.Warn((object)"Unable set CurrentUICulture to PrimaryLocale.", ex);
                                }
                                using (IEnumerator <AuditDataContainer> enumerator2 = source.Select <AuditDataContainer, AuditDataContainer>((Func <AuditDataContainer, AuditDataContainer>)(composedDataContainer => new AuditDataContainer(composedDataContainer, auditNotificationContainer.get_AccountId()))).GetEnumerator())
                                {
                                    while (((IEnumerator)enumerator2).MoveNext())
                                    {
                                        AuditDataContainer current2 = enumerator2.Current;
                                        AuditDatabaseDecoratedContainer decoratedContainer = new AuditDatabaseDecoratedContainer(current2, auditNotificationContainer, ((IAuditing)current1).GetMessage(current2));
                                        int insertedId = this.auditingDAL.StoreNotification(decoratedContainer);
                                        this.PublishModificationOfAuditingEvents(decoratedContainer, insertedId);
                                    }
                                }
                                try
                                {
                                    Thread.CurrentThread.CurrentUICulture = currentUiCulture;
                                }
                                catch (Exception ex)
                                {
                                    AuditingNotificationSubscriber.log.Warn((object)"Unable set CurrentUICulture back to original locale.", ex);
                                }
                            }
                            else if (AuditingNotificationSubscriber.log.get_IsTraceEnabled())
                            {
                                AuditingNotificationSubscriber.log.Trace((object)"ComposeDataContainers returned null.");
                            }
                        }
                        catch (Exception ex)
                        {
                            string seed = string.Empty;
                            if (propertyBag2 != null)
                            {
                                seed = ((IEnumerable <KeyValuePair <string, object> >)propertyBag2).Aggregate <KeyValuePair <string, object>, string>(Environment.NewLine, (Func <string, KeyValuePair <string, object>, string>)((current, item) => current + this.FormatPropertyData("Indication Property: ", item.Key, item.Value)));
                            }
                            if (propertyBag1 != null)
                            {
                                seed = ((IEnumerable <KeyValuePair <string, object> >)propertyBag1).Aggregate <KeyValuePair <string, object>, string>(seed, (Func <string, KeyValuePair <string, object>, string>)((current, item) => current + this.FormatPropertyData("SourceInstance Property: ", item.Key, item.Value)));
                            }
                            AuditingNotificationSubscriber.log.ErrorFormat("Auditing translation failed. IndicationType: {0}, {1} PluginName: {2}, subscriptionId: {3} Exception: {4}", new object[5]
                            {
                                (object)notification.get_IndicationType(),
                                (object)seed,
                                (object)((IAuditing)current1).get_PluginName(),
                                (object)notification.get_SubscriptionId(),
                                (object)ex
                            });
                        }
                    }
                }
            }
            else if (AuditingNotificationSubscriber.log.get_IsDebugEnabled())
            {
                AuditingNotificationSubscriber.log.DebugFormat("No auditing instances has been registered yet for subscriptionId '{0}'", (object)notification.get_SubscriptionId().ToString());
            }
            return(Task.CompletedTask);
        }
示例#4
0
        private void Subscribe(object state)
        {
            AuditingNotificationSubscriber.log.Debug((object)"Subscribing auditing indications..");
            try
            {
                AuditingNotificationSubscriber.DeleteOldSubscriptions();
            }
            catch (Exception ex)
            {
                AuditingNotificationSubscriber.log.Warn((object)"Exception deleting old subscriptions:", ex);
            }
            HashSet <string> stringSet = new HashSet <string>((IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase);

            using (IEnumerator <IAuditing2> enumerator = this.auditingPlugins.AuditingInstances.GetEnumerator())
            {
                while (((IEnumerator)enumerator).MoveNext())
                {
                    IAuditing2 current = enumerator.Current;
                    if (current is IAuditingMultiSubscription multiSubscription)
                    {
                        foreach (string subscriptionQuery in multiSubscription.GetSubscriptionQueries())
                        {
                            stringSet.Add(subscriptionQuery);
                        }
                    }
                    else
                    {
                        stringSet.Add(current.GetSubscriptionQuery());
                    }
                }
            }
            foreach (string query in stringSet)
            {
                try
                {
                    SubscriptionId subscriptionId;
                    ((SubscriptionId) ref subscriptionId).\u002Ector("Core", typeof(AuditingNotificationSubscriber).FullName + "." + this.GetHashFromQuery(query), (Scope)0);
                    SubscriberConfiguration subscriberConfiguration1 = new SubscriberConfiguration();
                    subscriberConfiguration1.set_SubscriptionQuery(query);
                    SubscriberConfiguration subscriberConfiguration2 = subscriberConfiguration1;
                    AuditingNotificationSubscriber.log.DebugFormat("Subscribing '{0}'", (object)query);
                    SubscriptionId id     = this.subscriptionManager.Subscribe(subscriptionId, (ISubscriber)this, subscriberConfiguration2).get_Id();
                    string         query1 = query;
                    this.subscriptionIdToAuditingInstances.TryAdd(id.ToString(), ((IEnumerable <IAuditing2>) this.auditingPlugins.AuditingInstances).Where <IAuditing2>((Func <IAuditing2, bool>)(instance =>
                    {
                        try
                        {
                            return(string.Compare(query1, instance.GetSubscriptionQuery(), StringComparison.OrdinalIgnoreCase) == 0);
                        }
                        catch (NotImplementedException ex)
                        {
                            return(instance is IAuditingMultiSubscription multiSubscription && ((IEnumerable <string>)multiSubscription.GetSubscriptionQueries()).Contains <string>(query1));
                        }
                    })));
                    AuditingNotificationSubscriber.log.DebugFormat("Subscribed '{0}' with {1} number of auditing instances.", (object)query, (object)this.subscriptionIdToAuditingInstances[id.ToString()].Count <IAuditing2>());
                }
                catch (Exception ex)
                {
                    AuditingNotificationSubscriber.log.ErrorFormat("Unable to subscribe auditing instance with query '{0}'. {1}", (object)query, (object)ex);
                }
            }
            AuditingNotificationSubscriber.log.InfoFormat("Auditing pub/sub subscription succeeded.", Array.Empty <object>());
            Scheduler.get_Instance().Remove("AuditingIndications");
        }
示例#5
0
        // Token: 0x06000044 RID: 68 RVA: 0x00003FA4 File Offset: 0x000021A4
        private void LoadPlugins()
        {
            AuditingPluginManager.log.Trace("LoadPlugins");
            string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;

            AuditingPluginManager.log.DebugFormat("PluginDir:'{0}'", baseDirectory);
            if (!Directory.Exists(baseDirectory))
            {
                AuditingPluginManager.log.Warn(string.Format("Directory '{0}' was not found.", baseDirectory));
                return;
            }
            string[] array = null;
            try
            {
                if (AuditingPluginManager.log.IsVerboseEnabled)
                {
                    AuditingPluginManager.log.Verbose("Searching files...");
                }
                array = Directory.GetFiles(baseDirectory, "*Auditing.dll", SearchOption.AllDirectories);
                if (AuditingPluginManager.log.IsVerboseEnabled)
                {
                    AuditingPluginManager.log.Verbose("Searching files done.");
                }
            }
            catch (Exception ex)
            {
                AuditingPluginManager.log.ErrorFormat("GetFiles failed on '{0}'. Exception: {1}", baseDirectory, ex);
            }
            if (array == null)
            {
                return;
            }
            foreach (string text in array)
            {
                try
                {
                    AuditingPluginManager.log.DebugFormat("Loading library '{0}'.", text);
                    AssemblyName assemblyName = null;
                    Assembly     assembly     = null;
                    try
                    {
                        assemblyName = AssemblyName.GetAssemblyName(text);
                        assembly     = Assembly.Load(assemblyName);
                    }
                    catch (FileLoadException ex2)
                    {
                        AuditingPluginManager.log.WarnFormat("Unable to Load '{0}' - trying LoadFrom. {1}", assemblyName ?? text, ex2);
                    }
                    if (assembly == null)
                    {
                        assembly = Assembly.LoadFrom(text);
                    }
                    foreach (Type type in this.FindDerivedTypes(assembly))
                    {
                        IAuditing2 auditing = (IAuditing2)assembly.CreateInstance(type.FullName);
                        if (auditing != null)
                        {
                            AuditingPluginManager.log.InfoFormat("Instance of {0} created.", type);
                            this.auditingInstances.Add(auditing);
                        }
                        else
                        {
                            AuditingPluginManager.log.ErrorFormat("Instance of {0} coudn't be created. Library: '{1}'", type.FullName, text);
                        }
                    }
                }
                catch (Exception ex3)
                {
                    AuditingPluginManager.log.ErrorFormat("Unable to Load library '{0}'. Exception: {1}", text, ex3);
                }
            }
        }
        private void LoadPlugins()
        {
            AuditingPluginManager.log.Trace((object)nameof(LoadPlugins));
            string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;

            AuditingPluginManager.log.DebugFormat("PluginDir:'{0}'", (object)baseDirectory);
            if (Directory.Exists(baseDirectory))
            {
                string[] strArray = (string[])null;
                try
                {
                    if (AuditingPluginManager.log.get_IsVerboseEnabled())
                    {
                        AuditingPluginManager.log.Verbose((object)"Searching files...");
                    }
                    strArray = Directory.GetFiles(baseDirectory, "*Auditing.dll", SearchOption.AllDirectories);
                    if (AuditingPluginManager.log.get_IsVerboseEnabled())
                    {
                        AuditingPluginManager.log.Verbose((object)"Searching files done.");
                    }
                }
                catch (Exception ex)
                {
                    AuditingPluginManager.log.ErrorFormat("GetFiles failed on '{0}'. Exception: {1}", (object)baseDirectory, (object)ex);
                }
                if (strArray == null)
                {
                    return;
                }
                foreach (string assemblyFile in strArray)
                {
                    try
                    {
                        AuditingPluginManager.log.DebugFormat("Loading library '{0}'.", (object)assemblyFile);
                        AssemblyName assemblyRef = (AssemblyName)null;
                        Assembly     assembly    = (Assembly)null;
                        try
                        {
                            assemblyRef = AssemblyName.GetAssemblyName(assemblyFile);
                            assembly    = Assembly.Load(assemblyRef);
                        }
                        catch (FileLoadException ex)
                        {
                            AuditingPluginManager.log.WarnFormat("Unable to Load '{0}' - trying LoadFrom. {1}", (object)assemblyRef ?? (object)assemblyFile, (object)ex);
                        }
                        if (assembly == (Assembly)null)
                        {
                            assembly = Assembly.LoadFrom(assemblyFile);
                        }
                        foreach (Type derivedType in this.FindDerivedTypes(assembly))
                        {
                            IAuditing2 instance = (IAuditing2)assembly.CreateInstance(derivedType.FullName);
                            if (instance != null)
                            {
                                AuditingPluginManager.log.InfoFormat("Instance of {0} created.", (object)derivedType);
                                this.auditingInstances.Add(instance);
                            }
                            else
                            {
                                AuditingPluginManager.log.ErrorFormat("Instance of {0} coudn't be created. Library: '{1}'", (object)derivedType.FullName, (object)assemblyFile);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        AuditingPluginManager.log.ErrorFormat("Unable to Load library '{0}'. Exception: {1}", (object)assemblyFile, (object)ex);
                    }
                }
            }
            else
            {
                AuditingPluginManager.log.Warn((object)string.Format("Directory '{0}' was not found.", (object)baseDirectory));
            }
        }