private void Initialize()
        {
            ErrorMessage = string.Empty;

            // Set up the loggers
            const string logFileNameBase = @"Logs\MyEMSLFileCacher";

            LogTools.CreateFileLogger(logFileNameBase, LogLevel);

            var hostName = System.Net.Dns.GetHostName();

            var dbLoggerConnectionString = DbToolsFactory.AddApplicationNameToConnectionString(mLogDBConnectionString, "MyEMSLMTSFileCacher");

            LogTools.CreateDbLogger(dbLoggerConnectionString, "MyEMSLFileCacher: " + hostName);

            // Make initial log entry
            var msg = "=== Started MyEMSL MTS File Cacher v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version + " === ";

            LogTools.LogMessage(msg);

            var connectionStringToUse = DbToolsFactory.AddApplicationNameToConnectionString(MTSConnectionString, "MyEMSLMTSFileCacher");

            mDbTools = DbToolsFactory.GetDBTools(connectionStringToUse);
            RegisterEvents(mDbTools);
        }
Beispiel #2
0
        /// <summary>
        /// Contact DMS to get the bionet host names
        /// </summary>
        /// <returns>
        /// Dictionary where keys are host names and values are true if the host is active and should be monitored,
        /// or false if it should not be monitored
        /// </returns>
        private static Dictionary <string, bool> GetBionetHosts(bool onlyActiveHosts = false)
        {
            try
            {
                // Keys are host names, values are True if the host has Active=1 in T_Bionet_Hosts, otherwise false
                var hostsTrackedByDMS = new Dictionary <string, bool>(StringComparer.OrdinalIgnoreCase);

                ShowTimestampMessage("Retrieving names of Bionet computers");

                var connectionStringToUse = DbToolsFactory.AddApplicationNameToConnectionString(DMS_CONNECTION_STRING, "BionetPingTool");

                var dbTools = DbToolsFactory.GetDBTools(connectionStringToUse);

                const string sqlQuery = "SELECT Host, IP, Active " +
                                        "FROM V_Bionet_Hosts_Export " +
                                        "ORDER BY Host";

                var success = dbTools.GetQueryResults(sqlQuery, out var results);
                if (!success)
                {
                    ShowErrorMessage("Error obtaining bionet hosts from V_Bionet_Hosts_Export");
                    return(hostsTrackedByDMS);
                }

                foreach (var item in results)
                {
                    var hostName = item[0];
                    if (!int.TryParse(item[2], out var isActive))
                    {
                        ShowWarning(string.Format("Unable to convert {0} to an integer", item[2]));
                        isActive = 1;
                    }

                    var hostIsActive = (isActive > 0);
                    if (onlyActiveHosts && !hostIsActive)
                    {
                        continue;
                    }

                    if (hostsTrackedByDMS.ContainsKey(hostName))
                    {
                        ShowWarning("Skipping duplicate host " + hostName, 0);
                    }
                    else
                    {
                        hostsTrackedByDMS.Add(hostName, hostIsActive);
                    }
                }

                return(hostsTrackedByDMS);
            }
            catch (Exception ex)
            {
                ShowErrorMessage("Error in GetBionetHosts", ex);
                return(new Dictionary <string, bool>());
            }
        }
        /// <summary>
        /// Initializes the manager
        /// </summary>
        /// <returns>TRUE for success, FALSE for failure</returns>
        public bool InitMgr()
        {
            // Define the default logging info
            // This will get updated below
            LogTools.CreateFileLogger(DEFAULT_BASE_LOGFILE_NAME, BaseLogger.LogLevels.DEBUG);

            // Create a database logger connected to the Manager Control DB
            // Once the initial parameters have been successfully read,
            // we remove this logger than make a new one using the connection string read from the Manager Control DB
            var defaultDmsConnectionString = Properties.Settings.Default.MgrCnfgDbConnectStr;

            var hostName        = System.Net.Dns.GetHostName();
            var applicationName = "PkgFolderCreateManager_" + hostName;
            var defaultDbLoggerConnectionString = DbToolsFactory.AddApplicationNameToConnectionString(defaultDmsConnectionString, applicationName);

            LogTools.CreateDbLogger(defaultDbLoggerConnectionString, "FolderCreate: " + hostName);

            // Get the manager settings
            try
            {
                var localSettings = GetLocalManagerSettings();

                mMgrSettings = new MgrSettingsDB {
                    TraceMode = false
                };
                RegisterEvents(mMgrSettings);
                mMgrSettings.CriticalErrorEvent += ErrorEventHandler;

                var success = mMgrSettings.LoadSettings(localSettings, true);
                if (!success)
                {
                    if (string.Equals(mMgrSettings.ErrMsg, MgrSettings.DEACTIVATED_LOCALLY))
                    {
                        throw new ApplicationException(MgrSettings.DEACTIVATED_LOCALLY);
                    }

                    throw new ApplicationException("Unable to initialize manager settings class: " + mMgrSettings.ErrMsg);
                }
            }
            catch
            {
                // Failures are logged by clsMgrSettings to local emergency log file
                return(false);
            }

            // Setup the loggers
            var logFileNameBase = mMgrSettings.GetParam("LogFilename", "FolderCreate");

            BaseLogger.LogLevels logLevel;
            if (int.TryParse(mMgrSettings.GetParam("DebugLevel"), out var debugLevel))
            {
                logLevel = (BaseLogger.LogLevels)debugLevel;
            }
            else
            {
                logLevel = BaseLogger.LogLevels.INFO;
            }

            LogTools.CreateFileLogger(logFileNameBase, logLevel);

            // Typically:
            // Data Source=gigasax;Initial Catalog=DMS_Pipeline;Integrated Security=SSPI;
            var logCnStr   = mMgrSettings.GetParam("ConnectionString");
            var moduleName = mMgrSettings.GetParam("ModuleName");

            var dbLoggerConnectionString = DbToolsFactory.AddApplicationNameToConnectionString(logCnStr, mMgrSettings.ManagerName);

            LogTools.CreateDbLogger(dbLoggerConnectionString, moduleName);

            LogTools.MessageLogged += MessageLoggedHandler;

            // Make the initial log entry
            var appVersion = Assembly.GetExecutingAssembly().GetName().Version;
            var msg        = "=== Started Package Folder Creation Manager V" + appVersion + " === ";

            LogTools.LogMessage(msg);

            // Setup the message queue
            mMsgHandler = new clsMessageHandler
            {
                BrokerUri          = mMgrSettings.GetParam("MessageQueueURI"),
                CommandQueueName   = mMgrSettings.GetParam("ControlQueueName"),
                BroadcastTopicName = mMgrSettings.GetParam("BroadcastQueueTopic"),
                StatusTopicName    = mMgrSettings.GetParam("MessageQueueTopicMgrStatus"),
                MgrSettings        = mMgrSettings
            };

            if (!mMsgHandler.Init())
            {
                // Most error messages provided by .Init method, but debug message is here for program tracking
                LogDebug("Message handler init error");
                return(false);
            }

            LogDebug("Message handler initialized");

            // Connect message handler events
            mMsgHandler.CommandReceived   += OnMsgHandler_CommandReceived;
            mMsgHandler.BroadcastReceived += OnMsgHandler_BroadcastReceived;

            // Setup the status file class
            var appPath = PRISM.FileProcessor.ProcessFilesOrDirectoriesBase.GetAppPath();
            var fInfo   = new FileInfo(appPath);

            string statusFileNameLoc;

            if (fInfo.DirectoryName == null)
            {
                statusFileNameLoc = "Status.xml";
            }
            else
            {
                statusFileNameLoc = Path.Combine(fInfo.DirectoryName, "Status.xml");
            }

            mStatusFile = new clsStatusFile(statusFileNameLoc, mMsgHandler)
            {
                LogToMsgQueue = mMgrSettings.GetParam("LogStatusToMessageQueue", false),
                MgrName       = mMgrSettings.ManagerName
            };

            RegisterEvents(mStatusFile);

            mStatusFile.InitStatusFromFile();

            SetStartupStatus();
            mStatusFile.WriteStatusFile();

            LogDebug("Status file init complete");

            // Register the listeners for the message handler
            mMsgHandler.RegisterListeners();

            // Everything worked
            return(true);
        }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="connectionString"></param>
        public DBAccess(string connectionString)
        {
            const int DB_TIMEOUT_SECONDS = 90;

            mDBTools = DbToolsFactory.GetDBTools(connectionString, DB_TIMEOUT_SECONDS);
        }