added parser
This commit is contained in:
parent
bacbf5861c
commit
c2a93a2d2b
1 changed files with 32 additions and 15 deletions
|
@ -7,15 +7,15 @@ $sql = 'SELECT *
|
|||
FROM logs
|
||||
WHERE
|
||||
program = \'named\'
|
||||
ORDER BY logged ASC
|
||||
LIMIT 10000';
|
||||
|
||||
$result = $db->query($sql);
|
||||
|
||||
$pattern = '/^queries: info: client ([.\d]+)#(\d+): query: ([+.-\w]+) ([A-Z]+) ([A-Z]+) (.*) \(([.\d]+)\)$/';
|
||||
$sqlDelete = 'DELETE FROM logs WHERE id IN (';
|
||||
$pattern = '/^queries: info: client ([.\d]+)#(\d+): query: ([+.-\w]+) ([A-Z]+) ([0-9A-Z]+) ([-+A-Z]+) \(([.\d]+)\)$/';
|
||||
$queries = array();
|
||||
$c = 0; $u = 0;
|
||||
|
||||
$update = array();
|
||||
$delete = array();
|
||||
foreach ($result as $log) {
|
||||
if (preg_match($pattern, $log['message'], $matches)) {
|
||||
$query = array('ip' => new IpV4($matches[1]),
|
||||
|
@ -28,13 +28,11 @@ foreach ($result as $log) {
|
|||
'queried' => strtotime($log['logged']));
|
||||
|
||||
$db->execute('INSERT IGNORE INTO queries (ip, port, hostname, class, type, options, queried, log_id) VALUES (\'' . $query['ip'] . '\', ' . $query['port'] . ', \'' . $query['hostname'] . '\', \'' . $query['class'] . '\', \'' . $query['type'] . '\', \'' . $query['options'] . '\', \'' . date('Y-m-d H:i:s', $query['queried']) . '\', ' . $query['log_id'] . ')');
|
||||
$c++;
|
||||
$sqlDelete .= $query['log_id'] . ', ';
|
||||
$output->add('query parsed', 'debug', 3, $query);
|
||||
$output->add('query parsed', 'debug', 3, $log['logged'], $log['message']);
|
||||
array_push($delete, $query['log_id']);
|
||||
|
||||
foreach ($config['sddns']['zones'] as $zone) {
|
||||
if (substr($query['hostname'], -strlen($zone->name)) == $zone->name && strlen($query['hostname']) > strlen($zone->name)) {
|
||||
|
||||
$filter = array('class' => $query['class'],
|
||||
'type' => $query['type'],
|
||||
'host' => substr($query['hostname'], 0, -(strlen($zone->name) + 1)),
|
||||
|
@ -43,22 +41,41 @@ foreach ($result as $log) {
|
|||
$records = DBRecord::get($db, $filter);
|
||||
|
||||
foreach ($records as $record) {
|
||||
// remove older update requests
|
||||
foreach ($update as $index => $updateRecord) {
|
||||
if ($updateRecord->id == $record->id) {
|
||||
unset($update[$index]);
|
||||
}
|
||||
}
|
||||
|
||||
$record->lastAccessed = $query['queried'];
|
||||
$record->update();
|
||||
$output->add('record renewed', 'success', $record);
|
||||
array_push($update, $record);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$output->add('unmatching log entry', 'debug', 5, $log);
|
||||
}
|
||||
}
|
||||
|
||||
if ($c > 0) {
|
||||
$db->execute(substr($sqlDelete, 0, -2) . ')');
|
||||
$output->add('parsed queries', 'success', $c);
|
||||
if (count($delete)) {
|
||||
$sqlDelete = 'DELETE FROM logs WHERE id IN (' . implode($delete, ', ') . ');';
|
||||
|
||||
$db->execute($sqlDelete);
|
||||
$deleted = $db->affectedRows();
|
||||
|
||||
$output->add('parsed queries', 'success', $deleted);
|
||||
}
|
||||
else {
|
||||
$output->add('no queries to parse', 'debug', 1);
|
||||
|
||||
$updated = 0;
|
||||
foreach ($update as $record) {
|
||||
$record->update();
|
||||
$updated++;
|
||||
|
||||
$output->add('record renewed', 'success', $record, date('Y-m-d H:m:s', $record->lastAccessed));
|
||||
}
|
||||
$output->add('renewed records', 'success', $updated);
|
||||
|
||||
$output->send();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue