Browse Source

Aggiunta la possibilità di passargli opzioni da riga di comando; sistemato un bacone; eliminata una funzione non utilizzata.

pezcurrel 4 years ago
parent
commit
0cdf966ec8
1 changed files with 66 additions and 25 deletions
  1. 66 25
      web/mustard/crawler/crawler.php

+ 66 - 25
web/mustard/crawler/crawler.php

@@ -61,42 +61,83 @@ $opts=array(
 	'log'=>false,
 	'jsonfp'=>__DIR__.'/instances.json',
 	'jsonwrite'=>false,
-	'peersfp'=>__DIR__.'peers'
+	'peersfp'=>__DIR__.'/peers'
 );
 
-use function mysqli_real_escape_string as myesc;
-
-function tosec($str) {
-	if (preg_match('/^([0-9]+)([smogSMA]?)/',$str,$buf)===1) {
-		switch ($buf[2]) {
-			case '':
-			case 's':
-			return($buf[1]);
+$help='crawler.php
+ DESCRIZIONE
+  Popola/aggiorna il database di mastostart con i dati che riesce
+  a recuperare da una lista di istanze composta da quelle già presenti
+  nel database più quelle di un file specificabile (tipicamente il file
+  di output di peerscrawl.php).
+  È possibile fermarne l’esecuzione per riprenderla in un secondo tempo:
+  il programma genera, durante l’esecuzione, una lista delle istanze che
+  deve controllare («instances.job») e un file in cui viene salvata l’ultima
+  istanza controllata e altri dati; per riprendere l’esecuzione là dove
+  era stata lasciata basta lanciare nuovamente il programma; per evitare
+  che il programma riprenda da dove era arrivato durante l’esecuzione
+  precedente basta cancellare i due file di cui sopra.
+ SYNOPSIS
+  peerscrawl.php [options]
+ OPTIONS
+  -p, --peersfp <file>
+   Definisce il file da cui caricare la lista delle istanze di cui cercare
+   di recuperare i dati. Nota: questa opzione è ininfluente se il programma
+   viene lanciato per riprendere un’esecuzione precedente interrotta.
+   DEFAULT: «'.$opts['peersfp'].'»
+  -t, --timeout <secondi>
+   Definisce il timeout in secondi di ogni tentativo di connessione.
+   DEFAULT: «'.$opts['timeout'].'»
+  -l, --log
+   Attiva il logging dell’output nel file «crawler.php» nella stessa
+   directory di crawler.php.
+  -j, --jsonwrite
+   Attiva la scrittura di un file «instances.json» nella stessa directory
+   di crawler.php, contenente tutti i dati recuperati da tutte le istanze.
+
+  This program comes with ABSOLUTELY NO WARRANTY; for details see the source.
+  This is free software, and you are welcome to redistribute it under
+  certain conditions; see <http://www.gnu.org/licenses/> for details.'.N;
+
+for ($i=1; $i<$argc; $i++) {
+	if (substr($argv[$i],0,1)=='-') {
+		switch($argv[$i]) {
+			case '-p':
+			case '--peersfp':
+			if ($i+1>=$argc || !file_exists($argv[$i+1]) || !is_file($argv[$i+1]) || !is_readable($argv[$i+1]))
+				mexit('L’opzione «'.$argv[$i].'» richiede come parametro un file esistente e leggibile (usa «-h» per vedere la guida).'.N,1);
+			$i++;
+			$opts['peersfp']=$argv[$i];
 			break;
-			case 'm':
-			return($buf[1]*60);
+			case '-t':
+			case '--timeout':
+			if ($i+1>=$argc || preg_match('/[0-9]+/',$argv[$i+1])!==1)
+				mexit('L’opzione «'.$argv[$i].'» richiede un parametro numerico (usa «-h» per vedere la guida).'.N,1);
+			$i++;
+			$opts['timeout']=$argv[$i]+0;
 			break;
-			case 'o':
-			return($buf[1]*60*60);
+			case '-l':
+			case '--log':
+			$opts['log']=true;
+			$i++;
 			break;
-			case 'g':
-			return($buf[1]*60*60*24);
+			case '-j':
+			case '--jsonwrite':
+			$opts['jsonwrite']=true;
 			break;
-			case 'S':
-			return($buf[1]*60*60*24*7);
+			case '-h':
+			case '--help':
+			mexit($help,0);
 			break;
-			case 'M':
-			return($buf[1]*60*60*24*30);
-			break;
-			case 'A':
-			return($buf[1]*60*60*24*365);
+			default:
+			mexit('L’opzione «'.$argv[$i].'» è sconosciuta (usa «-h» per vedere la guida).'.N,1);
 			break;
 		}
-	} else {
-		return(false);
 	}
 }
 
+use function mysqli_real_escape_string as myesc;
+
 function mexit($msg,$code) {
 	global $link, $jsonf, $logf;
 	lecho($msg);
@@ -113,7 +154,7 @@ function lecho($msg,$logonly=false) {
 	global $opts, $logf;
 	if (!$logonly)
 		echo($msg);
-	if ($opts['log'])
+	if ($opts['log'] && $logf!==false)
 		fwrite($logf,$msg);
 }