summaryrefslogtreecommitdiffstats
path: root/configutil/src/apps/configstatus/main.cpp
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahoo-inc.com>2016-07-12 21:16:06 +0200
committerVegard Sjonfjell <vegardsjo@gmail.com>2016-07-12 21:16:06 +0200
commitfc7a2cdb64ca870cf00fa2d7dc723d91f56e5561 (patch)
tree3924b7e47689cf9c7936d0f3e84b20ca4517955a /configutil/src/apps/configstatus/main.cpp
parent99de121a82da5b20ef5b8324706f272973879b9b (diff)
Add host filtering option to config status util (#350)
* Let vespa-config-status take in an optional host filter set If the argument is not specified, services on all hosts in the model will be queried as before. Iff the filter argument is specified, only services on the hosts explicitly given will be queried. * Make variable name easier on the eyes
Diffstat (limited to 'configutil/src/apps/configstatus/main.cpp')
-rw-r--r--configutil/src/apps/configstatus/main.cpp54
1 files changed, 30 insertions, 24 deletions
diff --git a/configutil/src/apps/configstatus/main.cpp b/configutil/src/apps/configstatus/main.cpp
index 6cc1b8f1240..e17ee658cc2 100644
--- a/configutil/src/apps/configstatus/main.cpp
+++ b/configutil/src/apps/configstatus/main.cpp
@@ -3,17 +3,19 @@
#include <vespa/fastos/fastos.h>
#include <vespa/defaults.h>
#include <vespa/log/log.h>
+#include <vespa/vespalib/text/stringtokenizer.h>
LOG_SETUP("vespa-config-status");
#include <iostream>
#include <lib/configstatus.h>
+#include <lib/hostfilter.h>
-class Application : public FastOS_Application
-{
+class Application : public FastOS_Application {
ConfigStatus::Flags _flags;
vespalib::string _cfgId;
vespalib::string _specString;
int parseOpts();
vespalib::string getSources();
+ HostFilter parse_host_set(vespalib::stringref raw_arg) const;
public:
void usage(void);
int Main(void);
@@ -21,13 +23,11 @@ public:
Application() : _flags(), _cfgId("admin/model"), _specString("") {}
};
-int
-Application::parseOpts()
-{
+int Application::parseOpts() {
char c = '?';
const char *optArg = NULL;
int optInd = 0;
- while ((c = GetOpt("c:s:vC:", optArg, optInd)) != -1) {
+ while ((c = GetOpt("c:s:vC:f:", optArg, optInd)) != -1) {
switch (c) {
case 'v':
_flags.verbose = true;
@@ -41,6 +41,9 @@ Application::parseOpts()
case 'h':
usage();
exit(0);
+ case 'f':
+ _flags.host_filter = parse_host_set(optArg);
+ break;
default:
usage();
exit(1);
@@ -52,21 +55,28 @@ Application::parseOpts()
return optInd;
}
+HostFilter Application::parse_host_set(vespalib::stringref raw_arg) const {
+ vespalib::StringTokenizer tokenizer(raw_arg, ",");
+ tokenizer.removeEmptyTokens();
+
+ HostFilter::HostSet hosts;
+ for (auto& host : tokenizer) {
+ hosts.emplace(host);
+ }
+ return HostFilter(std::move(hosts));
+}
-void
-Application::usage(void)
-{
- std::cerr <<
- "vespa-config-status version 1.0" << std::endl <<
- "Usage: " << _argv[0] << " [options] " << std::endl <<
- "options: [-v] for verbose" << std::endl <<
- " [-c host] or [-c host:port] to specify config server" << std::endl <<
- std::endl;
+void Application::usage() {
+ std::cerr << "vespa-config-status version 1.0\n"
+ << "Usage: " << _argv[0] << " [options]\n"
+ << "options: [-v] for verbose\n"
+ << " [-c host] or [-c host:port] to specify config server\n"
+ << " [-f host0,...,hostN] filter to only query config\n"
+ " status for the given comma-separated set of hosts\n"
+ << std::endl;
}
-int
-Application::Main(void)
-{
+int Application::Main() {
parseOpts();
config::ServerSpec spec(_specString);
@@ -76,9 +86,7 @@ Application::Main(void)
return status.action();
}
-vespalib::string
-Application::getSources(void)
-{
+vespalib::string Application::getSources() {
vespalib::string specs;
for (std::string v : vespa::Defaults::vespaConfigSourcesRpcAddrs()) {
if (! specs.empty()) specs += ",";
@@ -87,9 +95,7 @@ Application::getSources(void)
return specs;
}
-int
-main(int argc, char **argv)
-{
+int main(int argc, char **argv) {
Application app;
return app.Entry(argc, argv);
}