This commit is contained in:
pezcurrel 2020-10-14 08:37:41 +02:00
parent 71301acebe
commit d023bc8302
7 changed files with 108 additions and 51 deletions

View file

@ -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;

View file

@ -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) {

View file

@ -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 unopzione 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 unopzione 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.

View file

@ -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

View file

@ -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 che il lockfile sia ignorato. Attenzione: verifica
che effettivamente il programma non stia già girando prima di usarla.
-r, --restore
Prova a riprendere lesecuzione di una sessione precedente non finita
Prova a riprendere lesecuzione 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 lesecuzione.'.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() {
}
?>

View file

@ -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('Lopzione «'.$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 è unazione 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);

View file

@ -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 programs 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 youre sure its 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);
?>