API:YaCymin

Aus YaCyWiki
Wechseln zu: Navigation, Suche

Funktionsumfang

Die PHP-Anwendung ermöglicht die Überwachung und Steuerung eines YaCy-Netzwerks und soll die Benutzung des YaCy-API verdeutlichen.

YaCymin Status
YaCymin Netzstatistik
YaCymin Crawl Profile
YaCymin Crawl Start

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

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.