Browse Source

Merge branch 'master' of bitbucket.org:ckolivas/ckpool

master
ckolivas 11 years ago
parent
commit
13c09a2414
  1. 14
      pool/page.php
  2. 82
      src/ckdb.c

14
pool/page.php

@ -173,17 +173,17 @@ function pgtop($dotop, $user, $douser)
} }
} }
if (isset($info['lastlp'])) if (isset($info['lastbc']))
{ {
$nlb = $info['lastlp']; $nlb = $info['lastbc'];
if ($nlb != '?') if ($nlb != '?')
{ {
$sec = $now - $info['lastlp']; $sec = $now - $info['lastbc'];
$min = round($sec / 60); $min = round($sec / 60);
$nlb = '~'.$min.'m'; $nlb = $min.'m';
# $s = $sec % 60; $s = $sec % 60;
# if ($s > 0) if ($s > 0)
# $nlb .= " ${s}s"; $nlb .= " ${s}s";
} }
} }

82
src/ckdb.c

@ -653,8 +653,9 @@ static K_LIST *workinfo_list;
static K_STORE *workinfo_store; static K_STORE *workinfo_store;
// one in the current block // one in the current block
static K_ITEM *workinfo_current; static K_ITEM *workinfo_current;
// last of previous block // first workinfo of current block
static K_ITEM *workinfo_lp; // TODO: have it's own memory?
static tv_t *last_bc;
// SHARES id.sharelog.json={...} // SHARES id.sharelog.json={...}
typedef struct shares { typedef struct shares {
@ -889,6 +890,62 @@ static K_STORE *userstats_store;
static char logname[512]; static char logname[512];
#define LOGFILE(_msg) rotating_log(logname, _msg) #define LOGFILE(_msg) rotating_log(logname, _msg)
void logmsg(int loglevel, const char *fmt, ...)
{
int logfd = 0;
char *buf = NULL;
struct tm *tm;
time_t now_t;
va_list ap;
char stamp[128];
char *extra = "";
now_t = time(NULL);
tm = localtime(&now_t);
snprintf(stamp, sizeof(stamp),
"[%d-%02d-%02d %02d:%02d:%02d]",
tm->tm_year + 1900,
tm->tm_mon + 1,
tm->tm_mday,
tm->tm_hour,
tm->tm_min,
tm->tm_sec);
if (!fmt) {
fprintf(stderr, "%s %s() called without fmt\n", stamp, __func__);
return;
}
if (!global_ckp)
extra = " !!NULL global_ckp!!";
else
logfd = global_ckp->logfd;
va_start(ap, fmt);
VASPRINTF(&buf, fmt, ap);
va_end(ap);
if (logfd) {
FILE *LOGFP = global_ckp->logfp;
flock(logfd, LOCK_EX);
fprintf(LOGFP, "%s %s", stamp, buf);
if (loglevel <= LOG_ERR && errno != 0)
fprintf(LOGFP, " with errno %d: %s", errno, strerror(errno));
fprintf(LOGFP, "\n");
flock(logfd, LOCK_UN);
}
if (loglevel <= LOG_WARNING) {
if (loglevel <= LOG_ERR && errno != 0) {
fprintf(stderr, "%s %s with errno %d: %s%s\n",
stamp, buf, errno, strerror(errno), extra);
} else
fprintf(stderr, "%s %s%s\n", stamp, buf, extra);
fflush(stderr);
}
free(buf);
}
static void setnow(tv_t *now) static void setnow(tv_t *now)
{ {
ts_t spec; ts_t spec;
@ -2282,11 +2339,11 @@ unparam:
workinfo_root = add_to_ktree(workinfo_root, item, cmp_workinfo); workinfo_root = add_to_ktree(workinfo_root, item, cmp_workinfo);
k_add_head(workinfo_store, item); k_add_head(workinfo_store, item);
// Remember last workinfo of last height // Remember the bc 'now' when the height changes
if (workinfo_current) { if (workinfo_current) {
if (cmp_height(DATA_WORKINFO(workinfo_current)->coinbase1, if (cmp_height(DATA_WORKINFO(workinfo_current)->coinbase1,
DATA_WORKINFO(item)->coinbase1) != 0) DATA_WORKINFO(item)->coinbase1) != 0)
workinfo_lp = workinfo_current; last_bc = &(DATA_WORKINFO(item)->createdate);
} }
workinfo_current = item; workinfo_current = item;
@ -3191,7 +3248,7 @@ static void clean_up(ckpool_t *ckp)
static void setup_data() static void setup_data()
{ {
K_TREE_CTX ctx[1]; K_TREE_CTX ctx[1];
K_ITEM look; K_ITEM look, *found;
WORKINFO wi; WORKINFO wi;
transfer_list = k_new_list("Transfer", sizeof(TRANSFER), ALLOC_TRANSFER, LIMIT_TRANSFER, true); transfer_list = k_new_list("Transfer", sizeof(TRANSFER), ALLOC_TRANSFER, LIMIT_TRANSFER, true);
@ -3247,7 +3304,10 @@ static void setup_data()
wi.createdate.tv_sec = 0L; wi.createdate.tv_sec = 0L;
wi.createdate.tv_usec = 0L; wi.createdate.tv_usec = 0L;
look.data = (void *)(&wi); look.data = (void *)(&wi);
workinfo_lp = find_before_in_ktree(workinfo_height_root, &look, cmp_workinfo_height, ctx); // Find the first workinfo for this height
found = find_after_in_ktree(workinfo_height_root, &look, cmp_workinfo_height, ctx);
if (found)
last_bc = &(DATA_WORKINFO(found)->createdate);
// No longer needed // No longer needed
workinfo_height_root = free_ktree(workinfo_height_root, NULL); workinfo_height_root = free_ktree(workinfo_height_root, NULL);
} }
@ -3874,16 +3934,17 @@ static char *cmd_homepage(char *cmd, char *id, __maybe_unused tv_t *now, __maybe
strcpy(buf, "ok."); strcpy(buf, "ok.");
off = strlen(buf); off = strlen(buf);
if (workinfo_lp) { if (last_bc) {
tvs_to_buf(&(DATA_WORKINFO(workinfo_lp)->createdate), reply, sizeof(reply)); tvs_to_buf(last_bc, reply, sizeof(reply));
snprintf(tmp, sizeof(tmp), "lastlp=%s%c", reply, FLDSEP); snprintf(tmp, sizeof(tmp), "lastbc=%s%c", reply, FLDSEP);
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
} else { } else {
snprintf(tmp, sizeof(tmp), "lastlp=?%c", FLDSEP); snprintf(tmp, sizeof(tmp), "lastbc=?%c", FLDSEP);
APPEND_REALLOC(buf, off, len, tmp); APPEND_REALLOC(buf, off, len, tmp);
} }
/* /*
// TODO: have a last_block - like last_bc - only updated when we find a block
b_item = last_in_tree(blocks_root, ctx); b_item = last_in_tree(blocks_root, ctx);
if (b_item) { if (b_item) {
tvs_to_buf(&(DATA_BLOCKS(b_item)->createdate), reply, sizeof(reply)); tvs_to_buf(&(DATA_BLOCKS(b_item)->createdate), reply, sizeof(reply));
@ -4260,6 +4321,7 @@ int main(int argc, char **argv)
int c, ret; int c, ret;
char *kill; char *kill;
global_ckp = &ckp;
memset(&ckp, 0, sizeof(ckp)); memset(&ckp, 0, sizeof(ckp));
ckp.loglevel = LOG_NOTICE; ckp.loglevel = LOG_NOTICE;

Loading…
Cancel
Save