コード例 #1
0
        private bool ProcessResults(
            object plugin,
            SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.InventoryTask task,
            InventoryResultBase result,
            Node node)
        {
            switch (plugin)
            {
            case IBackgroundInventoryPlugin ibackgroundInventoryPlugin:
                return(ibackgroundInventoryPlugin.ProcessResults(result, node));

            case IBackgroundInventoryPlugin2 inventoryPlugin2:
                return(inventoryPlugin2.ProcessResults(result, new BackgroundInventoryObject(node, task.ObjectID, task.ObjectType)));

            default:
                return(false);
            }
        }
コード例 #2
0
        private InventoryResultBase DoInventory(
            object plugin,
            SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.InventoryTask task,
            GlobalSettingsBase globals,
            Credential credentials,
            Node node)
        {
            switch (plugin)
            {
            case IBackgroundInventoryPlugin ibackgroundInventoryPlugin:
                return(ibackgroundInventoryPlugin.DoInventory(globals, credentials, node));

            case IBackgroundInventoryPlugin2 inventoryPlugin2:
                return(inventoryPlugin2.DoInventory(globals, credentials, new BackgroundInventoryObject(node, task.ObjectID, task.ObjectType)));

            default:
                return((InventoryResultBase)null);
            }
        }
コード例 #3
0
 private string GetSettingsForTask(SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.InventoryTask task)
 {
     return(task.InventoryInput != SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.InventoryTask.InventoryInputSource.NodeSettings ? InventorySettingsDAL.GetInventorySettings(task.ObjectSettingID, task.InventorySettingName) : NodeSettingsDAL.GetNodeSettings(task.ObjectSettingID, task.InventorySettingName));
 }
