Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rrdcached local socket issue #88

Open
lwhitworth opened this issue Oct 10, 2022 · 1 comment
Open

rrdcached local socket issue #88

lwhitworth opened this issue Oct 10, 2022 · 1 comment

Comments

@lwhitworth
Copy link

Weathermap seemed to not be reading RRDs properly when using rrdached on a socket such as unix:/run/rrdcached.sock

Stepping through the cmd as built in map-poller.php got me:

php ./weathermap.php --config /opt/librenms/html/plugins/Weathermap/configs/myconf.conf --base-href /plugins/Weathermap/ --daemon unix:/var/run/rrdcached.sock --chdir '' --debug

This threw:

DEBUG: [wmrrd_read_from_real_rrdtool@WeatherMapDataSource_rrd.php:245] /opt/librenms/html/plugins/Weathermap/configs/myconf.conf: RRD ReadData: Running: /usr/bin/rrdtool fetch myswitch/port-id5044.rrd AVERAGE --start now-800 --end now --daemon unix:/var/run/rrdcached.sock 
ERROR: realpath(myswitch/port-id5044.rrd): No such file or directory

So it's looking for the rrd file on an incomplete path. Running:

 /usr/bin/rrdtool fetch /opt/librenms/rrd/myswitch/port-id5044.rrd AVERAGE --start now-800 --end now --daemon unix:/var/run/rrdcached.sock 

Confirmed it worked, so for my issue to be fixed I had to modify map-poller.php line 71 to read:

if (!empty($config['rrdcached']))
{
    $cmd = $cmd." --daemon ".$config['rrdcached']." --chdir ".$config['rrd_dir'];
}

I then had to comment out two instances of the following in lib/datasources/WeatherMapDataSource_rrd.php:

// rrdcached Support: strip "./" from Data Source
if ($map->daemon)
{
    $rrdfile = trim($rrdfile,"^./"); 
}

Reading through previous pulls / commits I see that plenty of logic has been added recently by @LoveSkylark for their use case which I think uses rrdcached exposed via an ip:port as oppsed to a socket, so I would imagine some extra logic needs to be written around to account for when rrdcached references a socket......unless someone wnats to tell me I'm way off the mark!

@wdoekes
Copy link

wdoekes commented Nov 3, 2022

I ran into the same. Changed these:

diff --git a/lib/datasources/WeatherMapDataSource_rrd.php b/lib/datasources/WeatherMapDataSource_rrd.php
index 40128fc..5da1d0b 100644
--- a/lib/datasources/WeatherMapDataSource_rrd.php
+++ b/lib/datasources/WeatherMapDataSource_rrd.php
@@ -209,7 +209,7 @@ class WeatherMapDataSource_rrd extends WeatherMapDataSource
         // rrdcached Support: strip "./" from Data Source
         if ($map->daemon)
         {
-            $rrdfile = trim($rrdfile,"^./"); 
+            $rrdfile = preg_replace('/^\.\//', '', $rrdfile);
         }
         
         $args[] = "fetch";
diff --git a/map-poller.php b/map-poller.php
index 1544be6..de733fc 100755
--- a/map-poller.php
+++ b/map-poller.php
@@ -66,7 +66,7 @@ if (is_dir($conf_dir))
                                                                                                 
                 if (!empty($config['rrdcached']))                                            
                 {                                                                            
-                    $cmd = $cmd." --daemon ".$config['rrdcached']." --chdir ''";         
+                    $cmd = $cmd." --daemon ".$config['rrdcached']." --chdir ".$config['rrd_dir'];
                 }                                                                            
                 else                                                                         
                 {                                                                         
diff --git a/weathermap.php b/weathermap.php
index 489011d..832f0f8 100755
--- a/weathermap.php
+++ b/weathermap.php
@@ -280,6 +280,8 @@ if ($map->ReadConfig($configfile))
     if($rrdbase == '') {
         $rrdbase = isset($chdir) != '' ? $chdir : $rrd_default_path1;
         $map->add_hint('rrd_default_path', $rrdbase);
+        // ^- beware, this does not appear to work sufficiently, we also needed chdir
+        //    "SET rrd_default_path /srv/librenms/rrd"
 
     }
 

Note that the original use of trim() is totally wrong.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants