<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Pinger</title><link>https://sourceforge.net/p/escsystemctrl/wiki/Pinger/</link><description>Recent changes to Pinger</description><atom:link href="https://sourceforge.net/p/escsystemctrl/wiki/Pinger/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 18 Dec 2014 22:24:23 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/escsystemctrl/wiki/Pinger/feed" rel="self" type="application/rss+xml"/><item><title>Pinger modified by David Lurth</title><link>https://sourceforge.net/p/escsystemctrl/wiki/Pinger/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -21,31 +21,31 @@
    # touch nodes
    # nano pinger.sh
       Copy and Paste the following:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-         #!/bin/bash
-         to_address='email@domain.com'
-         timestamp=`date +%m-%d_%H:%M:%S`
-         while read node; do
-            response=$(ping -c1 $node |head -2 |tail -1)
-            if [ -z "$response" ]; then
-               response="Unreachable"
-               echo $timestamp &amp;gt; /pinger/unreachable/$node
-               mail -s "unreachable - $node" $to_address &amp;lt;&amp;lt;&amp;lt; $timestamp
-            elif [ -e "/pinger/unreachable/$node" ]; then
-               if [[ $response =~ "Unreachable" ]]; then
-                  response="Unreachable"
-               else
-                  rm /pinger/unreachable/$node
-                  response=$(echo "$response" |awk -F "time=" '{ print $2 }')
-                  mail -s "reachable again - $node" $to_address &amp;lt;&amp;lt;&amp;lt; $timestamp
-               fi
-            else
-               response=$(echo "$response" |awk -F "time=" '{ print $2 }')
-            fi
-            log="$timestamp - $response"
-            echo $log &amp;gt;&amp;gt; /pinger/logs/$node
-         done &amp;lt;/pinger&amp;gt; /pinger/unreachable/$node
+       mail -s "unreachable - $node" $to_address &amp;lt;&amp;lt;&amp;lt; $timestamp
+    elif [ -e "/pinger/unreachable/$node" ]; then
+       if [[ $response =~ "Unreachable" ]]; then
+          response="Unreachable"
+       else
+          rm /pinger/unreachable/$node
+          response=$(echo "$response" |awk -F "time=" '{ print $2 }')
+          mail -s "reachable again - $node" $to_address &amp;lt;&amp;lt;&amp;lt; $timestamp
+       fi
+    else
+       response=$(echo "$response" |awk -F "time=" '{ print $2 }')
+    fi
+    log="$timestamp - $response"
+    echo $log &amp;gt;&amp;gt; /pinger/logs/$node
+ done &amp;lt;/pinger&amp;gt;
&lt;/pre&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Lurth</dc:creator><pubDate>Thu, 18 Dec 2014 22:24:23 -0000</pubDate><guid>https://sourceforge.net9b93475823c5c28c20e6bd003edb23a33aa1a706</guid></item><item><title>Pinger modified by David Lurth</title><link>https://sourceforge.net/p/escsystemctrl/wiki/Pinger/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;+--------+ &lt;br /&gt;
| pinger |&lt;br /&gt;
+--------+&lt;/p&gt;
&lt;p&gt;Ubuntu 14.04.1 Server amd64&lt;/p&gt;
&lt;p&gt;Install OpenSSH server&lt;br /&gt;
   # apt-get install openssh-server&lt;/p&gt;
&lt;p&gt;SSH into the Pinger server using Putty (or another SSH client)&lt;/p&gt;
&lt;p&gt;Become root&lt;br /&gt;
   # sudo su&lt;/p&gt;
