cron fixes, hosts working, last seen working... lifes pretty good
authorpaulr <me@pjr.cc>
Tue, 9 Aug 2011 10:52:57 +0000 (20:52 +1000)
committerpaulr <me@pjr.cc>
Tue, 9 Aug 2011 10:52:57 +0000 (20:52 +1000)
bin/scanhelper.php [new file with mode: 0644]
libglcas/web.php
plugins/cron.php
plugins/hosts.php

diff --git a/bin/scanhelper.php b/bin/scanhelper.php
new file mode 100644 (file)
index 0000000..141c0ae
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+$WEB_ROOT_FS = realpath(dirname(__FILE__));
+$BASE_URL = dirname($_SERVER["PHP_SELF"]);
+
+global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
+
+// add libglcas as if it were a path in ../libglcas
+if(file_exists("../libglcas")) {
+       $path = realpath($WEB_ROOT_FS."/../");
+       error_log("added glcas path as $path");
+       set_include_path(get_include_path().PATH_SEPARATOR.$path);
+}
+
+// include the based library
+require_once("libglcas/lib.php");
+
+// load plugins
+glcas_pluginLoader();
+
+// find our config
+$configpath = "";
+
+// TODO: do this better
+$configpath = glcas_getWebConfigPath();
+$glconfig = new GLCASConfig();
+$glconfig->loadConfig($configpath);
+
+
+$range = "";
+if(isset($argv[1])) {
+       $range = $argv[1];
+}
+
+if(isset($argv[2])) {
+       $hostgroup = $argv[2];
+}
+
+
+if($range == "") {
+       echo "range makes no sense\n";
+       exit(0);
+}
+
+
+$ips_v = explode(".", $range);
+
+$ips = $ips_v[0].".".$ips_v[1].".".$ips_v[2];
+
+for($i = 1; $i < 255; $i++) {
+       $hostname = "";
+       $ips_me = "$ips.$i";
+       echo "Scanning $ips_me<br>";
+       error_log("Scanning $ips_me<br>");
+       flush();
+       $hostname = gethostbyaddr($ips_me);
+       if($hostname != $ips_me) {
+               echo "Found host on $ips_me as $hostname<br>";
+               error_log("Found host on $ips_me as $hostname");
+               flush();
+               $hosts = $glconfig->getData("hosts");
+               $exists = false;
+               foreach($hosts as $key => $val) {
+                       if($val["category"] == $hostname && $val["name"] == $ips_me) {
+                               echo "Host in db already<br>";
+                               $exists = true;
+                               flush();
+                       }
+                       
+               }
+               if(!$exists) $glconfig->addData("hosts", "$hostname", "$ips_me", "$hostgroup");
+               
+               
+       }
+}
+echo "Finished";
+
+?>
\ No newline at end of file
index 6f93f80..4f26a9b 100644 (file)
@@ -3,6 +3,10 @@
 // if i believed in name spacing in php, i'd use it.
 error_log("glcasweb loaded");
 
+global $CRON_CLASSES;
+$CRON_CLASSES["GLCASWeb"] = "GLCASWeb";
+
+
 class GLCASWeb {
        
        function __construct($config)
@@ -17,6 +21,10 @@ class GLCASWeb {
                        $url = $_REQUEST["q"];
                }
                
+               // add a stat
+               $ipaddr = $_SERVER["REMOTE_ADDR"];
+               $this->config->addData("lastseen", "$ipaddr", time(), "");
+               
                // create a url parser
                $urlparser = new GLCASUrlParser($urlhandlers, $this->config);
                
@@ -26,6 +34,23 @@ class GLCASWeb {
                $call_class->go($url);
        }
        
+       function cron()
+       {
+               echo "WEB base running cron for ipseen roll-up<br>";
+               $lastseen = $this->config->getData("lastseen");
+               foreach($lastseen as $key=>$val) {
+                       $myip = $val["category"];
+                       $myls = $val["name"];
+                       $ip[$myip] = $myls;
+               }
+               
+               foreach($ip as $key=>$val) {
+                       echo "Setting last seen for $key to $val<br>";
+                       $this->config->delData("lastseen", $key);
+                       $this->config->addData("lastseen", $key, $val);
+               }
+       }
+       
        private $config;
        
 }
@@ -127,6 +152,37 @@ function GLCASpageBuilder($bodyClass, $bodyFunction, $bodycontent=null, $title="
        
 }
 
