From 81058c43f5251fc9822098cdff78cf9ca8f4b65f Mon Sep 17 00:00:00 2001 From: Michael Davis <michael.davis@cern.ch> Date: Thu, 6 Jun 2019 16:15:06 +0200 Subject: [PATCH] [cta-admin] Fixes #525 display JSON ] if no results --- cmdline/CtaAdminCmd.cpp | 10 +++++----- cmdline/CtaAdminCmd.hpp | 12 ++++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/cmdline/CtaAdminCmd.cpp b/cmdline/CtaAdminCmd.cpp index 47fe7a749a..223670e7ea 100644 --- a/cmdline/CtaAdminCmd.cpp +++ b/cmdline/CtaAdminCmd.cpp @@ -77,8 +77,8 @@ void IStreamBuffer<cta::xrd::Data>::DataCallback(cta::xrd::Data record) const case Data::kLprItem: std::cout << Log::DumpProtobuf(&record.lpr_item()); break; case Data::kLprSummary: std::cout << Log::DumpProtobuf(&record.lpr_summary()); break; case Data::kTplsItem: std::cout << Log::DumpProtobuf(&record.tpls_item()); break; - case Data::kTalsItem: std::cout << Log::DumpProtobuf(&record.tals_item()); break; - case Data::kRelsItem: std::cout << Log::DumpProtobuf(&record.rels_item()); break; + case Data::kTalsItem: std::cout << Log::DumpProtobuf(&record.tals_item()); break; + case Data::kRelsItem: std::cout << Log::DumpProtobuf(&record.rels_item()); break; default: throw std::runtime_error("Received invalid stream data from CTA Frontend."); } @@ -108,8 +108,8 @@ void IStreamBuffer<cta::xrd::Data>::DataCallback(cta::xrd::Data record) const namespace cta { namespace admin { -bool CtaAdminCmd::is_json = false; -bool CtaAdminCmd::is_first_record = true; +std::atomic<bool> CtaAdminCmd::is_json(false); +std::atomic<bool> CtaAdminCmd::is_first_record(true); CtaAdminCmd::CtaAdminCmd(int argc, const char *const *const argv) : m_execname(argv[0]) @@ -256,7 +256,7 @@ void CtaAdminCmd::send() const stream_future.wait(); // JSON output is an array of structs, close bracket - if(isJson()) { std::cout << ']'; } + if(isJson()) { std::cout << jsonCloseDelim(); } } diff --git a/cmdline/CtaAdminCmd.hpp b/cmdline/CtaAdminCmd.hpp index 56cbc901b6..5fbd554251 100644 --- a/cmdline/CtaAdminCmd.hpp +++ b/cmdline/CtaAdminCmd.hpp @@ -39,6 +39,10 @@ public: is_first_record = false; return c; } + static std::string jsonCloseDelim() { + return is_first_record ? "" : "]"; + } + // Static method to convert time to string static std::string timeToString(const time_t &time) { @@ -70,8 +74,8 @@ public: static void print(const ListPendingRetrievesItem &lpr_item); static void print(const ListPendingRetrievesSummary &lpr_summary); static void print(const TapePoolLsItem &tpls_item); - static void print(const cta::admin::TapeLsItem &tals_item); - static void print(const cta::admin::RepackLsItem &rels_item); + static void print(const TapeLsItem &tals_item); + static void print(const RepackLsItem &rels_item); private: //! Parse the options for a specific command/subcommand @@ -98,8 +102,8 @@ private: std::string m_execname; //!< Executable name of this program cta::xrd::Request m_request; //!< Protocol Buffer for the command and parameters - static bool is_json; //!< Display results in JSON format - static bool is_first_record; //!< Delimiter for JSON records + static std::atomic<bool> is_json; //!< Display results in JSON format + static std::atomic<bool> is_first_record; //!< Delimiter for JSON records static constexpr const char* const TEXT_RED = "\x1b[31;1m"; //!< Terminal formatting code for red text static constexpr const char* const TEXT_NORMAL = "\x1b[0m"; //!< Terminal formatting code for normal text -- GitLab