Esempio n. 1
0
        public static MonitoredItems.MonitoredDevice SelectServerToMonitor(MonitoredItems.MonitoredDevicesCollection collection)
        {
            DateTime tNow = DateTime.Now;

            MonitoredItems.MonitoredDevice SelectedServer = null;
            VSFramework.RegistryHandler    myRegistry     = new VSFramework.RegistryHandler();
            if (collection.Count == 0)
            {
                return(null);
            }
            //Look for ScanNow's
            try
            {
                //LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " >>> Looking for " + collection.get_Item(0).ServerType, LogUtils.LogLevel.Verbose);
            }
            catch (Exception ex)
            {
                //LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " >>> Exception getting server type. Exception: " + ex.Message.ToString(), LogUtils.LogLevel.Verbose);
            }
            try
            {
                if (String.IsNullOrWhiteSpace(connectionString))
                {
                    connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["VitalSignsMongo"].ToString();
                }
                VSNext.Mongo.Repository.Repository <VSNext.Mongo.Entities.Server>      serverRepository      = new VSNext.Mongo.Repository.Repository <VSNext.Mongo.Entities.Server>(connectionString);
                VSNext.Mongo.Repository.Repository <VSNext.Mongo.Entities.ServerOther> serverOtherRepository = new VSNext.Mongo.Repository.Repository <VSNext.Mongo.Entities.ServerOther>(connectionString);
                List <VSNext.Mongo.Entities.Server> list = new List <Server>();
                if (Enums.Utility.getEnumFromDescription <Enums.ServerType>(collection.get_Item(0).ServerType).getServerOther())
                {
                    FilterDefinition <VSNext.Mongo.Entities.ServerOther> filterDef = serverOtherRepository.Filter.Eq(x => x.ScanNow, true) &
                                                                                     serverOtherRepository.Filter.Eq(x => x.Type, collection.get_Item(0).ServerType);
                    list = serverOtherRepository.Find(filterDef).ToList().Select(x => new Server()
                    {
                        Id = x.Id, DeviceType = x.Type
                    }).ToList();
                }
                else
                {
                    FilterDefinition <VSNext.Mongo.Entities.Server> filterDef = serverRepository.Filter.Eq(x => x.ScanNow, true) &
                                                                                serverRepository.Filter.Eq(x => x.DeviceType, collection.get_Item(0).ServerType);
                    list = serverRepository.Find(filterDef).ToList();
                }
                if (list.Count > 0)
                {
                    for (int i = 0; i < list.Count(); i++)
                    {
                        SelectedServer = collection.FindByObjectId(list[i].Id);
                        if (SelectedServer != null)
                        {
                            break;
                        }
                    }
                    if (SelectedServer != null)
                    {
                        if (Enums.Utility.getEnumFromDescription <Enums.ServerType>(collection.get_Item(0).ServerType).getServerOther())
                        {
                            FilterDefinition <VSNext.Mongo.Entities.ServerOther> filterDef = serverOtherRepository.Filter.Eq(x => x.Id, SelectedServer.ServerObjectID);
                            UpdateDefinition <VSNext.Mongo.Entities.ServerOther> updateDef = serverOtherRepository.Updater.Set(x => x.ScanNow, false);
                            serverOtherRepository.Update(filterDef, updateDef);
                        }
                        else
                        {
                            FilterDefinition <VSNext.Mongo.Entities.Server> filterDef = serverRepository.Filter.Eq(x => x.Id, SelectedServer.ServerObjectID);
                            UpdateDefinition <VSNext.Mongo.Entities.Server> updateDef = serverRepository.Updater.Set(x => x.ScanNow, false);
                            serverRepository.Update(filterDef, updateDef);
                        }

                        LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " >>> Selecting " + SelectedServer.Name + " because the status is " + SelectedServer.Status, LogUtils.LogLevel.Verbose);
                        return(SelectedServer);
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " Exception finding a ScanNow server.  Exception: " + ex.Message.ToString());
            }

            //Scans not scanned servers
            try
            {
                foreach (MonitoredItems.MonitoredDevice server in collection)
                {
                    if (server.Status == "Not Scanned" && server.Enabled == true && server.IsBeingScanned == false)
                    {
                        LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " >>> Selecting " + server.Name + " because the status is " + server.Status, LogUtils.LogLevel.Verbose);
                        return(server);
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " Exception finding not scanned servers.  Exception: " + ex.Message.ToString());
            }

            //Scans not responding server
            try
            {
                foreach (MonitoredItems.MonitoredDevice server in collection)
                {
                    if (server.Status == "Not Responding" && server.Enabled == true && server.IsBeingScanned == false)
                    {
                        if (DateTime.Compare(tNow, server.NextScan) > 0)
                        {
                            LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " >>> Selecting " + server.Name + " because status is " + server.Status + ".  Next scheduled scan is " + server.NextScan.ToShortTimeString());
                            return(server);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " Exception finding a not responding server.  Exception: " + ex.Message.ToString());
            }

            try
            {
                MonitoredItems.MonitoredDevicesCollection ScanCanidates = new MonitoredItems.MonitoredDevicesCollection();
                foreach (MonitoredItems.MonitoredDevice server in collection)
                {
                    if (server.IsBeingScanned == false && server.Enabled == true)
                    {
                        tNow = DateTime.Now;
                        if (DateTime.Compare(tNow, server.NextScan) > 0)
                        {
                            ScanCanidates.Add(server);
                        }
                    }
                }

                if (ScanCanidates.Count == 0)
                {
                    Thread.Sleep(10000);
                    return(null);
                }

                LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " >>> Scan Canidates are: " + String.Join(",", ScanCanidates.Cast <MonitoredItems.MonitoredDevice>().Select(x => x.Name)));
                //Returns the server that is the most overdue
                tNow = DateTime.Now;
                var returnServer = ScanCanidates.Cast <MonitoredItems.MonitoredDevice>().OrderBy(x => x.NextScan).ToList()[0];
                LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " >>> Selecting " + returnServer.Name + " since it is next due to scan at " + returnServer.NextScan.ToString());
                return(returnServer);
            }
            catch (Exception ex)
            {
                LogUtils.WriteDeviceHistoryEntry("All", "SelectServer", tNow.ToString() + " Exception finding a server that is due to be scanned.  Exception: " + ex.Message.ToString());
            }

            Thread.Sleep(10000);
            return(null);
        }
