private void ShowHealthReport(ClientRequestInfo requestInfo)
{
if (requestInfo.Request.Arguments.ContainsHelpRequest)
{
StringBuilder helpMessage = new StringBuilder();
helpMessage.Append("Displays a resource utilization report for the service.");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Usage:");
helpMessage.AppendLine();
helpMessage.Append(" Health -options");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Options:");
helpMessage.AppendLine();
helpMessage.Append(" -?".PadRight(20));
helpMessage.Append("Displays this help message");
helpMessage.AppendLine();
helpMessage.Append(" -lifetime".PadRight(20));
helpMessage.Append("Shows utilization over entire service lifetime");
helpMessage.AppendLine();
helpMessage.Append(" -actionable".PadRight(20));
helpMessage.Append("Returns results via an actionable event");
helpMessage.AppendLine();
helpMessage.AppendLine();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, helpMessage.ToString());
}
else
{
string message;
bool success;
if ((object)m_performanceMonitor != null)
{
try
{
if (requestInfo.Request.Arguments.Exists("lifetime"))
message = m_performanceMonitor.LifetimeStatus;
else
message = m_performanceMonitor.Status;
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "\r\n" + message + "\r\n");
success = true;
}
catch (Exception ex)
{
LogException(ex);
message = "Failed to query system health monitor status: " + ex.Message;
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Alarm, message + "\r\n\r\n");
success = false;
}
}
else
{
message = "System health monitor is unavailable.";
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Warning, message + "\r\n\r\n");
success = false;
}
// Also allow consumers to directly consume message via event in response to a health request
if (requestInfo.Request.Arguments.Exists("actionable"))
SendActionableResponse(requestInfo, success, null, message);
}
}