adding GNUNET_CRYPTO_eddsa_private_key_from_string
[oweals/gnunet.git] / contrib / log.php
index 8d272cd56b529ffbe307e91eb119243ce32075d1..b2ca9ed6cde69f7cd88386b6851ba249532b7bf2 100644 (file)
@@ -3,7 +3,12 @@
 $path='log';
 $lines = array();
 $peers = array();
+$comps = array();
 $ajax = FALSE;
+$colors = array('#F00', '#F80', '#FF0',
+                '#4F0', '#0A0',
+                '#22F', '#ADF', '#0FF', '#F0F', '#508', '#FAA',
+                '#FFF', '#AAA', '#666', '#222');
 
 function render_row ($d, $component, $pid, $level, $msg, $c)
 {
@@ -15,18 +20,17 @@ function render_row ($d, $component, $pid, $level, $msg, $c)
   list($comp,$peer) = explode (',', preg_replace ('/(.*)-(\d*)/', '\1,\2', $component));
   $peer = array_key_exists ($peer, $peers) ? $peers[$peer] : $peer;
   $date = $d ? $d->format('Y-m-d'). $d->format('H:i:s') : "";
-  echo "<tr class=\"$level $peer\" id=\"$c\">";
+  echo "<tr class=\"$level P-$peer C-$comp\" id=\"$c\">";
   echo "<td class=\"date\"><small>$date</td>";
   echo '<td class="usec"><small>';
   echo $d ? $d->format('u') : "";
   echo '</small></td>';
   echo "<td class=\"comp\">$comp</td><td class=\"peer\">$peer</td>";
-  echo "<td class=\"level\">$level</td><td>$msg&nbsp;</td>";
+  echo "<td class=\"level\">$level</td><td><pre>$msg</pre></td>";
   if ($level != "DEBUG")
   {
     echo '<td><div class="btn-group"><button class="btn btn-xs btn-default btn-showup"><span class="glyphicon glyphicon-chevron-up"></span></button>';
     echo '<button class="btn btn-xs btn-default btn-showdown"><span class="glyphicon glyphicon-chevron-down"></span></button></div></td>';
-//     echo '</td>';
   }
   else
     echo '<td></td>';
@@ -45,6 +49,7 @@ function process ($line, $c)
 {
   global $lines;
   global $peers;
+  global $comps;
   $a = explode (' ', $line);
   if (count($a) < 6)
     return;
@@ -60,6 +65,8 @@ function process ($line, $c)
   }
 
   $lines[] = array ($date, $component, 0, $level, $msg, $c);
+  $comp = preg_replace ('/(.*)-\d*/', '\1', $component);
+  $comps[$comp] = 1;
 }
 
 if (array_key_exists ('a', $_GET)) {
@@ -95,12 +102,14 @@ if ($handle) {
 }
 
 $t1 = microtime(true);
+/* Ajax request: don't render container HTML, just table rows. */
 if ($start !== null || $stop !== null) {
   render_rows();
   die();
 }
 // echo $t1-$t0;
-
+ksort($peers);
+ksort($comps);
 ?>
 <!DOCTYPE html>
 <html lang="en">
@@ -119,13 +128,19 @@ if ($start !== null || $stop !== null) {
   <style>
     body {
       font-family: arial,sans-serif;
-/*       color:#444; */
     }
     table {
+      color:#000;
       margin-top: 40px;
       font-size:12px;
       border-collapse:collapse;
     }
+    pre {
+      padding: 0px;
+      margin: 0px;
+      border: 0px;
+      background-color: transparent;
+    }
     .alert {
       display: none;
       position: fixed;
@@ -137,6 +152,10 @@ if ($start !== null || $stop !== null) {
       position: fixed;
       top: 0px;
     }
+    .btn-xs {
+      font-size: 9px;
+      padding: 0 5px;
+    }
     .level {
       display: none;
     }
@@ -152,10 +171,19 @@ if ($start !== null || $stop !== null) {
     .btn-group {
       min-width: 48px;
     }
-    table.table tbody tr td {
-      padding: 0px 0px 0px 4px;
+    table.table tbody tr td,
+    table.table tbody th td {
+      padding: 0px 0px 0px 2px;
       margin-bottom: 0px;
     }
+<?php
+    $c = 0;
+    foreach ($peers as $peer) {
+      echo "table.table tbody tr.P-$peer td.peer {\n";
+      echo '  background-color: ' . $colors[$c] . ";\n";
+      echo "}\n";
+      echo "#P-$peer { color: " . $colors[$c++] . "}\n";
+    } ?>
   </style>
 </head>
 
@@ -165,15 +193,22 @@ if ($start !== null || $stop !== null) {
   <div class="btn-group">
     <button id="ERROR" class="btn btn-danger btn-showlevel"><span class="glyphicon glyphicon-fire"></span> Error</button>
     <button id="WARNING" class="btn btn-warning btn-showlevel"><span class="glyphicon glyphicon-exclamation-sign"></span> Warning</button>
-    <button id="INFO" class="btn btn-info btn-showlevel active"><span class="glyphicon glyphicon glyphicon-info-sign"></span> Info</button>
-    <button id="DEBUG" class="btn btn-default btn-showlevel"><span class="glyphicon glyphicon glyphicon-wrench"></span> Debug</button>
+    <button id="INFO" class="btn btn-default btn-showlevel active"><span class="glyphicon glyphicon glyphicon-info-sign"></span> Info</button>
+    <button id="DEBUG" class="btn btn-primary btn-showlevel"><span class="glyphicon glyphicon glyphicon-wrench"></span> Debug</button>
   </div>
-  <div class="btn-group">
+  <div id="btn-showpeer" class="btn-group">
     <?php foreach($peers as $pid=>$id): ?>
-    <button id="<?php echo $id ?>" class="btn btn-default btn-showpeer active"><?php echo $id ?></button>
+    <button id="P-<?php echo $id ?>" class="btn btn-default btn-element active"><?php echo $id ?></button>
+    <?php endforeach ?>
+    <button class="btn btn-default btn-showall">All</button>
+    <button class="btn btn-default btn-shownone">None</button>
+  </div>
+  <div id="btn-showcomp" class="btn-group">
+    <?php foreach($comps as $c=>$one): ?>
+    <button id="C-<?php echo $c ?>" class="btn btn-default btn-element active"><?php echo $c ?></button>
     <?php endforeach ?>
-    <button id="all" class="btn btn-default btn-showpeer">All</button>
-    <button id="none" class="btn btn-default btn-showpeer">None</button>
+    <button class="btn btn-default btn-showall">All</button>
+    <button class="btn btn-default btn-shownone">None</button>
   </div>
 </div>
 <div id="msg" class="alert alert-success"></div>
@@ -191,8 +226,10 @@ if ($start !== null || $stop !== null) {
   </thead>
   <tbody>
 <?php render_rows(); ?>
-  </tbody>
+  </tbody>default
 </table>
+<p>Processed in <?php echo $t1-$t0; ?> seconds.</p>
+<p>Rendered in <?php echo microtime(true)-$t1; ?> seconds.</p>
   <!-- jQuery -->
   <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
   <!-- Latest compiled and minified Bootstrap JavaScript -->
@@ -201,6 +238,7 @@ if ($start !== null || $stop !== null) {
   <script>
 
     var types = ["ERROR", "WARNING", "INFO", "DEBUG"];
+    var peers = {<?php foreach($peers as $pid=>$id) echo "'$pid': '$id', "; ?>};
     var msg_timeout;
 
     function msg (content)
@@ -216,21 +254,60 @@ if ($start !== null || $stop !== null) {
       $(".btn-showlevel").removeClass("active");
       $("#"+level).addClass("active");
       for (var index = 0; index < types.length; ++index) {
-       $("."+types[index]).show();
+        $("#btn-showpeer > .btn-element.active").each(function(){
+         var peer = this.id;
+         $("#btn-showcomp > .btn-element.active").each(function(){
+           $("."+types[index]+"."+peer+"."+this.id).show();
+         });
+        });
        if (types[index] == level)
          return;
       }
     }
 
+    function shownone(btn)
+    {
+      $(btn).parents(".btn-group").children(".btn-element.active").each(function(){$(this).click()});
+    }
+
+    function showall(btn)
+    {
+      $(btn).parents(".btn-group").children(".btn-element:not(.active)").each(function(){$(this).click()});
+    }
+
     function showpeer (peer)
     {
       $("#"+peer).toggleClass("active");
       if ($("#"+peer).hasClass("active")) {
-        $("."+peer).show();
+       $("#btn-showcomp > .btn-element.active").each(function(){
+         for (var index = 0; index < types.length; ++index) {
+           var className = "." + types[index] + "." + peer + "." + this.id;
+           $(className).show();
+           if ($("#"+types[index]).hasClass("active"))
+             return;
+         }
+       });
       } else {
         $("."+peer).hide();
       }
     }
+    
+    function showcomp (comp)
+    {
+      $("#"+comp).toggleClass("active");
+      if ($("#"+comp).hasClass("active")) {
+       $("#btn-showpeer > .btn-element.active").each(function(){
+         for (var index = 0; index < types.length; ++index) {
+           var className = "." + types[index] + "." + comp + "." + this.id;
+           $(className).show();
+           if ($("#"+types[index]).hasClass("active"))
+             return;
+         }
+       });
+      } else {
+        $("."+comp).hide();
+      }
+    }
 
     function load_debug (btn, up)
     {
@@ -267,10 +344,14 @@ if ($start !== null || $stop !== null) {
        data: { a: first, z: last }
       }).done(function ( resp ) {
        var loc = $("#"+(first-1));
+       var trs = $(resp);
+        for (var peer in peers) {
+          trs.filter(".P-"+peer).removeClass('P-'+peer).addClass('P-'+peers[peer]).find("td.peer").html(peers[peer]);
+        }
        if (loc.length > 0)
-         loc.after(resp);
+         loc.after(trs);
        else {
-         $("#"+(last+1)).before(resp);
+         $("#"+(last+1)).before(trs);
        }
        msg("Done loading " + (last-first+1) + " lines.");
       });
@@ -288,7 +369,10 @@ if ($start !== null || $stop !== null) {
       $(".btn-showup").on ("click", function(){ load_debug(this, true) });
       $(".btn-showdown").on ("click", function(){ load_debug(this, false) });
       $(".btn-showlevel").on ("click", function(){ showlevel(this.id) });
-      $(".btn-showpeer").on ("click", function(){ showpeer(this.id) });
+      $("#btn-showpeer > .btn-element").on ("click", function(){ showpeer(this.id) });
+      $("#btn-showcomp > .btn-element").on ("click", function(){ showcomp(this.id) });
+      $(".btn-showall").on ("click", function(){ showall(this) });
+      $(".btn-shownone").on ("click", function(){ shownone(this) });
     });
   </script>
 </body>