Example #1
0
        private void ServiceHelper_ServiceStarted(object sender, EventArgs e)
        {
            m_serviceHelper.AddScheduledProcess(ServiceHeartbeatHandler, "ServiceHeartbeat", "* * * * *");
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("ReloadConfig", "Reloads configuration from configuration file", ReloadConfigRequestHandler));
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("ForceEvent", "Forces an event to be processed by the file watcher", ForceEventRequestHandler));
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("MsgServiceMonitors", "Sends a message to all service monitors", MsgServiceMonitorsRequestHandler));

            m_serviceMonitors = new AdapterLoader <IServiceMonitor>();
            m_serviceMonitors.AdapterCreated  += ServiceMonitors_AdapterCreated;
            m_serviceMonitors.AdapterLoaded   += ServiceMonitors_AdapterLoaded;
            m_serviceMonitors.AdapterUnloaded += ServiceMonitors_AdapterUnloaded;
            m_serviceMonitors.Initialize();

            m_configFile  = Path.Combine(Application.StartupPath, "Filewatcher.config");
            m_fileWatcher = new XDAFileWatcher();
            m_fileWatcher.ReadConfigFile(m_configFile);
            m_fileWatcher.StartWatching();
        }
        private void ServiceHelper_ServiceStarted(object sender, EventArgs e)
        {
            // Define a line of asterisks for emphasis
            string stars = new string('*', 79);

            // Get current process memory usage
            long processMemory = Common.GetProcessMemory();

            // Log startup information
            m_serviceHelper.UpdateStatus(
                UpdateType.Information,
                "{14}{14}{0}{14}{14}" +
                "{1} Initializing{14}{14}" +
                "     System Time: {2} UTC{14}{14}" +
                "    Current Path: {3}{14}{14}" +
                "    Machine Name: {4}{14}{14}" +
                "      OS Version: {5}{14}{14}" +
                "    Product Name: {6}{14}{14}" +
                "  Working Memory: {7}{14}{14}" +
                "  Execution Mode: {8}-bit{14}{14}" +
                "      Processors: {9}{14}{14}" +
                "  GC Server Mode: {10}{14}{14}" +
                " GC Latency Mode: {11}{14}{14}" +
                " Process Account: {12}\\{13}{14}{14}" +
                "{0}{14}",
                stars,
                ServiceName,
                DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff"),
                FilePath.TrimFileName(FilePath.RemovePathSuffix(FilePath.GetAbsolutePath("")), 61),
                Environment.MachineName,
                Environment.OSVersion.VersionString,
                Common.GetOSProductName(),
                processMemory > 0 ? SI2.ToScaledString(processMemory, 4, "B", SI2.IECSymbols) : "Undetermined",
                IntPtr.Size * 8,
                Environment.ProcessorCount,
                GCSettings.IsServerGC,
                GCSettings.LatencyMode,
                Environment.UserDomainName,
                Environment.UserName,
                Environment.NewLine);

            // Add run-time log as a service component
            m_serviceHelper.ServiceComponents.Add(m_runTimeLog);

            // Define scheduled service processes
            m_serviceHelper.AddScheduledProcess(ServiceHeartbeatHandler, "ServiceHeartbeat", "* * * * *");

            // Define remote client service command requests (i.e., console commands)
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("Restart", "Attempts to restart the host service", RestartServiceHandler));
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("Initialize", "Attempts to re-initialize algorithm processing framework.", ReinitializeAlgorithmHandler, new[] { "Reinitialize" }));
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("Status", "Gets current algorithm processing framework status.", FrameworkStatusHandler, new[] { "list", "ls" }));
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("LogEvent", "Logs remote event log entries.", LogEventRequestHandler, false));

            if (m_allowServiceMonitors)
            {
                // Establish plug-in service monitoring architecture - external implementations of IServiceMonitor will be auto-loaded
                m_serviceMonitors = new AdapterLoader <IServiceMonitor>();
                m_serviceMonitors.AdapterCreated  += ServiceMonitors_AdapterCreated;
                m_serviceMonitors.AdapterLoaded   += ServiceMonitors_AdapterLoaded;
                m_serviceMonitors.AdapterUnloaded += ServiceMonitors_AdapterUnloaded;
                m_serviceMonitors.Initialize();

                // Add service monitoring command
                m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("NotifyMonitors", "Sends a message to all service monitors", NotifyMonitorsRequestHandler));
            }

            // Start algorithm processing framework
            StartAlgorithmProcessing();

            // If any settings have been added to configuration file, we go ahead and save them now
            m_serviceHelper.SaveSettings(true);
            ConfigurationFile.Current.Save();
        }
