output: add the --color parameter (-C)
disabled by default or if syslog option is set Signed-off-by: Tanguy Pruvot <tanguy.pruvot@gmail.com>
This commit is contained in:
parent
d928317981
commit
0867fb15c6
45
cpu-miner.c
45
cpu-miner.c
@ -171,6 +171,7 @@ bool want_stratum = true;
|
||||
bool have_stratum = false;
|
||||
static bool submit_old = false;
|
||||
bool use_syslog = false;
|
||||
bool use_colors = false;
|
||||
static bool opt_background = false;
|
||||
static bool opt_quiet = false;
|
||||
static int opt_retries = -1;
|
||||
@ -261,6 +262,7 @@ Options:\n\
|
||||
--no-longpoll disable X-Long-Polling support\n\
|
||||
--no-stratum disable X-Stratum support\n\
|
||||
-q, --quiet disable per-thread hashmeter output\n\
|
||||
-C, --color enable colored output\n\
|
||||
-D, --debug enable debug output\n\
|
||||
-P, --protocol-dump verbose dump of protocol-level activities\n"
|
||||
#ifdef HAVE_SYSLOG_H
|
||||
@ -286,7 +288,7 @@ static char const short_options[] =
|
||||
#ifdef HAVE_SYSLOG_H
|
||||
"S"
|
||||
#endif
|
||||
"a:c:Dhp:Px:qr:R:s:t:T:o:u:O:Vd:f:mv:";
|
||||
"a:c:CDhp:Px:qr:R:s:t:T:o:u:O:Vd:f:mv:";
|
||||
|
||||
static struct option const options[] = {
|
||||
{ "algo", 1, NULL, 'a' },
|
||||
@ -297,6 +299,7 @@ static struct option const options[] = {
|
||||
{ "cputest", 0, NULL, 1006 },
|
||||
{ "cert", 1, NULL, 1001 },
|
||||
{ "config", 1, NULL, 'c' },
|
||||
{ "color", 0, NULL, 'C' },
|
||||
{ "debug", 0, NULL, 'D' },
|
||||
{ "help", 0, NULL, 'h' },
|
||||
{ "no-longpoll", 0, NULL, 1003 },
|
||||
@ -403,12 +406,14 @@ static void share_result(int result, const char *reason)
|
||||
pthread_mutex_unlock(&stats_lock);
|
||||
|
||||
sprintf(s, hashrate >= 1e6 ? "%.0f" : "%.2f", 1e-3 * hashrate);
|
||||
applog(LOG_INFO, "accepted: %lu/%lu (%.2f%%), %s khash/s %s",
|
||||
accepted_count,
|
||||
accepted_count + rejected_count,
|
||||
100. * accepted_count / (accepted_count + rejected_count),
|
||||
s,
|
||||
result ? "(yay!!!)" : "(booooo)");
|
||||
applog(LOG_NOTICE, "accepted: %lu/%lu (%.2f%%), %s khash/s %s",
|
||||
accepted_count,
|
||||
accepted_count + rejected_count,
|
||||
100. * accepted_count / (accepted_count + rejected_count),
|
||||
s,
|
||||
use_colors ?
|
||||
(result ? CL_GRN "(yay!!!)" : CL_RED "(booooo)")
|
||||
: (result ? "(yay!!!)" : "(booooo)"));
|
||||
|
||||
if (opt_debug && reason)
|
||||
applog(LOG_DEBUG, "DEBUG: reject reason: %s", reason);
|
||||
@ -595,8 +600,9 @@ static bool workio_submit_work(struct workio_cmd *wc, CURL *curl)
|
||||
}
|
||||
|
||||
/* pause, then restart work-request loop */
|
||||
applog(LOG_ERR, "...retry after %d seconds",
|
||||
opt_fail_pause);
|
||||
if (!opt_benchmark)
|
||||
applog(LOG_ERR, "...retry after %d seconds", opt_fail_pause);
|
||||
|
||||
sleep(opt_fail_pause);
|
||||
}
|
||||
|
||||
@ -820,8 +826,8 @@ static void *miner_thread(void *userdata)
|
||||
* of the number of CPUs */
|
||||
if (num_processors > 1 && opt_n_threads % num_processors == 0) {
|
||||
if (!opt_quiet)
|
||||
applog(LOG_INFO, "Binding thread %d to cpu %d",
|
||||
thr_id, thr_id % num_processors);
|
||||
applog(LOG_DEBUG, "Binding thread %d to cpu %d", thr_id,
|
||||
thr_id % num_processors);
|
||||
affine_to_cpu(thr_id, thr_id % num_processors);
|
||||
}
|
||||
|
||||
@ -985,8 +991,8 @@ static void *miner_thread(void *userdata)
|
||||
for (i = 0; i < opt_n_threads && thr_hashrates[i]; i++)
|
||||
hashrate += thr_hashrates[i];
|
||||
if (i == opt_n_threads) {
|
||||
sprintf(s, hashrate >= 1e6 ? "%.0f" : "%.2f", 1e-3 * hashrate);
|
||||
applog(LOG_INFO, "Total: %s khash/s", s);
|
||||
sprintf(s, hashrate >= 1e6 ? "%.0f" : "%.2f", hashrate / 1000.);
|
||||
applog(LOG_NOTICE, "Total: %s khash/s", s);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1066,7 +1072,7 @@ start:
|
||||
pthread_mutex_lock(&g_work_lock);
|
||||
if (work_decode(json_object_get(val, "result"), &g_work)) {
|
||||
if (opt_debug)
|
||||
applog(LOG_DEBUG, "DEBUG: got new work");
|
||||
applog(LOG_BLUE, "LONGPOLL pushed new work");
|
||||
time(&g_work_time);
|
||||
restart_threads();
|
||||
}
|
||||
@ -1158,7 +1164,8 @@ static void *stratum_thread(void *userdata)
|
||||
tq_push(thr_info[work_thr_id].q, NULL);
|
||||
goto out;
|
||||
}
|
||||
applog(LOG_ERR, "...retry after %d seconds", opt_fail_pause);
|
||||
if (!opt_benchmark)
|
||||
applog(LOG_ERR, "...retry after %d seconds", opt_fail_pause);
|
||||
sleep(opt_fail_pause);
|
||||
}
|
||||
}
|
||||
@ -1170,7 +1177,7 @@ static void *stratum_thread(void *userdata)
|
||||
time(&g_work_time);
|
||||
pthread_mutex_unlock(&g_work_lock);
|
||||
if (stratum.job.clean) {
|
||||
if (!opt_quiet) applog(LOG_INFO, "Stratum detected new block");
|
||||
if (!opt_quiet) applog(LOG_BLUE, "Stratum detected new block");
|
||||
restart_threads();
|
||||
}
|
||||
}
|
||||
@ -1245,6 +1252,9 @@ static void parse_arg (int key, char *arg)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'C':
|
||||
use_colors = true;
|
||||
break;
|
||||
case 'q':
|
||||
opt_quiet = true;
|
||||
break;
|
||||
@ -1428,6 +1438,9 @@ static void parse_arg (int key, char *arg)
|
||||
default:
|
||||
show_usage_and_exit(1);
|
||||
}
|
||||
|
||||
if (use_syslog)
|
||||
use_colors = false;
|
||||
}
|
||||
|
||||
static void parse_config(void)
|
||||
|
31
miner.h
31
miner.h
@ -53,6 +53,7 @@ void *alloca (size_t);
|
||||
|
||||
#ifdef HAVE_SYSLOG_H
|
||||
#include <syslog.h>
|
||||
#define LOG_BLUE 0x10 /* unique value */
|
||||
#else
|
||||
enum {
|
||||
LOG_ERR,
|
||||
@ -60,6 +61,8 @@ enum {
|
||||
LOG_NOTICE,
|
||||
LOG_INFO,
|
||||
LOG_DEBUG,
|
||||
/* custom notices */
|
||||
LOG_BLUE = 0x10,
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -284,6 +287,7 @@ extern char *opt_cert;
|
||||
extern char *opt_proxy;
|
||||
extern long opt_proxy_type;
|
||||
extern bool use_syslog;
|
||||
extern bool use_colors;
|
||||
extern pthread_mutex_t applog_lock;
|
||||
extern struct thr_info *thr_info;
|
||||
extern int longpoll_thr_id;
|
||||
@ -292,6 +296,33 @@ extern struct work_restart *work_restart;
|
||||
extern bool opt_trust_pool;
|
||||
extern uint16_t opt_vote;
|
||||
|
||||
#define CL_N "\x1B[0m"
|
||||
#define CL_RED "\x1B[31m"
|
||||
#define CL_GRN "\x1B[32m"
|
||||
#define CL_YLW "\x1B[33m"
|
||||
#define CL_BLU "\x1B[34m"
|
||||
#define CL_MAG "\x1B[35m"
|
||||
#define CL_CYN "\x1B[36m"
|
||||
|
||||
#define CL_BLK "\x1B[22;30m" /* black */
|
||||
#define CL_RD2 "\x1B[22;31m" /* red */
|
||||
#define CL_GR2 "\x1B[22;32m" /* green */
|
||||
#define CL_BRW "\x1B[22;33m" /* brown */
|
||||
#define CL_BL2 "\x1B[22;34m" /* blue */
|
||||
#define CL_MA2 "\x1B[22;35m" /* magenta */
|
||||
#define CL_CY2 "\x1B[22;36m" /* cyan */
|
||||
#define CL_SIL "\x1B[22;37m" /* gray */
|
||||
|
||||
#define CL_GRY "\x1B[01;30m" /* dark gray */
|
||||
#define CL_LRD "\x1B[01;31m" /* light red */
|
||||
#define CL_LGR "\x1B[01;32m" /* light green */
|
||||
#define CL_YL2 "\x1B[01;33m" /* yellow */
|
||||
#define CL_LBL "\x1B[01;34m" /* light blue */
|
||||
#define CL_LMA "\x1B[01;35m" /* light magenta */
|
||||
#define CL_LCY "\x1B[01;36m" /* light cyan */
|
||||
|
||||
#define CL_WHT "\x1B[01;37m" /* white */
|
||||
|
||||
extern void applog(int prio, const char *fmt, ...);
|
||||
extern json_t *json_rpc_call(CURL *curl, const char *url, const char *userpass,
|
||||
const char *rpc_req, bool, bool, int *);
|
||||
|
36
util.c
36
util.c
@ -77,7 +77,14 @@ void applog(int prio, const char *fmt, ...)
|
||||
va_list ap2;
|
||||
char *buf;
|
||||
int len;
|
||||
|
||||
|
||||
/* custom colors to syslog prio */
|
||||
if (prio > LOG_DEBUG) {
|
||||
switch (prio) {
|
||||
case LOG_BLUE: prio = LOG_NOTICE; break;
|
||||
}
|
||||
}
|
||||
|
||||
va_copy(ap2, ap);
|
||||
len = vsnprintf(NULL, 0, fmt, ap2) + 1;
|
||||
va_end(ap2);
|
||||
@ -89,6 +96,7 @@ void applog(int prio, const char *fmt, ...)
|
||||
if (0) {}
|
||||
#endif
|
||||
else {
|
||||
const char* color = "";
|
||||
char *f;
|
||||
int len;
|
||||
time_t now;
|
||||
@ -101,16 +109,34 @@ void applog(int prio, const char *fmt, ...)
|
||||
memcpy(&tm, tm_p, sizeof(tm));
|
||||
pthread_mutex_unlock(&applog_lock);
|
||||
|
||||
len = (int)(40 + strlen(fmt) + 2);
|
||||
f = (char*)alloca(len);
|
||||
sprintf(f, "[%d-%02d-%02d %02d:%02d:%02d] %s\n",
|
||||
switch (prio) {
|
||||
case LOG_ERR: color = CL_RED; break;
|
||||
case LOG_WARNING: color = CL_YLW; break;
|
||||
case LOG_NOTICE: color = CL_WHT; break;
|
||||
case LOG_INFO: color = ""; break;
|
||||
case LOG_DEBUG: color = ""; break;
|
||||
|
||||
case LOG_BLUE:
|
||||
prio = LOG_NOTICE;
|
||||
color = CL_CYN;
|
||||
break;
|
||||
}
|
||||
if (!use_colors)
|
||||
color = "";
|
||||
|
||||
len = 40 + strlen(fmt) + 2;
|
||||
f = alloca(len);
|
||||
sprintf(f, "[%d-%02d-%02d %02d:%02d:%02d]%s %s%s\n",
|
||||
tm.tm_year + 1900,
|
||||
tm.tm_mon + 1,
|
||||
tm.tm_mday,
|
||||
tm.tm_hour,
|
||||
tm.tm_min,
|
||||
tm.tm_sec,
|
||||
fmt);
|
||||
color,
|
||||
fmt,
|
||||
use_colors ? CL_N : ""
|
||||
);
|
||||
pthread_mutex_lock(&applog_lock);
|
||||
vfprintf(stderr, f, ap); /* atomic write to stderr */
|
||||
fflush(stderr);
|
||||
|
Loading…
Reference in New Issue
Block a user