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(); }
/// <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(); }