diff --git a/cmdline/CtaAdminTextFormatter.cpp b/cmdline/CtaAdminTextFormatter.cpp index ac7720806e7ac7979de21ea5f7d06f71b6708d4b..9168b51b3db0228f2ed0079d36acb5456f75f290 100644 --- a/cmdline/CtaAdminTextFormatter.cpp +++ b/cmdline/CtaAdminTextFormatter.cpp @@ -24,9 +24,6 @@ namespace cta { namespace admin { -const std::string TextFormatter::TEXT_RED = "\x1b[31;1m"; -const std::string TextFormatter::TEXT_NORMAL = "\x1b[0m"; - /* * Convert time to string * @@ -43,6 +40,14 @@ std::string timeToString(const time_t &time) void TextFormatter::flush() { if(m_outputBuffer.empty()) return; + // Check if first line is a header requiring special formatting + bool is_header = false; + if(m_outputBuffer.front().size() == 1 && m_outputBuffer.front().front() == "HEADER") { + is_header = true; + m_outputBuffer.erase(m_outputBuffer.begin()); + if(m_outputBuffer.empty()) return; + } + auto numCols = m_outputBuffer.front().size(); std::vector<unsigned int> colSize(numCols); @@ -56,12 +61,14 @@ void TextFormatter::flush() { // Output columns for(auto &l : m_outputBuffer) { + if(is_header) { std::cout << TEXT_RED; } for(size_t c = 0; c < l.size(); ++c) { std::cout << std::setfill(' ') << std::setw(colSize.at(c)+1) << std::right << l.at(c) << ' '; } + if(is_header) { std::cout << TEXT_NORMAL; is_header = false; } std::cout << std::endl; } @@ -71,6 +78,7 @@ void TextFormatter::flush() { void TextFormatter::printAfLsHeader() { + push_back("HEADER"); push_back( "archive id", "copy no", @@ -115,6 +123,7 @@ void TextFormatter::print(const cta::admin::ArchiveFileLsItem &afls_item) { } void TextFormatter::printAfLsSummaryHeader() { + push_back("HEADER"); push_back( "total files", "total size" @@ -130,6 +139,7 @@ void TextFormatter::print(const cta::admin::ArchiveFileLsSummary &afls_summary) } void TextFormatter::printFrLsHeader() { + push_back("HEADER"); push_back( "request type", "copy no", @@ -174,6 +184,7 @@ void TextFormatter::print(const cta::admin::FailedRequestLsItem &frls_item) { } void TextFormatter::printFrLsSummaryHeader() { + push_back("HEADER"); push_back( "request type", "total files", @@ -194,6 +205,7 @@ void TextFormatter::print(const cta::admin::FailedRequestLsSummary &frls_summary } void TextFormatter::printLpaHeader() { + push_back("HEADER"); push_back( "tapepool", "archive id", @@ -228,6 +240,7 @@ void TextFormatter::print(const cta::admin::ListPendingArchivesItem &lpa_item) { } void TextFormatter::printLpaSummaryHeader() { + push_back("HEADER"); push_back( "tapepool", "total files", @@ -244,6 +257,7 @@ void TextFormatter::print(const cta::admin::ListPendingArchivesSummary &lpa_summ } void TextFormatter::printLprHeader() { + push_back("HEADER"); push_back( "vid", "archive id", @@ -272,6 +286,7 @@ void TextFormatter::print(const cta::admin::ListPendingRetrievesItem &lpr_item) } void TextFormatter::printLprSummaryHeader() { + push_back("HEADER"); push_back( "vid", "total files", @@ -288,6 +303,7 @@ void TextFormatter::print(const cta::admin::ListPendingRetrievesSummary &lpr_sum } void TextFormatter::printTapeLsHeader() { + push_back("HEADER"); push_back( "vid", "media type", @@ -346,6 +362,7 @@ void TextFormatter::print(const cta::admin::TapeLsItem &tals_item) { } void TextFormatter::printRepackLsHeader() { + push_back("HEADER"); push_back( "vid", "repackBufferURL", @@ -385,6 +402,7 @@ void TextFormatter::print(const cta::admin::RepackLsItem &rels_item) { } void TextFormatter::printTapePoolLsHeader() { + push_back("HEADER"); push_back( "name", "vo", diff --git a/cmdline/CtaAdminTextFormatter.hpp b/cmdline/CtaAdminTextFormatter.hpp index 228fe0ef5acc6e079f6d8dc443226641a47c9da8..d7388fa34cb5133fc923a617155c26d0b681e18c 100644 --- a/cmdline/CtaAdminTextFormatter.hpp +++ b/cmdline/CtaAdminTextFormatter.hpp @@ -100,13 +100,14 @@ private: line.push_back(std::string(item)); } - void flush(); //!< Flush buffer to stdout + //! Flush buffer to stdout + void flush(); - unsigned int m_bufLines; //!< Number of text lines to buffer before flushing formatted output - std::vector<std::vector<std::string>> m_outputBuffer; //!< Buffer for text output (not used for JSON) + unsigned int m_bufLines; //!< Number of text lines to buffer before flushing formatted output + std::vector<std::vector<std::string>> m_outputBuffer; //!< Buffer for text output (not used for JSON) - static const std::string TEXT_RED; //!< Terminal formatting code for red text - static const std::string TEXT_NORMAL; //!< Terminal formatting code for normal text + 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 }; }}