&lt;p&gt;Create necessary files and folders&lt;br /&gt;
   # mkdir /pinger&lt;br /&gt;
   # cd /pinger&lt;br /&gt;
   # mkdir logs&lt;br /&gt;
   # mkdir old_logs&lt;br /&gt;
   # mkdir unreachable&lt;br /&gt;
   # touch nodes&lt;br /&gt;
   # nano pinger.sh&lt;br /&gt;
      Copy and Paste the following:&lt;br /&gt;
             #!/bin/bash&lt;br /&gt;
             to_address='email@domain.com'&lt;br /&gt;
             timestamp=&lt;code&gt;date +%m-%d_%H:%M:%S&lt;/code&gt;&lt;br /&gt;
             while read node; do&lt;br /&gt;
                response=$(ping -c1 $node |head -2 |tail -1)&lt;br /&gt;
                if &lt;span&gt;[ -z "$response" ]&lt;/span&gt;; then&lt;br /&gt;
                   response="Unreachable"&lt;br /&gt;
                   echo $timestamp &amp;gt; /pinger/unreachable/$node&lt;br /&gt;
                   mail -s "unreachable - $node" $to_address &amp;lt;&amp;lt;&amp;lt; $timestamp&lt;br /&gt;
                elif &lt;span&gt;[ -e "/pinger/unreachable/$node" ]&lt;/span&gt;; then&lt;br /&gt;
                   if [[ $response =~ "Unreachable" ]]; then&lt;br /&gt;
                      response="Unreachable"&lt;br /&gt;
                   else&lt;br /&gt;
                      rm /pinger/unreachable/$node&lt;br /&gt;
                      response=$(echo "$response" |awk -F "time=" '{ print $2 }')&lt;br /&gt;
                      mail -s "reachable again - $node" $to_address &amp;lt;&amp;lt;&amp;lt; $timestamp&lt;br /&gt;
                   fi&lt;br /&gt;
                else&lt;br /&gt;
                   response=$(echo "$response" |awk -F "time=" '{ print $2 }')&lt;br /&gt;
                fi&lt;br /&gt;
                log="$timestamp - $response"&lt;br /&gt;
                echo $log &amp;gt;&amp;gt; /pinger/logs/$node&lt;br /&gt;
             done &amp;lt;/pinger/nodes&lt;br /&gt;
      Ctrl-X&lt;br /&gt;
      Y&lt;br /&gt;
      Enter&lt;br /&gt;
   # nano rotatelogs.sh&lt;br /&gt;
      #!/bin/bash&lt;br /&gt;
      new_dir=&lt;code&gt;date +%m-%d-%y&lt;/code&gt;&lt;br /&gt;
      mkdir /pinger/old_logs/$new_dir&lt;br /&gt;
      mv /pinger/logs/* /pinger/old_logs/$new_dir&lt;/p&gt;
&lt;p&gt;Make pinger.sh and rotatelogs.sh executable&lt;br /&gt;
   # chmod u+x pinger.sh&lt;br /&gt;
   # chmod u+x rotatelogs.sh&lt;/p&gt;
&lt;p&gt;Add a node to be pinged&lt;br /&gt;
   # echo "dnsname" &amp;gt;&amp;gt; nodes&lt;br /&gt;
   # echo "ipaddress" &amp;gt;&amp;gt; nodes&lt;/p&gt;
&lt;p&gt;Install msmtp&lt;br /&gt;
   # apt-get install msmtp-mta&lt;br /&gt;
   # nano ~/.msmtprc&lt;br /&gt;
      defaults&lt;br /&gt;
      logfile ~/msmtp.log&lt;br /&gt;
      account gmail&lt;br /&gt;
      auth on&lt;br /&gt;
      host smtp.gmail.com&lt;br /&gt;
      from your_address@gmail.com&lt;br /&gt;
      auth on&lt;br /&gt;
      tls on&lt;br /&gt;
      tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt&lt;br /&gt;
      user your_address@gmail.com&lt;br /&gt;
      password your_gmail_password&lt;br /&gt;
      port 587&lt;br /&gt;
      account default : gmail&lt;br /&gt;
   # chmod 600 ~/.msmtprc&lt;/p&gt;
&lt;p&gt;Install mailx&lt;br /&gt;
   # apt-get install heirloom-mailx&lt;br /&gt;
   # nano ~/.mailrc&lt;br /&gt;
      set sendmail="/usr/bin/msmtp"&lt;br /&gt;
      set message-sendmail-extra-arguments="-a gmail"&lt;/p&gt;
&lt;p&gt;Create Cron to run pinger.sh (every minute) and rotatelogs.sh (every week)&lt;br /&gt;
   # crontab -e&lt;br /&gt;
      * &lt;em&gt; * &lt;/em&gt; * /pinger/pinger.sh&lt;br /&gt;
      0 0 * * 0 /pinger/rotatelogs.sh&lt;/p&gt;
&lt;p&gt;==========&lt;br /&gt;
 Optional&lt;br /&gt;
==========&lt;/p&gt;
&lt;p&gt;Install Apache&lt;br /&gt;
   # apt-get install apache2&lt;br /&gt;
   # echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/fqdn.conf &amp;amp;&amp;amp; sudo a2enconf fqdn&lt;/p&gt;
&lt;p&gt;Install PHP5&lt;br /&gt;
   # libapache2-mod-php5&lt;/p&gt;
&lt;p&gt;Restart Apache&lt;br /&gt;
   # service apache2 restart&lt;/p&gt;
&lt;p&gt;Create necessary HTML and PHP files&lt;br /&gt;
   # cd /var/www/html&lt;br /&gt;
   # rm index.html&lt;br /&gt;
   # nano index.html&lt;br /&gt;
      &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;title&gt;pinger&lt;/title&gt;&lt;br /&gt;
         &amp;lt;script&amp;gt;&lt;br /&gt;
            function init(){&lt;br /&gt;
               getData("nodes");&lt;br /&gt;
            }&lt;br /&gt;
            function getData(type,node){&lt;br /&gt;
               var ajax = new XMLHttpRequest();&lt;br /&gt;
               var url = "getData.php?type=" + type;&lt;br /&gt;
               if (node)&lt;br /&gt;
                  url += "&amp;amp;node=" + node;&lt;br /&gt;
               ajax.open("GET", url, false);&lt;br /&gt;
               ajax.send();&lt;br /&gt;
               var text = ajax.responseText;&lt;br /&gt;
               if (type == "nodes"){&lt;br /&gt;
                  var json = JSON.parse(text);&lt;br /&gt;
                  var size = json.nodes.length;&lt;br /&gt;
                  var node = "";&lt;br /&gt;
                  text = "";&lt;br /&gt;
                  for (i=0;i&amp;lt;size;i++){ node="json.nodes&amp;amp;lt;span"&amp;gt;[i].name;
                     text += "&lt;a href='../\\"javascript:getData(&amp;squot;logs&amp;squot;,&amp;squot;"' id='\\""'&gt;" + node + "&lt;/a&gt;&lt;br /&gt;";&lt;br /&gt;
                  }&lt;br /&gt;
                  getID(type).innerHTML = text;&lt;br /&gt;
                  if (json.unreachable){&lt;br /&gt;
                     size = json.unreachable.length;&lt;br /&gt;
                     for (i=0;i&amp;lt;size;i++) getID(json.unreachable&amp;lt;span=""&amp;gt;[i].name).style.color = "red";
                  }
                  setTimeout("getData(\\"nodes\\")",30000);
               }
               else
                  getID(type).innerHTML = text;
            }
            function clearLogs(){getID("logs").innerHTML = "";}
            function getID(id){return document.getElementById(id);}
         &amp;lt;/script&amp;gt;&lt;br /&gt;
         &amp;lt;style&amp;gt;&lt;br /&gt;
            body {background-color:black;color:#009bd5;font-family:arial;font-size:14}&lt;br /&gt;
            a {color:#009bd5;text-decoration:none}&lt;br /&gt;
            a:hover {color:white}&lt;br /&gt;
            #logs {position:fixed;top:8;left:250;color:white}&lt;br /&gt;
         &amp;lt;/style&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body onload="init()"&amp;gt;&lt;br /&gt;
&lt;div id="nodes"&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div id="logs"&gt;&lt;/div&gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
      &amp;lt;/html&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;# nano getData.php&lt;br /&gt;
      &amp;lt;?php&lt;br /&gt;
         if ($_GET&lt;span&gt;["type"]&lt;/span&gt; == "nodes"){&lt;br /&gt;
            $nodes = file('/pinger/nodes', FILE_IGNORE_NEW_LINES);&lt;br /&gt;
            sort($nodes);&lt;br /&gt;
            $json = "{\"nodes\":&lt;span&gt;[";&lt;br /&gt;
            foreach ($nodes as $node)&lt;br /&gt;
               $json .= "{\"name\":\"" . $node . "\"},";&lt;br /&gt;
            $json = rtrim($json, ",");&lt;br /&gt;
            $unreachable = array_slice(scandir('/pinger/unreachable'), 2);&lt;br /&gt;
            if (count($unreachable)){&lt;br /&gt;
               $json .= "]&lt;/span&gt;,\"unreachable\":&lt;span&gt;[";&lt;br /&gt;
               foreach ($unreachable as $node)&lt;br /&gt;
                  $json .= "{\"name\":\"" . $node . "\"},";&lt;br /&gt;
               $json = rtrim($json, ",");&lt;br /&gt;
            } &lt;br /&gt;
            $json .= "]&lt;/span&gt;}";&lt;br /&gt;
            echo $json;&lt;br /&gt;
         }&lt;br /&gt;
         else {&lt;br /&gt;
            $logs = file("/pinger/logs/" . $_GET&lt;span&gt;["node"]&lt;/span&gt;, FILE_IGNORE_NEW_LINES);&lt;br /&gt;
            if (count($logs) &amp;gt; 30)&lt;br /&gt;
               $logs = array_slice($logs, -30);&lt;br /&gt;
            foreach ($logs as $log)&lt;br /&gt;
               echo substr($log, 6) . "&lt;br /&gt;";&lt;br /&gt;
         }&lt;br /&gt;
      ?&amp;gt;&lt;/p&gt;
&lt;p&gt;Go to IP Address of "pinger" server in a browser&lt;br /&gt;
   Reachable nodes are "blue"&lt;br /&gt;
   Unreachable nodes are "red"&lt;br /&gt;
   Hover over node name to see last 30 minutes of response times&lt;br /&gt;
   Page refreshes every 30 seconds automatically&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Lurth</dc:creator><pubDate>Thu, 18 Dec 2014 22:23:11 -0000</pubDate><guid>https://sourceforge.net5a22a4352519109c7f4dce9414197478b6667fcf</guid></item></channel></rss>