static void ConfigureCountCommand(CommandLineApplication hcCommand) { hcCommand.RelayCommand("count", (countCommand) => { countCommand.Description = "Get HybridConnection Count"; var connectionStringArgument = countCommand.Argument("connectionString", "Relay ConnectionString"); countCommand.OnExecute(async() => { string connectionString = ConnectionStringUtility.ResolveConnectionString(connectionStringArgument); if (string.IsNullOrEmpty(connectionString)) { TraceMissingArgument(connectionStringArgument.Name); countCommand.ShowHelp(); return(1); } var namespaceManager = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString); Uri namespaceUri = namespaceManager.Address; string namespaceHost = namespaceUri.Host; var tokenProvider = namespaceManager.Settings.TokenProvider; RelayTraceSource.TraceVerbose($"Getting HybridConnection count for '{namespaceUri}"); int count = await NamespaceUtility.GetEntityCountAsync(namespaceUri, tokenProvider, "HybridConnections"); RelayTraceSource.TraceInfo(string.Format($"{{0,-{namespaceHost.Length}}} {{1}}", "Namespace", "HybridConnectionCount")); RelayTraceSource.TraceInfo(string.Format($"{{0,-{namespaceHost.Length}}} {{1}}", namespaceHost, count)); return(0); }); }); }
internal static void ConfigureCommands(CommandLineApplication app) { app.RelayCommand("diag", (diagCommand) => { diagCommand.Description = "Operations for diagnosing relay/hc issues (Analyze)"; var namespaceOrConnectionStringArgument = diagCommand.Argument(NamespaceOrConnectionStringArgumentName, NamespaceOrConnectionStringArgumentDescription); CommandOption allOption = diagCommand.Option( "-a|--all", "Show all details", CommandOptionType.NoValue); CommandOption namespaceOption = diagCommand.Option( "-n|-ns|--namespace", "Show namespace details", CommandOptionType.NoValue); CommandOption netStatOption = diagCommand.Option( "--netstat", "Show netstat output", CommandOptionType.NoValue); CommandOption portsOption = diagCommand.Option( "-p|--ports", "Probe Relay Ports", CommandOptionType.NoValue); CommandOption instancePortsOption = diagCommand.Option( "-ip|--instance-ports <instanceCount>", "Probe Relay Instance Level Ports", CommandOptionType.SingleValue); CommandOption osOption = diagCommand.Option( "-o|--os", "Display Platform/OS/.NET information", CommandOptionType.NoValue); CommandOption protocolOption = diagCommand.AddSecurityProtocolOption(); diagCommand.OnExecute(async() => { ConfigureSecurityProtocol(protocolOption); bool defaultOptions = !allOption.HasValue() && !namespaceOption.HasValue() && !netStatOption.HasValue() && !portsOption.HasValue() && !osOption.HasValue(); // Run netstat before we try to lookup the namespace to keep ourself out of the results // NetStat output isn't part of the default run, must specify --netstat or --all if (netStatOption.HasValue() || allOption.HasValue()) { ExecuteNetStatCommand(); } NamespaceDetails namespaceDetails = default; string connectionString = ConnectionStringUtility.ResolveConnectionString(namespaceOrConnectionStringArgument); // Might not be present if (!string.IsNullOrEmpty(connectionString)) { var connectionStringBuilder = new ServiceBusConnectionStringBuilder(connectionString); try { namespaceDetails = await NamespaceUtility.GetNamespaceDetailsAsync(connectionStringBuilder.Endpoints.First().Host); } catch (Exception e) { RelayTraceSource.TraceException(e, "Getting namespace details"); } } if (defaultOptions || osOption.HasValue() || allOption.HasValue()) { await ExecutePlatformCommandAsync(namespaceDetails); } if (defaultOptions || namespaceOption.HasValue() || allOption.HasValue()) { ExecuteNamespaceCommand(namespaceDetails); } if (defaultOptions || portsOption.HasValue() || allOption.HasValue() || instancePortsOption.HasValue()) { int gatewayCount = GetIntOption(instancePortsOption, 1); await ExecutePortsCommandAsync(namespaceDetails, gatewayCount); } return(0); }); }); }