Example #3
0
        /// <summary>
        /// Starts the fault location engine.
        /// </summary>
        public void Start()
        {
            // Make sure default service settings exist
            ConfigurationFile configFile = ConfigurationFile.Current;

            // System settings
            // TODO: Add description to system settings
            CategorizedSettingsElementCollection systemSettings = configFile.Settings["systemSettings"];

            systemSettings.Add("DeviceDefinitionsFile", "DeviceDefinitions.xml", "");
            systemSettings.Add("ProcessDelay", "15", "");
            systemSettings.Add("DropFolder", "Drop", "");
            systemSettings.Add("LengthUnits", "Miles", "");
            systemSettings.Add("DebugLevel", "1", "");
            systemSettings.Add("DebugFolder", "Debug", "");

            // Retrieve file paths as defined in the config file
            m_deviceDefinitionsFile = FilePath.GetAbsolutePath(systemSettings["DeviceDefinitionsFile"].Value);
            m_processDelay          = systemSettings["ProcessDelay"].ValueAs(m_processDelay);
            m_dropFolder            = FilePath.AddPathSuffix(FilePath.GetAbsolutePath(systemSettings["DropFolder"].Value));
            m_lengthUnits           = systemSettings["LengthUnits"].Value;
            m_debugLevel            = systemSettings["DebugLevel"].ValueAs(m_debugLevel);
            m_debugFolder           = FilePath.AddPathSuffix(FilePath.GetAbsolutePath(systemSettings["DebugFolder"].Value));

            // Load the fault results writer defined in systemSettings
            using (AdapterLoader <IFaultResultsWriter> resultsWriters = m_resultsWriters)
            {
                m_resultsWriters = new AdapterLoader <IFaultResultsWriter>();
                m_resultsWriters.AdapterCreated  += (sender, args) => args.Argument.PersistSettings = true;
                m_resultsWriters.AdapterLoaded   += (sender, args) => OnStatusMessage("{0} has been loaded", args.Argument.Name);
                m_resultsWriters.AdapterUnloaded += (sender, args) => OnStatusMessage("{0} has been unloaded", args.Argument.Name);
                m_resultsWriters.Initialize();
            }

            try
            {
                // Make sure file path directories exist
                if (!Directory.Exists(m_dropFolder))
                {
                    Directory.CreateDirectory(m_dropFolder);
                }

                if (m_debugLevel > 0 && !Directory.Exists(m_debugFolder))
                {
                    Directory.CreateDirectory(m_debugFolder);
                }
            }
            catch (Exception ex)
            {
                OnProcessException(new InvalidOperationException(string.Format("Failed to create directory due to exception: {0}", ex.Message), ex));
            }

            // Setup new simple file monitor - we do this since the .NET 4.0 FileWatcher has a bad memory leak :-(
            if ((object)m_fileMonitor == null)
            {
                m_fileMonitor           = new System.Timers.Timer();
                m_fileMonitor.Interval  = 1000;
                m_fileMonitor.AutoReset = false;
                m_fileMonitor.Elapsed  += FileMonitor_Elapsed;
            }

            // Start watching for files
            m_fileMonitor.Start();
        }
        private void ServiceHelper_ServiceStarted(object sender, EventArgs e)
        {
            m_serviceHelper.AddScheduledProcess(ServiceHeartbeatHandler, "ServiceHeartbeat", "* * * * *");
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("ReloadConfig", "Reloads configuration from configuration file", ReloadConfigRequestHandler));
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("ForceEvent", "Forces an event to be processed by the file watcher", ForceEventRequestHandler));
            m_serviceHelper.ClientRequestHandlers.Add(new ClientRequestHandler("MsgServiceMonitors", "Sends a message to all service monitors", MsgServiceMonitorsRequestHandler));

            m_serviceMonitors = new AdapterLoader<IServiceMonitor>();
            m_serviceMonitors.AdapterCreated += ServiceMonitors_AdapterCreated;
            m_serviceMonitors.AdapterLoaded += ServiceMonitors_AdapterLoaded;
            m_serviceMonitors.AdapterUnloaded += ServiceMonitors_AdapterUnloaded;
            m_serviceMonitors.Initialize();

            m_configFile = Path.Combine(Application.StartupPath, "Filewatcher.config");
            m_fileWatcher = new XDAFileWatcher();
            m_fileWatcher.ReadConfigFile(m_configFile);
            m_fileWatcher.StartWatching();
        }