API:YaCymin
Inhaltsverzeichnis
Funktionsumfang
Die PHP-Anwendung ermöglicht die Überwachung und Steuerung eines YaCy-Netzwerks und soll die Benutzung des YaCy-API verdeutlichen.
Vorraussetzungen
YaCymin erfordert eine PHP5-Umgebung wie sie auf allen Linux- oder MAC-OS basierten Systemen vorhanden ist, für Windows stehen Pakete wie XAMP oder EasyPHP zur Verfügung die die erforderlichen Komponenten bequem installieren und Einrichten.
Download
- XAMPP - http://www.apachefriends.org/de/xampp.html
- EasyPHP - http://www.easyphp.org/
Installation
Das YaCymin-Archiv wird im HTROOT des Webservers entpackt und ist dann unter http://localhost/YaCymin aufrufbar.
Konfiguration
Zum Betrieb muss die Datei peerlist_inc.php angepasst werden, sie enthält Adress- und Zugangsdaten aller Peers die über YaCymin adminstriert werden sollen, eine reine Statusabfrage aller Netzwerk-peers erfolgt automatisch über die Netzwerk-Informationen.
<?php // ----------- edit here ---------- // array of possipble peers 0:ip, 1:port, 2:user:pw, 3: opt.friendlyname // do NOT use localhost but (public) IP/hostname $i= 0; $this_YaCyPeer[$i][0]="127.0.0.1"; $this_YaCyPeer[$i][1]="8090"; $this_YaCyPeer[$i][2]="admin:"; $this_YaCyPeer[$i][3]="local peer"; $i= 1; // ... // ----------- end edit ---------- ?>
Funktionsweise
Alle Funktionen werden durch HTTP-Aufrufe an den entsprechenden YaCy-peer ausgelöst und die per XML gelieferten Ergebnisse für die Anzeige aufbereitet. Mithilfe der PHP-Klasse YaCyAPI könenn diese Aufrufe bequem und fehlertolerant ausgeführt werden, selbstverständlich ist auch eine direkte Abfrage über WGET oder cURL möglich.
// Include the API PHP Library require 'YaCyAPI4.php'; // start the class $search = new YaCyAPI(); // set peer adress and credentials $adress=$peer.":".$port; $credentials="admin:password"; $name="optional friendly peername"; $dummy=$search->setProperties($adress,$credentials,$name); // ping peer $info=$search->ping(); if ($info['status']) { echo "peer pinged in ".$search->_dur1." milliseconds"; } // get peer info $items=$search->getProperties(); if ($info) { $peername=$items['name']; }
Eine ausführliche Dokumentation der jeweiligen XML-Antworten ist unter Dev:API einsehbar.
Beispiel: Statusanzeige eines einzelnen Peers
inc_onepeer.php: <?php $t="Showing peer-name / address and time for a ping / time for executing commands / peer uptime. Click for more infos."; echo '<div class="blogtoy"><h2 title=" '.$t.' "class="widgetheader">'; echo "<table border=0 width=100%><tr><td width=35%>"; if ($info['status']) #peer online {
Das Status-Flag im info-Array der ping Funktion zeigt an dass der peer auf Befehle reagiert, somit kann der YaCy-Name und weitere Statusiunformationen ausgelesen und dargestellt werden.
$items=$search->getProperties(); $info['name']=$items['name']; if ($info['name']) { echo "<i>".$info['name']."</i> is "; } else { echo $info['host'].":".$info['port']." is "; } echo "<font color=green>on</font>"; echo "</td><td>"; $ti1=round(($search->_dur1*1000),0); $ti2=round(($search->_dur2*1000),0); switch ($ti1) { case ($ti1 > 300): $ti1="<font color=red>".$ti1."</font>"; break; case ($ti1 > 100): $ti1="<font color=orange>".$ti1."</font>"; break; } switch ($ti2) { case ($ti2 > 5000): $ti2="<font color=red>".$ti2."</font>"; break; case ($ti2 > 500): $ti2="<font color=orange>".$ti2."</font>"; break; } echo "<font size=1> (<font color=grey>ping:</font>".$ti1." <font color=grey>cmd:</font>".$ti2." ms)</font></td>"; echo "<td align = right>"; echo " ".$items['uptime']." "; echo "</td></tr></table>"; } else #peer offline { if ($info['name']) { echo "<i>".$info['name']."</i> is "; } else { echo $info['host'].":".$info['port']." is "; } echo "<font color=red>off"; echo "</font>"; echo ' <a href=?action=SSH&host='.$info['host'].' title="SSH"><img src=images/cats.png></a>'; echo "</td></tr></table>"; } echo '</h2>'; echo '<div class="innerwidget">'; if ($info['status']) { echo "<div align=center><h4>Peer Details:</h4>"; echo $items['type']." ".$items['name']." (".$info['host'].":".$info['port'].")"; echo " subversion:" .$items['version']; echo "<br>links/words: ".$items['links']."/".$items['words']." - "; if ($items['acceptindex']) echo "accepts DHT-in "; if ($items['acceptcrawl']) echo "is remote crawling"; echo "<br><a href=http://".$info['host'].":".$info['port']."/Status.html>Admin</a>"; echo " - <a href=?action=stats&peer=".$peerno.">Stats</a>"; echo " - <a href=?action=log&peer=".$peerno.">Log</a>"; echo " - <a href=?action=SSH&host=".$info['host'].">SSH</a>"; echo "<br><img src=http://".$info['host'].":".$info['port']."/Banner.png?textcolor=000000&bgcolor=ddeeee&bordercolor=aaaaaa>"; echo "</div>"; echo '<center><iframe src="http://'.$info['host'].":".$info['port'].'/rssTerminal.html?set=PEERNEWS,REMOTESEARCH,LOCALSEARCH,REMOTEINDEXING,LOCALINDEXING,INDEXRECEIVE&width=600px&height=180px&maxlines=20&maxwidth=120" style="width:600px;height:180px;margin:0px;border:1px solid black;" scrolling="no" name="newsframe"></iframe><br />'; echo "<p><img src=http://".$info['host'].":".$info['port']."/PerformanceGraph.png></p>"; echo "</center><hr>"; }
Reagiert der peer nach dem voreingestellten timout nicht auf Befehle so wird er als offline markiert.
else { echo "Offline"; } echo "</div></div>"; #blogtoy ?>
Beispiel: Liste aller adminstrierbarer peers
Eine festzulegende peerlist_inc.php enthält Adresse und Zugansdaten aller peers die auch administriert werden sollen. In einer Schleife wird diese Liste abgearbeitet und wie oben veranschulicht Informationen zu den einzelnen peers dargestellt.
inc_peers.php <?php // Include the API PHP Library require 'YaCyAPI4.php'; //----------------------------------------------------- // start the class $search = new YaCyAPI(); //----------------------------------------------------- // show overview echo "<h3><font color=grey> ".date('d-m H:i',time())."</font></h3>"; //----------------------------------------------------- // include 'peerlist_inc.php'; $maxpeers=count($this_YaCyPeer)+1; #local inst for ($peerno=0;$peerno<$maxpeers;$peerno++) { $peer=$this_YaCyPeer[$peerno][0]; $port=$this_YaCyPeer[$peerno][1]; $appid=$this_YaCyPeer[$peerno][2]; $name=$this_YaCyPeer[$peerno][3]; #------------------------------------------------------------------------------- $res=$search->setProperties($peer.":".$port,$appid,$name); $info=$search->ping(); if ($info['host']) #peer defined? { require('inc_onepeer.php'); #sample code sample above } } #end for peerno ?>
Beispiel: Crawl Profile
Beispiel: Crawl Start
Beispiel: Suchfunktion
Eigene Module
Mit einfachen PHP-Kenntnissen können auf der Grundlage des API und der YaCymin Anwendung recht einfach eigene Funktionen oder Auswertungen realisiert werden. Das Modul muss lediglich eine der YaCY-XML Ausgaben auswerten, oder eine Aufgabe zur Steuerung übernehmen, um dann über HTML die Ergebnisse im Browser darzustellen.