diff --git a/src/stratifier.c b/src/stratifier.c index 49bbe00e..16965448 100644 --- a/src/stratifier.c +++ b/src/stratifier.c @@ -195,6 +195,7 @@ struct user_instance { tv_t last_share; time_t last_stats; + time_t start_time; double dsps1; double dsps5; @@ -1110,9 +1111,13 @@ static user_instance_t *authorise_user(const char *workername) ck_ilock(&instance_lock); HASH_FIND_STR(user_instances, username, instance); if (!instance) { + ts_t now; + /* New user instance */ instance = ckzalloc(sizeof(user_instance_t)); strcpy(instance->username, username); + ts_realtime(&now); + instance->start_time = now.tv_sec; ck_ulock(&instance_lock); instance->id = user_instance_id++; @@ -2020,16 +2025,19 @@ static void update_userstats(ckpool_t *ckp) ck_rlock(&instance_lock); HASH_ITER(hh, user_instances, instance, tmp) { double ghs1, ghs5, ghs60, ghs1440; + int elapsed; if (instance->last_stats > now_t - 600) continue; + elapsed = now_t - instance->start_time; instance->last_stats = now_t; ghs1 = instance->dsps1 * nonces; ghs5 = instance->dsps5 * nonces; ghs60 = instance->dsps60 * nonces; ghs1440 = instance->dsps1440 * nonces; - val = json_pack("{ss,ss,sf,sf,sf,sf,ss,ss,ss,ss}", + val = json_pack("{ss,si,ss,sf,sf,sf,sf,ss,ss,ss,ss}", "poolinstance", ckp->name, + "elapsed", elapsed, "username", instance->username, "hashrate", ghs1, "hashrate5m", ghs5, @@ -2196,8 +2204,9 @@ static void *statsupdate(void *arg) ts_realtime(&ts_now); sprintf(cdfield, "%lu,%lu", ts_now.tv_sec, ts_now.tv_nsec); - val = json_pack("{ss,si,si,sf,sf,sf,sf,ss,ss,ss,ss}", + val = json_pack("{ss,si,si,si,sf,sf,sf,sf,ss,ss,ss,ss}", "poolinstance", ckp->name, + "elapsed", diff.tv_sec, "users", stats.users, "workers", stats.workers, "hashrate", ghs1,