|
|
|
@ -364,6 +364,14 @@ struct stratifier_data {
|
|
|
|
|
|
|
|
|
|
typedef struct stratifier_data sdata_t; |
|
|
|
|
|
|
|
|
|
typedef struct json_entry json_entry_t; |
|
|
|
|
|
|
|
|
|
struct json_entry{ |
|
|
|
|
json_entry_t *next; |
|
|
|
|
json_entry_t *prev; |
|
|
|
|
json_t *val; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/* Priority levels for generator messages */ |
|
|
|
|
#define GEN_LAX 0 |
|
|
|
|
#define GEN_NORMAL 1 |
|
|
|
@ -3684,6 +3692,7 @@ out:
|
|
|
|
|
* avoid floods of stat data coming at once. */ |
|
|
|
|
static void update_workerstats(ckpool_t *ckp, sdata_t *sdata) |
|
|
|
|
{ |
|
|
|
|
json_entry_t *json_list = NULL, *entry, *tmpentry; |
|
|
|
|
user_instance_t *user, *tmp; |
|
|
|
|
char cdfield[64]; |
|
|
|
|
time_t now_t; |
|
|
|
@ -3716,8 +3725,8 @@ static void update_workerstats(ckpool_t *ckp, sdata_t *sdata)
|
|
|
|
|
continue; |
|
|
|
|
DL_FOREACH(user->worker_instances, worker) { |
|
|
|
|
double ghs1, ghs5, ghs60, ghs1440; |
|
|
|
|
int elapsed; |
|
|
|
|
json_t *val; |
|
|
|
|
int elapsed; |
|
|
|
|
|
|
|
|
|
/* Send one lot of stats once the worker is idle if
|
|
|
|
|
* they have submitted no shares in the last 10 minutes |
|
|
|
@ -3744,10 +3753,19 @@ static void update_workerstats(ckpool_t *ckp, sdata_t *sdata)
|
|
|
|
|
"createcode", __func__, |
|
|
|
|
"createinet", ckp->serverurl[0]); |
|
|
|
|
worker->notified_idle = worker->idle; |
|
|
|
|
ckdbq_add(ckp, ID_WORKERSTATS, val); |
|
|
|
|
entry = ckalloc(sizeof(json_entry_t)); |
|
|
|
|
entry->val = val; |
|
|
|
|
DL_APPEND(json_list, entry); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
ck_runlock(&sdata->instance_lock); |
|
|
|
|
|
|
|
|
|
/* Add all entries outside of the instance lock */ |
|
|
|
|
DL_FOREACH_SAFE(json_list, entry, tmpentry) { |
|
|
|
|
ckdbq_add(ckp, ID_WORKERSTATS, entry->val); |
|
|
|
|
DL_DELETE(json_list, entry); |
|
|
|
|
free(entry); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void *statsupdate(void *arg) |
|
|
|
|