Esempio n. 2
0
        public static void CheckForInsufficentLicenses(Object objServers, string ServerType, string ServerTypeForTypeAndName)
        {
            MonitoredItems.MonitoredDevicesCollection servers = objServers as MonitoredItems.MonitoredDevicesCollection;
            VSFramework.VSAdaptor adapter = new VSFramework.VSAdaptor();
            try
            {
                if (servers.Count > 0)
                {
                    string nodeName = null;
                    if (System.Configuration.ConfigurationManager.AppSettings["VSNodeName"] != null)
                    {
                        nodeName = System.Configuration.ConfigurationManager.AppSettings["VSNodeName"].ToString();
                    }

                    for (int i = 0; i < servers.Count; i++)
                    {
                        MonitoredItems.MonitoredDevice server = servers.get_Item(i);

                        if (server.CurrentNode != nodeName)
                        {
                            string status  = "";
                            string details = "";
                            if (server.CurrentNode == VSNext.Mongo.Entities.Enums.NodeStatus.InsufficientLicenses.ToDescription())
                            {
                                status  = "Insufficient Licenses";
                                details = "There are not enough licenses to scan this server.";
                            }
                            else if (server.CurrentNode == VSNext.Mongo.Entities.Enums.NodeStatus.MasterServiceStopped.ToDescription())
                            {
                                status  = "Master Service is stopped";
                                details = "Master Service stopped running. Could not assign the server to a Node.";
                            }
                            else if (server.CurrentNode == VSNext.Mongo.Entities.Enums.NodeStatus.Unassigned.ToDescription())
                            {
                                status  = "Unassigned";
                                details = "Current server could not be assigned to a node.";
                            }
                            else if (server.CurrentNode == VSNext.Mongo.Entities.Enums.NodeStatus.Disabled.ToDescription())
                            {
                                //do nothing
                            }
                            else
                            {
                                status  = "Unassigned";
                                details = "Current server was not assigned a node.";
                            }

                            if (status != "")
                            {
                                VSNext.Mongo.Repository.Repository <VSNext.Mongo.Entities.Status> repository = new VSNext.Mongo.Repository.Repository <VSNext.Mongo.Entities.Status>(connectionString);
                                FilterDefinition <VSNext.Mongo.Entities.Status> filterDef = repository.Filter.Where(p => p.DeviceType.Equals(server.ServerType) && p.DeviceName.Equals(server.Name) && p.DeviceId.Equals(server.ServerObjectID));
                                UpdateDefinition <VSNext.Mongo.Entities.Status> updateDef = repository.Updater
                                                                                            .Set(p => p.CurrentStatus, status)
                                                                                            .Set(p => p.Details, details)
                                                                                            .Set(p => p.LastUpdated, DateTime.Now)
                                                                                            .Set(p => p.Description, details)
                                                                                            .Set(p => p.NextScan, DateTime.Now.AddDays(1))
                                                                                            .Set(p => p.StatusCode, "Maintenance")
                                                                                            .Set(p => p.TypeAndName, server.Name + "-" + server.ServerType);
                                repository.Upsert(filterDef, updateDef);
                            }
                            LogUtilities.LogUtils.WriteDeviceHistoryEntry("All", "InsufficentLicensesCheck", DateTime.Now.ToString() + " " + server.Name + " is being removed from the collection due to " + status + "..." + details + ". Server Current Node is " + server.CurrentNode, LogUtils.LogLevel.Verbose);
                            servers.Delete(server.Name);
                        }
                        else
                        {
                            LogUtilities.LogUtils.WriteDeviceHistoryEntry("All", "InsufficentLicensesCheck", DateTime.Now.ToString() + " " + server.Name + " is being NOT removed from the collection.", LogUtils.LogLevel.Verbose);
                        }
                    }

                    //10/3/2016 NS commented out per discussion with Wes - the insufficient licenses system message is being queued
                    //using the QueueSysMessage function elsewhere. The SysMessageForLicenses is outdated and will be removed from the Alertdll
                    //AlertLibrary.Alertdll myAlert = new AlertLibrary.Alertdll();
                    //myAlert.SysMessageForLicenses();
                }
            }
            catch (Exception ex)
            {
            }
        }