This is a text-only version of the following page on https://raymii.org: --- Title : Line total (up+down sum) in PHP Network Weathermap Author : Remy van Elst Date : 13-11-2018 URL : https://raymii.org/s/tutorials/Line_total_up_down_sum_in_php_weathermap.html Format : Markdown/HTML --- With PHP Network Weathermap you can create a birds-eye view of network components from your monitoring system (like LibreNMS, Cacti or anything else with an RRD database). It can display simple maps with components and links between, showing up and down traffic, but also complex systems with custom components, like Nagios status, temperature or other information. For network and system administrators seeing the seperate in and out traffic of a link is fine, we can sum up two numbers. A co worker filling the role of service manager asked me if it was possible to sum up in and out and show that, including the scale (different colours depending on link usage). This co worker is not interested in the seperate up/down link speed but wants to know how much traffic a location is using in total. Using a clever workaround, you can display a line's total usage, including the scale. This article also gives some more tips on weathermap, colouring and scale. <p class="ad"> <b>Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:</b><br><br> <a href="https://leafnode.nl">I'm developing an open source monitoring app called Leaf Node Monitoring, for windows, linux & android. Go check it out!</a><br><br> <a href="https://github.com/sponsors/RaymiiOrg/">Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.</a><br><br> <a href="https://www.digitalocean.com/?refcode=7435ae6b8212">You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $100 credit for 60 days. </a><br><br> </p> ### Example The picture below shows a section of a weathermap to a location, where the line is a 20 mbit line. The first picture is without the total summary. Green means 40-50% usage and yellow means 55-70% usage. It is not very clear that the line is at max capacity if you just see yellow and green: ![][2] By adding the total (sum of up and down) it is clear right away that this line is at max capacity: ![][3] Here is another example: ![][4] ### Configuration The weathermap has the concept of "nodes" and "links". A node has one or more links and a link is between two nodes. A link has a "target", which points to an RRD file in most cases. There is no math support in the configuration syntax, so you cannot say "up + down" in the label. But, you can add multiple RRD files to the "target" of a link, for example when you want to show multiple lines which form one logical unit. I found a forum post that stated that "nodes" can also have targets. You can do more advanced mapping with custom data formats with this, but in our case we can also use it to sum up the links. The trick is that a target configuration line has this format: filename.rrd:INOCTETS:OUTOCTETS By replacing the parameters with a dash (`-`), that part is ignored. So, we can add the same RRD file two times and specifying the `INOCTETS` and `OUTOCTETS` as "in" and placing `-` as out. The weathermap will add up all the "in" data, which, because we added the same file, is a sum of up and down. Here is an example, for a 10 mbit line: NODE amersfoort LABEL Amersfoort INFOURL https://[...]/librenms/device/device=461/ OVERLIBGRAPH https://[...]/librenms/graph.php?width=... ICON images/Router.png POSITION 580 280 NODE amersfoortSUM LABEL {node:this:bandwidth_in:%k} LABELFONT 3 LABELFONTCOLOR contrast TARGET ./amersfoort/port-id10886.rrd:INOCTETS:- ./amersfoort/port-id10886.rrd:OUTOCTETS:- POSITION amersfoort 0 +20 MAXVALUE 10M In the [documentation][5] this is explained: > You can also specify '-' for either DS name, which tells Weathermap to ignore this rrd file for the purposes of the input or output value. This is mainly useful in combination with the aggregation feature, where you can take the input data from one rrd file, and the output data from another. We do a few things next to the two target files. As you can see, the `LABEL` line is: {node:this:bandwidth_in:%k} These advanced parameters are explained in the [Weathermap advanced documentation][6]. The `POSITION` is relative to the "amersfoort" node. Since there is no way to do newlines in a label (due to [gd issues][7]) I choose this way. Also, this way the label of the actual node stays white, which makes the entire drawing less cluttered. The `MAXVALUE` line in the `NODE` part is the same as the `BANDWIDTH` part of a `LINK`. This value is needed for the `SCALE`. The `LABELFONTCOLOR contrast` is one of those other wonderfull well thought through parts of this software. Depending on the scale and load, the background of the link or node can be dark or light. If you manually specify this node to have a white background, then that will be hard to read when the load is 0-1% or 40-70%, since those loads trigger a white, light yellow or light green background. The contrast option lets the weathermap figure out what text colour is best for this scale. So, dark scale colours have white text and light scale colors have black text. These two example show that: ![][8] ![][9] To get the total amount for a device with many ports, like an 48 port switch, you can use a for loop to get the correct syntax. This example is for LibreNMS, but speaks for itself (go to correct folder, loop over all files): cd /opt/librenms/rrd/ for i in ./device.ext/port-id*.rrd; do echo -n "$i:INOCTETS:- $i:OUTOCTETS:- "; done You should place the entire line (make sure there are no newlines) after the `TARGET` section in the `NODE`. ### Scale I've slightly changed the default scale, adding one step from 95% to 100%, the default is 85% to 100%. Here is the scale image: ![][10] This is the weathermap config: KEYPOS DEFAULT 14 580 Traffic Load KEYTEXTCOLOR 0 0 0 KEYOUTLINECOLOR 0 0 0 KEYBGCOLOR 255 255 255 BGCOLOR 255 255 255 TITLECOLOR 0 0 0 TIMECOLOR 0 0 0 SCALE DEFAULT 0 0 192 192 192 SCALE DEFAULT 0 1 255 255 250 SCALE DEFAULT 1 10 140 0 255 SCALE DEFAULT 10 25 32 32 255 SCALE DEFAULT 25 40 0 192 255 SCALE DEFAULT 40 55 0 240 0 SCALE DEFAULT 55 70 240 240 0 SCALE DEFAULT 70 85 255 192 0 SCALE DEFAULT 85 95 255 0 144 SCALE DEFAULT 95 100 163 1 1 SET key_hidezero_DEFAULT 1 If you have capacity problems, it's helps (in our case at least) to see just a bit more detail, like so: ![][11] ### Weathermap example The below picture shows one of my weathermaps for a network overview of all the satelite locations (connected to one main office via an MPLS network): [![][12]][12] [1]: https://www.digitalocean.com/?refcode=7435ae6b8212 [2]: https://raymii.org/s/inc/img/weathermap-1.png [3]: https://raymii.org/s/inc/img/weathermap-2.png [4]: https://raymii.org/s/inc/img/weathermap-8.png [5]: http://web.archive.org/web/20180418105654/http://network-weathermap.com:80/manual/0.97b/pages/targets.html#rrd [6]: http://web.archive.org/web/20181113105036/https://network-weathermap.com/manual/0.97b/pages/advanced.html [7]: http://web.archive.org/web/20181113120849/https://forums.cacti.net/viewtopic.php?f=16&t=47901 [8]: https://raymii.org/s/inc/img/weathermap-4.png [9]: https://raymii.org/s/inc/img/weathermap-6.png [10]: https://raymii.org/s/inc/img/weathermap-3.png [11]: https://raymii.org/s/inc/img/weathermap-5.png [12]: https://raymii.org/s/inc/img/weathermap-7.png --- License: All the text on this website is free as in freedom unless stated otherwise. This means you can use it in any way you want, you can copy it, change it the way you like and republish it, as long as you release the (modified) content under the same license to give others the same freedoms you've got and place my name and a link to this site with the article as source. This site uses Google Analytics for statistics and Google Adwords for advertisements. You are tracked and Google knows everything about you. Use an adblocker like ublock-origin if you don't want it. All the code on this website is licensed under the GNU GPL v3 license unless already licensed under a license which does not allows this form of licensing or if another license is stated on that page / in that software: This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Just to be clear, the information on this website is for meant for educational purposes and you use it at your own risk. I do not take responsibility if you screw something up. Use common sense, do not 'rm -rf /' as root for example. If you have any questions then do not hesitate to contact me. See https://raymii.org/s/static/About.html for details.