Merge remote branch 'tokkee/sh/collectd-4.9' into collectd-4.9
authorFlorian Forster <octo@noris.net>
Wed, 9 Jun 2010 08:38:55 +0000 (10:38 +0200)
committerFlorian Forster <octo@noris.net>
Wed, 9 Jun 2010 08:38:55 +0000 (10:38 +0200)
contrib/collectd2html.pl
src/powerdns.c

index 7953d67..fe4e2bd 100644 (file)
@@ -44,7 +44,7 @@ use Getopt::Long qw(:config no_ignore_case bundling pass_through);
 my $DIR       = "/var/lib/collectd";
 my $HOST      = undef;
 my $IMG_FMT   = "PNG";
-my $RECURSIVE = 0;
+my $RECURSIVE = 1;
 
 GetOptions (
     "host=s"         => \$HOST,
@@ -63,12 +63,12 @@ if (defined($HOST) && ($DIR !~ m/\/$HOST\/?$/) && (-d "$DIR/$HOST")) {
 
 my @COLORS = (0xff7777, 0x7777ff, 0x55ff55, 0xffcc77, 0xff77ff, 0x77ffff,
        0xffff77, 0x55aaff);
-my @tmp = `/bin/hostname`; chomp(@tmp);
+my @tmp = `/bin/hostname -f`; chomp(@tmp);
 $HOST = $tmp[0] if (! defined $HOST);
 my $svg_p = ($IMG_FMT eq "SVG");
 my $IMG_SFX = $svg_p ? ".svg" : ".png";
 my $IMG_DIR = "${HOST}.dir";
-my $HTML = "${HOST}.html";
+my $HTML = "${HOST}.xhtml";
 
 ################################################################################
 #
@@ -118,14 +118,20 @@ open(OUT, ">$HTML");
 my $title="Rrd plot for $HOST";
 
 print OUT <<END;
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-<html>
+<!DOCTYPE html PUBLIC
+  "-//W3C//DTD XHTML 1.1//EN"
+  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
+<style type="text/css" media="screen">
+.graph { text-align: center; }
+object.graph { width: 670; height: 179; }
+</style>
 <title>$title</title>
+<meta http-equiv="Content-Type"
+      content="application/xhtml+xml; charset=us-ascii" />
 </head>
 <body>
-<center>
 END
 
 # list interesting rrd
@@ -140,27 +146,28 @@ else {
 }
 chomp(@list);
 
-foreach my $rrd (sort @list){
+@list = sort @list;
+foreach my $rrd (@list){
        $rrd =~ m/^$DIR\/(.*)\.rrd$/;
        push(@rrds, $1);
 }
 
 # table of contents
 print OUT <<END;
-<A name="top"></A><H1>$title</H1>
-<P>
+<h1><a id="top">$title</a></h1>
+<p>
 END
 
 foreach my $bn (@rrds){
        my $cleaned_bn = $bn;
        $cleaned_bn =~ tr/%\//__/;
        print OUT <<END;
-<A href="#$cleaned_bn">$bn</A>
+<a href="#$cleaned_bn">$bn</a>
 END
 }
 
 print OUT <<END;
-</P>
+</p>
 END
 
 # graph interesting rrd
@@ -205,7 +212,7 @@ for (my $i = 0; $i < scalar(@rrds); ++$i) {
        my $cleaned_bn = $bn;
        $cleaned_bn =~ tr/%\//__/;
        print OUT <<END;
-<A name="$cleaned_bn"></A><H1>$bn</H1>
+<h2><a id="$cleaned_bn">$bn</a></h2>
 END
 
        # graph various ranges
@@ -222,24 +229,28 @@ END
                my $cleaned_img = $img; $cleaned_img =~ s/%/%25/g;
                if (! $svg_p) {
                        print OUT <<END;
-<P><IMG src="$cleaned_img" alt="${bn} $span"></P>
+<p class="graph"><img src="$cleaned_img" alt="${bn} $span" /></p>
 END
                } else {
                        print OUT <<END;
-<P><object data="$cleaned_img" type="image/svg+xml"
-           width="670" height="179">
-  ${bn} $span</object></P>
+<p class="graph"><object data="$cleaned_img" type="image/svg+xml">
+  ${bn} $span</object></p>
 END
                }
        }
 
        print OUT <<END;
-<A href="#top">[top]</A>
+<p><a href="#top">[top]</a></p>
 END
 }
 
 print OUT <<END;
-</center>
+<hr />
+<p>
+  <a href="http://validator.w3.org/check?uri=referer"><img
+     src="http://www.w3.org/Icons/valid-xhtml10"
+     alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a>
+</p>
 </body>
 </html>
 END
index 3e7ebb3..29f6bca 100644 (file)
 #define FUNC_ERROR(func) do { char errbuf[1024]; ERROR ("powerdns plugin: %s failed: %s", func, sstrerror (errno, errbuf, sizeof (errbuf))); } while (0)
 
 #define SERVER_SOCKET  LOCALSTATEDIR"/run/pdns.controlsocket"
-#define SERVER_COMMAND "SHOW *"
+#define SERVER_COMMAND "SHOW * \n"
 
 #define RECURSOR_SOCKET  LOCALSTATEDIR"/run/pdns_recursor.controlsocket"
 #define RECURSOR_COMMAND "get noerror-answers nxdomain-answers " \
   "servfail-answers sys-msec user-msec qa-latency cache-entries cache-hits " \
-  "cache-misses questions"
+  "cache-misses questions\n"
 
 struct list_item_s;
 typedef struct list_item_s list_item_t;
@@ -439,6 +439,11 @@ static int powerdns_get_data_stream (list_item_t *item, /* {{{ */
     return (-1);
   }
 
+  struct timeval timeout;
+  timeout.tv_sec=5;
+  timeout.tv_usec=0;
+  status = setsockopt (sd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof (timeout));
+
   status = connect (sd, (struct sockaddr *) &item->sockaddr,
       sizeof (item->sockaddr));
   if (status != 0)
@@ -531,7 +536,7 @@ static int powerdns_read_server (list_item_t *item) /* {{{ */
   int fields_num;
 
   if (item->command == NULL)
-    item->command = strdup ("SHOW *");
+    item->command = strdup (SERVER_COMMAND);
   if (item->command == NULL)
   {
     ERROR ("powerdns plugin: strdup failed.");
@@ -612,7 +617,7 @@ static int powerdns_update_recursor_command (list_item_t *li) /* {{{ */
   else
   {
     sstrncpy (buffer, "get ", sizeof (buffer));
-    status = strjoin (&buffer[4], sizeof (buffer) - strlen ("get "),
+    status = strjoin (&buffer[strlen("get ")], sizeof (buffer) - strlen ("get "),
        li->fields, li->fields_num,
        /* seperator = */ " ");
     if (status < 0)
@@ -620,6 +625,14 @@ static int powerdns_update_recursor_command (list_item_t *li) /* {{{ */
       ERROR ("powerdns plugin: strjoin failed.");
       return (-1);
     }
+    buffer[sizeof (buffer) - 1] = 0;
+    int i = strlen (buffer);
+    if (i < sizeof (buffer) - 2)
+    {
+      buffer[i++] = ' ';
+      buffer[i++] = '\n';
+      buffer[i++] = '\0';
+    }
   }
 
   buffer[sizeof (buffer) - 1] = 0;