diff --git a/pool/page_allwork.php b/pool/page_allwork.php
index d1f43c1a..a188c381 100644
--- a/pool/page_allwork.php
+++ b/pool/page_allwork.php
@@ -16,6 +16,7 @@ function doallwork($data, $user)
$offset = 0;
$blockacc = 0;
$blockreward = 0;
+ $instances = 0;
$pg .= worktitle($data, $user);
@@ -29,12 +30,14 @@ function doallwork($data, $user)
$pg .= workuser($data, $ans['username:'.$i],
$offset, $totshare, $totdiff,
$totshrate, $totinvalid, $totrate,
- $blockacc, $blockreward, 3600, false, false, $title);
+ $blockacc, $blockreward,
+ 3600, false, false,
+ $title, $instances);
}
}
$pg .= worktotal($offset, $totshare, $totdiff, $totshrate, $totinvalid,
- $totrate, $blockacc, $blockreward);
+ $totrate, $blockacc, $blockreward, $instances);
$pg .= "\n";
diff --git a/pool/page_workers.php b/pool/page_workers.php
index 912b8214..d8a55aed 100644
--- a/pool/page_workers.php
+++ b/pool/page_workers.php
@@ -42,7 +42,7 @@ function workhashorder($a, $b)
function workuser($data, $user, &$offset, &$totshare, &$totdiff,
&$totshrate, &$totinvalid, &$totrate, &$blockacc,
&$blockreward, $old = false, $srt = false,
- $one = false, &$title)
+ $one = false, &$title, &$instances)
{
$ans = getWorkers($user);
@@ -93,6 +93,8 @@ function workuser($data, $user, &$offset, &$totshare, &$totdiff,
'w_active_diffacc' => $ans['w_active_diffacc:'.$i],
'w_active_start' => $ans['w_active_start:'.$i],
'w_uhr' => $uhr);
+
+ $instances += $ans['w_instances:'.$i];
}
if ($srt)
@@ -205,16 +207,21 @@ function workuser($data, $user, &$offset, &$totshare, &$totdiff,
}
#
function worktotal($offset, $totshare, $totdiff, $totshrate, $totinvalid,
- $totrate, $blockacc, $blockreward)
+ $totrate, $blockacc, $blockreward, $instances)
{
$pg = '';
$totshrate = dsprate($totshrate);
$totrate = dsprate($totrate);
+# if ($instances >= 0)
+# $dspinst = " ($instances miners)";
+# else
+ $dspinst = '';
+
if (($offset % 2) == 0)
$row = 'even';
else
$row = 'odd';
- $pg .= "
Total: $offset | | ";
+ $pg .= "
Total: $offset$dspinst | ";
$shareacc = number_format($totshare, 0);
$pg .= "$shareacc | ";
$diffacc = number_format($totdiff, 0);
@@ -250,13 +257,14 @@ function doworker($data, $user)
$offset = 0;
$blockacc = 0;
$blockreward = 0;
+ $instances = 0;
$pg .= worktitle($data, $user);
$pg .= workuser($data, $user, $offset, $totshare, $totdiff, $totshrate,
$totinvalid, $totrate, $blockacc, $blockreward,
- false, true, true, $title);
+ false, true, true, $title, $instances);
$pg .= worktotal($offset, $totshare, $totdiff, $totshrate, $totinvalid,
- $totrate, $blockacc, $blockreward);
+ $totrate, $blockacc, $blockreward, $instances);
if (false && $blockacc > 0 && $blockreward > 0)
{
diff --git a/src/ckdb.h b/src/ckdb.h
index c37d8fc0..9584f5c9 100644
--- a/src/ckdb.h
+++ b/src/ckdb.h
@@ -51,7 +51,7 @@
#define DB_VLOCK "1"
#define DB_VERSION "1.0.4"
-#define CKDB_VERSION DB_VERSION"-1.913"
+#define CKDB_VERSION DB_VERSION"-1.914"
#define WHERE_FFL " - from %s %s() line %d"
#define WHERE_FFL_HERE __FILE__, __func__, __LINE__
@@ -1777,6 +1777,7 @@ typedef struct userstats {
double hashrate1hr;
double hashrate24hr;
bool idle; // non-DB field
+ int instances;
char summarylevel[TXT_FLAG+1]; // SUMMARY_NONE in RAM
int32_t summarycount;
tv_t statsdate;
@@ -1800,6 +1801,8 @@ extern K_STORE *userstats_store;
// Awaiting EOS
extern K_STORE *userstats_eos_store;
+#define NO_INSTANCE_DATA -1
+
/* 1.5 x how often we expect to get user's stats from ckpool
* This is used when grouping the sub-worker stats into a single user
* We add each worker's latest stats to the total - except we ignore
@@ -2629,8 +2632,8 @@ extern bool userstats_add(char *poolinstance, char *elapsed, char *username,
extern bool workerstats_add(char *poolinstance, char *elapsed, char *username,
char *workername, char *hashrate, char *hashrate5m,
char *hashrate1hr, char *hashrate24hr, bool idle,
- char *by, char *code, char *inet, tv_t *cd,
- K_TREE *trf_root);
+ char *instances, char *by, char *code, char *inet,
+ tv_t *cd, K_TREE *trf_root);
extern bool userstats_fill(PGconn *conn);
extern bool markersummary_add(PGconn *conn, K_ITEM *ms_item, char *by, char *code,
char *inet, tv_t *cd, K_TREE *trf_root);
diff --git a/src/ckdb_cmd.c b/src/ckdb_cmd.c
index 8ed93bbb..07b012dc 100644
--- a/src/ckdb_cmd.c
+++ b/src/ckdb_cmd.c
@@ -1111,7 +1111,7 @@ static char *cmd_workerstats(__maybe_unused PGconn *conn, char *cmd, char *id,
K_ITEM *i_poolinstance, *i_elapsed, *i_username, *i_workername;
K_ITEM *i_hashrate, *i_hashrate5m, *i_hashrate1hr, *i_hashrate24hr;
- K_ITEM *i_idle;
+ K_ITEM *i_idle, *i_instances;
bool ok = false, idle;
LOGDEBUG("%s(): cmd '%s'", __func__, cmd);
@@ -1154,6 +1154,8 @@ static char *cmd_workerstats(__maybe_unused PGconn *conn, char *cmd, char *id,
idle = (strcasecmp(transfer_data(i_idle), TRUE_STR) == 0);
+ i_instances = optional_name(trf_root, "instances", 1, NULL, reply, siz);
+
ok = workerstats_add(transfer_data(i_poolinstance),
transfer_data(i_elapsed),
transfer_data(i_username),
@@ -1161,8 +1163,9 @@ static char *cmd_workerstats(__maybe_unused PGconn *conn, char *cmd, char *id,
transfer_data(i_hashrate),
transfer_data(i_hashrate5m),
transfer_data(i_hashrate1hr),
- transfer_data(i_hashrate24hr),
- idle, by, code, inet, cd, trf_root);
+ transfer_data(i_hashrate24hr), idle,
+ i_instances ? transfer_data(i_instances) : NULL,
+ by, code, inet, cd, trf_root);
if (!ok) {
LOGERR("%s() %s.failed.DATA", __func__, id);
@@ -2089,10 +2092,12 @@ static char *cmd_workers(__maybe_unused PGconn *conn, char *cmd, char *id,
double w_sharehi, w_sharerej;
double w_active_diffacc;
tv_t w_active_start;
+ int w_instances;
w_hashrate5m = w_hashrate1hr =
w_hashrate24hr = 0.0;
w_elapsed = -1;
+ w_instances = NO_INSTANCE_DATA;
if (!ws_item) {
w_lastshare.tv_sec =
@@ -2143,6 +2148,12 @@ static char *cmd_workers(__maybe_unused PGconn *conn, char *cmd, char *id,
w_hashrate24hr += userstats->hashrate24hr;
if (w_elapsed == -1 || w_elapsed > userstats->elapsed)
w_elapsed = userstats->elapsed;
+ w_instances += userstats->instances;
+ if (userstats->instances != NO_INSTANCE_DATA) {
+ if (w_instances == NO_INSTANCE_DATA)
+ w_instances = 0;
+ w_instances += userstats->instances;
+ }
}
}
K_RUNLOCK(userstats_free);
@@ -2231,6 +2242,9 @@ static char *cmd_workers(__maybe_unused PGconn *conn, char *cmd, char *id,
snprintf(tmp, sizeof(tmp), "w_active_start:%d=%s%c", rows, reply, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
+ int_to_buf(w_instances, reply, sizeof(reply));
+ snprintf(tmp, sizeof(tmp), "w_instances:%d=%s%c", rows, reply, FLDSEP);
+ APPEND_REALLOC(buf, off, len, tmp);
}
rows++;
}
@@ -2251,7 +2265,7 @@ static char *cmd_workers(__maybe_unused PGconn *conn, char *cmd, char *id,
"w_diffsta,w_diffdup,w_diffhi,w_diffrej,"
"w_shareacc,w_shareinv,"
"w_sharesta,w_sharedup,w_sharehi,w_sharerej,"
- "w_active_diffacc,w_active_start" : "",
+ "w_active_diffacc,w_active_start,w_instances" : "",
FLDSEP);
APPEND_REALLOC(buf, off, len, tmp);
diff --git a/src/ckdb_dbio.c b/src/ckdb_dbio.c
index 2a8dca66..541a3ca9 100644
--- a/src/ckdb_dbio.c
+++ b/src/ckdb_dbio.c
@@ -6544,6 +6544,7 @@ bool userstats_add(char *poolinstance, char *elapsed, char *username,
TXT_TO_DOUBLE("hashrate1hr", hashrate1hr, row->hashrate1hr);
TXT_TO_DOUBLE("hashrate24hr", hashrate24hr, row->hashrate24hr);
row->idle = idle;
+ row->instances = NO_INSTANCE_DATA;
row->summarylevel[0] = SUMMARY_NONE;
row->summarylevel[1] = '\0';
row->summarycount = 1;
@@ -6612,8 +6613,8 @@ bool userstats_add(char *poolinstance, char *elapsed, char *username,
bool workerstats_add(char *poolinstance, char *elapsed, char *username,
char *workername, char *hashrate, char *hashrate5m,
char *hashrate1hr, char *hashrate24hr, bool idle,
- char *by, char *code, char *inet, tv_t *cd,
- K_TREE *trf_root)
+ char *instances, char *by, char *code, char *inet,
+ tv_t *cd, K_TREE *trf_root)
{
K_ITEM *us_item, *u_item, *us_match;
USERSTATS *row, *match;
@@ -6652,6 +6653,10 @@ bool workerstats_add(char *poolinstance, char *elapsed, char *username,
TXT_TO_DOUBLE("hashrate1hr", hashrate1hr, row->hashrate1hr);
TXT_TO_DOUBLE("hashrate24hr", hashrate24hr, row->hashrate24hr);
row->idle = idle;
+ if (instances)
+ TXT_TO_INT("instances", instances, row->instances);
+ else
+ row->instances = NO_INSTANCE_DATA;
row->summarylevel[0] = SUMMARY_NONE;
row->summarylevel[1] = '\0';
row->summarycount = 1;