From 3c02477360fb01876cfd1505cde46b2d8938dc5a Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 18 Nov 2016 16:17:09 +1300 Subject: [PATCH 1/6] Add -metricsui flag to toggle between persistent screen and rolling metrics Defaults to true if stdout is a TTY, else false. --- src/metrics.cpp | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 4d97312e2..c20ce47d5 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -248,17 +248,22 @@ void ThreadShowMetricsScreen() // Make this thread recognisable as the metrics screen thread RenameThread("zcash-metrics-screen"); - // Clear screen - std::cout << "\e[2J"; + // Determine whether we should render a persistent UI or rolling metrics + bool isScreen = GetBoolArg("-metricsui", isatty(STDOUT_FILENO)); - // Print art - std::cout << METRICS_ART << std::endl; - std::cout << std::endl; + if (isScreen) { + // Clear screen + std::cout << "\e[2J"; - // Thank you text - std::cout << _("Thank you for running a Zcash node!") << std::endl; - std::cout << _("You're helping to strengthen the network and contributing to a social good :)") << std::endl; - std::cout << std::endl; + // Print art + std::cout << METRICS_ART << std::endl; + std::cout << std::endl; + + // Thank you text + std::cout << _("Thank you for running a Zcash node!") << std::endl; + std::cout << _("You're helping to strengthen the network and contributing to a social good :)") << std::endl; + std::cout << std::endl; + } // Count uptime int64_t nStart = GetTime(); @@ -277,8 +282,10 @@ void ThreadShowMetricsScreen() } } - // Erase below current position - std::cout << "\e[J"; + if (isScreen) { + // Erase below current position + std::cout << "\e[J"; + } // Miner status bool mining = GetBoolArg("-gen", false); @@ -291,13 +298,20 @@ void ThreadShowMetricsScreen() lines += printMessageBox(cols); lines += printInitMessage(); - // Explain how to exit - std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl;; + if (isScreen) { + // Explain how to exit + std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl; + } else { + // Print delineator + std::cout << "----------------" << std::endl; + } boost::this_thread::interruption_point(); MilliSleep(1000); - // Return to the top of the updating section - std::cout << "\e[" << lines << "A"; + if (isScreen) { + // Return to the top of the updating section + std::cout << "\e[" << lines << "A"; + } } } From 83ccbf6b89671803eb2d805b1f86eed387fe4018 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 18 Nov 2016 16:32:21 +1300 Subject: [PATCH 2/6] Add -metricsrefreshtime option --- src/metrics.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index c20ce47d5..285f1f653 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -249,7 +249,9 @@ void ThreadShowMetricsScreen() RenameThread("zcash-metrics-screen"); // Determine whether we should render a persistent UI or rolling metrics - bool isScreen = GetBoolArg("-metricsui", isatty(STDOUT_FILENO)); + bool isTTY = isatty(STDOUT_FILENO); + bool isScreen = GetBoolArg("-metricsui", isTTY); + int64_t nRefresh = GetArg("-metricsrefreshtime", isTTY ? 1 : 600); if (isScreen) { // Clear screen @@ -274,7 +276,7 @@ void ThreadShowMetricsScreen() int cols = 80; // Get current window size - if (isatty(STDOUT_FILENO)) { + if (isTTY) { struct winsize w; w.ws_col = 0; if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_col != 0) { @@ -306,8 +308,11 @@ void ThreadShowMetricsScreen() std::cout << "----------------" << std::endl; } - boost::this_thread::interruption_point(); - MilliSleep(1000); + int64_t nWaitEnd = GetTime() + nRefresh; + while (GetTime() < nWaitEnd) { + boost::this_thread::interruption_point(); + MilliSleep(200); + } if (isScreen) { // Return to the top of the updating section From 57724029da57cdc637dd3e3d1fd16e3f3f640e26 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 18 Nov 2016 16:37:10 +1300 Subject: [PATCH 3/6] Only show metrics by default if stdout is a TTY --- src/init.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/init.cpp b/src/init.cpp index 45ee72efb..44765b235 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -980,7 +980,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) threadGroup.create_thread(boost::bind(&TraceThread, "scheduler", serviceLoop)); if ((chainparams.NetworkIDString() != "regtest") && - GetBoolArg("-showmetrics", true) && + GetBoolArg("-showmetrics", isatty(STDOUT_FILENO)) && !fPrintToConsole && !GetBoolArg("-daemon", false)) { // Start the persistent metrics interface ConnectMetricsScreen(); From 0076a80a8a2bf1e72c3353a18e3b1d1ce0433efb Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 18 Nov 2016 16:49:37 +1300 Subject: [PATCH 4/6] Document metrics screen options --- src/init.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/init.cpp b/src/init.cpp index 44765b235..b0649920c 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -439,9 +439,9 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-rpcsslprivatekeyfile=", strprintf(_("Server private key (default: %s)"), "server.pem")); strUsage += HelpMessageOpt("-rpcsslciphers=", strprintf(_("Acceptable ciphers (default: %s)"), "TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH")); + strUsage += HelpMessageGroup(_("UI Options:")); if (mode == HMM_BITCOIN_QT) { - strUsage += HelpMessageGroup(_("UI Options:")); if (showDebug) { strUsage += HelpMessageOpt("-allowselfsignedrootcertificates", "Allow self signed root certificates (default: 0)"); } @@ -450,6 +450,10 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-min", _("Start minimized")); strUsage += HelpMessageOpt("-rootcertificates=", _("Set SSL root certificates for payment request (default: -system-)")); strUsage += HelpMessageOpt("-splash", _("Show splash screen on startup (default: 1)")); + } else { + strUsage += HelpMessageOpt("-showmetrics", _("Show metrics on stdout (default: 1 if running in a console, 0 otherwise)")); + strUsage += HelpMessageOpt("-metricsui", _("Set to 1 for a persistent metrics screen, 0 for sequential metrics output (default: 1 if running in a console, 0 otherwise)")); + strUsage += HelpMessageOpt("-metricsrefreshtime", strprintf(_("Number of seconds between metrics refreshes (default: %u if running in a console, %u otherwise)"), 1, 600)); } return strUsage; From 18f656d2afeac6319aedb2362c4f01807c936ad8 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 29 Nov 2016 18:11:25 +1300 Subject: [PATCH 5/6] Clarify that metrics options are only useful without -daemon and -printtoconsole --- src/init.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index b0649920c..8f8fdfec6 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -439,9 +439,9 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-rpcsslprivatekeyfile=", strprintf(_("Server private key (default: %s)"), "server.pem")); strUsage += HelpMessageOpt("-rpcsslciphers=", strprintf(_("Acceptable ciphers (default: %s)"), "TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH")); - strUsage += HelpMessageGroup(_("UI Options:")); if (mode == HMM_BITCOIN_QT) { + strUsage += HelpMessageGroup(_("UI Options:")); if (showDebug) { strUsage += HelpMessageOpt("-allowselfsignedrootcertificates", "Allow self signed root certificates (default: 0)"); } @@ -450,7 +450,8 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-min", _("Start minimized")); strUsage += HelpMessageOpt("-rootcertificates=", _("Set SSL root certificates for payment request (default: -system-)")); strUsage += HelpMessageOpt("-splash", _("Show splash screen on startup (default: 1)")); - } else { + } else if (mode == HMM_BITCOIND) { + strUsage += HelpMessageGroup(_("Metrics Options (only if -daemon and -printtoconsole are not set):")); strUsage += HelpMessageOpt("-showmetrics", _("Show metrics on stdout (default: 1 if running in a console, 0 otherwise)")); strUsage += HelpMessageOpt("-metricsui", _("Set to 1 for a persistent metrics screen, 0 for sequential metrics output (default: 1 if running in a console, 0 otherwise)")); strUsage += HelpMessageOpt("-metricsrefreshtime", strprintf(_("Number of seconds between metrics refreshes (default: %u if running in a console, %u otherwise)"), 1, 600)); From e2752e1ecabc32f075a5735defa0a7057986d237 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Tue, 29 Nov 2016 18:17:28 +1300 Subject: [PATCH 6/6] Increase length of metrics divider --- src/metrics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/metrics.cpp b/src/metrics.cpp index 285f1f653..796dbda13 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -305,7 +305,7 @@ void ThreadShowMetricsScreen() std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl; } else { // Print delineator - std::cout << "----------------" << std::endl; + std::cout << "----------------------------------------" << std::endl; } int64_t nWaitEnd = GetTime() + nRefresh;