...
This commit is contained in:
parent
71301acebe
commit
d023bc8302
7 changed files with 108 additions and 51 deletions
|
@ -224,7 +224,8 @@ img {
|
|||
height: 32px;
|
||||
}
|
||||
.litbut, .litbuta {
|
||||
width: 32.746%;
|
||||
/*width: 32.746%;*/
|
||||
width: 100%;
|
||||
padding: 0 4px 0 4px;
|
||||
height: 20px;
|
||||
font-size: 6.5pt;
|
||||
|
|
|
@ -195,7 +195,7 @@ else
|
|||
if ($_GET['minki']>100000) $_GET['minki']=100000;
|
||||
|
||||
$order=array(
|
||||
'rand'=>array('t'=>_('Casuale'),'q'=>'Instances.Priority DESC, rand()'),
|
||||
'rand'=>array('t'=>_('Casuale, prima le consigliate'),'q'=>'Instances.Priority DESC, rand()'),
|
||||
// 'feat'=>array('t'=>_('Prima le consigliate'),'q'=>'Instances.Priority DESC'),
|
||||
// partecipazione: totusers/activeusers
|
||||
// 'part'=>array('t'=>_('Partecipazione (decr.)'),'q'=>'(Instances.UserCount / Instances.ActiveUsersMonth) ASC'),
|
||||
|
@ -215,6 +215,7 @@ $order=array(
|
|||
);
|
||||
if (!(array_key_exists('ord',$_GET) && array_key_exists($_GET['ord'],$order)))
|
||||
$_GET['ord']='rand';
|
||||
if ($_GET['lang']==0) $order['rand']=array('t'=>_('Casuale'),'q'=>'rand()');
|
||||
|
||||
$p=1;
|
||||
if (array_key_exists('p',$_GET) && preg_match('#^[0-9]+$#',$_GET['p'])===1) $p=$_GET['p']+0;
|
||||
|
@ -301,11 +302,15 @@ echo('</select>
|
|||
</div>
|
||||
|
||||
<div class="sdcrow">
|
||||
<input type="button" class="litbut" value="'._('Resetta la ricerca').'" class="sbutton" onclick="document.location.href=document.location.href.replace(/\\?.*$/,\'\')">
|
||||
<input type="button" class="litbut" id="mctrlb" value="'._('Criteri avanzati').'" class="sbutton" onclick="shmctrl()">
|
||||
<input type="button" class="litbut" id="dbgb" value="'._('Info di debug').'" onclick="shdbg()" style="margin:0">
|
||||
</div>
|
||||
|
||||
<div class="sdcrow">
|
||||
<input type="button" class="litbut" value="'._('Resetta la ricerca').'" class="sbutton" onclick="document.location.href=document.location.href.replace(/\\?.*$/,\'\')">
|
||||
</div>
|
||||
|
||||
<!-- <input type="button" class="litbut" id="dbgb" value="'._('Info di debug').'" onclick="shdbg()" style="margin:0"> //-->
|
||||
|
||||
<div class="sdlrow">
|
||||
<input type="submit" value="'._('Cerca').'" class="ssubmit">
|
||||
</div>
|
||||
|
@ -348,7 +353,7 @@ $res=mysqli_query($link,$que) or muorimeglio(__LINE__.': '.mysqli_error($link),t
|
|||
$debug.='MAIN QUERY EXEC TIME: '.(microtime(true)-$qit).' sec.'.N;
|
||||
$itot=mysqli_num_rows($res);
|
||||
$debug.='RESULTS: '.$itot;
|
||||
echo('<div id="debug"><textarea spellcheck="false">'.$debug.'</textarea></div>'.N);
|
||||
//echo('<div id="debug"><textarea spellcheck="false">'.$debug.'</textarea></div>'.N);
|
||||
$ipp=25;
|
||||
$if=$ipp*($p-1);
|
||||
if ($if>=$itot) {
|
||||
|
|
40
web/dafa.txt
40
web/dafa.txt
|
@ -3,40 +3,31 @@
|
|||
- statistiche minime
|
||||
- pagina statistiche (totali e di ricerca: numero istanze, numero utenti, partecipazione(?))
|
||||
- pagina blacklistate
|
||||
- ordinamento
|
||||
* spostare i flag di esclusione sotto il resto
|
||||
~ ordinamento
|
||||
- se è Blacklisted dire perché interrogando la tabella Blacklisted
|
||||
- evidenziare espressioni corrispondenti alla ricerca
|
||||
- possibilità di cercare per nome-uri istanza
|
||||
* se InstOurLangs è null cercare e riportare InstLangs - fatto, impostando InstOurLangs come InstLangs in crawler.php se InstOurLangs è NULL e InstLangs no
|
||||
- possibilità di settare tutti i parametri "senza constraints" con un solo tasto
|
||||
- un ultimo giro di aggiornamento delle traduzioni
|
||||
- impostare un po' di scores per le italiane
|
||||
! possibilità di includere nella ricerca per lingua anche le istanze senza lingua specificata
|
||||
! un ultimo tentativo prima di dichiararla morta in crawler.php (no perché viene già fatto a monte)
|
||||
? mettere da qualche parte che usiamo quella libreria per la rilevazione delle lingue
|
||||
- usare menu.php di mustard, poi modificarlo in modo che da cell si veda menu hamburger - o simili
|
||||
* blacklistare byoblu
|
||||
- i pad su cisti con il materiale ancora da tradurre per le varie lingue sono morti, sarebbero da resuscitare su soluzione alternativa non effimera
|
||||
|
||||
- crawler.php: mi sa che non trova activity, non checka neanche trends, ma è sbagliato, sono indipendenti. Verificare.
|
||||
- crawler.php e peerscrawl.php: devono creare un lockfile all'esecuzione e cancellarlo quando escono (sia per errore, sia per uscita normale); se esiste, uscire con errore; più un'opzione per forzare l'esecuzione anche già in presenza di lockfile.
|
||||
- crawler.php: fare myreadline e usarlo per chiedere se si vuole proseguire quando instances.job e currinst.job esistono e --restore non è stato specificato. Serve anche un’opzione che forzi l'esecuzione senza domanda.
|
||||
- crawler.php: NON ripristinare sessione interrotta se non viene esplicitato con opzione (da aggiungere)
|
||||
* crawler.php: togliere "lecho", aggiungere time ed etr, aggiungere controllo memoria
|
||||
- crawler.php, peerscrawl.php: verificare perché stderr viene indirizzato a stdout, fare in modo che lo sia sempre a livello di script
|
||||
~ PER FAVORE un metodo valido per verificare che un'istanza sia mastodon - più o meno fatto
|
||||
- crawl.bash: su errore, mandare mail
|
||||
- crawler.php: per il rilevamento della lingua, se la timeline non è disponibile si possono usare le descrizioni
|
||||
- negli script web (non cli), gmdate dappertutto invece di strftime; magari un menu a tendina da cui scegliere timezone?
|
||||
* crawler.php: massimo utilizzo di memoria alla fine - o no? tanto già lo dice nell'ultima riga di check - va be' fatto
|
||||
~ crawler.php: messo all'inizio aggiornamento stato "New" (se non è più new imposta New=0), ma forse sarebbe più bello metterlo in uno script di manutenzione-ottimizzazione a parte
|
||||
- crawler.php: aggiornamento stato "Blacklisted" (anche questo forse sarebbe più bello metterlo in uno script di manutenzione-ottimizzazione a parte)
|
||||
* crawler.php: se non viene rilevata nessuna lingua, e se c'è lingua di default, usare quella anche per le nostre
|
||||
- crawler.php: rendere opzionale il check su Dead
|
||||
* edinst.php: possibilità di settare Priority
|
||||
? crawler.php: rendere opzionale il check su Dead
|
||||
? edinst.php: possibilità di settare Instances.Dead
|
||||
- spostare tutta la roba sensibile in una dir "contenitore", tipo fare che la root dir è "/srv/http/mastodon.help/site", e in "/srv/http/mastodon.help" fare dir per logs, per accounts, per ini files, ecc.
|
||||
- rimuovere Instances.Chosen e Instances.Visible dappertutto
|
||||
~ PER FAVORE un metodo valido per verificare che un'istanza sia mastodon - più o meno fatto
|
||||
|
||||
--- fatti ---
|
||||
|
||||
* spostare i flag di esclusione sotto il resto
|
||||
* se InstOurLangs è null cercare e riportare InstLangs - fatto, impostando InstOurLangs come InstLangs in crawler.php se InstOurLangs è NULL e InstLangs no
|
||||
* blacklistare byoblu
|
||||
* possibilità di escludere quelle con registrazione soggetta ad approvazione
|
||||
* possibilità di escludere quelle che non han risposto all'ultimo check, vedi sotto
|
||||
* lastcheck bool in tabella Instances, per poterlo verificare facilmente
|
||||
|
@ -44,4 +35,15 @@
|
|||
* cambiare password a utente admin e normale su mastodon.help; l'utente normale non deve poter leggere la tabella Admins (e forse altre?)
|
||||
* trimdom ecc. ... forse che scarta già a monte quelle che sarebbero trimmate? altrimenti sarebbe da fare, e cassare trimdom del tutto
|
||||
* info di debug a scomparsa
|
||||
! possibilità di includere nella ricerca per lingua anche le istanze senza lingua specificata
|
||||
! un ultimo tentativo prima di dichiararla morta in crawler.php (no perché viene già fatto a monte)
|
||||
|
||||
* crawler.php, peerscrawl.php: verificare perché stderr viene indirizzato a stdout, fare in modo che lo sia sempre a livello di script - dipende da "display_errors" in php.ini, per default li manda a stdout, bona lè* crawler.php: aggiornamento stato "New" e "Blacklisted" in uno script a parte - fatto, in mustool.php
|
||||
* crawler.php e peerscrawl.php: devono creare un lockfile all'esecuzione e cancellarlo quando escono (sia per errore, sia per uscita normale); se esiste, uscire con errore; più un'opzione per forzare l'esecuzione anche già in presenza di lockfile.
|
||||
* crawler.php: quando instances.job e currinst.job esistono, oltre a --restore serve anche un’opzione che forzi l'esecuzione.
|
||||
* crawler.php: NON ripristinare sessione interrotta se non viene esplicitato con opzione (da aggiungere)
|
||||
* crawler.php: togliere "lecho", aggiungere time ed etr, aggiungere controllo memoria
|
||||
* crawler.php: massimo utilizzo di memoria alla fine - o no? tanto già lo dice nell'ultima riga di check - va be' fatto
|
||||
* crawler.php: se non viene rilevata nessuna lingua, e se c'è lingua di default, usare quella anche per le nostre
|
||||
* edinst.php: possibilità di settare Priority
|
||||
! crawler.php: mi sa che se non trova activity, non checka neanche trends, ma è sbagliato, sono indipendenti. Verificare. -- No, è ok.
|
||||
|
|
|
@ -23,6 +23,8 @@ function logcmd {
|
|||
#logcmd "grep pippo bibi" "grepb.log"
|
||||
#exit
|
||||
|
||||
logcmd "php mustool.php setold" "mustool.setold.log"
|
||||
|
||||
if [ "$1" == "dopeers" ]; then
|
||||
logcmd "php peerscrawl.php -e peerscrawl.exclude" "peerscrawl.log"
|
||||
logcmd "php crawler.php -p peers" "crawler.log"
|
||||
|
@ -30,4 +32,7 @@ else
|
|||
logcmd "php crawler.php" "crawler.log"
|
||||
fi
|
||||
|
||||
# tanto per scrupolo
|
||||
logcmd "php mustool.php setblack" "mustool.setblack.log"
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -34,7 +34,7 @@ $jsonf=false;
|
|||
declare(ticks=1);
|
||||
if (function_exists('pcntl_signal')) {
|
||||
function signalHandler($signal) {
|
||||
global $link, $jsonf;
|
||||
global $link, $jsonf, $lockfp;
|
||||
echo(N.'Sono stato interrotto.'.N);
|
||||
if ($link) {
|
||||
echo('La connessione MySQL è aperta, la chiudo.'.N);
|
||||
|
@ -46,6 +46,10 @@ if (function_exists('pcntl_signal')) {
|
|||
//fwrite($jsonf,'"Fine?": true'.N.'}'.N);
|
||||
fclose($jsonf);
|
||||
}
|
||||
if (isset($lockfp) && file_exists($lockfp)) {
|
||||
echo('Il file di lock esiste, lo elimino.'.N);
|
||||
unlink($lockfp);
|
||||
}
|
||||
exit(2);
|
||||
}
|
||||
pcntl_signal(SIGTERM,'signalHandler');// Termination ('kill' was called)
|
||||
|
@ -62,7 +66,9 @@ $opts=array(
|
|||
'jsonfp'=>__DIR__.'/instances.json',
|
||||
'jsonwrite'=>false,
|
||||
'peersfp'=>null,
|
||||
'restore'=>false
|
||||
'restore'=>false,
|
||||
'dontrestore'=>false,
|
||||
'ignorelock'=>false
|
||||
);
|
||||
|
||||
$help='crawler.php
|
||||
|
@ -86,10 +92,18 @@ $help='crawler.php
|
|||
-N, --dontsetnew
|
||||
Non marca le istanze come nuove, neanche quando lo sono. Può essere utile
|
||||
per il primo crawl.
|
||||
-I, --ignorelock
|
||||
Normalmente, se il suo lockfile esiste, il programma esce con un errore.
|
||||
Questa opzione fa sì che il lockfile sia ignorato. Attenzione: verifica
|
||||
che effettivamente il programma non stia già girando prima di usarla.
|
||||
-r, --restore
|
||||
Prova a riprendere l’esecuzione di una sessione precedente non finita
|
||||
Prova a riprendere l’esecuzione di una sessione precedente non completata
|
||||
(perché funzioni devono essere presenti i file «instances.job»
|
||||
e «currinst.job»).
|
||||
-R, --dontrestore
|
||||
Se sono presenti i file di una sessione precedente non completata
|
||||
(«instances.job» e «currinst.job») ignorali e prosegui (verranno
|
||||
sovrascritti).
|
||||
-d, --dryrun
|
||||
Non scrive nulla nel database.
|
||||
-j, --jsonwrite
|
||||
|
@ -125,7 +139,15 @@ for ($i=1; $i<$argc; $i++) {
|
|||
break;
|
||||
case '-r':
|
||||
case '--restore':
|
||||
$opts['restore']=false;
|
||||
$opts['restore']=true;
|
||||
break;
|
||||
case '-R':
|
||||
case '--dontrestore':
|
||||
$opts['dontrestore']=true;
|
||||
break;
|
||||
case '-I':
|
||||
case '--ignorelock':
|
||||
$opts['ignorelock']=true;
|
||||
break;
|
||||
case '-d':
|
||||
case '--dryrun':
|
||||
|
@ -149,15 +171,23 @@ for ($i=1; $i<$argc; $i++) {
|
|||
use function mysqli_real_escape_string as myesc;
|
||||
|
||||
function mexit($msg,$code) {
|
||||
global $link, $jsonf;
|
||||
global $link, $jsonf, $lockfp;
|
||||
echo($msg);
|
||||
if ($link)
|
||||
mysqli_close($link);
|
||||
if ($jsonf)
|
||||
fclose($jsonf);
|
||||
if (isset($lockfp) && file_exists($lockfp))
|
||||
unlink($lockfp);
|
||||
exit($code);
|
||||
}
|
||||
|
||||
$lockfp=__DIR__.'/crawler.lock';
|
||||
if (file_exists($lockfp) && !$opts['ignorelock'])
|
||||
mexit('Il file di lock esiste: pare che sia già in corso una sessione; se sei sicur@ che non è così usa «-I» per forzare l’esecuzione.'.N,2);
|
||||
touch($lockfp);
|
||||
|
||||
$riprendi=false;
|
||||
$instsjfp=__DIR__.'/instances.job';
|
||||
$currinstjfp=__DIR__.'/currinst.job';
|
||||
if ($opts['restore']) {
|
||||
|
@ -168,7 +198,8 @@ if ($opts['restore']) {
|
|||
}
|
||||
} else {
|
||||
if (file_exists($currinstjfp) && file_exists($instsjfp)) {
|
||||
mexit('La sessione precedente non è stata conclusa: «instances.job» e «currinst.job» esistono.'.N,2);
|
||||
if (!$opts['dontrestore'])
|
||||
mexit('La sessione precedente non è stata conclusa: «instances.job» e «currinst.job» esistono; usa «-r» per ripristinarla o «-R» per ignorarla.'.N,2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -745,9 +776,9 @@ while ($i<$cinsts) {
|
|||
if ($opts['jsonwrite'])
|
||||
fwrite($jsonf,'"'.$dom.'": '.json_encode($info,JSON_PRETTY_PRINT).','.N);
|
||||
}
|
||||
$now=time();
|
||||
if (!$instans) {
|
||||
// questo è il limbo delle istanze che non rispondono
|
||||
$now=time();
|
||||
$res=mysqli_query($link,'SELECT * FROM Instances WHERE URI=\''.myesc($link,$dom).'\'')
|
||||
or mexit(__LINE__.': '.mysqli_error($link).N,3);
|
||||
if (mysqli_num_rows($res)>0) {
|
||||
|
@ -980,7 +1011,6 @@ while ($i<$cinsts) {
|
|||
|
||||
} else {
|
||||
echo('«'.$info['uri'].'» non è già presente nel DB, la aggiungo...'.N);
|
||||
$now=time();
|
||||
$instrow['FirstSeen']=$now;
|
||||
if ($opts['setnew'])
|
||||
$instrow['New']=1;
|
||||
|
@ -1083,13 +1113,9 @@ if ($opts['jsonwrite']) {
|
|||
}
|
||||
|
||||
unlink($instsjfp);
|
||||
|
||||
unlink($currinstjfp);
|
||||
unlink($lockfp);
|
||||
|
||||
exit(0);
|
||||
|
||||
function myreadline() {
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
define('N',"\n");
|
||||
|
||||
$opts=array(
|
||||
'newnot'=>false,
|
||||
'blacklisted'=>false,
|
||||
'setold'=>false,
|
||||
'setblack'=>false,
|
||||
'deadline'=>60*24*60*60,// se un'istanza non risponde da 60 giorni dichiararla morta
|
||||
'newline'=>30*24*60*60,// se un'istanza è nuova, dopo 30 giorni non lo è più
|
||||
);
|
||||
|
@ -31,9 +31,9 @@ $help='mustool.php
|
|||
SINOSSI
|
||||
mustool.php [opzioni] <azione[ azione...]>
|
||||
AZIONI
|
||||
newnot
|
||||
setold
|
||||
setta New=0 per le istanze che non sono più nuove.
|
||||
blacklisted
|
||||
setblack
|
||||
Setta Blacklisted=1 per le istanze presenti nella blacklist,
|
||||
Blacklisted=0 per quelle che non lo sono.
|
||||
OPZIONI
|
||||
|
@ -57,12 +57,12 @@ for ($i=1; $i<$argc; $i++) {
|
|||
mexit('L’opzione «'.$argv[$i].'» è sconosciuta (usa «-h» per vedere la guida).'.N,1);
|
||||
break;
|
||||
}
|
||||
} elseif ($argv[$i]=='newnot') {
|
||||
} elseif ($argv[$i]=='setold') {
|
||||
$dosome=true;
|
||||
$opts['newnot']=true;
|
||||
} elseif ($argv[$i]=='blacklisted') {
|
||||
$opts['setold']=true;
|
||||
} elseif ($argv[$i]=='setblack') {
|
||||
$dosome=true;
|
||||
$opts['blacklisted']=true;
|
||||
$opts['setblack']=true;
|
||||
} else {
|
||||
mexit('«'.$argv[$i].'» non è un’azione conosciuta (usa «-h» per vedere la guida).'.N,1);
|
||||
}
|
||||
|
@ -88,13 +88,13 @@ $link=@mysqli_connect($iniarr['db_host'],$iniarr['db_admin_name'],$iniarr['db_ad
|
|||
mysqli_set_charset($link,'utf8mb4')
|
||||
or mexit(__LINE__.': '.mysqli_error($link).N,1);
|
||||
|
||||
if ($opts['newnot']) {
|
||||
if ($opts['setold']) {
|
||||
echo('Setto New=0 per le istanze non più nuove ... ');
|
||||
mysqli_query($link,'UPDATE Instances SET New=0 WHERE '.time().'-FirstSeen > '.$opts['newline']) or mexit(__LINE__.': '.mysqli_error($link).N,2);
|
||||
echo('fatto! Righe coinvolte: '.mysqli_affected_rows($link).N);
|
||||
}
|
||||
|
||||
if ($opts['blacklisted']) {
|
||||
if ($opts['setblack']) {
|
||||
echo('Setto Blacklisted=1 per le istanze blacklistate ... ');
|
||||
mysqli_query($link,'UPDATE Instances SET Blacklisted=1 WHERE URI IN (SELECT Domain FROM Blacklist)') or mexit(__LINE__.': '.mysqli_error($link).N,2);
|
||||
echo('fatto! Righe coinvolte: '.mysqli_affected_rows($link).N);
|
||||
|
|
|
@ -32,7 +32,8 @@ $opts=array(
|
|||
'timeout'=>5,
|
||||
'verbose'=>false,
|
||||
'excludedead'=>false,
|
||||
'timezone'=>date_default_timezone_get()
|
||||
'timezone'=>date_default_timezone_get(),
|
||||
'ignorelock'=>false
|
||||
);
|
||||
|
||||
$help='peerscrawl.php
|
||||
|
@ -53,6 +54,10 @@ $help='peerscrawl.php
|
|||
Defines the file into which the ordered list of all checked instances
|
||||
will be saved.
|
||||
DEFAULT: «'.$opts['allpeersfp'].'»
|
||||
-I, --ignorelock
|
||||
Normally, if its lockfile exists, the program exits with an error before
|
||||
doing anything. With this option the lockfile is ignored. Please verify
|
||||
that the program is not already running before using it.
|
||||
-r, --restore
|
||||
If peers file already exists on program’s start it will be loaded into
|
||||
memory and each instance it contains will be considered “already
|
||||
|
@ -108,6 +113,10 @@ for ($i=1; $i<$argc; $i++) {
|
|||
case '--restore':
|
||||
$opts['restore']=true;
|
||||
break;
|
||||
case '-I':
|
||||
case '--ignorelock':
|
||||
$opts['ignorelock']=true;
|
||||
break;
|
||||
case '-e':
|
||||
case '--excludefp':
|
||||
if ($i+1>=$argc || !file_exists($argv[$i+1]) || !is_file($argv[$i+1]) || !is_readable($argv[$i+1]))
|
||||
|
@ -155,9 +164,16 @@ for ($i=1; $i<$argc; $i++) {
|
|||
}
|
||||
}
|
||||
|
||||
$lockfp=__DIR__.'/peerscrawl.lock';
|
||||
if (file_exists($lockfp) && !$opts['ignorelock'])
|
||||
mexit('Lockfile exists: it seems the program is already running; if you’re sure it’s not true, use «-I» to force execution.'.N,2);
|
||||
touch($lockfp);
|
||||
|
||||
function mexit($msg,$code) {
|
||||
global $link;
|
||||
global $link, $lockfp;
|
||||
if ($link) mysqli_close($link);
|
||||
if (isset($lockfp) && file_exists($lockfp))
|
||||
unlink($lockfp);
|
||||
echo($msg);
|
||||
exit($code);
|
||||
}
|
||||
|
@ -180,9 +196,10 @@ function sortcheckandsave(&$arr,$arrdesc,&$fp) {
|
|||
}
|
||||
|
||||
function shutdown($dosort) {
|
||||
global $opts, $peersf, $allpeersf, $insts, $ainsts;
|
||||
global $opts, $peersf, $allpeersf, $insts, $ainsts, $lockfp;
|
||||
if ($peersf) @fclose($peersf);
|
||||
if ($allpeersf) @fclose($allpeersf);
|
||||
if (isset($lockfp) && file_exists($lockfp)) unlink($lockfp);
|
||||
if ($dosort) {
|
||||
sortcheckandsave($insts,'list of responding instances',$opts['peersfp']);
|
||||
sortcheckandsave($ainsts,'list of all checked instances',$opts['allpeersfp']);
|
||||
|
@ -195,7 +212,7 @@ function signalHandler($signal) {
|
|||
echo(N.'I got interrupted (signal: '.$signal.').'.N);
|
||||
shutdown(false);
|
||||
//touch('KILLED');
|
||||
exit(2);
|
||||
exit(3);
|
||||
}
|
||||
//declare(ticks=1);
|
||||
pcntl_async_signals(true);
|
||||
|
@ -411,6 +428,7 @@ shutdown(true);
|
|||
$now=time();
|
||||
echo('Crawl started on '.strftime('%c',$tini).' and ended on '.strftime('%c',$now).'.'.N);
|
||||
echo(count($ainsts).' URIs checked in '.ght($now-$tini).'; '.count($insts).' responded. Max memory usage: '.ghs(memory_get_peak_usage(true)).N);
|
||||
unlink($lockfp);
|
||||
exit(0);
|
||||
|
||||
?>
|
||||
|
|
Loading…
Reference in a new issue