summaryrefslogtreecommitdiffstats
path: root/slobrok/src/apps/check_slobrok/check_slobrok.cpp
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /slobrok/src/apps/check_slobrok/check_slobrok.cpp
Publish
Diffstat (limited to 'slobrok/src/apps/check_slobrok/check_slobrok.cpp')
-rw-r--r--slobrok/src/apps/check_slobrok/check_slobrok.cpp115
1 files changed, 115 insertions, 0 deletions
diff --git a/slobrok/src/apps/check_slobrok/check_slobrok.cpp b/slobrok/src/apps/check_slobrok/check_slobrok.cpp
new file mode 100644
index 00000000000..294cbe844c7
--- /dev/null
+++ b/slobrok/src/apps/check_slobrok/check_slobrok.cpp
@@ -0,0 +1,115 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/fastos/fastos.h>
+
+#include <vespa/log/log.h>
+LOG_SETUP("check_slobrok");
+
+#include <vespa/fnet/frt/frt.h>
+
+#include <string>
+#include <sstream>
+
+
+class Slobrok_Checker : public FastOS_Application
+{
+private:
+ FRT_Supervisor *_supervisor;
+ FRT_Target *_target;
+
+ Slobrok_Checker(const Slobrok_Checker &);
+ Slobrok_Checker &operator=(const Slobrok_Checker &);
+
+public:
+ Slobrok_Checker() : _supervisor(NULL), _target(NULL) {}
+ virtual ~Slobrok_Checker();
+ int usage();
+ void initRPC(const char *spec);
+ void finiRPC();
+ virtual int Main();
+};
+
+
+Slobrok_Checker::~Slobrok_Checker()
+{
+ LOG_ASSERT(_supervisor == NULL);
+ LOG_ASSERT(_target == NULL);
+}
+
+
+int
+Slobrok_Checker::usage()
+{
+ fprintf(stderr, "usage: %s <port>\n", _argv[0]);
+ return 1;
+}
+
+
+void
+Slobrok_Checker::initRPC(const char *spec)
+{
+ _supervisor = new FRT_Supervisor();
+ _target = _supervisor->GetTarget(spec);
+ _supervisor->Start();
+}
+
+
+void
+Slobrok_Checker::finiRPC()
+{
+ if (_target != NULL) {
+ _target->SubRef();
+ _target = NULL;
+ }
+ if (_supervisor != NULL) {
+ _supervisor->ShutDown(true);
+ delete _supervisor;
+ _supervisor = NULL;
+ }
+}
+
+
+int
+Slobrok_Checker::Main()
+{
+ if (_argc != 2) {
+ return usage();
+ }
+ int port = atoi(_argv[1]);
+ if (port == 0) {
+ initRPC(_argv[1]);
+ } else {
+ std::ostringstream tmp;
+ tmp << "tcp/localhost:";
+ tmp << port;
+ initRPC(tmp.str().c_str());
+ }
+
+ FRT_RPCRequest *req = _supervisor->AllocRPCRequest();
+
+ req->SetMethodName("slobrok.system.version");
+ _target->InvokeSync(req, 5.0);
+ int failed = 0;
+
+ if (req->IsError()) {
+ printf("vespa_slobrok %d: %s\n",
+ req->GetErrorCode(), req->GetErrorMessage());
+ failed = 1;
+ } else {
+ FRT_Values &answer = *(req->GetReturn());
+ const char *atypes = answer.GetTypeString();
+ if (strcmp(atypes, "s") == 0) {
+ printf("vespa_slobrok-%s OK\n", answer[0]._string._str);
+ } else {
+ printf("vespa_slobrok bad rpc return type %s\n", atypes);
+ failed = 1;
+ }
+ }
+ finiRPC();
+ return failed;
+}
+
+int main(int argc, char **argv)
+{
+ Slobrok_Checker sb_checker;
+ return sb_checker.Entry(argc, argv);
+}