Added “checkspam” action
This commit is contained in:
parent
e94e286b01
commit
61a621e4d2
1 changed files with 61 additions and 0 deletions
|
@ -21,6 +21,8 @@ require __DIR__.'/../lib/delinstbyid.php';
|
||||||
$levs=['Debug', 'Info', 'Warning', 'Error'];
|
$levs=['Debug', 'Info', 'Warning', 'Error'];
|
||||||
|
|
||||||
$opts=array(
|
$opts=array(
|
||||||
|
'checkspam'=>false,
|
||||||
|
'minent'=>10,
|
||||||
'revive'=>false,
|
'revive'=>false,
|
||||||
'shuffle'=>false,
|
'shuffle'=>false,
|
||||||
'updstats'=>false,
|
'updstats'=>false,
|
||||||
|
@ -37,6 +39,10 @@ $help='mustool.php
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
mustool.php [options] <action> [parameters] ...
|
mustool.php [options] <action> [parameters] ...
|
||||||
ACTIONS
|
ACTIONS
|
||||||
|
checkspam
|
||||||
|
Tries to detect spam instances, i.e. those with the same TLD, same second
|
||||||
|
level domain, variable higher domains, both in «Instances» and «Peers»
|
||||||
|
tables.
|
||||||
deleteinstswhere <condition[s]>
|
deleteinstswhere <condition[s]>
|
||||||
First, return a list of Instances records matching “condition”, then let
|
First, return a list of Instances records matching “condition”, then let
|
||||||
you choose whether you want to delete them and all records referencing them
|
you choose whether you want to delete them and all records referencing them
|
||||||
|
@ -75,6 +81,9 @@ for ($i=1; $i<$argc; $i++) {
|
||||||
$dosome=true;
|
$dosome=true;
|
||||||
$opts['deleteinstswhere']=true;
|
$opts['deleteinstswhere']=true;
|
||||||
$opts['deleteinstswhereconds']=$argv[$i];
|
$opts['deleteinstswhereconds']=$argv[$i];
|
||||||
|
} elseif ($argv[$i]=='checkspam') {
|
||||||
|
$dosome=true;
|
||||||
|
$opts['checkspam']=true;
|
||||||
} elseif ($argv[$i]=='shuffle') {
|
} elseif ($argv[$i]=='shuffle') {
|
||||||
$dosome=true;
|
$dosome=true;
|
||||||
$opts['shuffle']=true;
|
$opts['shuffle']=true;
|
||||||
|
@ -111,6 +120,58 @@ catch (Exception $error) { mexit('could not set «utf8mb4» charset for MySQL: '
|
||||||
// for php versions < 8
|
// for php versions < 8
|
||||||
if ($res===false) mexit('could not set MySQL charset: '.mysqli_error($link).' ['.mysqli_errno($link).'].'.N,1,true);
|
if ($res===false) mexit('could not set MySQL charset: '.mysqli_error($link).' ['.mysqli_errno($link).'].'.N,1,true);
|
||||||
|
|
||||||
|
if ($opts['checkspam']) {
|
||||||
|
$res=myq($link,'SELECT ID, URI FROM Instances');
|
||||||
|
checkspam($res,'ID','URI','Instances');
|
||||||
|
$res=myq($link,'SELECT ID, Hostname FROM Peers');
|
||||||
|
checkspam($res,'ID','Hostname','Peers');
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkspam(&$res,$idcol,$domcol,$tabnam) {
|
||||||
|
global $opts;
|
||||||
|
$buf=[];
|
||||||
|
while ($row=mysqli_fetch_assoc($res)) $buf[]=$row;
|
||||||
|
unset($res);
|
||||||
|
$cbuf=count($buf);
|
||||||
|
if ($cbuf>0) {
|
||||||
|
$doms=[];
|
||||||
|
foreach ($buf as $row)
|
||||||
|
if (preg_match('#[^.]+\.[^.]+$#',$row[$domcol],$matches)===1)
|
||||||
|
$doms[$matches[0]][]=['dom'=>$row[$domcol], 'id'=>$row[$idcol]];
|
||||||
|
/* echo('Do you really want to delete those '.$cbuf.' record(s)? Enter «YES» to do it, anything else to not do it: ');
|
||||||
|
$inp=rtrim(fgets(STDIN));
|
||||||
|
if ($inp=='YES') {
|
||||||
|
$i=0;
|
||||||
|
foreach ($buf as $row) {
|
||||||
|
$i++;
|
||||||
|
eecho('deleting Instances record with ID = '.$row['ID'].' and URI = «'.$row['URI'].'», and all references to it ('.$i.'/'.$cbuf.', '.round(100/$cbuf*$i,2).'%)'.N,1);
|
||||||
|
$res=delinstbyid($link,$row['ID'],'eecho',N);
|
||||||
|
if (!$res) mexit('error trying to delete Instances record with ID='.$row['ID'].'; see the log above for more info.'.N,2);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
} else {
|
||||||
|
eecho('no '.$tabnam.' records found.'.N,2);
|
||||||
|
}
|
||||||
|
uasort($doms,'cmp');
|
||||||
|
foreach ($doms as $key=>$arr) {
|
||||||
|
$carr=count($arr);
|
||||||
|
if ($carr>$opts['minent']) {
|
||||||
|
echo $tabnam.': '.$key.': '.$carr.' entries'.N;
|
||||||
|
foreach ($arr as $entry)
|
||||||
|
echo ' '.$domcol.': '.$entry['dom'].'; '.$idcol.': '.$entry['id'].N;
|
||||||
|
echo N;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function cmp($a,$b) {
|
||||||
|
$a=count($a);
|
||||||
|
$b=count($b);
|
||||||
|
if ($a==$b)
|
||||||
|
return 0;
|
||||||
|
return ($a<$b) ? 1 : -1;// reverse :-)
|
||||||
|
}
|
||||||
|
|
||||||
if ($opts['deleteinstswhere']) {
|
if ($opts['deleteinstswhere']) {
|
||||||
$res=myq($link,'SELECT ID, URI FROM Instances WHERE '.$opts['deleteinstswhereconds']);
|
$res=myq($link,'SELECT ID, URI FROM Instances WHERE '.$opts['deleteinstswhereconds']);
|
||||||
$buf=[];
|
$buf=[];
|
||||||
|
|
Loading…
Reference in a new issue