Cześć do stats wstawiam tym skryptem co kiedyć od Ciebie kupiłem #v+ while (!feof($fh)) { $line = trim(fgets($fh)); $cols = explode('|', $line);
if (!in_array(count($cols), array(7, 11, 12))) continue;
$datetokens = sscanf($cols[0], '%d-%d-%d-%d.%d.%d.%d'); if (count($datetokens) != 7) continue;
$dt = mktime($datetokens[3], $datetokens[4], $datetokens[5], $datetokens[1], $datetokens[2], $datetokens[0]); $oper = $cols[1]; $tag = $cols[2]; $ip = $cols[3]; $mac = $cols[4]; $nasip = $cols[5]; $nasid = $cols[6];
$terminatecause = ''; $download = $upload = 0; if (count($cols) > 7) { $download = $cols[7] * $full32bit + $cols[8]; $upload = $cols[9] * $full32bit + $cols[10]; if (count($cols) > 11) $terminatecause = $cols[11]; }
if (isset($sessions[$tag])) $session = $sessions[$tag]; else $session = $DB->GetRow('SELECT * FROM nodesessions WHERE tag = ?', array($tag)); if ($session) { $prev_download = $session['download']; $prev_upload = $session['upload']; if (count($cols) == 7) { $download = $prev_download; $upload = $prev_upload; } $session['stop'] = $dt; $session['mac'] = $mac; $session['download'] = $download; $session['upload'] = $upload; $session['terminatecause'] = $terminatecause; } else { $prev_download = 0; $prev_upload = 0; if (count($cols) == 7) $download = $upload = 0; $session = $DB->GetRow('SELECT ownerid AS customerid, n.id AS nodeid, ipaddr, mac FROM vmacs n WHERE n.ipaddr = ?', array(ip_long($ip))); $session['start'] = $session['stop'] = $dt; $session['mac'] = $mac; $session['download'] = $download; $session['upload'] = $upload; $session['tag'] = $tag; $session['terminatecause'] = $terminatecause;
$DB->BeginTrans(); $DB->Execute('INSERT INTO nodesessions (customerid, nodeid, ipaddr, mac, start, stop, download, upload, tag, terminatecause,type) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?,1)', array_values($session)); $session['id'] = $DB->GetLastInsertID('nodesessions'); $DB->CommitTrans();
} //$session['nasip'] = $nasip; //$session['nasid'] = $nasid; $sessions[$tag] = $session;
$delta_download = $download - $prev_download; $delta_upload = $upload - $prev_upload; if ($delta_download < 0) $delta_download = 0; if ($delta_upload < 0) $delta_upload = 0;
if ($delta_download > 0 || $delta_upload > 0) { //if ($DB->GetOne('SELECT dt FROM stats WHERE nodeid = ? AND dt = ?', array($session['nodeid'], $dt))) // continue; $delta_download = sprintf("%.0f", $delta_download); $delta_upload = sprintf("%.0f", $delta_upload); //printf("nodeid=%d dt=%d upload=%s download=%s sessionid=%d\n", $session['nodeid'], $dt, $delta_upload, // $delta_download, $session['id']); $DB->Execute('INSERT INTO stats (nodeid, dt, upload, download, nodesessionid) VALUES(?, ?, ?, ?, ?)', array($session['nodeid'], $dt, $delta_upload, $delta_download, $session['id'])); } }
fclose($fh); unlink($accounting_file); #-
to powinno wstawiać dobrze?
W dniu 11 grudnia 2015 12:17 użytkownik Tomasz Chiliński < tomasz.chilinski@chilan.com> napisał:
W dniu 11.12.2015 11:15, Piotrek S. napisał(a):
tabela stats w LMS zdaje się, że nie działa jako counter (tak jak rrdtool), więc powinno się wstawiać do niej różnicę: stara wartość - nowa wartość = różnica
Jak odnajdziesz dla sesji rekord w nodesessions i tamtejsze liczniki danych narastające w ramach sesji to wystarczy od bieżących stanów liczników odjąć te z nodesessions i wstawić różnice do stats.
-- Pozdrawiam Tomasz Chiliński, Chilan
lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms