function dopsperf($data, $user) { global $fld_sep, $val_sep; $cols = array('#0000c0'); $nc = count($cols); $datacols = $cols[0]; $ans = getPShiftData($user); $iCrap = strpos($_SERVER['HTTP_USER_AGENT'], 'iP'); if ($iCrap) { $vlines = false; } else { $vlines = true; } $pg = '<h1>Pool Shift Reward Performance</h1><br>'; if ($ans['STATUS'] == 'ok' and $ans['DATA'] != '') { addGBase(); addTips(); $cbx = array('skey' => 'shift key', 'slines' => 'shift lines', 'tkey' => 'time key', 'tlines' => 'time lines', 'over' => 'key overlap', 'smooth' => 'smooth', 'zerob' => 'zero based', 'utc' => 'utc'); $xon = array('skey' => 1, 'utc' => 1); if ($vlines === true) { $xon['slines'] = 1; } $pg .= "<div>"; foreach ($cbx as $nam => $txt) { $pg .= ' <span class=nb>'; $pg .= "<input type=checkbox id={$nam} onclick='gact(this)'>"; $pg .= "{$txt} </span>"; } $pg .= '</div>'; $pg .= '<div id=can0><canvas id=can width=1 height=1>'; $pg .= 'A graph will show here if your browser supports html5/canvas'; $pg .= "</canvas></div>\n"; $data = str_replace(array("\\", "'"), array("\\\\", "\\'"), $ans['DATA']); $data .= $fld_sep . 'cols' . $val_sep . $datacols; $pg .= "<script type='text/javascript'>\n"; $pg .= pspg($nc); $pg .= "\nfunction godrw(f){var cbx=["; $comma = ''; foreach ($cbx as $nam => $txt) { $pg .= "{$comma}'{$nam}'"; $comma = ','; } $pg .= '];if(f){var xon={};'; foreach ($xon as $nam => $val) { $pg .= "xon['{$nam}']=1;"; } $pg .= "doinit(cbx,xon)}dodrw('{$data}',cbx)};godrw(1);</script>\n"; } return $pg; }
function dousperf($data, $user) { global $fld_sep, $val_sep; // This also defines how many worker fields there are $cols = array('#0000c0', '#00dd00', '#e06020', '#b020e0'); $nc = count($cols); $workers = 'all'; if (isset($_COOKIE['workers'])) { $w = substr(trim($_COOKIE['workers']), 0, 1024); if ($w !== false) { $wa = explode(',', $w, $nc + 1); if (count($wa) > $nc) { $w = ''; for ($i = 0; $i < $nc; $i++) { $w .= ($i == 0 ? '' : ',') . $wa[$i]; } } $workers = $w; } } $ans = getShiftData($user, $workers); $iCrap = strpos($_SERVER['HTTP_USER_AGENT'], 'iP'); if ($iCrap) { $vlines = false; } else { $vlines = true; } $pg = '<h1>User Shift Reward Performance</h1><br>'; if ($ans['STATUS'] == 'ok' and $ans['DATA'] != '') { addGBase(); addTips(); $cbx = array('skey' => 'shift key', 'slines' => 'shift lines', 'tkey' => 'time key', 'tlines' => 'time lines', 'over' => 'key overlap', 'smooth' => 'smooth', 'zerob' => 'zero based', 'utc' => 'utc'); $xon = array('skey' => 1, 'utc' => 1); if ($vlines === true) { $xon['slines'] = 1; } $pg .= '<form>'; $tt = "<ul class=tip><li>all = all workers</li><li>noname = worker with no workername</li>"; $tt .= "<li>or full workername without the username i.e. .worker or _worker</li>"; $tt .= "<li>add a '*' on the end to match multiple workers e.g. .S3*</li></ul>"; $pg .= "<span class=q onclick='tip(\"wtip\",6000)'>?</span>"; $pg .= "<span class=tip0><span class=notip id=wtip>{$tt}</span></span>"; $i = 0; $datacols = ''; $onch = " onchange='wch()'"; foreach ($cols as $col) { $i++; $pg .= " <span class=nb><font color={$col}>Worker{$i}"; $pg .= "<input type=checkbox id=lin{$i} checked onclick='godrw(0)'>:</font>"; $pg .= "<input type=text size=10 id=worker{$i}{$onch}> </span>"; if ($i > 1) { $datacols .= ','; } $datacols .= $col; } $oncl = "wch();location.href=\"" . makeURL('usperf') . "\""; $pg .= "<button type=button onclick='{$oncl}'>Update</button></form><div>"; foreach ($cbx as $nam => $txt) { $pg .= ' <span class=nb>'; $pg .= "<input type=checkbox id={$nam} onclick='gact(this)'>"; $pg .= "{$txt} </span>"; } $pg .= '</div>'; $pg .= '<div id=can0><canvas id=can width=1 height=1>'; $pg .= 'A graph will show here if your browser supports html5/canvas'; $pg .= "</canvas></div>\n"; $data = str_replace(array("\\", "'"), array("\\\\", "\\'"), $ans['DATA']); $data .= $fld_sep . 'cols' . $val_sep . $datacols; $pg .= "<script type='text/javascript'>\n"; $pg .= uspg($nc, '#ff0000', '#fff0f0'); $pg .= "\nfunction godrw(f){var cbx=["; $comma = ''; foreach ($cbx as $nam => $txt) { $pg .= "{$comma}'{$nam}'"; $comma = ','; } $pg .= '];if(f){var xon={};'; foreach ($xon as $nam => $val) { $pg .= "xon['{$nam}']=1;"; } $pg .= "doinit(cbx,xon)}dodrw('{$data}',cbx)};godrw(1);</script>\n"; } return $pg; }
function doblocks($data, $user) { $blink = '<a href=https://www.blocktrail.com/BTC/block/'; $pg = ''; if ($user === null) { $ans = getBlocks('Anon'); } else { $ans = getBlocks($user); } if (nuem(getparam('csv', true))) { $wantcsv = false; } else { $wantcsv = true; } if ($wantcsv === false) { if ($ans['STATUS'] == 'ok' and isset($ans['s_rows']) and $ans['s_rows'] > 0) { $pg .= '<h1>Block Statistics</h1>'; $pg .= "<table callpadding=0 cellspacing=0 border=0>\n"; $pg .= "<tr class=title>"; $pg .= "<td class=dl>Description</td>"; $pg .= "<td class=dr>Time</td>"; $pg .= "<td class=dr>MeanTx%</td>"; $pg .= "<td class=dr>Diff%</td>"; $pg .= "<td class=dr>Mean%</td>"; $pg .= "<td class=dr>CDF[Erl]</td>"; $pg .= "<td class=dr>Luck%</td>"; $pg .= "</tr>\n"; $since = $data['info']['lastblock']; $count = $ans['s_rows']; for ($i = 0; $i < $count; $i++) { if ($i % 2 == 0) { $row = 'even'; } else { $row = 'odd'; } $desc = $ans['s_desc:' . $i]; $age = daysago($since - $ans['s_prevcreatedate:' . $i]); $diff = number_format(100 * $ans['s_diffratio:' . $i], 2); $mean = number_format(100 * $ans['s_diffmean:' . $i], 2); $cdferl = $ans['s_cdferl:' . $i]; list($fg, $bg) = erlcolour($cdferl); $cdferldsp = "<font color={$fg}>" . number_format($cdferl, 4) . '</font>'; $bg = " bgcolor={$bg}"; $luck = number_format(100 * $ans['s_luck:' . $i], 2); $txm = number_format(100 * $ans['s_txmean:' . $i], 1); $pg .= "<tr class={$row}>"; $pg .= "<td class=dl>{$desc} Blocks</td>"; $pg .= "<td class=dr>{$age}</td>"; $pg .= "<td class=dr>{$txm}%</td>"; $pg .= "<td class=dr>{$diff}%</td>"; $pg .= "<td class=dr>{$mean}%</td>"; $pg .= "<td class=dr{$bg}>{$cdferldsp}</td>"; $pg .= "<td class=dr>{$luck}%</td>"; $pg .= "</tr>\n"; } $pg .= "</table>\n"; } if ($ans['STATUS'] == 'ok') { $count = $ans['rows']; if ($count == 1) { $num = ''; $s = ''; } else { $num = " {$count}"; $s = 's'; } $pg .= "<h1>Last{$num} Block{$s}</h1>"; } else { $pg .= '<h1>Blocks</h1>'; } list($fg, $bg) = pctcolour(25.0); $pg .= "<span style='background:{$bg}; color:{$fg};'>"; $pg .= " Green </span> "; $pg .= 'is good luck. Lower Diff% and brighter green is better luck.<br>'; list($fg, $bg) = pctcolour(100.0); $pg .= "<span style='background:{$bg}; color:{$fg};'>"; $pg .= " 100% </span> "; $pg .= 'is expected average. '; list($fg, $bg) = pctcolour(400.0); $pg .= "<span style='background:{$bg}; color:{$fg};'>"; $pg .= " Red </span> "; $pg .= 'is bad luck. Higher Diff% and brighter red is worse luck.<br><br>'; $pg .= "<table callpadding=0 cellspacing=0 border=0>\n"; $pg .= "<tr class=title>"; $pg .= "<td class=dr>#</td>"; $pg .= "<td class=dl>Height</td>"; if ($user !== null) { $pg .= "<td class=dl>Who</td>"; } $pg .= "<td class=dr>Block Reward</td>"; $pg .= "<td class=dc>When</td>"; $pg .= "<td class=dr>Status</td>"; $pg .= "<td class=dr>Diff</td>"; $pg .= "<td class=dr>Diff%</td>"; $pg .= "<td class=dr>CDF</td>"; $pg .= "<td class=dr>B</td>"; $pg .= "</tr>\n"; } $blktot = 0; $nettot = 0; $i = 0; $cnt = 0; $orph = false; $csv = "Sequence,Height,Status,Timestamp,DiffAcc,NetDiff,Hash\n"; if ($ans['STATUS'] == 'ok') { $count = $ans['rows']; for ($i = 0; $i < $count; $i++) { if ($i % 2 == 0) { $row = 'even'; } else { $row = 'odd'; } $hi = $ans['height:' . $i]; $hifld = "{$blink}{$hi}>{$hi}</a>"; $ex = ''; $conf = $ans['confirmed:' . $i]; $stat = $ans['status:' . $i]; $inf = $ans['info:' . $i]; $tt = ''; if ($conf == 'O' or $conf == 'R') { $ex = 's'; $orph = true; $seq = ''; $nn = $cnt; if ($conf == 'R') { addTips(); $in = explode(':', $inf, 2); if (trim($in[0]) != '') { $stat = trim($in[0]); } if (count($in) < 2 or trim($in[1]) == '') { $tip = 'Share diff was VERY close<br>'; $tip .= 'so we tested it,<br>'; $tip .= "but it wasn't worthy<br>"; } else { $tip = str_replace('+', '<br>', trim($in[1])); } $tt = "<span class=q onclick='tip(\"btip{$i}\",6000)'>"; $tt .= '?</span><span class=tip0>'; $tt .= "<span class=notip id=btip{$i}>"; $tt .= "{$tip}</span></span>"; } } else { $seq = $ans['seq:' . $i]; $nn = ++$cnt; } if ($conf == '1') { if (isset($data['info']['lastheight'])) { $confn = 1 + $data['info']['lastheight'] - $hi; $stat = '+' . $confn . ' Confirms'; } else { $stat = 'Conf'; } } $stara = ''; if ($conf == 'O' or $conf == 'R') { $stara = '<span class=st1>*</span>'; } if (isset($ans['statsconf:' . $i])) { if ($ans['statsconf:' . $i] == 'Y') { $approx = ''; } else { $approx = '~'; } } else { $approx = ''; } $diffacc = $ans['diffacc:' . $i]; $acc = number_format($diffacc, 0); $netdiff = $ans['netdiff:' . $i]; $diffratio = $ans['diffratio:' . $i]; $cdf = $ans['cdf:' . $i]; $luck = $ans['luck:' . $i]; if ($diffratio > 0) { $pct = 100.0 * $diffratio; list($fg, $bg) = pctcolour($pct); $bpct = "<font color={$fg}>{$approx}" . number_format($pct, 3) . '%</font>'; $bg = " bgcolor={$bg}"; $blktot += $diffacc; if ($conf != 'O' and $conf != 'R') { $nettot += $netdiff; } $cdfdsp = number_format($cdf, 3); } else { $bg = ''; $bpct = '?'; $cdfdsp = '?'; } if ($wantcsv === false) { $pg .= "<tr class={$row}>"; $pg .= "<td class=dr{$ex}>{$seq}</td>"; $pg .= "<td class=dl{$ex}>{$hifld}</td>"; if ($user !== null) { $pg .= "<td class=dl{$ex}>" . htmlspecialchars($ans['workername:' . $i]) . '</td>'; } $pg .= "<td class=dr{$ex}>" . btcfmt($ans['reward:' . $i]) . '</td>'; $pg .= "<td class=dl{$ex}>" . utcd($ans['firstcreatedate:' . $i]) . '</td>'; $pg .= "<td class=dr{$ex}>{$tt}{$stat}</td>"; $pg .= "<td class=dr>{$stara}{$approx}{$acc}</td>"; $pg .= "<td class=dr{$bg}>{$bpct}</td>"; $pg .= "<td class=dr>{$cdfdsp}</td>"; $pg .= "<td class=dr>{$nn}</td>"; $pg .= "</tr>\n"; } else { $csv .= "{$seq},"; $csv .= "{$hi},"; $csv .= "\"{$stat}\","; $csv .= $ans['firstcreatedate:' . $i] . ','; $csv .= "{$diffacc},"; $csv .= "{$netdiff},"; $csv .= $ans['blockhash:' . $i] . "\n"; } } } if ($wantcsv === true) { echo $csv; exit(0); } if ($orph === true) { $pg .= '<tr><td colspan='; if ($user === null) { $pg .= '7'; } else { $pg .= '8'; } $pg .= ' class=dc><font size=-1><span class=st1>*</span>'; $pg .= 'Orphans/Rejects count as shares but not as a block in calculations'; $pg .= '</font></td></tr>'; } $pg .= "</table>\n"; return $pg; }