private void ShowVersion(ClientRequestInfo requestInfo)
{
if (requestInfo.Request.Arguments.ContainsHelpRequest)
{
StringBuilder helpMessage = new StringBuilder();
helpMessage.Append("Shows the current service version.");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Usage:");
helpMessage.AppendLine();
helpMessage.Append(" Version -options");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Options:");
helpMessage.AppendLine();
helpMessage.Append(" -?".PadRight(20));
helpMessage.Append("Displays this help message");
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
{
StringBuilder versionInfo = new StringBuilder();
AssemblyInfo serviceAssembly = AssemblyInfo.EntryAssembly;
string serviceName;
if ((object)m_parentService != null && !string.IsNullOrWhiteSpace(m_parentService.ServiceName))
serviceName = m_parentService.ServiceName;
else
serviceName = AppDomain.CurrentDomain.FriendlyName;
// Get current process memory usage
long processMemory = Common.GetProcessMemory();
versionInfo.AppendFormat("{0} Service Version:{1}{1}", serviceName, Environment.NewLine);
versionInfo.AppendFormat(" App Domain: {0}, running on .NET {1}{2}", AppDomain.CurrentDomain.FriendlyName, Environment.Version, Environment.NewLine);
versionInfo.AppendFormat(" Machine Name: {0}{1}", Environment.MachineName, Environment.NewLine);
versionInfo.AppendFormat(" OS Version: {0}{1}", Environment.OSVersion.VersionString, Environment.NewLine);
versionInfo.AppendFormat(" Product Name: {0}{1}", Common.GetOSProductName(), Environment.NewLine);
versionInfo.AppendFormat(" Working Memory: {0}{1}", processMemory > 0 ? SI2.ToScaledString(processMemory, 4, "B", SI2.IECSymbols) : "Undetermined", Environment.NewLine);
versionInfo.AppendFormat(" Execution Mode: {0}-bit{1}", IntPtr.Size * 8, Environment.NewLine);
versionInfo.AppendFormat(" Processors: {0}{1}", Environment.ProcessorCount, Environment.NewLine);
versionInfo.AppendFormat(" Code Base: {0}{1}", serviceAssembly.CodeBase, Environment.NewLine);
versionInfo.AppendFormat(" Build Date: {0}{1}", serviceAssembly.BuildDate, Environment.NewLine);
versionInfo.AppendFormat(" Version: {0}", serviceAssembly.Version);
string message = versionInfo.ToString();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, message + "{0}{0}", Environment.NewLine);
// Also allow consumers to directly consume message via event in response to a version request
if (requestInfo.Request.Arguments.Exists("actionable"))
SendActionableResponse(requestInfo, true, null, message);
}
}