aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'www-apps/rpi-monitor/files')
-rw-r--r--www-apps/rpi-monitor/files/about.html-2.10.patch35
-rw-r--r--www-apps/rpi-monitor/files/cpu.conf-2.10.patch82
-rw-r--r--www-apps/rpi-monitor/files/daemon.conf-2.10.patch95
-rw-r--r--www-apps/rpi-monitor/files/gentoo.conf-2.10.patch560
-rw-r--r--www-apps/rpi-monitor/files/memory.conf-2.10.patch116
-rw-r--r--www-apps/rpi-monitor/files/network.conf-2.10.patch58
-rw-r--r--www-apps/rpi-monitor/files/rpimonitor.confd4
-rw-r--r--www-apps/rpi-monitor/files/rpimonitor.initd2
-rw-r--r--www-apps/rpi-monitor/files/rpimonitord-2.10.patch15
-rw-r--r--www-apps/rpi-monitor/files/sdcard.conf-2.10.patch89
-rw-r--r--www-apps/rpi-monitor/files/swap.conf-2.10.patch52
-rw-r--r--www-apps/rpi-monitor/files/temperature.conf-2.10.patch33
-rw-r--r--www-apps/rpi-monitor/files/uptime.conf-2.10.patch26
-rw-r--r--www-apps/rpi-monitor/files/version.conf-2.10.patch78
14 files changed, 1242 insertions, 3 deletions
diff --git a/www-apps/rpi-monitor/files/about.html-2.10.patch b/www-apps/rpi-monitor/files/about.html-2.10.patch
new file mode 100644
index 00000000..7dae584c
--- /dev/null
+++ b/www-apps/rpi-monitor/files/about.html-2.10.patch
@@ -0,0 +1,35 @@
+--- rpimonitor/web/addons/about/about.html.dist 2015-03-14 19:20:02.249612000 +0000
++++ rpimonitor/web/addons/about/about.html 2015-03-14 19:25:14.059612000 +0000
+@@ -10,23 +10,20 @@
+ <h3 class="panel-title">About addons</h3>
+ </div>
+ <div class="panel-body">
+- <b>Addon</b> is design to let you add more functionnality to
++ <b>Addons</b> are designed to allow you to extend the functionnality of
+ <b>RPi-Monitor</b>.<br>
+ <br>
+- The realease of <b>RPi-Monitor</b> provides the following addons:<br>
++ This release of <b>RPi-Monitor</b> includes the following addons:<br>
+ <ul>
+- <li><b>about</b> - this addons</li>
+- <li><b>custom</b> - custom addons using <code>&lt;iframe&gt;</code> to display external html page</li>
+- <li><b>example</b> - expamle of addons showing how to develop and addons fully integrated to <b>RPi-Monitor</b></li>
+- <li><b>shellinabox</b> - Allow ssh access to your computer through your browser</li>
+- <li><b>top3</b> - Show the top 3 processes using cpu and rpimonitord cpu usage</li>
++ <li><b>about</b> - this addon</li>
++ <li><b>custom</b> - a template for custom addons allowing the use of <code>&lt;iframe&gt;</code>s to display external HTML content</li>
++ <li><b>example</b> - a sample addon demonstrating how to develop and fully integrate addons into <b>RPi-Monitor</b></li>
++ <li><b>shellinabox</b> - Allow ssh access to your Raspberry Pi through your browser</li>
++ <li><b>top3</b> - Show the three processes using the most CPU time and monitor rpimonitord CPU usage</li>
+ </ul>
+ <br>
+- Addons are configured into <code>/etc/rpimonitor/data.conf</code>. You can customise
+- <b>RPi-Monitor</b> configuration to add or remove addons.<br>
+- <br>
+- Refer to manage and/or comments in configuration file to see in detail how to use addons.
++ Addons are loaded and configured from <code>/etc/rpimonitor/data.conf</code>.
++ See the comments in this file for details of how to use Addons.
+ </div>
+ </body>
+ </html>
+-
diff --git a/www-apps/rpi-monitor/files/cpu.conf-2.10.patch b/www-apps/rpi-monitor/files/cpu.conf-2.10.patch
new file mode 100644
index 00000000..d02cfb27
--- /dev/null
+++ b/www-apps/rpi-monitor/files/cpu.conf-2.10.patch
@@ -0,0 +1,82 @@
+--- rpimonitor/template/cpu.conf.dist 2015-03-14 15:01:33.369612000 +0000
++++ rpimonitor/template/cpu.conf 2015-03-14 18:03:19.359612000 +0000
+@@ -7,42 +7,48 @@
+ # - cpu load 1, 5, 15 - yes - yes
+ # - cpu scaling governor - yes - no
+ ########################################################################
+-dynamic.1.name=cpu_frequency
+-dynamic.1.source=/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
++
++dynamic.1.name=scaling_governor
++dynamic.1.source=/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
+ dynamic.1.regexp=(.*)
+-dynamic.1.postprocess=$1/1000
++dynamic.1.postprocess=
+ dynamic.1.rrd=
+
+-dynamic.2.name=cpu_voltage
+-dynamic.2.source=vcgencmd measure_volts core
+-dynamic.2.regexp=(\d+.\d+)V
+-dynamic.2.postprocess=
+-dynamic.2.rrd=
+-
+-dynamic.3.name=load1,load5,load15
+-dynamic.3.source=/proc/loadavg
+-dynamic.3.regexp=^(\S+)\s(\S+)\s(\S+)
++dynamic.2.name=cpu_frequency
++dynamic.2.source=/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
++dynamic.2.regexp=(.*)
++dynamic.2.postprocess=$1/1000
++dynamic.2.rrd=GAUGE
++
++dynamic.3.name=cpu_voltage
++dynamic.3.source=/opt/vc/bin/vcgencmd measure_volts core
++dynamic.3.regexp=(\d+.\d+)V
+ dynamic.3.postprocess=
+ dynamic.3.rrd=GAUGE
+
+-dynamic.4.name=scaling_governor
+-dynamic.4.source=/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
+-dynamic.4.regexp=(.*)
++dynamic.4.name=load1,load5,load15
++dynamic.4.source=/proc/loadavg
++dynamic.4.regexp=^(\S+)\s(\S+)\s(\S+)
+ dynamic.4.postprocess=
+-dynamic.4.rrd=
++dynamic.4.rrd=GAUGE
++
++web.status.1.content.3.name=CPU
++web.status.1.content.3.icon=cpu.png
++#web.status.1.content.3.line.1="Loads: <b>" + data.load1 + "</b> [1 min] - <b>" + data.load5 + "</b> [5 min] - <b>" + data.load15 + "</b> [15 min]"
++web.status.1.content.3.line.1=JustGageBar("Load", "1 min", 0, data.load1, 3, 100, 80) + " " + JustGageBar("Load", "5 min", 0, data.load5, 3, 100, 80) + " " + JustGageBar("Load", "15 min", 0, data.load15, 3, 100, 80)
++web.status.1.content.3.line.2="CPU frequency: <b>" + data.cpu_frequency + "MHz</b> Voltage: <b>" + data.cpu_voltage + "V</b>"
++web.status.1.content.3.line.3="Scaling governor: <b>" + data.scaling_governor + "</b>"
++#web.status.1.content.3.line.4=InsertHTML("/addons/top3/top3.html")
++
++web.statistics.1.content.1.name=CPU Speed
++web.statistics.1.content.1.graph.1=cpu_frequency
++web.statistics.1.content.1.ds_graph_options.cpu_frequency.label=Frequency (MHz)
++web.statistics.1.content.1.ds_graph_options.cpu_frequency.color="#FF7777"
+
+-web.status.1.content.1.name=CPU
+-web.status.1.content.1.icon=cpu.png
+-#web.status.1.content.1.line.1="Loads: <b>" + data.load1 + "</b> [1min] - <b>" + data.load5 + "</b> [5min] - <b>" + data.load15 + "</b> [15min]"
+-web.status.1.content.1.line.1=JustGageBar("Load", "1min", 0, data.load1, 3, 100, 80)+" "+JustGageBar("Load", "5min", 0, data.load5, 3, 100, 80)+" "+JustGageBar("Load", "15min", 0, data.load15, 3, 100, 80)
+-web.status.1.content.1.line.2="CPU frequency: <b>" + data.cpu_frequency + "MHz</b> Voltage: <b>" + data.cpu_voltage + "V</b>"
+-web.status.1.content.1.line.3="Scaling governor: <b>" + data.scaling_governor + "</b>"
+-#web.status.1.content.1.line.4=InsertHTML("/addons/top3/top3.html")
+-
+-web.statistics.1.content.1.name=CPU Loads
+-web.statistics.1.content.1.graph.1=load1
+-web.statistics.1.content.1.graph.2=load5
+-web.statistics.1.content.1.graph.3=load15
+-web.statistics.1.content.1.ds_graph_options.load1.label=Load 1min
+-web.statistics.1.content.1.ds_graph_options.load5.label=Load 5min
+-web.statistics.1.content.1.ds_graph_options.load15.label=Load 15min
++web.statistics.1.content.2.name=CPU Loads
++web.statistics.1.content.2.graph.1=load1
++web.statistics.1.content.2.graph.2=load5
++web.statistics.1.content.2.graph.3=load15
++web.statistics.1.content.2.ds_graph_options.load1.label=Load (1 min)
++web.statistics.1.content.2.ds_graph_options.load5.label=Load (5 min)
++web.statistics.1.content.2.ds_graph_options.load15.label=Load (15 min)
diff --git a/www-apps/rpi-monitor/files/daemon.conf-2.10.patch b/www-apps/rpi-monitor/files/daemon.conf-2.10.patch
new file mode 100644
index 00000000..28199316
--- /dev/null
+++ b/www-apps/rpi-monitor/files/daemon.conf-2.10.patch
@@ -0,0 +1,95 @@
+--- rpimonitor/daemon.conf.dist 2015-03-12 00:31:39.749612000 +0000
++++ rpimonitor/daemon.conf 2015-03-12 00:41:11.909612000 +0000
+@@ -5,53 +5,50 @@
+ # if embedded server should be started and its configuration.
+ #
+ ########################################################################
+-#
+-# daemon.sharedmemkey=20130906
+-# Define the share memory key
++
++# Shared memory key
+ #daemon.sharedmemkey=20130906
+-#
+-# daemon.delay=10
+-# Define the delay between 2 kpi pooling (default:10)
+-# Note: If you want to change the default delay, the rrd file will
+-# have to be deleted rpimonitord will recreate them at next startup
++
++# Delay in seconds between polling statistics
++#
++# Note: If you want to change the default delay, the rrd file will have
++# to be deleted rpimonitord will recreate them at next startup
+ #daemon.delay=10
+-#
+-# daemon.timeout=10
+-# Define the maximul duration of KPI extraction (default:5)
+-#daemon.timeout=10
+-#
+-# daemon.noserver=1
+-# Define that rpimonitor shouldn't start web server (default:0)
+-# Note: A symbolic link from /var/lib/rpimonitor/stat to
+-# /usr/share/rpimonitor/stat may be required
+-#daemon.noserver=1
+-#
+-# daemon.addr=0.0.0.0
+-# Define the address used by the web server (default:0.0.0.0)
++
++# Maximum duration of statistic extraction
++#daemon.timeout=5
++
++# Set to '1' to prevent rpimonitor from starting it's built-in
++# web-server
++#
++# Note: A symbolic link from /var/lib/rpimonitor/stat to
++# /usr/share/rpimonitor/stat may be required
++#daemon.noserver=0
++
++# Internal web-server bind address
+ #daemon.addr=0.0.0.0
+-#
+-# daemon.port=8888
+-# Define port of the web server (default:8888)
+-#daemon.port=8889
+-#
+-# daemon.user=pi
+-# Define user used to run the server process (default:pi)
+-# Note: If user is not existing, process will run with uid=1000
++
++# Internal web-server listen port
++#daemon.port=8888
++
++# Run internal web-server as user
++#
++# Note: If specified user does not exist, the web-server will run
++# with uid=1000
+ #daemon.user=pi
+-#
+-# daemon.group=pi
+-# Define group used to run the server process (default:pi)
+-# Note: If group is not existing, process will run with gid=1000
++
++# Run internal web-server as group
++# Note: If specified group does not exist, the web-server will run
++# with gid=1000
+ #daemon.group=pi
+-#
+-# daemon.webroot=/usr/share/rpimonitor/web
+-# Define the root directory of the web server (Default:/usr/share/rpimonitor/web)
++
++# Web-server root directory
+ #daemon.webroot=/usr/share/rpimonitor/web
+-#
+-# daemon.datastore=/var/lib/rpimonitor
+-# Define the data storage directory (Default:/var/lib/rpimonitor)
++
++# Data storage directory
+ #daemon.datastore=/var/lib/rpimonitor
+-#
+-# daemon.shellinabox=https://0.0.0.0:4200/
+-# Define shellinabox address (Default: calculated automatically based on http request)
++
++# shellinabox bind address
++#
++# Default: calculated automatically based on request
+ #daemon.shellinabox=https://127.0.0.1:4200/
diff --git a/www-apps/rpi-monitor/files/gentoo.conf-2.10.patch b/www-apps/rpi-monitor/files/gentoo.conf-2.10.patch
new file mode 100644
index 00000000..335bf003
--- /dev/null
+++ b/www-apps/rpi-monitor/files/gentoo.conf-2.10.patch
@@ -0,0 +1,560 @@
+--- rpimonitor/template/gentoo.conf 2015-01-06 17:49:46.000000000 +0000
++++ rpimonitor/template/gentoo.conf 2015-03-14 15:40:02.279612000 +0000
+@@ -1,267 +1,260 @@
+ ########################################################################
+ #
+-# KPI extraction configuration
++# Data extraction configuration
+ #
+-# This part of the configuration file is defining which data to
+-# extract how to extract them and when.
++# This configuration file defines how and when data should be
++# extracted.
+ #
+-# Specific 'include' keyword is available to add a file at the end of
+-# the list of configuration files to be loaded.
++# The 'include' keyword can be used to append additional configuration
++# files to the list to be processed:
+ #
+ # include=<full path to configuration file>
+-# <full path to configuration file> is the full path to the
+-# configuration file to add at the end of the list of configuration
+-# files to be loaded.
+-#
+-# Static KPI are extracted once at rpimonitord startup. Each statistic
+-# is identified into the conf file by a line stating with the keyword
+-# static and an identifier <static data id>
+ #
+-# Each static KPI is defined by an id and with 4 parameters
++# Static items are extracted once on rpimonitord startup. Each
++# statistic is specified below by a line starting with the keyword
++# 'static' and followed by a numerical unique identifier.
++#
++# Each static item has four further parameters:
+ #
+ # static.<static data id>.name=<data name>
+-# <data name> is a string representing the KPI or the list of KPI
+-# separated by comma. Each name has to be unique.
+-# Only alpha numerical charter and underscore are accepted.
+-#
+-# static.<static data id>.source=<data source>
+-# <data source> is a file or an executable file within the path.
+-# If the file exists, rpimonitord will read its content. If the file
+-# is not existing, rpimonirotd will try to execute it and will parse
+-# the output.
++# <data name> is the string represention the item (or comma-separated
++# items) being defined. Each name must be unique.
++# Only alpha-numeric charaters and underscores are valid in item
++# names.
++#
++# static.<static data id>.source=<data source>[,<data source,...]
++# <data source> may be a file or an executable from which content
++# can be read. If a full path is not provided, rpimonitord will
++# first attempt to read from a file with the specified name and,
++# failing this, will attempt to execute a binary of the same name
++# within any directory specified in the contents of the PATH
++# vaiable.
+ # Warning: specifying an executable by its absolute name will tell
+-# rpimonitord to read the content of the executable.1.graph.
++# rpimonitord to read the content of <executable>.1.graph.
+ #
+-# static.<static data id>.regexp=<data regexp>
+-# <data regexp> is the regular expression extracting information from
+-# data source. Regexp groups () has to be used to extract the data
+-# In case of KPI list, each group will be affected to a KPI name.
++# static.<static data id>.regexp=<data regex>
++# <data regex> is an optional regular expression which may be
++# applied to extract information from the designated source value,
++# as above. Data matching a Perl-Compatible/Extended Regular
++# Expression group (e.g. matches within round-brackets) will be
++# selected to represent this <data source>.
++# Where a list of <data source>s is defined, each sequential group
++# match will be assigned to each <data source> in turn.
+ #
+ # static.<static data id>.postprocess=<data postprocess>
+-# <data postprocess> is an expression defining the postprocessing to
+-# be applied on result. KPI are idendified by $1. In case of list,
+-# other KPI are identified by $2, $3 .graph..
+-# This parameter will be evaluate by the command eval of perl.
+-#
+-# Dynamic KPI are extracted periodically (defined by daemon.delay)
+-# Each statistic is identified into the conf file by a line stating
+-# with the keyword dynamic and an identifier <dynamic data id>
+-#
+-# Each dynamic KPI is defined by an id and with 5 parameters
++# <data postprocess> is an optional expression specifying any
++# postprocessing which should be applied to the raw <data source>, or
++# the <data regex> output if defined.
++# The first <data source> is referenced as '$1', with further <data
++# source>s in a list being referred to as '$2', '$3', etc.
++# The expression will be evaluated via the Perl 'eval' command.
++#
++# Dynamic items are periodically evaluated with an interval specified
++# by 'daemon.delay' in /etc/rpimonitord.conf. Each statistic is
++# defined by the 'dynamic' keyword followed by a <dynamic data id>
++# identifier and five further parameters:
+ #
+-# dynamic.<dynamic data id>.name=<data name>
++# dynamic.<dynamic data id>.name=<data name>[,<data name>,...]
+ # dynamic.<dynamic data id>.source=<data source>
+-# dynamic.<dynamic data id>.regexp=<data regexp>
++# dynamic.<dynamic data id>.regexp=<data regex>
+ # dynamic.<dynamic data id>.postprocess=<data postprocess>
+-# <data name>, <data source>, <data regexp>, <data postprocess>
+-# This 4 first parameters have the same signification as for static
+-# parameters.
+-#
+-# dynamic.<dynamic data id>.rrd=<|GAUGE|COUNTER|DERIVE|ABSOLUTE|COMPUTE>
+-# The 5th parameter is defining if the KPI has to be stored into a RRD
+-# database and how <|GAUGE|COUNTER|DERIVE|ABSOLUTE|COMPUTE>. If the
+-# parameter is defined as empty, no RRD database will be created. If
+-# this parameter is defined, a RRD database will be created and data
+-# will be stored at every extraction.
+-# Ref http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html for RRD
+-# parameter description.
+-# dynamic.<dynamic data id>.min=<minimal value acceptable in RRD>
+-# dynamic.<dynamic data id>.max=<miximal value acceptable in RRD>
+-# If a value extracted by is less than minimal of greater than maximal
+-# value, it will be stored int RRD database as unknown.
+-# These limits are usefull to handle counter that fall down to 0 when
+-# they reach their limit (Ex: network graphs)
+-#
+-# Note: Static values are accessible for the post processing using the
+-# variable $this->{'static'}->{'static_data_name'} and can be used.
+-# You can refer to swap data extraction to see an example.
++# <data name>, <data source>, <data regex>, and <data postprocess>
++# have the same meanings as when used with static items.
++#
++# dynamic.<dynamic data id>.rrd=<GAUGE|COUNTER|DERIVE|ABSOLUTE|COMPUTE>
++# The fifth parameter determines whether the item's data should be
++# stored in an Round-Robin Database, and how it should be
++# represented. A blank entry will prevent RRD creation.
++# See http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html for
++# details of the RRD different RRD options.
++#
++# NB: Values associated with named static items are available for use
++# during post-processing with the notation:
++#
++# $this->{'static'}->{'static_data_name'}
++#
++# See the dynamic item named 'swap_used' for a real-world example.
+ #
+ ########################################################################
+ #
+-# Web interface configuration
++# Web interface quick-links configuration
+ #
+-# Friends are defining a displayed name and a link reachable from a
+-# top left menu visible if at least one friends is configured. Each
+-# friend is identified by its <id> and is described by the 2 following
+-# parameters
++# 'friends' are links shown in the top-left menu, visible once at least
++# one friend is configured. Each friend is defined by a the keyword
++# 'web.friends' followed by a numerical unqiue identifier and each of
++# two additional parameters:
+ #
+ # web.friends.<id>.name=<display name>
+-# web.friends.<id>.link=<link to RPi-Monitor>
+-#
+-# web.friends.<id>.name=<display name>
+-# <display name> is the name printed into the drop down menu
++# web.friends.<id>.link=<URL>
++#
++# 'friends' are envisaged to provide an easy way to link multiple
++# rpimonitord instances across different hosts.
+ #
+-# web.friends.<id>.link=<link to RPi-Monitor>
+-# <link to RPi-Monitor> is the link to another RPi-Monitor running
+-# into the friend machine.
++# Web interface configuration
+ #
+ # web.page.icon=<icon location relative to webroot>
+-# <icon location relative to webroot> is the path and filename of
+-# the icon to be displayed into RPi-Monitor title bar
++# <icon location relative to webroot> is the URI of the icon to be
++# displayed in the browser address bar.
++#
++# web.page.menutitle=<menu title js>
++# <menu title js> is javascript code used to populate the rpimonitord
++# title-bar.
++# Metrics in the 'data' object such as 'data.hostname' may be
++# referenced.
++#
++# web.page.pagetitle=<page title js>
++# <page title js> is javascript code used to populate the rpimonitord
++# website title, as shown by the browser window/tab.
++# Metrics in the 'data' object such as 'data.hostname' may be
++# referenced.
+ #
+-# web.page.menutitle=<menu title>
+-# <menu title> javascript code defining the text displayed into
+-# RPi-Monotor title bar. This code can use status information with
+-# the keyword 'data' including the 'data.hostname' available natively
+-#
+-# web.page.pagetitle=<page title>
+-# <page title> javascript code defining the text displayed into
+-# tab and window title bar. This code can use status information with
+-# the keyword 'data' including the 'data.hostname' available natively
+-#
+-# The status page is fully configurable.
+-# It is possible to define multiple pages. Each page is identified by
+-# its <page id>.
++# Web interface status pages
++#
++# It is possible to define multiple status pages. Each page is
++# identified by its <page id>:
+ #
+ # web.status.<page id>.name=<page name>
+-# <page name> name of the page displayed into the drop down menu in
+-# case of multiple pages.
++# <page name> is the name of the page as displayed in the drop down
++# menu which is shown when multiple pages are defined.
+ #
+-# Status page is split in strips displaying information. Each status
+-# strip is identified by a unique <status id>. Each status strip is
+-# defined by a name, an icon and a serie of lines described as follow:
+-#
+-# web.status.<page id>.visibility=<visibility formula>
+-#
+-# <visibility forlula> should be a valid javascript formula returning
+-# 0: to hide the row
+-# anything else but 0: show the row
++# Each status page is split into horizontal rows. Each status row is
++# identified by a unique <status id>, and is given a name, an icon and
++# a series of entries as follows:
++#
++# web.status.<page id>.visibility=<condition js>
++# <conditoin js> is a javascript statement which will cause the row
++# to be hidden if it evaluates to zero, or shown otherwise.
+ #
+ # web.status.<page id>.content.<status id>.name=<display name>
++# <display name> is the row title.
++#
+ # web.status.<page id>.content.<status id>.icon=<display icon>
+-# web.status.<page id>.content.<status id>.line.<line number>=<parameter>
++# <display icon> is the icon for the row.
++#
++# web.status.<page id>.content.<status id>.line.<line>=<expression js>
++# <line> represents the numerical position of the line within the
++# row. This number must be unique for a given row.
++# <expression js> specifies the content of the line, and will be
++# rendered by a javascript 'eval()' call.
++# For ease of use, rpimonitord provides several functions which can
++# be used within the provided expression:
++#
++# Uptime( seconds )
++# Output the time <seconds> in the following format:
++# XX year XX days XX hours XX minutes XX seconds
++#
++# Pad( value )
++# Add a prefix '0' for any <value> less than 10;
++#
++# KMG( value, pre )
++# Output <value> in units of "kilo", "mega", "giga", or "peta".
++# <pre> specifies the magnitude of the output required, and
++# should be 'k', 'M', 'G', or 'P';
++#
++# Percent( value, total )
++# Output the ratio of <value> to <total> as a percentage;
++#
++# ProgressBar( value, total, warning, danger )
++# Draw a progressbar representing the ratio of <value> compared
++# to <total>:
++#
++# [=========------------]
++#
++# The default color of bar is blue, but will be rendered in
++# orange if the ratio of <value> to <total> is greater than
++# <warning> as a percentage, and red if above <danger>;
++#
++# JustGageBar( title, label, min, value, max, width, height,
++# levelColors, warning, critical )
++# Draw a half-circular gauge:
++# <title> - Text to render above the gauge;
++# <label> - Text to render below the gauge;
++# <min> - Minimum gauge value;
++# <value> - Quantity to be shown;
++# <max> - Maximum gauge value;
++# <width>, <height> - Size of the gauge in pixels;
++# <levelColors> - An array of [normal, warning, danger] colour
++# values in hexadecimal notation, defaulting to
++# [green, orange, red]. Default colours are stored
++# in the 'precentColors' array.
++# <warning> - Gauge level as a percentage to render in the
++# second colour of <levelColors>;
++# <critical> - Gauge level as a percentage to render in the
++# third colour of <levelColors>;
++#
++# Plural( value )
++# Output "s " if <value> is greater than one, or " " otherwise;
+ #
+-# web.status.<page id>.content.<status id>.name=<display name>
+-# <display name> Name displayed as title of the strip
++# Clock( data.localtime )
++# Display a clock with incrementing seconds. Use only with
++# 'data.localtime' as an argument;
++#
++# Label( data, expression, text, level )
++# Badge( data, expression, text, level )
++# These functions will output a label or badge with a specified
++# background color if the provided expression evaluates to true:
++# <data> - Input to <expression>;
++# <expression> - Evaluated against <data> to determine whether
++# to display label or badge;
++# <text> - Text to output;
++# <level> - 'default' (grey),
++# 'primary' (blue label/grey badge),
++# 'success' (green),
++# 'info' (cyan),
++# 'warning' (orange)
++# 'danger' (red);
++#
++# InsertHTML( url )
++# This function is used to insert raw HTML within a page.
++# (See the 'Top3' example showing the process with highest cpu
++# usage) ;
+ #
+-# web.status.<page id>.content.<status id>.icon=<display icon>
+-# <display icon> Icon of the strip
++# The 'data' object is also available and contains all dynamic and
++# static metrics explained above.
++#
++# Web interface statistics pages
+ #
+-# web.status.<page id>.content.<status id>.line.<line number>=<parameter>
+-# <line number> represent the position of the line within the strip.
+-# This number has to be unique within the strip.
+-# <parameter> is describing the content of the line. This parameter
+-# will be evaluated by the javascript command with the function
+-# eval() theirfore parameter should be valid javacript.
+-# To have clean rendering, RPi-Monitor web interface provides some
+-# functions that could be used inside the parameter. The object data
+-# is also available and contains the result of dynamic and static
+-# extracted as described in the KPI extraction section.
+-#
+-# Functions provided by RPi-Monitor are the following:
+-#
+-# Uptime(uptime in sec)
+-# Print the uptime from seconds to the following format:
+-# XX year XX days XX hours XX minutes XX seconds
+-#
+-# Pad(value)
+-# Add a prefixed 0 for number smaller than 10
+-#
+-# KMG(value, pre)
+-# Print value in kilo, Mega, Giga, Peta.
+-# pre can be 'k', 'M', 'G' or 'P' depending on the value.
+-#
+-# Percent(value,total)
+-# Print percentage of value compared to total
+-#
+-# ProgressBar(value,total,warning, danger)
+-# Draw a progressbar representing the value compared to total.
+-# [=========------------]
+-# The default color of pregressbar is blue.
+-# If warning value is lower than critical, progressbar color will
+-# be orange if percentage is higher than warning value and red
+-# if the percentage is higher than danger value
+-# If warning value is higher than critical, progressbar color will
+-# be orange if percentage is lower than warning value and red
+-# if the percentage is lower than danger value
+-#
+-# JustGageBar(title, label,min, value, max, width, height, levelColors, warning, critical)
+-# Draw a half-circular gauge
+-# title : Title of the gauge (located on to of the gauge)
+-# label : Label of the gauge (located under the value)
+-# min : min value of the gauge
+-# value : value to be drawn
+-# max : max value of the gauge
+-# width, height : size of the gauge
+-# levelColors : Array defining colors of each level [normal,warning,critical]
+-# (in Hex format), default: green, orange and red.
+-# Default colors are available into the array 'percentColors'.
+-# warning : Warning level (in %) used to define color (default: 33)
+-# critical : Critical level (in %) used to define color (default: 66)
+-#
+-# Plural (value)
+-# Print 's ' if value > 1 or ' ' if not.
+-#
+-# Clock(data.localtime)
+-# This function is a little bit particular and should be written
+-# and should be written exactly as in the upper line. It will
+-# display on screen the current time and will simulate the
+-# seconds by incrementing them periodically.
+-#
+-# Label(data,formula, text, level)
+-# Badge(data,formula, text, level)
+-# This function will write a label/badge with a defined
+-# background color if the formula return TRUE.
+-# data : data to use with the formula
+-# formula : formula evaluated in regards to data to determine
+-# if label/badge has to be printed
+-# text : text to be displayed
+-# level : 'default' (grey), 'primary' (blue label/grey badge),
+-# 'success' (green), 'info' (cyan), 'warning' (orange)
+-# or 'danger' (red)
+-#
+-# InsertHTML(url)
+-# This function is used to insert an HTML information inside
+-# a page. (Ref Top3 example showing top most process cpu usage)
+-#
+-# The statistic page is fully configurable.
+-# It is possible to define multiple pages. Each page is identified by
+-# its <page id>.
++# It is possible to define multiple statistics pages. Each page is
++# identified by its <page id>:
+ #
+ # web.status.<page id>.name=<page name>
+-# <page name> name of the page displayed into the drop down menu in
+-# case of multiple pages.
++# <page name> is the name of the page as displayed in the drop down
++# menu which is shown when multiple pages are defined.
+ #
+-# The statistic page displays statistics graphs. The graphs are
+-# identified an unique <statistic id> and by the following parameters.
++# Statistics page display graphs which are identified by a unique
++# <statistic id> and accept the following parameters:
+ #
+-# web.statistics.<page id>.content.<statistic id>.name=<statistic name>
+-# <statistic name> is the name of the statistics displayed in the
+-# top left drop down list.
+-#
+-# web.statistics.<page id>.content.<statistic id>.graph.<rrd id>=<data name>
+-# <rrd id> is identifying the graph and is unique per <statistic id>
+-# <data name> is the name of the dynamic and static extracted as
+-# described in the KPI extraction section.
+-#
+-# web.statistics.<page id>.content.<statistic id>.ds_graph_options.<data name>.label=<label>
+-# <data name> same as the previous <data name>
+-# <label> Label to display in legends. It is possible to setup other parameters
+-# of ds_graph_options. Refer to the following web page for details:
+-# http://javascriptrrd.sourceforge.net/docs/javascriptrrd_v0.5.0/doc/lib/rrdFlot_js.html
++# web.statistics.<page id>.content.<statistic id>.name=<display name>
++# <display name> is text to show in the drop-down list of statistics.
+ #
++# web.statistics.<page id>.content.<statistic id>.graph.<rrd id>=<name>
++# <rrd id> is unique per <statistic id>,
++# <name> is the name of the extracted static or dynamic value to
++# further configure.
++#
++# web.statistics.<page id>.content.<statistic id>.ds_graph_options.<name>.label=<label>
++# <name> should match a <name> value from .graph.<rrd id>.
++# <label> is the display-name of the graph being configured.
++#
+ # web.statistics.<page id>.content.<statistic id>.graph_options.<parameter>=<value>
+-# <parameter> and <value> can be find into the same web page as previous
+-# parameter. This allow to customize the graph and axis.
++# It is possible to specify further parameters of ds_graph_options,
++# see the following link for details:
++# http://javascriptrrd.sourceforge.net/docs/javascriptrrd_v0.5.0/doc/lib/rrdFlot_js.html
++#
++# rpimonitord must be restarted when this file is updated.
+ #
+-# Example file are available in the template directory (prefixed by 'example').
+-# To understand how a feature is behaving, you can include this example file
+-# using the 'include' directive.
+-# These include directive are already written (commented) into the default
+-# configuration file: raspbian.conf
+-# When configuration files change, it is required to restart rpimonitor.
+ #######################################################################
+
+-#web.friends.1.name=Raspberry Pi
+-#web.friends.1.link=http://192.168.0.123/
+-#web.friends.2.name=Shuttle
++#web.friends.1.name=First Raspberry Pi
++#web.friends.1.link=http://192.168.0.1/
++#web.friends.2.name=Second Raspberry Pi
+ #web.friends.2.link=http://192.168.0.2/
+-#web.friends.3.name=Netbook
+-#web.friends.3.link=http://192.168.0.38/
++#web.friends.3.name=Third Raspberry Pi
++#web.friends.3.link=http://192.168.0.3/
+
+ web.page.icon='img/logo.png'
+-web.page.menutitle='RPi-Monitor <sub>('+data.hostname+')</sub>'
+-web.page.pagetitle='RPi-Monitor ('+data.hostname+')'
++web.page.menutitle='RPi-Monitor <sub>(' + data.hostname + ')</sub>'
++web.page.pagetitle='RPi-Monitor (' + data.hostname + ')'
+
+ web.status.1.name=Raspberry Pi
+ #web.status.2.name=Home
+@@ -270,44 +263,45 @@
+
+ web.addons.1.name=Addons
+ web.addons.1.addons=about
+-#web.addons.1.name=Shellinabox
+-#web.addons.1.addons=shellinabox
+
+-#web.addons.2.name=Addons example
+-#web.addons.2.addons=example
+-#web.addons.2.showTitle=0
++#web.addons.2.name=Shell-in-a-box
++#web.addons.2.addons=shellinabox
+
+-#web.addons.3.name=Webcam - Hawkeye
++#web.addons.3.name=Addons Example
++#web.addons.3.addons=example
+ #web.addons.3.showTitle=0
+-#web.addons.3.addons=custom
+-#web.addons.3.url=http://0:8000/
+
+-#web.addons.4.name=Custom addons
++#web.addons.4.name=Hawkeye Webcam (https://github.com/ipartola/hawkeye)
+ #web.addons.4.addons=custom
+ #web.addons.4.showTitle=0
+-#web.addons.4.url=/addons/custom/custominfo.html
+-
+-#web.addons.5.name=Top3
+-#web.addons.5.addons=top3
+-
+-#include=/etc/rpimonitor/template/example.justgage.conf
+-#include=/etc/rpimonitor/template/example.badge_and_label.conf
+-#include=/etc/rpimonitor/template/example.progressbar.conf
+-#include=/etc/rpimonitor/template/example.visibility.conf
+-
+-include=/etc/rpimonitor/template/version.conf
+-include=/etc/rpimonitor/template/uptime.conf
+-include=/etc/rpimonitor/template/cpu.conf
+-include=/etc/rpimonitor/template/temperature.conf
+-include=/etc/rpimonitor/template/memory.conf
+-include=/etc/rpimonitor/template/swap.conf
+-include=/etc/rpimonitor/template/sdcard.conf
+-include=/etc/rpimonitor/template/network.conf
+-
+-#include=/etc/rpimonitor/template/printer.conf
+-#include=/etc/rpimonitor/template/storage.conf
+-#include=/etc/rpimonitor/template/services.conf
+-#include=/etc/rpimonitor/template/wlan.conf
+-#include=/etc/rpimonitor/template/dht11.conf
+-
++#web.addons.4.url=http://192.168.0.4:8000/
+
++#web.addons.5.name=Custom addons
++#web.addons.5.addons=custom
++#web.addons.5.showTitle=0
++#web.addons.5.url=/addons/custom/custominfo.html
++
++#web.addons.6.name=Top3
++#web.addons.6.addons=top3
++
++# Usage examples:
++#include=/etc/rpimonitord.conf.d/example.justgage.conf
++#include=/etc/rpimonitord.conf.d/example.badge_and_label.conf
++#include=/etc/rpimonitord.conf.d/example.progressbar.conf
++#include=/etc/rpimonitord.conf.d/example.visibility.conf
++
++include=/etc/rpimonitord.conf.d/version.conf
++include=/etc/rpimonitord.conf.d/uptime.conf
++include=/etc/rpimonitord.conf.d/cpu.conf
++include=/etc/rpimonitord.conf.d/temperature.conf
++include=/etc/rpimonitord.conf.d/memory.conf
++include=/etc/rpimonitord.conf.d/swap.conf
++include=/etc/rpimonitord.conf.d/sdcard.conf
++include=/etc/rpimonitord.conf.d/network.conf
++
++# Further real-world examples:
++#include=/etc/rpimonitord.conf.d/printer.conf
++#include=/etc/rpimonitord.conf.d/storage.conf
++#include=/etc/rpimonitord.conf.d/services.conf
++#include=/etc/rpimonitord.conf.d/wlan.conf
++#include=/etc/rpimonitord.conf.d/dht11.conf
diff --git a/www-apps/rpi-monitor/files/memory.conf-2.10.patch b/www-apps/rpi-monitor/files/memory.conf-2.10.patch
new file mode 100644
index 00000000..e307aa41
--- /dev/null
+++ b/www-apps/rpi-monitor/files/memory.conf-2.10.patch
@@ -0,0 +1,116 @@
+--- rpimonitor/template/memory.conf.dist 2015-03-14 15:13:47.409612000 +0000
++++ rpimonitor/template/memory.conf 2015-03-14 15:46:38.469612000 +0000
+@@ -6,34 +6,88 @@
+ # - memory free - yes - yes
+ # - memory available - yes - yes
+ ########################################################################
+-static.5.name=memory_total
+-static.5.source=/proc/meminfo
+-static.5.regexp=MemTotal:\s+(\d+)
+-static.5.postprocess=$1/1024
+-
+-dynamic.9.name=memory_free
+-dynamic.9.source=/proc/meminfo
+-dynamic.9.regexp=MemFree:\s+(\d+)
+-dynamic.9.postprocess=$1/1024
++
++#static.11.name=tmpfs_ram_total
++#static.11.source=df /mnt/ram
++#static.11.regexp=^[^\s]+\s+(\d+)
++#static.11.postprocess=$1/1024
++
++dynamic.9.name=memory_total
++dynamic.9.source=/opt/vc/bin/vcgencmd get_mem arm
++dynamic.9.regexp=^.*=(\d+)M$
++dynamic.9.postprocess=
+ dynamic.9.rrd=GAUGE
+
+-dynamic.15.name=memory_available
+-dynamic.15.source=/usr/bin/free -mk
+-dynamic.15.regexp=^-\/\+ buffers\/cache:\s+\d+\s+(\d+)
+-dynamic.15.postprocess=$1/1024
+-dynamic.15.rrd=GAUGE
++dynamic.10.name=memory_gpu
++dynamic.10.source=/opt/vc/bin/vcgencmd get_mem gpu
++dynamic.10.regexp=^.*=(\d+)M$
++dynamic.10.postprocess=
++dynamic.10.rrd=GAUGE
++
++dynamic.11.name=memory_free
++dynamic.11.source=/proc/meminfo
++dynamic.11.regexp=MemFree:\s+(\d+)
++dynamic.11.postprocess=$1/1024
++dynamic.11.rrd=GAUGE
++
++dynamic.12.name=memory_used
++dynamic.12.source=/proc/meminfo
++dynamic.12.regexp=MemFree:\s+(\d+)
++dynamic.12.postprocess=$this->{'dynamic'}->{'memory_total'} - ($1/1024)
++dynamic.12.rrd=GAUGE
++
++dynamic.13.name=memory_available
++dynamic.13.source=/usr/bin/free -mk
++dynamic.13.regexp=^-\/\+ buffers\/cache:\s+\d+\s+(\d+)
++dynamic.13.postprocess=$1/1024
++dynamic.13.rrd=GAUGE
++
++#dynamic.20.name=tmpfs_ram_used
++#dynamic.20.source=df /mnt/ram
++#dynamic.20.regexp=^[^\s]+\s+\d+\s+(\d+)
++#dynamic.20.postprocess=$1/1024
++#dynamic.20.rrd=GAUGE
+
+ web.status.1.content.5.name=Memory
+ web.status.1.content.5.icon=memory.png
+-web.status.1.content.5.line.1="Used: <b>" + KMG(data.memory_total-data.memory_available,'M') + "</b> (<b>" + Percent(data.memory_total-data.memory_available,data.memory_total,'M') + "</b>) Available: <b>" + KMG(data.memory_available,'M') + "</b> Total: <b>" + KMG(data.memory_total,'M') + "</b>"
+-web.status.1.content.5.line.2=ProgressBar(data.memory_total-data.memory_available,data.memory_total)
++web.status.1.content.5.line.1="Used: <b>" + KMG(data.memory_used,'M') + "</b> (<b>" + Percent(data.memory_used,data.memory_total,'M') + "</b>) Free: <b>" + KMG(data.memory_free,'M') + "</b> Available: <b>" + KMG(data.memory_available,'M') + "</b> Total: <b>" + KMG(data.memory_total,'M') + "</b>"
++web.status.1.content.5.line.2="GPU: <b>" + KMG(data.memory_gpu,'M') + "</b>"
++web.status.1.content.5.line.3=ProgressBar(data.memory_used,data.memory_total)
++
++#web.status.1.content.8.name=RAM fs
++#web.status.1.content.8.icon=memory.png
++#web.status.1.content.8.line.1="Used: <b>" + KMG(data.tmpfs_ram_used,'M') + "</b> (<b>" + Percent(data.tmpfs_ram_used,data.tmpfs_ram_total,'M') + "</b>) Free: <b>" + KMG(data.tmpfs_ram_total-data.tmpfs_ram_used,'M') + "</b> Total: <b>" + KMG(data.tmpfs_ram_total,'M') + "</b>"
++#web.status.1.content.8.line.2=ProgressBar(data.tmpfs_ram_used,data.tmpfs_ram_total)
++
++#web.statistics.1.content.6.name=tmpfs - RAM
++#web.statistics.1.content.6.graph.1=tmpfs_ram_total
++#web.statistics.1.content.6.graph.2=tmpfs_ram_used
++#web.statistics.1.content.6.ds_graph_options.tmpfs_ram_total.label=Size of /mnt/ram (MB)
++#web.statistics.1.content.6.ds_graph_options.tmpfs_ram_total.color="#FF7777"
++#web.statistics.1.content.6.ds_graph_options.tmpfs_ram_used.label=Used on /mnt/ram (MB)
++#web.statistics.1.content.6.ds_graph_options.tmpfs_ram_used.lines={ fill: true }
++#web.statistics.1.content.6.ds_graph_options.tmpfs_ram_used.color="#7777FF"
+
+-web.statistics.1.content.6.name=Memory
+-web.statistics.1.content.6.graph.1=memory_total
+-web.statistics.1.content.6.graph.2=memory_free
+-web.statistics.1.content.6.graph.3=memory_available
+-web.statistics.1.content.6.ds_graph_options.memory_total.label=Total Memory(MB)
+-web.statistics.1.content.6.ds_graph_options.memory_free.label=Free Memory (MB)
+-web.statistics.1.content.6.ds_graph_options.memory_free.color="#7777FF"
+-web.statistics.1.content.6.ds_graph_options.memory_available.label=Available Memory (MB)
+-web.statistics.1.content.6.ds_graph_options.memory_available.color="#77FF77"
++web.statistics.1.content.7.name=Memory
++web.statistics.1.content.7.graph.1=memory_available
++web.statistics.1.content.7.graph.2=memory_free
++web.statistics.1.content.7.graph.3=memory_used
++web.statistics.1.content.7.graph.4=memory_total
++web.statistics.1.content.7.graph.5=memory_gpu
++#web.statistics.1.content.7.graph.6=tmpfs_ram_total
++#web.statistics.1.content.7.graph.7=tmpfs_ram_used
++web.statistics.1.content.7.ds_graph_options.memory_available.label=Available Memory (MB)
++web.statistics.1.content.7.ds_graph_options.memory_available.color="#FF7700"
++web.statistics.1.content.7.ds_graph_options.memory_free.label=Free Memory (MB)
++web.statistics.1.content.7.ds_graph_options.memory_free.color="#77FF77"
++web.statistics.1.content.7.ds_graph_options.memory_used.label=Used Memory (MB)
++web.statistics.1.content.7.ds_graph_options.memory_used.color="#FF7777"
++web.statistics.1.content.7.ds_graph_options.memory_total.label=Total Memory (MB)
++web.statistics.1.content.7.ds_graph_options.memory_total.color="#7777FF"
++web.statistics.1.content.7.ds_graph_options.memory_gpu.label=GPU Memory (MB)
++web.statistics.1.content.7.ds_graph_options.memory_gpu.lines={ fill: true }
++web.statistics.1.content.7.ds_graph_options.memory_gpu.color="#FFFF77"
++#web.statistics.1.content.7.ds_graph_options.tmpfs_ram_total.label=Size of /mnt/ram (MB)
++#web.statistics.1.content.7.ds_graph_options.tmpfs_ram_total.color="#77FFFF"
++#web.statistics.1.content.7.ds_graph_options.tmpfs_ram_used.label=Used on /mnt/ram (MB)
++#web.statistics.1.content.7.ds_graph_options.tmpfs_ram_used.color="#FF77FF"
diff --git a/www-apps/rpi-monitor/files/network.conf-2.10.patch b/www-apps/rpi-monitor/files/network.conf-2.10.patch
new file mode 100644
index 00000000..a5920d44
--- /dev/null
+++ b/www-apps/rpi-monitor/files/network.conf-2.10.patch
@@ -0,0 +1,58 @@
+--- rpimonitor/template/network.conf.dist 2015-03-14 15:31:42.639612000 +0000
++++ rpimonitor/template/network.conf 2015-03-14 15:34:12.979612000 +0000
+@@ -5,31 +5,32 @@
+ # - recieved - yes - yes
+ # - send - yes - yes
+ ########################################################################
+-dynamic.10.name=net_received
+-dynamic.10.source=/sys/class/net/eth0/statistics/rx_bytes
+-dynamic.10.regexp=(.*)
+-dynamic.10.postprocess=$1*-1
+-dynamic.10.rrd=DERIVE
+-dynamic.10.max=0
+
+-dynamic.11.name=net_send
+-dynamic.11.source=/sys/class/net/eth0/statistics/tx_bytes
+-dynamic.11.regexp=(.*)
+-dynamic.11.postprocess=
+-dynamic.11.rrd=DERIVE
+-dynamic.11.min=0
++dynamic.14.name=net_received
++dynamic.14.source=/sys/class/net/eth0/statistics/rx_bytes
++dynamic.14.regexp=(.*)
++dynamic.14.postprocess=$1*-1
++dynamic.14.rrd=DERIVE
++dynamic.14.max=0
++
++dynamic.15.name=net_send
++dynamic.15.source=/sys/class/net/eth0/statistics/tx_bytes
++dynamic.15.regexp=(.*)
++dynamic.15.postprocess=
++dynamic.15.rrd=DERIVE
++dynamic.15.min=0
+
+ web.status.1.content.8.name=Network
+ web.status.1.content.8.icon=network.png
+-web.status.1.content.8.line.1="Ethernet Sent: <b>"+KMG(data.net_send)+"<i class='icon-arrow-up'></i></b> Received: <b>"+KMG(Math.abs(data.net_received)) + "<i class='icon-arrow-down'></i></b>"
++web.status.1.content.8.line.1="Ethernet Sent: <b>" + KMG(data.net_send) + "<i class='icon-arrow-up'></i></b> Received: <b>" + KMG(Math.abs(data.net_received)) + "<i class='icon-arrow-down'></i></b>"
+
+-web.statistics.1.content.2.name=Network
+-web.statistics.1.content.2.graph.1=net_send
+-web.statistics.1.content.2.graph.2=net_received
+-web.statistics.1.content.2.graph_options.yaxis={ tickFormatter: function (v) { if (Math.abs(v) > 1048576) return (Math.round(v*10/1024/1024)/10) + " MiB/s" ; if (Math.abs(v) > 1024) return (Math.round(v*10/1024)/10) + " KiB/s" ; else return v + " B/s" }, }
+-web.statistics.1.content.2.ds_graph_options.net_send.label=Upload bandwidth (bytes)
+-web.statistics.1.content.2.ds_graph_options.net_send.lines={ fill: true }
+-web.statistics.1.content.2.ds_graph_options.net_send.color="#FF7777"
+-web.statistics.1.content.2.ds_graph_options.net_received.label=Download bandwidth (bytes)
+-web.statistics.1.content.2.ds_graph_options.net_received.lines={ fill: true }
+-web.statistics.1.content.2.ds_graph_options.net_received.color="#77FF77"
++web.statistics.1.content.3.name=Network
++web.statistics.1.content.3.graph.1=net_send
++web.statistics.1.content.3.graph.2=net_received
++web.statistics.1.content.3.graph_options.yaxis={ tickFormatter: function (v) { if (Math.abs(v) > 1048576) return (Math.round(v*10/1024/1024)/10) + " MiB/s" ; if (Math.abs(v) > 1024) return (Math.round(v*10/1024)/10) + " KiB/s" ; else return v + " B/s" }, }
++web.statistics.1.content.3.ds_graph_options.net_send.label=Upload bandwidth (bytes)
++web.statistics.1.content.3.ds_graph_options.net_send.lines={ fill: true }
++web.statistics.1.content.3.ds_graph_options.net_send.color="#FF7777"
++web.statistics.1.content.3.ds_graph_options.net_received.label=Download bandwidth (bytes)
++web.statistics.1.content.3.ds_graph_options.net_received.lines={ fill: true }
++web.statistics.1.content.3.ds_graph_options.net_received.color="#77FF77"
diff --git a/www-apps/rpi-monitor/files/rpimonitor.confd b/www-apps/rpi-monitor/files/rpimonitor.confd
index c3865420..58294fc8 100644
--- a/www-apps/rpi-monitor/files/rpimonitor.confd
+++ b/www-apps/rpi-monitor/files/rpimonitor.confd
@@ -1,2 +1,2 @@
-# Define configuration file to use
-#CONFFILE="-c /etc/rpimonitord.conf -c /etc/rpimonitord.conf.d/default.conf"
+# Define configuration files to use
+CONFFILES="-c /etc/rpimonitord.conf -c /etc/rpimonitord.conf.d/data.conf"
diff --git a/www-apps/rpi-monitor/files/rpimonitor.initd b/www-apps/rpi-monitor/files/rpimonitor.initd
index 4a67db71..2006848a 100644
--- a/www-apps/rpi-monitor/files/rpimonitor.initd
+++ b/www-apps/rpi-monitor/files/rpimonitor.initd
@@ -6,7 +6,7 @@ PERL="$( type -pf perl )"
NAME=rpimonitord
PIDFILE=/var/run/$NAME.pid
DAEMON=/usr/sbin/$NAME
-DAEMON_ARGS="-b ${PIDFILE}"
+DAEMON_ARGS="-b ${PIDFILE} ${CONFFILES:+${CONFFILES}}"
depend() {
need net
diff --git a/www-apps/rpi-monitor/files/rpimonitord-2.10.patch b/www-apps/rpi-monitor/files/rpimonitord-2.10.patch
new file mode 100644
index 00000000..486fdde8
--- /dev/null
+++ b/www-apps/rpi-monitor/files/rpimonitord-2.10.patch
@@ -0,0 +1,15 @@
+--- rpimonitor/rpimonitord.dist 2015-03-14 19:01:48.049612000 +0000
++++ rpimonitor/rpimonitord 2015-03-14 19:04:23.919612000 +0000
+@@ -61,8 +61,10 @@
+ $_ = abs_path($0);
+ my ($path,$file) = /(.*)\/([^\/]*)$/;
+
+- push(@{$this->{'daemon'}->{'confFiles'}},"/etc/rpimonitor/data.conf");
+- push(@{$this->{'daemon'}->{'confFiles'}},"/etc/rpimonitor/daemon.conf");
++ if( scalar( @{$this->{'daemon'}->{'confFiles'}} < 2 )) {
++ push(@{$this->{'daemon'}->{'confFiles'}},"/etc/rpimonitor/data.conf") if -r "/etc/rpimonitor/data.conf";
++ push(@{$this->{'daemon'}->{'confFiles'}},"/etc/rpimonitor/daemon.conf") if -r "/etc/rpimonitor/daemon.conf";
++ }
+
+ foreach ( @{$this->{'daemon'}->{'confFiles'}} ) {
+ #print "$_\n";
diff --git a/www-apps/rpi-monitor/files/sdcard.conf-2.10.patch b/www-apps/rpi-monitor/files/sdcard.conf-2.10.patch
new file mode 100644
index 00000000..528b967d
--- /dev/null
+++ b/www-apps/rpi-monitor/files/sdcard.conf-2.10.patch
@@ -0,0 +1,89 @@
+--- rpimonitor/template/sdcard.conf.dist 2015-03-14 15:25:17.659612000 +0000
++++ rpimonitor/template/sdcard.conf 2015-03-14 15:47:41.519612000 +0000
+@@ -7,49 +7,50 @@
+ # - boot total - yes - yes
+ # - boot used - yes - yes
+ ########################################################################
+-static.7.name=sdcard_root_total
+-static.7.source=df /
+-static.7.regexp=\S+\s+(\d+).*\/$
+-static.7.postprocess=$1/1024
+-
+-static.8.name=sdcard_boot_total
+-static.8.source=df /boot
+-static.8.regexp=\S+\s+(\d+).*\/boot$
++
++static.8.name=sdcard_root_total
++static.8.source=df /
++static.8.regexp=^\S+\s+(\d+).*\/$
+ static.8.postprocess=$1/1024
+
+-dynamic.6.name=sdcard_root_used
+-dynamic.6.source=df /
+-dynamic.6.regexp=\S+\s+\d+\s+(\d+).*\/$
++static.9.name=sdcard_boot_total
++static.9.source=df /boot
++static.9.regexp=^\S+\s+(\d+).*\/boot$
++static.9.postprocess=$1/1024
++
++dynamic.5.name=sdcard_root_used
++dynamic.5.source=df /
++dynamic.5.regexp=^\S+\s+\d+\s+(\d+).*\/$
++dynamic.5.postprocess=$1/1024
++dynamic.5.rrd=GAUGE
++
++dynamic.6.name=sdcard_boot_used
++dynamic.6.source=df /boot
++dynamic.6.regexp=^\S+\s+\d+\s+(\d+).*\/boot$
+ dynamic.6.postprocess=$1/1024
+ dynamic.6.rrd=GAUGE
+
+-dynamic.7.name=sdcard_boot_used
+-dynamic.7.source=df /boot
+-dynamic.7.regexp=\S+\s+\d+\s+(\d+).*\/boot$
+-dynamic.7.postprocess=$1/1024
+-dynamic.7.rrd=GAUGE
+-
+ web.status.1.content.7.name=SD card
+ web.status.1.content.7.icon=sd.png
+-web.status.1.content.7.line.1="<b>/boot</b> Used: <b>"+KMG(data.sdcard_boot_used,'M')+"</b> (<b>"+Percent(data.sdcard_boot_used,data.sdcard_boot_total,'M')+"</b>) Free: <b>"+KMG(data.sdcard_boot_total-data.sdcard_boot_used,'M')+ "</b> Total: <b>"+ KMG(data.sdcard_boot_total,'M') +"</b>"
++web.status.1.content.7.line.1="<b>/boot</b> Used: <b>" + KMG(data.sdcard_boot_used,'M') + "</b> (<b>" + Percent(data.sdcard_boot_used,data.sdcard_boot_total,'M') + "</b>) Free: <b>" + KMG(data.sdcard_boot_total-data.sdcard_boot_used,'M') + "</b> Total: <b>" + KMG(data.sdcard_boot_total,'M') + "</b>"
+ web.status.1.content.7.line.2=ProgressBar(data.sdcard_boot_used,data.sdcard_boot_total,60,80)
+-web.status.1.content.7.line.3="<b>/</b> Used: <b>"+KMG(data.sdcard_root_used,'M') + "</b> (<b>" + Percent(data.sdcard_root_used,data.sdcard_root_total,'M')+"</b>) Free: <b>"+KMG(data.sdcard_root_total-data.sdcard_root_used,'M')+ "</b> Total: <b>"+ KMG(data.sdcard_root_total,'M') + "</b>"
++web.status.1.content.7.line.3="<b>/</b> Used: <b>" + KMG(data.sdcard_root_used,'M') + "</b> (<b>" + Percent(data.sdcard_root_used,data.sdcard_root_total,'M') + "</b>) Free: <b>" + KMG(data.sdcard_root_total-data.sdcard_root_used,'M') + "</b> Total: <b>" + KMG(data.sdcard_root_total,'M') + "</b>"
+ web.status.1.content.7.line.4=ProgressBar(data.sdcard_root_used,data.sdcard_root_total,60,80)
+
+-web.statistics.1.content.3.name=Disks - boot
+-web.statistics.1.content.3.graph.1=sdcard_boot_total
+-web.statistics.1.content.3.graph.2=sdcard_boot_used
+-web.statistics.1.content.3.ds_graph_options.sdcard_boot_total.label=Size of /boot (MB)
+-web.statistics.1.content.3.ds_graph_options.sdcard_boot_total.color="#FF7777"
+-web.statistics.1.content.3.ds_graph_options.sdcard_boot_used.label=Used on /boot (MB)
+-web.statistics.1.content.3.ds_graph_options.sdcard_boot_used.lines={ fill: true }
+-web.statistics.1.content.3.ds_graph_options.sdcard_boot_used.color="#7777FF"
+-
+-web.statistics.1.content.4.name=Disks - root
+-web.statistics.1.content.4.graph.1=sdcard_root_total
+-web.statistics.1.content.4.graph.2=sdcard_root_used
+-web.statistics.1.content.4.ds_graph_options.sdcard_root_total.label=Size of / (MB)
+-web.statistics.1.content.4.ds_graph_options.sdcard_root_total.color="#FF7777"
+-web.statistics.1.content.4.ds_graph_options.sdcard_root_used.label=Used on / (MB)
+-web.statistics.1.content.4.ds_graph_options.sdcard_root_used.lines={ fill: true }
+-web.statistics.1.content.4.ds_graph_options.sdcard_root_used.color="#7777FF"
++web.statistics.1.content.4.name=Disks - boot
++web.statistics.1.content.4.graph.1=sdcard_boot_total
++web.statistics.1.content.4.graph.2=sdcard_boot_used
++web.statistics.1.content.4.ds_graph_options.sdcard_boot_total.label=Size of /boot (MB)
++web.statistics.1.content.4.ds_graph_options.sdcard_boot_total.color="#FF7777"
++web.statistics.1.content.4.ds_graph_options.sdcard_boot_used.label=Used on /boot (MB)
++web.statistics.1.content.4.ds_graph_options.sdcard_boot_used.lines={ fill: true }
++web.statistics.1.content.4.ds_graph_options.sdcard_boot_used.color="#7777FF"
++
++web.statistics.1.content.5.name=Disks - root
++web.statistics.1.content.5.graph.1=sdcard_root_total
++web.statistics.1.content.5.graph.2=sdcard_root_used
++web.statistics.1.content.5.ds_graph_options.sdcard_root_total.label=Size of / (MB)
++web.statistics.1.content.5.ds_graph_options.sdcard_root_total.color="#FF7777"
++web.statistics.1.content.5.ds_graph_options.sdcard_root_used.label=Used on / (MB)
++web.statistics.1.content.5.ds_graph_options.sdcard_root_used.lines={ fill: true }
++web.statistics.1.content.5.ds_graph_options.sdcard_root_used.color="#7777FF"
diff --git a/www-apps/rpi-monitor/files/swap.conf-2.10.patch b/www-apps/rpi-monitor/files/swap.conf-2.10.patch
new file mode 100644
index 00000000..bb3d0d93
--- /dev/null
+++ b/www-apps/rpi-monitor/files/swap.conf-2.10.patch
@@ -0,0 +1,52 @@
+--- rpimonitor/template/swap.conf.dist 2015-03-14 15:22:33.139612000 +0000
++++ rpimonitor/template/swap.conf 2015-03-14 15:25:01.529612000 +0000
+@@ -5,27 +5,35 @@
+ # - swap total - yes - yes
+ # - swap used - yes - yes
+ ########################################################################
+-static.6.name=swap_total
+-static.6.source=/proc/meminfo
+-static.6.regexp=SwapTotal:\s+(\d+)
+-static.6.postprocess=$1/1024
++
++dynamic.7.name=swap_total
++dynamic.7.source=/proc/meminfo
++dynamic.7.regexp=SwapTotal:\s+(\d+)
++dynamic.7.postprocess=$1/1024
++dynamic.7.rrd=GAUGE
+
+ dynamic.8.name=swap_used
+ dynamic.8.source=/proc/meminfo
+ dynamic.8.regexp=SwapFree:\s+(\d+)
+-dynamic.8.postprocess=$this->{'static'}->{'swap_total'} - ($1/1024)
++dynamic.8.postprocess=$this->{'dynamic'}->{'swap_total'} - ($1/1024)
+ dynamic.8.rrd=GAUGE
+
++dynamic.18.name=swappiness
++dynamic.18.source=/proc/sys/vm/swappiness
++dynamic.18.regexp=(.*)
++dynamic.18.postprocess=
++dynamic.18.rrd=
++
+ web.status.1.content.6.name=Swap
+ web.status.1.content.6.icon=swap.png
+-web.status.1.content.6.line.1="Used: <b>"+KMG(data.swap_used,'M')+"</b> (<b>"+Percent(data.swap_used,data.swap_total,'M')+"</b>) Free: <b>"+KMG(data.swap_total-data.swap_used,'M')+ "</b> Total: <b>"+ KMG(data.swap_total,'M') + "</b>"
++web.status.1.content.6.line.1="Used: <b>" + KMG(data.swap_used,'M') + "</b> (<b>" + Percent(data.swap_used,data.swap_total,'M') + "</b>) Free: <b>" + KMG(data.swap_total-data.swap_used,'M') + "</b> Total: <b>" + KMG(data.swap_total,'M') + "</b> Swappiness: <b>" + data.swappiness + "</b>"
+ web.status.1.content.6.line.2=ProgressBar(data.swap_used,data.swap_total)
+
+-web.statistics.1.content.5.name=Swap
+-web.statistics.1.content.5.graph.1=swap_total
+-web.statistics.1.content.5.graph.2=swap_used
+-web.statistics.1.content.5.ds_graph_options.swap_total.label=Swap size (MB)
+-web.statistics.1.content.5.ds_graph_options.swap_total.color="#FF7777"
+-web.statistics.1.content.5.ds_graph_options.swap_used.label=Swap used (MB)
+-web.statistics.1.content.5.ds_graph_options.swap_used.lines={ fill: true }
+-web.statistics.1.content.5.ds_graph_options.swap_used.color="#7777FF"
++web.statistics.1.content.6.name=Swap
++web.statistics.1.content.6.graph.1=swap_total
++web.statistics.1.content.6.graph.2=swap_used
++web.statistics.1.content.6.ds_graph_options.swap_total.label=Swap size (MB)
++web.statistics.1.content.6.ds_graph_options.swap_total.color="#FF7777"
++web.statistics.1.content.6.ds_graph_options.swap_used.label=Swap used (MB)
++web.statistics.1.content.6.ds_graph_options.swap_used.lines={ fill: true }
++web.statistics.1.content.6.ds_graph_options.swap_used.color="#7777FF"
diff --git a/www-apps/rpi-monitor/files/temperature.conf-2.10.patch b/www-apps/rpi-monitor/files/temperature.conf-2.10.patch
new file mode 100644
index 00000000..14442a70
--- /dev/null
+++ b/www-apps/rpi-monitor/files/temperature.conf-2.10.patch
@@ -0,0 +1,33 @@
+--- rpimonitor/template/temperature.conf.dist 2015-03-14 15:10:31.249612000 +0000
++++ rpimonitor/template/temperature.conf 2015-03-14 15:13:36.239612000 +0000
+@@ -4,18 +4,19 @@
+ # Information Status Statistics
+ # - cpu temperature - yes - yes
+ ########################################################################
+-dynamic.12.name=soc_temp
+-dynamic.12.source=/sys/devices/virtual/thermal/thermal_zone0/temp
+-dynamic.12.regexp=(.*)
+-dynamic.12.postprocess=$1/1000
+-dynamic.12.rrd=GAUGE
++
++dynamic.16.name=soc_temp
++dynamic.16.source=/sys/devices/virtual/thermal/thermal_zone0/temp
++dynamic.16.regexp=(.*)
++dynamic.16.postprocess=($1/10)/100
++dynamic.16.rrd=GAUGE
+
+ web.status.1.content.4.name=Temperature
+ web.status.1.content.4.icon=cpu_temp.png
+-#web.status.1.content.4.line.1="CPU Temperature: <b>"+data.soc_temp+"&deg;C</b>"
+-#web.status.1.content.4.line.1=JustGageBar("CPU Temperature", data.soc_temp+"°C", 40, data.soc_temp, 80, 100, 80)
+-web.status.1.content.4.line.1=JustGageBar("Temperature", "°C", 40, data.soc_temp, 80, 100, 80)
++#web.status.1.content.4.line.1="CPU Temperature: <b>" + data.soc_temp + "&deg;C</b>"
++web.status.1.content.4.line.1=JustGageBar("CPU Temperature", data.soc_temp + "°C", 20, data.soc_temp, 80, 100, 80)
++#web.status.1.content.4.line.1=JustGageBar("Temperature", "°C", 20, data.soc_temp, 80, 100, 80)
+
+-web.statistics.1.content.8.name=Temperature
+-web.statistics.1.content.8.graph.1=soc_temp
+-web.statistics.1.content.8.ds_graph_options.soc_temp.label=Core temperature (°C)
++web.statistics.1.content.9.name=Temperature
++web.statistics.1.content.9.graph.1=soc_temp
++web.statistics.1.content.9.ds_graph_options.soc_temp.label=Core temperature (°C)
diff --git a/www-apps/rpi-monitor/files/uptime.conf-2.10.patch b/www-apps/rpi-monitor/files/uptime.conf-2.10.patch
new file mode 100644
index 00000000..f197eb69
--- /dev/null
+++ b/www-apps/rpi-monitor/files/uptime.conf-2.10.patch
@@ -0,0 +1,26 @@
+--- rpimonitor/template/uptime.conf.dist 2015-03-14 14:54:39.439612000 +0000
++++ rpimonitor/template/uptime.conf 2015-03-14 15:03:41.339612000 +0000
+@@ -4,6 +4,7 @@
+ # Information Status Statistics
+ # - uptime - yes - yes
+ ########################################################################
++#
+ dynamic.1.name=uptime
+ dynamic.1.source=/proc/uptime
+ dynamic.1.regexp=(^\S+)
+@@ -12,10 +13,10 @@
+
+ web.status.1.content.2.name=Uptime
+ web.status.1.content.2.icon=uptime.png
+-web.status.1.content.2.line.1='Raspberry Pi time: <b>' + Clock( data.localtime) + "</b>"
++web.status.1.content.2.line.1='Raspberry Pi time: <b>' + Clock(data.localtime) + "</b>"
+ web.status.1.content.2.line.2="Uptime: " + Uptime(data.uptime)
+
+-web.statistics.1.content.7.name=Uptime
+-web.statistics.1.content.7.graph.1=uptime
+-web.statistics.1.content.7.graph_options.yaxis={ min:0, tickFormatter: function (v) { if (v > 86400) return (Math.round(v*10/60/60/24)/10) + " d" ; if (v > 3600) return (Math.round(v*10/60/60)/10) + " h" ; else return v + " s" }, }
+-web.statistics.1.content.7.ds_graph_options.uptime.label=Uptime (s/h/d)
++web.statistics.1.content.8.name=Uptime
++web.statistics.1.content.8.graph.1=uptime
++web.statistics.1.content.8.graph_options.yaxis={ min:0, tickFormatter: function (v) { if (v > 86400) return (Math.round(v*10/60/60/24)/10) + " days" ; if (v > 3600) return (Math.round(v*10/60/60)/10) + " hours" ; else return v + " seconds" }, }
++web.statistics.1.content.8.ds_graph_options.uptime.label=Uptime
diff --git a/www-apps/rpi-monitor/files/version.conf-2.10.patch b/www-apps/rpi-monitor/files/version.conf-2.10.patch
new file mode 100644
index 00000000..a8e423f8
--- /dev/null
+++ b/www-apps/rpi-monitor/files/version.conf-2.10.patch
@@ -0,0 +1,78 @@
+--- rpimonitor/template/version.conf.dist 2015-03-14 14:52:23.219612000 +0000
++++ rpimonitor/template/version.conf 2015-03-14 15:48:29.459612000 +0000
+@@ -9,6 +9,7 @@
+ # - num of pkg upgradable - yes - no
+ # - list of pkg upgradable - yes - no
+ ########################################################################
++
+ static.1.name=distribution
+ static.1.source=/etc/os-release
+ static.1.regexp=PRETTY_NAME.\"(.*)\"
+@@ -20,8 +21,10 @@
+ static.2.postprocess=
+
+ static.3.name=firmware
+-static.3.source=/proc/version
+-static.3.regexp=(#\d+)
++#static.3.source=/proc/version
++#static.3.regexp=(#\d+)
++static.3.source=/usr/bin/strings /boot/start_cd.elf
++static.3.regexp=^VC_BUILD_ID_VERSION:\s+(\S+)
+ static.3.postprocess=
+
+ static.4.name=processor
+@@ -29,22 +32,39 @@
+ static.4.regexp=(?:Processor|model name)\s+: (.*)
+ static.4.postprocess=
+
+-dynamic.1.name=upgrade
+-dynamic.1.source=/var/lib/rpimonitor/updatestatus.txt
+-dynamic.1.regexp=(\d+ upgradable\(s\)|.*&nbsp;.*)
+-dynamic.1.postprocess=
+-dynamic.1.rrd=
+-
+-dynamic.2.name=packages
+-dynamic.2.source=/var/lib/rpimonitor/updatestatus.txt
+-dynamic.2.regexp=^\s+(.*)\s+\d+ upgradable
+-dynamic.2.postprocess=
+-dynamic.2.rrd=
++static.5.name=hardware
++static.5.source=/proc/cpuinfo
++static.5.regexp=Hardware\s+: (.*)
++static.5.postprocess=
++
++static.6.name=revision
++static.6.source=/proc/cpuinfo
++static.6.regexp=Revision\s+: 0*(.*)
++static.6.postprocess=
++
++static.7.name=serial
++static.7.source=/proc/cpuinfo
++static.7.regexp=Serial\s+: (.*)
++static.7.postprocess=
++
++#dynamic.1.name=upgrade
++#dynamic.1.source=/var/lib/rpimonitor/updatestatus.txt
++#dynamic.1.regexp=(\d+ upgradable\(s\)|.*&nbsp;.*)
++#dynamic.1.postprocess=
++#dynamic.1.rrd=
++
++#dynamic.2.name=packages
++#dynamic.2.source=/var/lib/rpimonitor/updatestatus.txt
++#dynamic.2.regexp=^\s+(.*)\s+\d+ upgradable
++#dynamic.2.postprocess=
++#dynamic.2.rrd=
+
+ web.status.1.content.1.name=Version
+ web.status.1.content.1.icon=version.png
+ web.status.1.content.1.line.1='Processor: <b>' + data.processor + '</b>'
+-web.status.1.content.1.line.2='Distribution: <b>'+ data.distribution + '</b>'
+-web.status.1.content.1.line.3='Kernel version: <b>' + data.kernel_version + '</b>'
+-web.status.1.content.1.line.4='Firmware: <b>' + data.firmware + '</b>'
+-web.status.1.content.1.line.5='Package(s): <b>' + data.upgrade + '</b>' + ShowInfo('packages','Package(s) upgradable(s)',data.packages)
++web.status.1.content.1.line.2='Hardware: <b>' + data.hardware + '</b> revision <b>' + data.revision + '</b>'
++web.status.1.content.1.line.3='Serial number: <b>' + data.serial + '</b>'
++web.status.1.content.1.line.4='Distribution: <b>' + data.distribution + '</b>'
++web.status.1.content.1.line.5='Kernel version: <b>' + data.kernel_version + '</b>'
++web.status.1.content.1.line.6='Firmware: <b>' + data.firmware + '</b>'
++#web.status.1.content.1.line.7='Package(s): <b>' + data.upgrade + '</b>' + ShowInfo('packages','Package(s) upgradable(s)',data.packages)