コード例 #4
0
        public void DoInventory(SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.InventoryTask task)
        {
            Stopwatch stopwatch = Stopwatch.StartNew();
            Node      node      = this.GetNode(task.NodeID);

            if (node == null || node.get_PolledStatus() != 1)
            {
                SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Skipping inventorying of Node {0}, status is not UP.", (object)task.NodeID);
            }
            else
            {
                Credential         credentialsForNode = this.GetCredentialsForNode(node);
                GlobalSettingsBase globals            = (GlobalSettingsBase)this.snmpGlobals;
                if (node.get_NodeSubType() == 3)
                {
                    globals = (GlobalSettingsBase)this.wmiGlobals;
                }
                if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsInfoEnabled())
                {
                    SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Starting inventorying of Node {0}, NeedsInventory = '{1}'", (object)task.NodeID, (object)task.Settings);
                }
                string[]      strArray       = task.Settings.Split(':');
                List <string> failedTasks    = new List <string>();
                List <string> completedTasks = new List <string>();
                foreach (string key in strArray)
                {
                    SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Attempting to inventory with plugin '{0}' on Node {1}", (object)key, (object)task.NodeID);
                    if (!this.inventories.ContainsKey(key))
                    {
                        failedTasks.Add(key);
                        if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsErrorEnabled())
                        {
                            SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.ErrorFormat("Unable to inventory '{0}' on Node {1}", (object)key, (object)task.NodeID);
                        }
                    }
                    else
                    {
                        if (this.IsScheduledTaskCanceled())
                        {
                            if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsInfoEnabled())
                            {
                                SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Inventorying of Node {0} was canceled. ElapsedTime = {1}", (object)task.NodeID, (object)stopwatch.ElapsedMilliseconds);
                            }
                            stopwatch.Stop();
                            return;
                        }
                        if (!this.IsValidPlugin(this.inventories[key]))
                        {
                            failedTasks.Add(key);
                            if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsErrorEnabled())
                            {
                                SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.ErrorFormat("No plugins are available to execute Inventory '{0}' on Node {1} returned null result", (object)key, (object)task.NodeID);
                            }
                        }
                        else
                        {
                            InventoryResultBase result = this.DoInventory(this.inventories[key], task, globals, credentialsForNode, node);
                            if (result == null)
                            {
                                failedTasks.Add(key);
                                if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsErrorEnabled())
                                {
                                    SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.ErrorFormat("Inventory '{0}' on Node {1} returned null result", (object)key, (object)task.NodeID);
                                }
                            }
                            else
                            {
                                if (result.get_Outcome() == 1)
                                {
                                    bool flag = false;
                                    try
                                    {
                                        flag = this.ProcessResults(this.inventories[key], task, result, node);
                                    }
                                    catch (Exception ex)
                                    {
                                        SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.Error((object)string.Format("Inventory '{0}' failed to import results for {1}", (object)task, (object)key), ex);
                                    }
                                    if (flag)
                                    {
                                        completedTasks.Add(key);
                                    }
                                    else
                                    {
                                        failedTasks.Add(key);
                                    }
                                }
                                else
                                {
                                    failedTasks.Add(key);
                                    if (result.get_Error() != null)
                                    {
                                        if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsWarnEnabled())
                                        {
                                            SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.WarnFormat("Inventory '{0}' on Node {1} failed with code {2}", (object)key, (object)task, (object)result.get_Error().get_ErrorCode());
                                        }
                                        if (result.get_Error().get_ErrorCode() != 31002U)
                                        {
                                            List <string> list = ((IEnumerable <string>)strArray).Where <string>((Func <string, bool>)(n => !completedTasks.Contains(n) && !failedTasks.Contains(n))).ToList <string>();
                                            if (list.Count > 0)
                                            {
                                                failedTasks.AddRange((IEnumerable <string>)list);
                                                if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsWarnEnabled())
                                                {
                                                    SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.WarnFormat("Skipping inventory for '{0}' on Node {1}", (object)string.Join(":", list.ToArray()), (object)task.NodeID);
                                                    break;
                                                }
                                                break;
                                            }
                                        }
                                    }
                                    else if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsWarnEnabled())
                                    {
                                        SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.WarnFormat("Inventory '{0}' on Node {1} failed on unknown error", (object)key, (object)task.NodeID);
                                    }
                                }
                                SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Inventory with plugin '{0}' on Node {1} is completed", (object)key, (object)task.NodeID);
                            }
                        }
                    }
                }
                string settingsForTask = this.GetSettingsForTask(task);
                if ((string.IsNullOrEmpty(settingsForTask) || !settingsForTask.Equals(task.Settings, StringComparison.OrdinalIgnoreCase)) && SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsInfoEnabled())
                {
                    SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Skipping inventory result processing for {0}, NeedsInventory flag changed. OldValue = '{1}', NewValue = '{2}'.", (object)task, (object)task.Settings, (object)settingsForTask);
                }
                else
                {
                    if (failedTasks.Count == 0)
                    {
                        if (task.InventoryInput == SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.InventoryTask.InventoryInputSource.NodeSettings)
                        {
                            NodeSettingsDAL.DeleteSpecificSettings(task.ObjectSettingID, task.InventorySettingName);
                        }
                        else
                        {
                            InventorySettingsDAL.DeleteSpecificSettings(task.ObjectSettingID, task.InventorySettingName);
                        }
                        if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsInfoEnabled())
                        {
                            SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Inventorying of {0} completed in {1}ms.", (object)task, (object)stopwatch.ElapsedMilliseconds);
                        }
                    }
                    else if (failedTasks.Count < strArray.Length)
                    {
                        string str = string.Join(":", failedTasks.ToArray());
                        if (task.InventoryInput == SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.InventoryTask.InventoryInputSource.NodeSettings)
                        {
                            NodeSettingsDAL.UpdateSettingValue(task.ObjectSettingID, task.InventorySettingName, (object)str);
                        }
                        else
                        {
                            InventorySettingsDAL.UpdateSettingValue(task.ObjectSettingID, task.InventorySettingName, (object)str);
                        }
                        if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsInfoEnabled())
                        {
                            SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Inventorying of {0} partially completed in {1}ms. NeedsInventory updated to '{2}'", (object)task, (object)stopwatch.ElapsedMilliseconds, (object)str);
                        }
                    }
                    else if (SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.get_IsInfoEnabled())
                    {
                        SolarWinds.Orion.Core.BusinessLayer.BackgroundInventory.BackgroundInventory.log.InfoFormat("Inventorying of {0} failed. Elapsed time {1}ms.", (object)task, (object)stopwatch.ElapsedMilliseconds);
                    }
                    stopwatch.Stop();
                }
            }
        }