8$colors = array(
'#F00',
'#F80',
'#FF0',
10 '#22F',
'#ADF',
'#0FF',
'#F0F',
'#508',
'#FAA',
11 '#FFF',
'#AAA',
'#666',
'#222');
17 if (!
$ajax && $level ==
"DEBUG")
20 list($comp,$peer) = explode (
',', preg_replace (
'/(.*)-(\d*)/',
'\1,\2', $component));
21 $peer = array_key_exists ($peer,
$peers) ?
$peers[$peer] : $peer;
22 $date = $d ? $d->format(
'Y-m-d'). $d->format(
'H:i:s') :
"";
23 echo "<tr class=\"$level P-$peer C-$comp\" id=\"$c\">";
24 echo "<td class=\"date\"><small>$date</td>";
25 echo '<td class="usec"><small>';
26 echo $d ? $d->format(
'u') :
"";
28 echo "<td class=\"comp\">$comp</td><td class=\"peer\">$peer</td>";
29 echo "<td class=\"level\">$level</td><td><pre>$msg</pre></td>";
30 if ($level !=
"DEBUG")
32 echo '<td><div class="btn-group"><button class="btn btn-xs btn-default btn-showup"><span class="glyphicon glyphicon-chevron-up"></span></button>';
33 echo '<button class="btn btn-xs btn-default btn-showdown"><span class="glyphicon glyphicon-chevron-down"></span></button></div></td>';
43 foreach (
$lines as $line) {
44 render_row ($line[0], $line[1], $line[2], $line[3], $line[4], $line[5]);
53 $a = explode (
' ', $line);
56 $date = DateTime::createFromFormat (
"M d H:i:s-u", implode (
' ', array_slice ($a, 0, 3)));
59 $msg = implode (
' ', array_slice ($a, 5));
61 if (FALSE !== strpos($line,
"STARTING SERVICE")) {
62 $id = preg_replace (
"/.*\[(....)\].*\n/",
'\1', $line);
63 $pid = preg_replace (
"/.*[a-z-]*-([0-9]*).*\n/",
'\1', $line);
67 $lines[] = array ($date, $component, 0, $level, $msg,
$c);
68 $comp = preg_replace (
'/(.*)-\d*/',
'\1', $component);
72if (array_key_exists (
'a', $_GET)) {
73 $start = (
int)$_GET[
'a'];
80if (array_key_exists (
'z', $_GET)) {
81 $stop = (
int)$_GET[
'z'];
92 while (($line = fgets(
$handle)) !==
false) {
93 if (!$start ||
$c >= $start) {
97 if ($stop &&
$c > $stop)
101 echo "<div class=\"alert alert-danger\">Error opening file $path.</div>";
106if ($start !==
null || $stop !==
null) {
117 <
meta charset=
"utf-8">
118 <
meta http-equiv=
"X-UA-Compatible" content=
"IE=edge">
119 <
meta name=
"viewport" content=
"width=device-width, initial-scale=1">
121 <title>GNUnet log view</title>
123 <!-- Latest compiled and minified Bootstrap CSS -->
124 <link rel=
"stylesheet" href=
"//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css">
125 <!-- Optional theme -->
126 <link rel=
"stylesheet" href=
"//netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap-theme.min.css">
130 font-family: arial,sans-serif;
136 border-collapse:collapse;
142 background-color: transparent;
149 margin: 5% 0 0 -37.5%;
163 background-color:#CCC;
166 background-color:#EB9316;
169 background-color:#D2322D;
174 table.table tbody tr td,
175 table.table tbody th td {
176 padding: 0px 0px 0px 2px;
181 foreach (
$peers as $peer) {
182 echo "table.table tbody tr.P-$peer td.peer {\n";
192<div
class=
"btn-toolbar" role=
"toolbar">
193 <div
class=
"btn-group">
194 <button
id=
"ERROR" class=
"btn btn-danger btn-showlevel"><span
class=
"glyphicon glyphicon-fire"></span> Error</button>
195 <button
id=
"WARNING" class=
"btn btn-warning btn-showlevel"><span
class=
"glyphicon glyphicon-exclamation-sign"></span> Warning</button>
196 <button
id=
"INFO" class=
"btn btn-default btn-showlevel active"><span
class=
"glyphicon glyphicon glyphicon-info-sign"></span> Info</button>
197 <button
id=
"DEBUG" class=
"btn btn-primary btn-showlevel"><span
class=
"glyphicon glyphicon glyphicon-wrench"></span> Debug</button>
199 <div
id=
"btn-showpeer" class=
"btn-group">
200 <?php
foreach(
$peers as $pid=>$id): ?>
201 <button
id=
"P-<?php echo $id ?>" class=
"btn btn-default btn-element active"><?php
echo $id ?></button>
203 <button
class=
"btn btn-default btn-showall">All</button>
204 <button
class=
"btn btn-default btn-shownone">None</button>
206 <div
id=
"btn-showcomp" class=
"btn-group">
207 <?php
foreach(
$comps as
$c=>$one): ?>
208 <button
id=
"C-<?php echo $c ?>" class=
"btn btn-default btn-element active"><?php
echo $c ?></button>
210 <button
class=
"btn btn-default btn-showall">All</button>
211 <button
class=
"btn btn-default btn-shownone">None</button>
214<div
id=
"msg" class=
"alert alert-success"></div>
222 <th
class=
"level">Level</th>
232<
p>Rendered in <?php
echo microtime(
true)-
$t1; ?> seconds.</
p>
234 <script src=
"http://code.jquery.com/jquery-1.10.1.min.js"></script>
235 <!-- Latest compiled and minified Bootstrap JavaScript -->
236 <script src=
"//netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script>
240 var types = [
"ERROR",
"WARNING",
"INFO",
"DEBUG"];
241 var
peers = {<?php
foreach(
$peers as $pid=>$id)
echo "'$pid': '$id', "; ?>};
244 function msg (content)
246 $(
"#msg").html(content);
247 $(
"#msg").stop(
true);
248 $(
"#msg").fadeTo(100, 1).fadeTo(3000, 0.90).fadeOut(1000);
253 $(
"tbody > tr").hide();
254 $(
".btn-showlevel").removeClass(
"active");
255 $(
"#"+level).addClass(
"active");
256 for (var index = 0; index < types.length; ++index) {
257 $(
"#btn-showpeer > .btn-element.active").each(
function(){
259 $(
"#btn-showcomp > .btn-element.active").each(
function(){
260 $(
"."+types[index]+
"."+peer+
"."+this.
id).show();
263 if (types[index] == level)
270 $(btn).parents(
".btn-group").children(
".btn-element.active").each(
function(){$(
this).click()});
275 $(btn).parents(
".btn-group").children(
".btn-element:not(.active)").each(
function(){$(
this).click()});
280 $(
"#"+peer).toggleClass(
"active");
281 if ($(
"#"+peer).hasClass(
"active")) {
282 $(
"#btn-showcomp > .btn-element.active").each(
function(){
283 for (var index = 0; index < types.length; ++index) {
284 var className =
"." + types[index] +
"." + peer +
"." + this.
id;
286 if ($(
"#"+types[index]).hasClass(
"active"))
297 $(
"#"+comp).toggleClass(
"active");
298 if ($(
"#"+comp).hasClass(
"active")) {
299 $(
"#btn-showpeer > .btn-element.active").each(
function(){
300 for (var index = 0; index < types.length; ++index) {
301 var className =
"." + types[index] +
"." + comp +
"." + this.
id;
303 if ($(
"#"+types[index]).hasClass(
"active"))
314 var tr = $(btn).parents(
"tr");
316 var pos = parseInt(tr.attr(
"id"));
319 for (var index = 0; index < types.length; ++index) {
320 if (tr.hasClass(types[index]))
322 level = types[index];
327 if (parseInt(tr.prev().attr(
"id")) == last) {
328 msg (
"Already loaded");
331 first = parseInt(tr.prevAll(
"."+level).first().attr(
"id")) + 1;
332 first = isNaN(first) ? 0 : first;
334 if (parseInt(tr.next().attr(
"id")) == first) {
335 msg (
"Already loaded");
338 last = parseInt(tr.nextAll(
"."+level).first().attr(
"id")) - 1;
343 url: document.location,
344 data: { a: first, z: last }
345 }).done(
function ( resp ) {
346 var loc = $(
"#"+(first-1));
348 for (var peer in
peers) {
349 trs.filter(
".P-"+peer).removeClass(
'P-'+peer).addClass(
'P-'+
peers[peer]).find(
"td.peer").html(
peers[peer]);
354 $(
"#"+(last+1)).before(trs);
356 msg(
"Done loading " + (last-first+1) +
" lines.");
364 var tr = $(btn).parents(
"tr");
365 tr.nextUntil(
"."+tr.attr(
"class")).hide();
369 $(
".btn-showup").on (
"click",
function(){
load_debug(
this,
true) });
370 $(
".btn-showdown").on (
"click",
function(){
load_debug(
this,
false) });
371 $(
".btn-showlevel").on (
"click",
function(){
showlevel(this.
id) });
372 $(
"#btn-showpeer > .btn-element").on (
"click",
function(){
showpeer(this.
id) });
373 $(
"#btn-showcomp > .btn-element").on (
"click",
function(){
showcomp(this.
id) });
374 $(
".btn-showall").on (
"click",
function(){
showall(
this) });
375 $(
".btn-shownone").on (
"click",
function(){
shownone(
this) });
struct GNUNET_MessageHeader * msg
static int list
Set if we should print a list of currently running services.
static int echo
Request echo service.
static char * data
The data to insert into the dht.
static char * name
Name (label) of the records to list.
static struct GNUNET_IDENTITY_Handle * id
Handle to IDENTITY.
static struct GNUNET_FS_MetaData * meta
Meta-data provided via command-line option.
struct GNUNET_CONTAINER_MultiPeerMap * peers
Map from PIDs to struct CadetPeer entries.
static struct GNUNET_OS_Process * p
Helper process we started.
render_row($d, $component, $pid, $level, $msg, $c)
static struct PeerEntry ** table
Table with our interned peer IDs.
static unsigned int size
Size of the "table".
Record for neighbours and blacklisted peers.