+function glcas_getLastSeen($ip, $data)
+{
+       $last = "never";
+       
+       if(!$data) return $last;
+       
+       
+       
+       foreach($data as $key=>$val) {
+               $last = $val["name"];
+               error_log("got $last for $ip");
+       }
+       
+       if($last == "never") return $last;
+       
+       $tdiff = time()-$last;
+       $tdiff_min = (int)($tdiff/60);
+       $tdiff_hour = (int)($tdiff/3600);
+       $tdiff_days = (int)($tdiff/86400);
+       
+       if($tdiff < 60) $last = "Less then a minute";
+       if($tdiff >= 60 && $tdiff < 7200) $last = "$tdiff_min minutes ago";
+       if($tdiff >= 7200 && $tdiff < 86400) $last = "$tdiff_hour hours ago";
+       if($tdiff >= 86400) $last = "$tdiff_days days ago";
+       
+       error_log("last for $ip set to $last");
+       
+       return $last;
+       
+}
+
 function glcas_isRemoteDir($url)
 {
        file_get_contents($url);
index ca99309..5f53320 100644 (file)
@@ -15,18 +15,22 @@ class GLCASCron {
                global $CRON_CLASSES;
                
                echo "<html>";
+               echo "<table border=\"1\">";
                foreach($CRON_CLASSES as $crons) {
                        $calling = new $crons($this->config);
+                       echo "<tr><td>";
                        if(method_exists($crons, "cron")) {
-                               echo "<font color=\"green\">CRON: Calling $crons"."->cron:</font><br>";
-                               echo "<table><tr><td><font color=\"green\">$crons</font></td><td>";
+                               echo "<font color=\"green\" size=\"+1\">CRON: Calling cron for $crons</font></td><td>";
+                               echo "<table><tr><td>";
                                $calling->cron();
-                               echo "</td></tr></table>";
+                               echo "</td></tr></table></td></tr>";
                        } else {
-                               echo "<font color=\"red\">CRON: would call $crons"."->cron but it doesnt exist</font><br>";
+                               echo "<font color=\"red\">CRON: would call $crons"."->cron but it doesnt exist</font><br></td></tr>";
                        }
                        
+                       
                }
+               echo "</table>";
                echo "</html>";
        }
        
index eb93989..5b521cf 100644 (file)
@@ -61,7 +61,7 @@ class GLCASHosts {
                $nogroup = false;
                $hosts_to_do = null;
                $nhosts = 0;
-               $groups_to_do = null;
+               $group_to_do = null;
                $ngroups = 0;
                
                // first check if nogroup is selected
@@ -265,13 +265,16 @@ class GLCASHosts {
                echo "<tr valign=\"top\">";
                echo "<td>";
                echo "<h3>Ungrouped Hosts</h3><br>";
-               echo "<table border=\"1\"><tr><th><input type=\"checkbox\" name=\"nonegroup-selected\"></th><th>Host</th><th>IP</th><th>Host Group</th><th>Last Seen</th><th>Control</th></tr>";
+               echo "<table border=\"1\"><tr><th><input type=\"checkbox\" name=\"nonegroup-selected\"></th><th>Host</th><th>IP</th><th>Last Seen</th><th>Control</th></tr>";
                foreach($hosts as $key => $val) {
                        $hname = $val["category"];
                        $hip = $val["name"];
                        $hg = $val["val"];
                        if($hg == "") $hg = "-";
-                       if($hg=="-") echo "<tr><td><input type=\"checkbox\" name=\"$hname-selecthost\"></td><td>$hname</td><td>$hip</td><td>$hg</td><td>...</td><td><a href=\"?action=deletehost&hostname=$hname\">Delete</a></tr>";
+                       if($hg=="-") {
+                               $lastseen = glcas_getLastSeen($hip, $this->config->getData("lastseen", "$hip"));
+                               echo "<tr><td><input type=\"checkbox\" name=\"$hname-selecthost\"></td><td>$hname</td><td>$hip</td><td>$lastseen</td><td><a href=\"?action=deletehost&hostname=$hname\">Delete</a></tr>";
+                       }
                }
                echo "</table>";
                echo "</td>";
@@ -282,13 +285,16 @@ class GLCASHosts {
                                echo "<td>";
                                $grpname = $val["category"];
                                echo "<h3>Host Group: $grpname <a href=\"?action=delgroup&grpname=$grpname\">Delete</a></h3><br>";
-                               echo "<table border=\"1\"><tr><th><input type=\"checkbox\" name=\"$grpname-selectgroup\"></th><th>Host</th><th>IP</th><th>Host Group</th><th>Last Seen</th><th>Control</th></tr>";
+                               echo "<table border=\"1\"><tr><th><input type=\"checkbox\" name=\"$grpname-selectgroup\"></th><th>Host</th><th>IP</th><th>Last Seen</th><th>Control</th></tr>";
                                if($hosts != false) foreach($hosts as $key => $val) {
                                        $hname = $val["category"];
                                        $hip = $val["name"];
                                        $hg = $val["val"];
                                        if($hg == "") $hg = "-";
-                                       if($hg==$grpname) echo "<tr><td><input type=\"checkbox\" name=\"$hname-selecthost\"></td><td>$hname</td><td>$hip</td><td>$hg</td><td>...</td><td><a href=\"?action=deletehost&hostname=$hname\">Delete</a></tr>";
+                                       if($hg==$grpname) {
+                                               $lastseen = glcas_getLastSeen($hip, $this->config->getData("lastseen", "$hip"));
+                                               echo "<tr><td><input type=\"checkbox\" name=\"$hname-selecthost\"></td><td>$hname</td><td>$hip</td><td>$lastseen</td><td><a href=\"?action=deletehost&hostname=$hname\">Delete</a></tr>";
+                                       }
                                }
                                echo "</table>";
                                echo "</td>";