History

GSF.TimeSeries: Added support to TSF for use of a console based hosted deployment for easier use on Mono.

ritchiecarroll committed 12 years ago

Commit 36f1b791 parent de759057 files · +391 −65Browse files

Showing the changes to Source/Libraries/GSF.ServiceProcess (1 of 7 files). Show all

Unified · Split

Source/Libraries/GSF.ServiceProcess/ServiceHelper.cs+88−27
@@ -322,6 +322,27 @@ namespace GSF.ServiceProcess · 321 unmodified lines
322 Description("Occurs when the state of a defined ServiceProcess changes.")]322 Description("Occurs when the state of a defined ServiceProcess changes.")]
323 public event EventHandler<EventArgs<string, ServiceProcessState>> ProcessStateChanged;323 public event EventHandler<EventArgs<string, ServiceProcessState>> ProcessStateChanged;
324 324
325 /// <summary>
326 /// Provides notification of when status messages were sent to consumer(s).
327 /// </summary>
328 /// <remarks>
329 /// <see cref="EventArgs{T1,T2}.Argument1"/> is the status message sent to consumer(s).<br/>
330 /// <see cref="EventArgs{T1,T2}.Argument2"/> is the message <see cref="UpdateType"/>.
331 /// </remarks>
332 [Category("Notification"),
333 Description("Occurs when there are status messages sent to consumer(s).")]
334 public event EventHandler<EventArgs<string, UpdateType>> UpdatedStatus;
335
336 /// <summary>
337 /// Provides notification of when there is an exception logged.
338 /// </summary>
339 /// <remarks>
340 /// <see cref="EventArgs{T}.Argument"/> is the exception that was logged.
341 /// </remarks>
342 [Category("Notification"),
343 Description("Occurs when there is an exception logged.")]
344 public event EventHandler<EventArgs<Exception>> LoggedException;
345
325 // Fields346 // Fields
326 private bool m_logStatusUpdates;347 private bool m_logStatusUpdates;
327 private int m_maxStatusUpdatesLength;348 private int m_maxStatusUpdatesLength;
@@ -1175,7 +1196,7 @@ namespace GSF.ServiceProcess · 847 unmodified lines
1175 catch (UnauthorizedAccessException ex)1196 catch (UnauthorizedAccessException ex)
1176 {1197 {
1177 string message = string.Format("Unable to start health monitor due to exception: {0}", ex.Message);1198 string message = string.Format("Unable to start health monitor due to exception: {0}", ex.Message);
1178 m_errorLogger.Log(new InvalidOperationException(message, ex));1199 LogException(new InvalidOperationException(message, ex));
1179 UpdateStatus(UpdateType.Warning, "{0} Is the service account a member of the \"Performance Log Users\" group?", message);1200 UpdateStatus(UpdateType.Warning, "{0} Is the service account a member of the \"Performance Log Users\" group?", message);
1180 }1201 }
1181 }1202 }
@@ -1318,7 +1339,7 @@ namespace GSF.ServiceProcess · 136 unmodified lines
1318 catch (Exception ex)1339 catch (Exception ex)
1319 {1340 {
1320 // Log the exception.1341 // Log the exception.
1321 m_errorLogger.Log(ex);1342 LogException(ex);
1322 }1343 }
1323 }1344 }
1324 1345
@@ -1359,6 +1380,8 @@ namespace GSF.ServiceProcess · 34 unmodified lines
1359 1380
1360 // Send response to service1381 // Send response to service
1361 SendResponse(requestInfo.Sender.ClientID, response);1382 SendResponse(requestInfo.Sender.ClientID, response);
1383
1384 OnUpdatedStatus(response.Message, success ? UpdateType.Information : UpdateType.Alarm);
1362 }1385 }
1363 catch (Exception ex)1386 catch (Exception ex)
1364 {1387 {
@@ -1609,6 +1632,18 @@ namespace GSF.ServiceProcess · 244 unmodified lines
1609 }1632 }
1610 }1633 }
1611 1634
1635 /// <summary>
1636 /// Log exception to <see cref="ErrorLogger"/>.
1637 /// </summary>
1638 /// <param name="ex">Exception to log.</param>
1639 public void LogException(Exception ex)
1640 {
1641 if ((object)m_errorLogger != null)
1642 m_errorLogger.Log(ex);
1643
1644 OnLoggedException(ex);
1645 }
1646
1612 /// <summary>1647 /// <summary>
1613 /// Raises the <see cref="ServiceStarting"/> event.1648 /// Raises the <see cref="ServiceStarting"/> event.
1614 /// </summary>1649 /// </summary>
@@ -1741,6 +1776,30 @@ namespace GSF.ServiceProcess · 126 unmodified lines
1741 SendProcessStateChangedResponse(processName, processState);1776 SendProcessStateChangedResponse(processName, processState);
1742 }1777 }
1743 1778
1779 /// <summary>
1780 /// Raises the <see cref="UpdatedStatus"/> event with the updated status message.
1781 /// </summary>
1782 /// <param name="status">Updated status message.</param>
1783 /// <param name="type"><see cref="UpdateType"/> of status message.</param>
1784 /// <remarks>
1785 /// This overload combines string.Format and SendStatusMessage for convenience.
1786 /// </remarks>
1787 protected virtual void OnUpdatedStatus(string status, UpdateType type)
1788 {
1789 if ((object)UpdatedStatus != null)
1790 UpdatedStatus(this, new EventArgs<string, UpdateType>(status, type));
1791 }
1792
1793 /// <summary>
1794 /// Raises <see cref="LoggedException"/> event with logged exception.
1795 /// </summary>
1796 /// <param name="ex">Logged <see cref="Exception"/>.</param>
1797 protected virtual void OnLoggedException(Exception ex)
1798 {
1799 if ((object)LoggedException != null)
1800 LoggedException(this, new EventArgs<Exception>(ex));
1801 }
1802
1744 /// <summary>1803 /// <summary>
1745 /// Releases the unmanaged resources used by the <see cref="ServiceHelper"/> object and optionally releases the managed resources.1804 /// Releases the unmanaged resources used by the <see cref="ServiceHelper"/> object and optionally releases the managed resources.
1746 /// </summary>1805 /// </summary>
@@ -1982,29 +2041,31 @@ namespace GSF.ServiceProcess · 235 unmodified lines
1982 SendResponse(clientID, new ServiceResponse("AuthenticationFailure"));2041 SendResponse(clientID, new ServiceResponse("AuthenticationFailure"));
1983 }2042 }
1984 2043
1985 private void SendUpdateClientStatusResponse(Guid clientID, UpdateType type, string response)2044 private void SendUpdateClientStatusResponse(Guid clientID, UpdateType type, string responseMessage)
1986 {2045 {
1987 if (string.IsNullOrEmpty(response))2046 if (string.IsNullOrEmpty(responseMessage))
1988 return;2047 return;
1989 2048
1990 ServiceResponse serviceResponse = new ServiceResponse();2049 ServiceResponse response = new ServiceResponse();
1991 serviceResponse.Type = "UPDATECLIENTSTATUS-" + type.ToString().ToUpper();2050 response.Type = "UPDATECLIENTSTATUS-" + type.ToString().ToUpper();
1992 serviceResponse.Message = CurtailMessageLength(response);2051 response.Message = CurtailMessageLength(responseMessage);
1993 SendResponse(clientID, serviceResponse);2052 SendResponse(clientID, response);
2053
2054 OnUpdatedStatus(response.Message, type);
1994 }2055 }
1995 2056
1996 private void SendServiceStateChangedResponse(ServiceState currentState)2057 private void SendServiceStateChangedResponse(ServiceState currentState)
1997 {2058 {
1998 ServiceResponse serviceResponse = new ServiceResponse("SERVICESTATECHANGED");2059 ServiceResponse response = new ServiceResponse("SERVICESTATECHANGED");
1999 serviceResponse.Attachments.Add(new ObjectState<ServiceState>(Name, currentState));2060 response.Attachments.Add(new ObjectState<ServiceState>(Name, currentState));
2000 SendResponse(serviceResponse);2061 SendResponse(response);
2001 }2062 }
2002 2063
2003 private void SendProcessStateChangedResponse(string processName, ServiceProcessState currentState)2064 private void SendProcessStateChangedResponse(string processName, ServiceProcessState currentState)
2004 {2065 {
2005 ServiceResponse serviceResponse = new ServiceResponse("PROCESSSTATECHANGED");2066 ServiceResponse response = new ServiceResponse("PROCESSSTATECHANGED");
2006 serviceResponse.Attachments.Add(new ObjectState<ServiceProcessState>(processName, currentState));2067 response.Attachments.Add(new ObjectState<ServiceProcessState>(processName, currentState));
2007 SendResponse(serviceResponse);2068 SendResponse(response);
2008 }2069 }
2009 2070
2010 private void Process_StateChanged(object sender, EventArgs e)2071 private void Process_StateChanged(object sender, EventArgs e)
@@ -2028,7 +2089,7 @@ namespace GSF.ServiceProcess · 17 unmodified lines
2028 2089
2029 private void StatusUpdateQueue_ProcessException(object sender, EventArgs<Exception> e)2090 private void StatusUpdateQueue_ProcessException(object sender, EventArgs<Exception> e)
2030 {2091 {
2031 m_errorLogger.Log(e.Argument);2092 LogException(e.Argument);
2032 }2093 }
2033 2094
2034 private void StatusLog_LogException(object sender, EventArgs<Exception> e)2095 private void StatusLog_LogException(object sender, EventArgs<Exception> e)
@@ -2047,7 +2108,7 @@ namespace GSF.ServiceProcess · 12 unmodified lines
2047 private void RemotingServer_ClientConnectingException(object sender, EventArgs<Exception> e)2108 private void RemotingServer_ClientConnectingException(object sender, EventArgs<Exception> e)
2048 {2109 {
2049 UpdateStatus(UpdateType.Alarm, "Error occurred while connecting client to remoting server - {0}\r\n\r\n", e.Argument.Message);2110 UpdateStatus(UpdateType.Alarm, "Error occurred while connecting client to remoting server - {0}\r\n\r\n", e.Argument.Message);
2050 m_errorLogger.Log(e.Argument);2111 LogException(e.Argument);
2051 }2112 }
2052 2113
2053 private void RemotingServer_ClientDisconnected(object sender, EventArgs<Guid> e)2114 private void RemotingServer_ClientDisconnected(object sender, EventArgs<Guid> e)
@@ -2067,7 +2128,7 @@ namespace GSF.ServiceProcess · 13 unmodified lines
2067 {2128 {
2068 // We'll encounter an exception because we'll try to update the status of the client that had the2129 // We'll encounter an exception because we'll try to update the status of the client that had the
2069 // remote command session open and this will fail since the client is disconnected.2130 // remote command session open and this will fail since the client is disconnected.
2070 m_errorLogger.Log(ex);2131 LogException(ex);
2071 }2132 }
2072 }2133 }
2073 2134
@@ -2125,7 +2186,7 @@ namespace GSF.ServiceProcess · 51 unmodified lines
2125 }2186 }
2126 catch (Exception ex)2187 catch (Exception ex)
2127 {2188 {
2128 m_errorLogger.Log(ex);2189 LogException(ex);
2129 2190
2130 try2191 try
2131 {2192 {
@@ -2139,7 +2200,7 @@ namespace GSF.ServiceProcess · 7 unmodified lines
2139 }2200 }
2140 catch (Exception ex2)2201 catch (Exception ex2)
2141 {2202 {
2142 m_errorLogger.Log(ex2);2203 LogException(ex2);
2143 }2204 }
2144 }2205 }
2145 }2206 }
@@ -2220,7 +2281,7 @@ namespace GSF.ServiceProcess · 74 unmodified lines
2220 }2281 }
2221 catch (Exception ex)2282 catch (Exception ex)
2222 {2283 {
2223 m_errorLogger.Log(ex);2284 LogException(ex);
2224 2285
2225 if ((object)requestInfo != null)2286 if ((object)requestInfo != null)
2226 SendActionableResponse(requestInfo, false, null, "Failed to process request \"{0}\" - {1}\r\n\r\n", request.Command, ex.Message);2287 SendActionableResponse(requestInfo, false, null, "Failed to process request \"{0}\" - {1}\r\n\r\n", request.Command, ex.Message);
@@ -2747,8 +2808,8 @@ namespace GSF.ServiceProcess · 520 unmodified lines
2747 {2808 {
2748 foreach (ClientRequestHandler handler in m_clientRequestHandlers)2809 foreach (ClientRequestHandler handler in m_clientRequestHandlers)
2749 {2810 {
2750 if (m_secureRemoteInteractions && 2811 if (m_secureRemoteInteractions &&
2751 SecurityProviderUtility.IsResourceSecurable(handler.Command) && 2812 SecurityProviderUtility.IsResourceSecurable(handler.Command) &&
2752 !SecurityProviderUtility.IsResourceAccessible(handler.Command))2813 !SecurityProviderUtility.IsResourceAccessible(handler.Command))
2753 continue;2814 continue;
2754 2815
@@ -2816,7 +2877,7 @@ namespace GSF.ServiceProcess · 61 unmodified lines
2816 }2877 }
2817 catch (Exception ex)2878 catch (Exception ex)
2818 {2879 {
2819 m_errorLogger.Log(ex);2880 LogException(ex);
2820 message = "Failed to query system health monitor status: " + ex.Message;2881 message = "Failed to query system health monitor status: " + ex.Message;
2821 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, message + "\r\n\r\n");2882 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, message + "\r\n\r\n");
2822 success = false;2883 success = false;
@@ -2873,7 +2934,7 @@ namespace GSF.ServiceProcess · 50 unmodified lines
2873 }2934 }
2874 catch (Exception ex)2935 catch (Exception ex)
2875 {2936 {
2876 m_errorLogger.Log(ex);2937 LogException(ex);
2877 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to reset system health monitor: {0}\r\n\r\n", ex.Message);2938 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to reset system health monitor: {0}\r\n\r\n", ex.Message);
2878 }2939 }
2879 }2940 }
@@ -3200,7 +3261,7 @@ namespace GSF.ServiceProcess · 320 unmodified lines
3200 }3261 }
3201 catch (Exception ex)3262 catch (Exception ex)
3202 {3263 {
3203 m_errorLogger.Log(ex);3264 LogException(ex);
3204 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to start system process \"{0}\". {1}.\r\n\r\n", processName, ex.Message);3265 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to start system process \"{0}\". {1}.\r\n\r\n", processName, ex.Message);
3205 }3266 }
3206 }3267 }
@@ -3339,7 +3400,7 @@ namespace GSF.ServiceProcess · 132 unmodified lines
3339 }3400 }
3340 catch (Exception ex)3401 catch (Exception ex)
3341 {3402 {
3342 m_errorLogger.Log(ex);3403 LogException(ex);
3343 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to abort system process \"{0}\". {1}.\r\n\r\n", processName, ex.Message);3404 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to abort system process \"{0}\". {1}.\r\n\r\n", processName, ex.Message);
3344 }3405 }
3345 }3406 }
@@ -3478,7 +3539,7 @@ namespace GSF.ServiceProcess · 132 unmodified lines
3478 }3539 }
3479 catch (Exception ex)3540 catch (Exception ex)
3480 {3541 {
3481 m_errorLogger.Log(ex);3542 LogException(ex);
3482 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to schedule process \"{0}\". {1}\r\n\r\n", processName, ex.Message);3543 UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, "Failed to schedule process \"{0}\". {1}\r\n\r\n", processName, ex.Message);
3483 }3544 }
3484 3545

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t