diff --git a/pool/page_blocks.php b/pool/page_blocks.php index 5ea62e6e..b37ba449 100644 --- a/pool/page_blocks.php +++ b/pool/page_blocks.php @@ -27,20 +27,20 @@ function doblocks($data, $user) $row = 'odd'; $ex = ''; - $stat = $ans['status'.$i]; + $stat = $ans['status:'.$i]; if ($stat == 'Orphan') $ex = 's'; if ($stat == '1-Confirm') $stat = 'Conf'; - $hi = $ans['height'.$i]; + $hi = $ans['height:'.$i]; $hifld = "$blink$hi>$hi"; $pg .= ""; $pg .= "$hifld"; - $pg .= "".$ans['workername'.$i].''; - $pg .= "".btcfmt($ans['reward'.$i]).''; - $pg .= "".gmdate('Y-m-d H:i:s+00', $ans['firstcreatedate'.$i]).''; + $pg .= "".$ans['workername:'.$i].''; + $pg .= "".btcfmt($ans['reward:'.$i]).''; + $pg .= "".gmdate('Y-m-d H:i:s+00', $ans['firstcreatedate:'.$i]).''; $pg .= "".$stat.''; $pg .= "\n"; } diff --git a/pool/page_ckp.php b/pool/page_ckp.php index 18a0e326..e9eb2b8a 100644 --- a/pool/page_ckp.php +++ b/pool/page_ckp.php @@ -35,26 +35,19 @@ function dockp($data, $user) $pg .= "\n"; if ($ans['STATUS'] == 'ok') { - for ($i = 0; $i < 999; $i++) + $count = $ans['rows']; + for ($i = 0; $i < $count; $i++) { - if ($i == 0) - $name = 'stats.name'; - else - $name = 'name'; - - if (!isset($ans[$name.$i])) - break; - if (($i % 2) == 0) $row = 'even'; else $row = 'odd'; $pg .= ""; - $pg .= ''.$ans[$name.$i].''; - $pg .= ''.stnum($ans['allocated'.$i]).''; - $pg .= ''.stnum($ans['store'.$i]).''; - $pg .= ''.stnum($ans['ram'.$i]).''; + $pg .= ''.$ans['name:'.$i].''; + $pg .= ''.stnum($ans['allocated:'.$i]).''; + $pg .= ''.stnum($ans['store:'.$i]).''; + $pg .= ''.stnum($ans['ram:'.$i]).''; $pg .= "\n"; } } diff --git a/pool/page_payments.php b/pool/page_payments.php index e145e785..f3ddc309 100644 --- a/pool/page_payments.php +++ b/pool/page_payments.php @@ -23,9 +23,9 @@ function dopayments($data, $user) $row = 'odd'; $pg .= ""; - $pg .= ''.$ans['paydate'.$i].''; - $pg .= ''.$ans['payaddress'.$i].''; - $pg .= ''.btcfmt($ans['amount'.$i]).''; + $pg .= ''.$ans['paydate:'.$i].''; + $pg .= ''.$ans['payaddress:'.$i].''; + $pg .= ''.btcfmt($ans['amount:'.$i]).''; $pg .= "\n"; } } diff --git a/pool/page_pplns.php b/pool/page_pplns.php index 712cb5b8..42f47acc 100644 --- a/pool/page_pplns.php +++ b/pool/page_pplns.php @@ -98,9 +98,9 @@ Block: $reward = $ans['block_reward'] / pow(10,8); $elapsed = $ans['pplns_elapsed']; $count = $ans['rows']; - for ($i = 1; $i <= $count; $i++) + for ($i = 0; $i < $count; $i++) { - $diffacc_user = $ans['diffacc_user'.$i]; + $diffacc_user = $ans['diffacc_user:'.$i]; $diffacc_percent = number_format(100.0 * $diffacc_user / $diffacc_total, 2).'%'; $diffacc_btc = number_format($reward * $diffacc_user / $diffacc_total, 8); $avg_hash = number_format($diffacc_user / $elapsed * pow(2,32), 0); @@ -111,7 +111,7 @@ Block: $row = 'odd'; $pg .= ""; - $pg .= ''.$ans['user'.$i].''; + $pg .= ''.$ans['user:'.$i].''; $pg .= "$diffacc_user"; $pg .= "$diffacc_percent"; $pg .= "$diffacc_btc"; diff --git a/pool/page_stats.php b/pool/page_stats.php index 244ea520..7a6190db 100644 --- a/pool/page_stats.php +++ b/pool/page_stats.php @@ -25,9 +25,9 @@ function dostats($data, $user) $count = $ans['rows']; for ($i = 0; $i < $count; $i++) { - $all[] = array('username' => $ans['username'.$i], - 'userid' => $ans['userid'.$i], - 'u_hashrate5m' => $ans['u_hashrate5m'.$i]); + $all[] = array('username' => $ans['username:'.$i], + 'userid' => $ans['userid:'.$i], + 'u_hashrate5m' => $ans['u_hashrate5m:'.$i]); } usort($all, 'allusersort'); diff --git a/pool/page_workers.php b/pool/page_workers.php index f83c63c0..023e6e9c 100644 --- a/pool/page_workers.php +++ b/pool/page_workers.php @@ -28,10 +28,10 @@ function doworker($data, $user) $row = 'odd'; $pg .= ""; - $pg .= ''.$ans['workername'.$i].''; + $pg .= ''.$ans['workername:'.$i].''; /* - $pg .= ''.$ans['difficultydefault'.$i].''; - $nots = $ans['idlenotificationenabled'.$i]; + $pg .= ''.$ans['difficultydefault:'.$i].''; + $nots = $ans['idlenotificationenabled:'.$i]; switch ($nots) { case 'Y': @@ -42,14 +42,14 @@ function doworker($data, $user) $nots = 'N'; } $pg .= ''.$nots.''; - $pg .= ''.$ans['idlenotificationtime'.$i].''; + $pg .= ''.$ans['idlenotificationtime:'.$i].''; */ - if ($ans['w_lastdiff'.$i] > 0) - $ld = difffmt($ans['w_lastdiff'.$i]); + if ($ans['w_lastdiff:'.$i] > 0) + $ld = difffmt($ans['w_lastdiff:'.$i]); else $ld = ' '; $pg .= "$ld"; - $lst = $ans['STAMP'] - $ans['w_lastshare'.$i]; + $lst = $ans['STAMP'] - $ans['w_lastshare:'.$i]; if ($lst < 60) $lstdes = $lst.'s'; else @@ -81,10 +81,10 @@ function doworker($data, $user) } } $pg .= "$lstdes"; - if ($ans['w_elapsed'.$i] > 3600) - $uhr = $ans['w_hashrate1hr'.$i]; + if ($ans['w_elapsed:'.$i] > 3600) + $uhr = $ans['w_hashrate1hr:'.$i]; else - $uhr = $ans['w_hashrate5m'.$i]; + $uhr = $ans['w_hashrate5m:'.$i]; if ($uhr == '?') $uhr = '?GHs'; else diff --git a/src/ckdb.c b/src/ckdb.c index 4eb598ac..22763a42 100644 --- a/src/ckdb.c +++ b/src/ckdb.c @@ -47,7 +47,7 @@ #define DB_VLOCK "1" #define DB_VERSION "0.8" -#define CKDB_VERSION DB_VERSION"-0.213" +#define CKDB_VERSION DB_VERSION"-0.220" #define WHERE_FFL " - from %s %s() line %d" #define WHERE_FFL_HERE __FILE__, __func__, __LINE__ @@ -7882,37 +7882,37 @@ static char *cmd_blocklist(__maybe_unused PGconn *conn, char *cmd, char *id, } if (CURRENT(&(blocks->expirydate))) { int_to_buf(blocks->height, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "height%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "height:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); str_to_buf(blocks->blockhash, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "blockhash%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "blockhash:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); str_to_buf(blocks->nonce, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "nonce%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "nonce:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); bigint_to_buf(blocks->reward, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "reward%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "reward:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); str_to_buf(blocks->workername, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "workername%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "workername:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); snprintf(tmp, sizeof(tmp), - "firstcreatedate%d=%ld%c", rows, + "firstcreatedate:%d=%ld%c", rows, first_cd.tv_sec, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); snprintf(tmp, sizeof(tmp), - "createdate%d=%ld%c", rows, + "createdate:%d=%ld%c", rows, blocks->createdate.tv_sec, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); snprintf(tmp, sizeof(tmp), - "status%d=%s%c", rows, + "status:%d=%s%c", rows, blocks_confirmed(blocks->confirmed), FLDSEP); APPEND_REALLOC(buf, off, len, tmp); @@ -7921,7 +7921,14 @@ static char *cmd_blocklist(__maybe_unused PGconn *conn, char *cmd, char *id, b_item = prev_in_ktree(ctx); } K_RUNLOCK(blocks_free); - snprintf(tmp, sizeof(tmp), "rows=%d", rows); + snprintf(tmp, sizeof(tmp), + "rows=%d%cflds=%s%c", + rows, FLDSEP, + "height,blockhash,nonce,reward,workername,firstcreatedate," + "createdate,status", FLDSEP); + APPEND_REALLOC(buf, off, len, tmp); + + snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s", "Blocks", FLDSEP, ""); APPEND_REALLOC(buf, off, len, tmp); LOGDEBUG("%s.ok.%d_blocks", id, rows); @@ -8134,22 +8141,27 @@ static char *cmd_payments(__maybe_unused PGconn *conn, char *cmd, char *id, rows = 0; while (p_item && payments->userid == users->userid) { tv_to_buf(&(payments->paydate), reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "paydate%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "paydate:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); str_to_buf(payments->payaddress, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "payaddress%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "payaddress:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); bigint_to_buf(payments->amount, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "amount%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "amount:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); rows++; p_item = next_in_ktree(ctx); DATA_PAYMENTS_NULL(payments, p_item); } - snprintf(tmp, sizeof(tmp), "rows=%d", rows); + snprintf(tmp, sizeof(tmp), "rows=%d%cflds=%s%c", + rows, FLDSEP, + "paydate,payaddress,amount", FLDSEP); + APPEND_REALLOC(buf, off, len, tmp); + + snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s", "Payments", FLDSEP, ""); APPEND_REALLOC(buf, off, len, tmp); LOGDEBUG("%s.ok.%s", id, transfer_data(i_username)); @@ -8210,19 +8222,19 @@ static char *cmd_workers(__maybe_unused PGconn *conn, char *cmd, char *id, while (w_item && workers->userid == users->userid) { if (CURRENT(&(workers->expirydate))) { str_to_buf(workers->workername, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "workername%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "workername:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); int_to_buf(workers->difficultydefault, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "difficultydefault%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "difficultydefault:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); str_to_buf(workers->idlenotificationenabled, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "idlenotificationenabled%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "idlenotificationenabled:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); int_to_buf(workers->idlenotificationtime, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "idlenotificationtime%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "idlenotificationtime:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); if (stats) { @@ -8279,23 +8291,23 @@ static char *cmd_workers(__maybe_unused PGconn *conn, char *cmd, char *id, } double_to_buf(w_hashrate5m, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "w_hashrate5m%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "w_hashrate5m:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); double_to_buf(w_hashrate1hr, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "w_hashrate1hr%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "w_hashrate1hr:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); bigint_to_buf(w_elapsed, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "w_elapsed%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "w_elapsed:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); int_to_buf((int)(w_lastshare.tv_sec), reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "w_lastshare%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "w_lastshare:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); double_to_buf((int)(w_lastdiff), reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "w_lastdiff%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "w_lastdiff:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); userstats_workername_root = free_ktree(userstats_workername_root, NULL); @@ -8307,7 +8319,15 @@ static char *cmd_workers(__maybe_unused PGconn *conn, char *cmd, char *id, w_item = next_in_ktree(w_ctx); DATA_WORKERS_NULL(workers, w_item); } - snprintf(tmp, sizeof(tmp), "rows=%d", rows); + snprintf(tmp, sizeof(tmp), + "rows=%d%cflds=%s%s%c", + rows, FLDSEP, + "workername,difficultydefault,idlenotificationenabled,idlenotificationtime", + stats ? ",w_hashrate5m,w_hashrate1hr,w_elapsed,w_lastshare,w_lastdiff" : "", + FLDSEP); + APPEND_REALLOC(buf, off, len, tmp); + + snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s", "Workers", FLDSEP, ""); APPEND_REALLOC(buf, off, len, tmp); LOGDEBUG("%s.ok.%s", id, transfer_data(i_username)); @@ -8378,19 +8398,19 @@ static char *cmd_allusers(__maybe_unused PGconn *conn, char *cmd, char *id, } else { DATA_USERS(users, u_item); str_to_buf(users->username, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "username%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "username:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); bigint_to_buf(userid, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "userid%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "userid:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); double_to_buf(u_hashrate5m, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "u_hashrate5m%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "u_hashrate5m:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); double_to_buf(u_hashrate1hr, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "u_hashrate1hr%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "u_hashrate1hr:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); rows++; @@ -8418,19 +8438,19 @@ static char *cmd_allusers(__maybe_unused PGconn *conn, char *cmd, char *id, } else { DATA_USERS(users, u_item); str_to_buf(users->username, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "username%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "username:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); bigint_to_buf(userid, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "userid%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "userid:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); double_to_buf(u_hashrate5m, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "u_hashrate5m%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "u_hashrate5m:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); double_to_buf(u_hashrate1hr, reply, sizeof(reply)); - snprintf(tmp, sizeof(tmp), "u_hashrate1hr%d=%s%c", rows, reply, FLDSEP); + snprintf(tmp, sizeof(tmp), "u_hashrate1hr:%d=%s%c", rows, reply, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); rows++; @@ -8440,7 +8460,13 @@ static char *cmd_allusers(__maybe_unused PGconn *conn, char *cmd, char *id, userstats_workername_root = free_ktree(userstats_workername_root, NULL); K_WUNLOCK(userstats_free); - snprintf(tmp, sizeof(tmp), "rows=%d", rows); + snprintf(tmp, sizeof(tmp), + "rows=%d%cflds=%s%c", + rows, FLDSEP, + "username,userid,u_hashrate5m,u_hashrate1hr", FLDSEP); + APPEND_REALLOC(buf, off, len, tmp); + + snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s", "Users", FLDSEP, ""); APPEND_REALLOC(buf, off, len, tmp); LOGDEBUG("%s.ok.allusers", id); @@ -9493,7 +9519,6 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id, mu_item = first_in_ktree(mu_root, ctx); while (mu_item) { DATA_MININGPAYOUTS(miningpayouts, mu_item); - rows++; K_RLOCK(users_free); u_item = find_userid(miningpayouts->userid); @@ -9501,13 +9526,13 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id, if (u_item) { DATA_USERS(users, u_item); snprintf(tmp, sizeof(tmp), - "user%d=%s%c", + "user:%d=%s%c", rows, users->username, FLDSEP); } else { snprintf(tmp, sizeof(tmp), - "user%d=%"PRId64"%c", + "user:%d=%"PRId64"%c", rows, miningpayouts->userid, FLDSEP); @@ -9515,15 +9540,23 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id, APPEND_REALLOC(buf, off, len, tmp); snprintf(tmp, sizeof(tmp), - "diffacc_user%d=%"PRId64"%c", + "diffacc_user:%d=%"PRId64"%c", rows, miningpayouts->amount, FLDSEP); APPEND_REALLOC(buf, off, len, tmp); mu_item = next_in_ktree(ctx); + rows++; } - snprintf(tmp, sizeof(tmp), "rows=%d%c", rows, FLDSEP); + snprintf(tmp, sizeof(tmp), + "rows=%d%c,flds=%s%c", + rows, FLDSEP, + "user,diffacc_user", FLDSEP); + APPEND_REALLOC(buf, off, len, tmp); + + snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s%c", + "Users", FLDSEP, "", FLDSEP); APPEND_REALLOC(buf, off, len, tmp); tv_to_buf(&begin_tv, tv_buf, sizeof(tv_buf)); @@ -9614,13 +9647,12 @@ static char *cmd_stats(__maybe_unused PGconn *conn, char *cmd, char *id, size_t len, off; uint64_t ram, tot = 0; K_LIST *klist; - int i = 0; + int rows = 0; LOGDEBUG("%s(): cmd '%s'", __func__, cmd); APPEND_REALLOC_INIT(buf, off, len); APPEND_REALLOC(buf, off, len, "ok."); - APPEND_REALLOC(buf, off, len, cmd); // Doesn't include blob memory // - average transactiontree length of ~119k I have is ~28k (>3.3GB) @@ -9630,16 +9662,16 @@ static char *cmd_stats(__maybe_unused PGconn *conn, char *cmd, char *id, klist->allocate * klist->item_mem_count * klist->siz + \ sizeof(K_TREE) * (klist->total - klist->count) * _trees; \ snprintf(tmp, sizeof(tmp), \ - "%cname%d=" #_obj "%callocated%d=%d%cstore%d=%d" \ - "%ctrees%d=%d%cram%d=%"PRIu64, \ - i ? FLDSEP : '.', i, \ - FLDSEP, i, klist->total, \ - FLDSEP, i, klist->total - klist->count, \ - FLDSEP, i, _trees, \ - FLDSEP, i, ram); \ + "name:%d=" #_obj "%callocated:%d=%d%cstore:%d=%d" \ + "%ctrees:%d=%d%cram:%d=%"PRIu64"%c", \ + rows, FLDSEP, \ + rows, klist->total, FLDSEP, \ + rows, klist->total - klist->count, FLDSEP, \ + rows, _trees, FLDSEP, \ + rows, ram, FLDSEP); \ APPEND_REALLOC(buf, off, len, tmp); \ tot += ram; \ - i++; + rows++; USEINFO(users, 1, 2); USEINFO(workers, 1, 1); @@ -9659,7 +9691,16 @@ static char *cmd_stats(__maybe_unused PGconn *conn, char *cmd, char *id, USEINFO(transfer, 0, 0); USEINFO(logqueue, 1, 0); - snprintf(tmp, sizeof(tmp), "%ctotalram=%"PRIu64, FLDSEP, tot); + snprintf(tmp, sizeof(tmp), "totalram=%"PRIu64"%c", tot, FLDSEP); + APPEND_REALLOC(buf, off, len, tmp); + + snprintf(tmp, sizeof(tmp), + "rows=%d%cflds=%s%c", + rows, FLDSEP, + "name,allocated,store,trees,ram", FLDSEP); + APPEND_REALLOC(buf, off, len, tmp); + + snprintf(tmp, sizeof(tmp), "arn=%s%carp=%s", "Users", FLDSEP, ""); APPEND_REALLOC(buf, off, len, tmp); LOGDEBUG("%s.ok.%s...", id, cmd);