aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Shelton <stuart@shelton.me>2017-08-29 22:27:54 +0100
committerStuart Shelton <stuart@shelton.me>2017-08-29 22:27:54 +0100
commit40b539d69183e78d52726389d3ad66739ccb513c (patch)
tree10413669adae8ec248de58b9f954e7a9e968d39c /www-apps
parentAdd net-fs/samba-4.5.10-r1 (diff)
downloadsrcshelton-40b539d69183e78d52726389d3ad66739ccb513c.tar.gz
srcshelton-40b539d69183e78d52726389d3ad66739ccb513c.tar.bz2
srcshelton-40b539d69183e78d52726389d3ad66739ccb513c.zip
Add www-apps/rpi-monitor-2.12
Diffstat (limited to 'www-apps')
-rw-r--r--www-apps/rpi-monitor/Manifest15
-rw-r--r--www-apps/rpi-monitor/files/2.12/cpu.conf.patch94
-rw-r--r--www-apps/rpi-monitor/files/2.12/daemon.conf.patch107
-rw-r--r--www-apps/rpi-monitor/files/2.12/gentoo.conf.patch723
-rw-r--r--www-apps/rpi-monitor/files/2.12/memory.conf.patch116
-rw-r--r--www-apps/rpi-monitor/files/2.12/network.conf.patch66
-rw-r--r--www-apps/rpi-monitor/files/2.12/rpimonitor.utils.js.patch17
-rw-r--r--www-apps/rpi-monitor/files/2.12/rpimonitord.patch24
-rw-r--r--www-apps/rpi-monitor/files/2.12/sdcard.conf.patch89
-rw-r--r--www-apps/rpi-monitor/files/2.12/swap.conf.patch52
-rw-r--r--www-apps/rpi-monitor/files/2.12/temperature.conf.patch39
-rw-r--r--www-apps/rpi-monitor/files/2.12/top3.html.patch24
-rw-r--r--www-apps/rpi-monitor/files/2.12/uptime.conf.patch26
-rw-r--r--www-apps/rpi-monitor/files/2.12/version.conf.patch78
-rw-r--r--www-apps/rpi-monitor/rpi-monitor-2.12.ebuild197
15 files changed, 1667 insertions, 0 deletions
diff --git a/www-apps/rpi-monitor/Manifest b/www-apps/rpi-monitor/Manifest
index 4302c213..8aef88db 100644
--- a/www-apps/rpi-monitor/Manifest
+++ b/www-apps/rpi-monitor/Manifest
@@ -26,6 +26,19 @@ AUX 2.11/temperature.conf.patch 2011 SHA256 7b735ec5be158e1c1f8b8989d7f70c72da13
AUX 2.11/top3.html.patch 1235 SHA256 31d1f19f6f771d2680339310d95a44eeb6513975b86564a39c5c50278a6ef9c7 SHA512 99232bc74e2d456940796f21937148d0e6e284a8ab2012b835a30f2d2056b84364c531998120b1f78543afc65d62a1d360bf0dd9e8fcaec97fdddd4a230a9839 WHIRLPOOL 3683511565b11606d0ec0d0c9f600ae6186e1ebf6cd7254235b01e8ec6255fa8c4f6f0c63774e933bd602f829fe1e7d85ab5f59a1e98ef94f6a60f02655bc09c
AUX 2.11/uptime.conf.patch 1562 SHA256 ebeef55dd7599904599eda48486ebceacf4bacf307b8946e2e236eaf6f71fe6f SHA512 bb44b1c5ceece3e15769d6aad67d4753643058d0a66af295f55199a0a58cf15382b52e729cdc5b5418dd2f5779dce80cf6fb502962af265ff2832df8e40c7c08 WHIRLPOOL 02168c1d23011ed1961b0d095bd2ae009f23421389887accd4ccfdd77e6be3fdd30761d3a15588f6f01f51cb61455a174381b035b689463a60820fedd077abe0
AUX 2.11/version.conf.patch 2989 SHA256 30bf4ef8388bcf69de46ede78f45cc8208b37a954c5dd5f902ffdf028208e8df SHA512 edb5ecf4cf31ebe95044c725dd68ebbd7ad01a3afdb2ec2d0fa49a17761f077164d71e1a96a34a75d5dcd6193a637acdc37b8bf11ba421619d10127f57a06e27 WHIRLPOOL a818cf409c4d90240ea2191320d42277ebcaf873defa2113b1b0311f0f8477be3b4f66ec1b16eb3328aad69ea5c05f5fd5f4337a3c6f58acd77f9d78f46be6c5
+AUX 2.12/cpu.conf.patch 4386 SHA256 45e64a81774371e896db97d5d1c5dcbae4a859528c1b6bdb0f8977ebf8ca71a4 SHA512 91e4afafbf3583ebe90f0a549fa327e8d1e07819ba27db6705ba61db63e6dbaaeb539b6aeb63fe14d10d17b5a53823776eb43244003bf2cbb2284b63dd4b7b14 WHIRLPOOL 6f6b5a89eeebdc2114d979c9fa1ddad217154143cb41664edf126d3597be3e14241a2daa1a0d3d563fdde15f92209ff4f07a82f8fdcb6a101be5e2b7b8c23270
+AUX 2.12/daemon.conf.patch 3543 SHA256 ede7e24b334e6169b4fe8be50dfe4c9d1aad4ddeebcf7b1ef748aaff1c7e7979 SHA512 d1c0bfab9ff4110fcae09a23f340b840539ababa564c9bb039b6baa488c1d8060df3605c59c043db4513e2f1ecf09196b6bf090f72d3b3ba114a6bad1fd93439 WHIRLPOOL ae9b043d7c273ae2129174b68d52c7e1e343a26b661d6b0e2bdb86f86f88132f25bd13a2e07d294bb6d2becbbbea58c7cecb69d037f97db2cec6b1607f276ec6
+AUX 2.12/gentoo.conf.patch 34034 SHA256 872c201bd3f577a51045c6fd60e31f5a15893de697392145aae1bef13aeda95e SHA512 c38d34cb091a8255a3bfbda653a78061dbcc4081bc442b8e868466bd0a166bfe9a503c2873d2b847dbee801f7884a96f653a30bcfed56e12ab3980bb09511a78 WHIRLPOOL 58ca05014814444d5efd5c9862f510c1d5ea406e1800bdb5f8b39f58d752863b2c72960702b9b1c37fc4d7064f5c7d6e07cefffc306ab8bcf19e6d695c4859c1
+AUX 2.12/memory.conf.patch 6005 SHA256 b503e950aaa67a1dabfbbc3174d04438497cb31bae96410dd00925c1a445f943 SHA512 bcd6acd2be4391fd4649e2a6f78ba291a7c5bd6ab605afcc638f47af47c9394805f029b0fc6a8719672e0565238a7ff80a0e45db66776da455156693a4a24878 WHIRLPOOL 9b4c1c022b0b318a3bb84e7dcb7fc01ea1b97b0bb6e9cdca1530aea9b23b6e825eccb714574ca15371bb5e5dd0c498346597122475472aff7f026f5feaf0a299
+AUX 2.12/network.conf.patch 3843 SHA256 c74ee24342db2eda0b34d0fdaa4043fb51c8653d815405f2c320d906e052725a SHA512 a005fe63f20df5dcc02bf7449feb6baecea9440a0517b3a8beded2982090576d733b7cc4f615e9cb4e3075a81814f78c16b4fcc956d155d61e0f395ff63cda17 WHIRLPOOL 86a884e2686067cc136a36ffb6b44a41493c091bb61fa9f430a9ce945a7c5dc1511b0ada972176c521b294a1c6c00f02cff83afa71f92c7af64a8fa7151629f3
+AUX 2.12/rpimonitor.utils.js.patch 600 SHA256 cf5c8a0d93f064519af0fbfe226bad70ced2bd2bdf4f66595bce4ddc5668f73d SHA512 b76e6c4912fd539b9aabae05ab0b70230992ff71b4c2a4c66319eae9f27a5a90308a11a570093080345190acf1ae3bb50319cbdef36bafd5745187e4af0e7897 WHIRLPOOL c82b45b60db56110f49e3e25092c86621e3cefb986bab26f82256a395a638dcb2790e9baf824316f034268e1860e54ccd7a10320d9201c29c9071cf7ac154a79
+AUX 2.12/rpimonitord.patch 1103 SHA256 6af5603c9c8021833f3d250b3167d88b508801082c41dda7f9f2024be80d4119 SHA512 be43015b727246dc37e35038c79826b930cb7492dd154a1af231e24e078638ead472ddc428754f44a7623dcc8f5f32c58e1ab51ed0cae3a42a75d79237a2e694 WHIRLPOOL d9ae29298fb24750c2327a436541d1bc9ad99cf24c1424e28e51f7fd12d2e2413a4b40bbc2a79a48b846012026877e93d5a8e3e1db786b89f6eb9162f9da305e
+AUX 2.12/sdcard.conf.patch 5095 SHA256 c16ae18753156edb4ab1f97e9e17a138597e908e0871292464bd12e1fca5bc53 SHA512 708a73e40a2c6e240b1109e4e72c23cb378013e9128dbad80e57c99c81fbc0ce7737fc2dcb95260bdccaa1a7fc16e375d0742d477325f5342dde2434d6b055b3 WHIRLPOOL 0c4b14ae04a54a9f880388e4a9f5fe82b8a8f889e92beabf3fad51bb7e2cc3b4588cd540052e6d9bf58d2d2b9f4b3feb44cbe758062ddae4057232b40cffdb36
+AUX 2.12/swap.conf.patch 2697 SHA256 a3f071747bbf33f7385909ef8e196451a7a00c09ee060770975842550f2f0cfd SHA512 cb2362aace30c51371c0a753f5be3aa1a630bc9ea1c48136482fe03f1ce1fb24c37e1bacdddeec391a0075e5b3ce5373f7c93e62c3ca47a2016d5d7529f6c0e9 WHIRLPOOL 9f497fa517859e6742fadf92337c135b4407fbd7e87774b0a70939d2510ce34691ffe825a038d7d77019bd039272ef8bfd15cc0b71985047b41ebd998e9f6c4c
+AUX 2.12/temperature.conf.patch 2011 SHA256 7b735ec5be158e1c1f8b8989d7f70c72da13cbf85d446369f41aad84700f266e SHA512 ea120da6c7a8ffa5f4e93d69492e6b3a82a779a55fd086afc90774458abc41def2bd377999bafd2506842d2b4234d952add725ed749317d4bc11c3d2f5f21023 WHIRLPOOL 6b66909c87e2c0498c8e033758903613704828d6f7a5a7ba97f625b133a09e8dbfbb0eeeea786fa1edaa959ccde60d97895faed3ac84eb5aba3593c7c0585df0
+AUX 2.12/top3.html.patch 1235 SHA256 31d1f19f6f771d2680339310d95a44eeb6513975b86564a39c5c50278a6ef9c7 SHA512 99232bc74e2d456940796f21937148d0e6e284a8ab2012b835a30f2d2056b84364c531998120b1f78543afc65d62a1d360bf0dd9e8fcaec97fdddd4a230a9839 WHIRLPOOL 3683511565b11606d0ec0d0c9f600ae6186e1ebf6cd7254235b01e8ec6255fa8c4f6f0c63774e933bd602f829fe1e7d85ab5f59a1e98ef94f6a60f02655bc09c
+AUX 2.12/uptime.conf.patch 1562 SHA256 ebeef55dd7599904599eda48486ebceacf4bacf307b8946e2e236eaf6f71fe6f SHA512 bb44b1c5ceece3e15769d6aad67d4753643058d0a66af295f55199a0a58cf15382b52e729cdc5b5418dd2f5779dce80cf6fb502962af265ff2832df8e40c7c08 WHIRLPOOL 02168c1d23011ed1961b0d095bd2ae009f23421389887accd4ccfdd77e6be3fdd30761d3a15588f6f01f51cb61455a174381b035b689463a60820fedd077abe0
+AUX 2.12/version.conf.patch 2989 SHA256 30bf4ef8388bcf69de46ede78f45cc8208b37a954c5dd5f902ffdf028208e8df SHA512 edb5ecf4cf31ebe95044c725dd68ebbd7ad01a3afdb2ec2d0fa49a17761f077164d71e1a96a34a75d5dcd6193a637acdc37b8bf11ba421619d10127f57a06e27 WHIRLPOOL a818cf409c4d90240ea2191320d42277ebcaf873defa2113b1b0311f0f8477be3b4f66ec1b16eb3328aad69ea5c05f5fd5f4337a3c6f58acd77f9d78f46be6c5
AUX battery.conf 1757 SHA256 b7ca087370b2a8d59eceb8a546df7680ab94c0940e67d34dbb92a6ef8b3198cb SHA512 1f859cfea3e44105c4e26d89368d8cdf84d35db0bb9bbfb3ba3cea0e63bbc1cf1d218e4d12f3c871073acb6fa8d2d10e0022791050bc87d3985b59ca273dfdfd WHIRLPOOL fe404fe64af120e02f852fe73b6eb32dbe9b5e133240c43994c3d0947794ab36cf013031d1467af1fe0fce4aaf40b0011d028128cd5ccc4f6495b36c4b04fd3d
AUX default.conf-2.2.patch 24352 SHA256 f4eb0086d55cdda1889073bd8894f7bf203d997d15eff4170e1ff22b23f71094 SHA512 1ea81937d8c6a2b39aab951f4cb4fd3c0a6c9d63d2147ff0aff249a543efb3f574841c8d320fe88d463cdec8c1424f9abf3b8ceb018135d9d5d034c29e682f20 WHIRLPOOL b356e732c26eed507b06fa80d333d83425a93d51a20ad935f7fbcf9de2124010d4e2ddbee37da21ddfd4d9990335aa54db6e65d9825e7ac769bb4118824df849
AUX default.conf-2.3.patch 24271 SHA256 a6a890f808e57815fee2c2c513c8c423697d9744a56bad4a530994872ccf4ea8 SHA512 cdeef3311411c5110ea4c12c33253104f7edde4a9405212c4236dcb3cd61304ce5fded8ddb534be33f5559172c1af3236138b2d36a6128b98b53a6a5354affcc WHIRLPOOL 4763fd2d5d6620a30993852615f22a6b4dcae10967e681ba661fa3f5a6e41e6721f21b0497441058a65cd0b9f4f01c0e8b2a04560f637e9644dbe3bc37026544
@@ -35,6 +48,7 @@ AUX rpimonitor.confd 110 SHA256 2aec673afcf21a82b9bcfd7f686ae418d7f8246d1cf376fa
AUX rpimonitor.initd 1143 SHA256 79a7d2369624fcd719d21ec1906ba8d0bf2c96e5a290aedd4c5865cb104f6a9b SHA512 337164deca9ecb0fa7be33dda86e1acb03dcde31d14a4cc7686637db0c6684da884e4603c84eaf8a842981e0e78bf2639963e975f0356718f9e0bcdbb8961912 WHIRLPOOL 3ff93046d8851fe16c6e41834fd27a5d96fff908b4935abe328bb622a2504e7e5c3bbbd805c45579a29350b33f19f8ff36b5f8a23cc373311b4c8e89f6e38f79
DIST rpi-monitor-2.10.tar.gz 518203 SHA256 e081ffd1439c6f490a74b96097c715d00eee85d457ae96e5058990b16c7a4d97 SHA512 c18451018da65de81c5d3fd413c9d8f813fb32745f5b7481dabebba517f3f8eddde4e0813d6a3dfedbee299367ab5c6cc6bf06fe7a4530effd4c57e91f2f1f48 WHIRLPOOL 575ef01807a41dfbec802353b6399551275e3e72e83042b3e2cd567d613f15c80420f6f2c3fb2512521fb9cd90760e52accf1f610a3d98b79936841637c4894f
DIST rpi-monitor-2.11.tar.gz 1351776 SHA256 b1bc7617a0e5fae6f0376bd20c92f21383f9be7982ddad079994a587c51dcb59 SHA512 d816e39c7df25466776c6f74fb73d95bbf61173228ef1dcb226e791af6dcc278faf817d765a64ef949f11b1525b52d51195ca9be3486bbdccc95c67bbe189d6d WHIRLPOOL aceb7b6212550f1b09d7b602712dfa8cc8ed72aa318bb719b7a5f8adb6d476381c64df5d8d15acbee61567e1a5b08dabebf47b0442261e950b363ee7f2eed317
+DIST rpi-monitor-2.12.tar.gz 1356184 SHA256 797336ebd7abbf0e635e1fbae9df6fb485112cfd916073f9b46330d7ad4636b9 SHA512 a70af29408a2cc432ded3062477e6c4093cf477c347677e0d9d5e69c02b78843c8d7ed387178dff146c393cebb665ddd2c91d137d900eb17bb2bde3401c955f6 WHIRLPOOL 72f8c3e397f7bd88eac5b10b91c14071020ab3048bf5d12f00f15ab901296088c8f35cf5b225b1c5b9712ff4888aad03202de8edabd39dcc0b0f4876558c3c07
DIST rpi-monitor-2.2.zip 292550 SHA256 193ff7292a2cc56118ca784c05ff6bbfcfed867b75039983243e68a967156ea8 SHA512 a1f2861833434726b59a475d4ba59b1c4d1665c3c70b332981781bce708f332c42b40401d95f947f9ab696695540df8b5bdcccb76dd0b995c4656804ca173caa WHIRLPOOL f30b8ad2b6b34e7574376bc8cec22abe555c211907fafcd56f467274a13233c16252a0a602b5ca2833914b1d83790161d7384aa23d50d42ec1fb2364930d143b
DIST rpi-monitor-2.3.zip 292742 SHA256 b1968cab36504110b2ae00d9fe02e3bb60709c066499a9bd08ae13f7db07d827 SHA512 dd41b664f00a8357391d4f8a76b4d840a1464c951764cd59e6727c45e89913fec934a093a5dcc7b897ab7425075b297971913dc1ff40f7f6ed3fa2282e9ae06a WHIRLPOOL c0dcb80c9282ab6dd57fda06fe3d6ee739ed10a43e85583a98975f3e74f9783bcadb5feaf2c1db2b85cf4907f4a4e7edbfddc20201f6cb0f1b4cf75fbe9a3251
DIST rpi-monitor-2.5.1.zip 303264 SHA256 390e1971a71d9adae3ea285c2777f83075fc6e76cb7f17f83a76d916a9af46d3 SHA512 e56ac2231dcf94f20ae16727b4259c2d30aed5672fc618f5e8acd56506054accd6b839379eeba6b34b190d797e54dbef1078931e42cf3c2ecf76ee3bc589d648 WHIRLPOOL ff7413aa4a1e9ab84330d77189ee0629cc1499f8d9423294914968d20511e48d06289e1408adf93d386d82e37d5e262ee0750d66bf7c7e69ca4cf26adb22162f
@@ -48,6 +62,7 @@ DIST rpi-monitor-deb-2.5.zip 2940038 SHA256 a71d2bc27a554d60031c676bb4621e009474
DIST rpi-monitor-deb-2.6.zip 3487502 SHA256 444ffc4dbca9edc01319c20362127bf10cf0fcafca07d7d4ba05ceb4a81d57e7 SHA512 6f597a35396f63328885284531d766a0fda25f40b80aefa32592a1ecadb0f1177c4888ce5b03b5310946da0c2f1e78d736d9e20f30983fc5834de7e567ff6adc WHIRLPOOL 1fe314b876cb80deab4cae0c4e006c9ad6025450b87fa5b7c8d069939d2ec992064c25f46909ef93aa099289a3a359d12e90ecbf0e54d1d44ab316ea06a00579
EBUILD rpi-monitor-2.10.ebuild 6427 SHA256 5b7bfbc74a56729f7da8f1705628d39615859ff47382dd8d502d6f594dce0bbf SHA512 630e21fa393bd49f5f1c2d680bf419d679c30f8876a32988b70ea97db3e0698fe18672df69b8cd171caf912ae93795c0f2e62a2bc23c9081678efefa1cd2a278 WHIRLPOOL a7c02c4eda1485e56fafd6ddeeccbda5a6e91c859ad66f1c745c2aaba13a1e1f4ac40e44a7b2a3a5eca6aa3233c9c525ad0ae34cb1c2626253b0373e3c96f9de
EBUILD rpi-monitor-2.11.ebuild 6836 SHA256 67b4dbedc0fa10c87393d70d221effa19cc72d65586d2be733b108aaa208d25b SHA512 9091ff5dcdbdf8357ce97b8f075707201f696b15bf00262bc1b328ac06c2d2d9211f3d5e32f3564c5676c8e4d21a481b0a057a57e45a9288846ae1bc46b954bb WHIRLPOOL fb5a8cd414055993060aa73830a92af94d401cd03e23757f104fa06df4563719fc1ca40f7f7f9bf84a1fb80711b2ac13347215ca855e2faa6c3e092efd304ced
+EBUILD rpi-monitor-2.12.ebuild 6836 SHA256 67b4dbedc0fa10c87393d70d221effa19cc72d65586d2be733b108aaa208d25b SHA512 9091ff5dcdbdf8357ce97b8f075707201f696b15bf00262bc1b328ac06c2d2d9211f3d5e32f3564c5676c8e4d21a481b0a057a57e45a9288846ae1bc46b954bb WHIRLPOOL fb5a8cd414055993060aa73830a92af94d401cd03e23757f104fa06df4563719fc1ca40f7f7f9bf84a1fb80711b2ac13347215ca855e2faa6c3e092efd304ced
EBUILD rpi-monitor-2.2.ebuild 3410 SHA256 273296b8186f1739aaf298c628a8adde6b07b4de8146e3d30bfc00640cdf006d SHA512 c819303a8fcfe84ec8d4102d71c48ae871c8c7351216bb0a8812503de947f55fdb85b03189fb12d35a3af1bde5ac33adda646ce68e62b66eb08fb6c130a59e30 WHIRLPOOL b27ad509c95221e1a5638b102fc16e06db8823517e211dac9ba01a8bbfb3600658bf68bbc8eb79b94238bf205d3f8907b36fc98d670afed4b510f6009a5bd135
EBUILD rpi-monitor-2.3.ebuild 3410 SHA256 273296b8186f1739aaf298c628a8adde6b07b4de8146e3d30bfc00640cdf006d SHA512 c819303a8fcfe84ec8d4102d71c48ae871c8c7351216bb0a8812503de947f55fdb85b03189fb12d35a3af1bde5ac33adda646ce68e62b66eb08fb6c130a59e30 WHIRLPOOL b27ad509c95221e1a5638b102fc16e06db8823517e211dac9ba01a8bbfb3600658bf68bbc8eb79b94238bf205d3f8907b36fc98d670afed4b510f6009a5bd135
EBUILD rpi-monitor-2.5.1.ebuild 4971 SHA256 afb63f08e88e2ce7f5bd2240813637e3691fc76a395a1d5252bc33e1183ded3c SHA512 6ddfa73c252f38178ac2f2fb6801df93d1f203d18f0debdbd7f62df399291405edfddc36ed1431fb88b73c14af31d8932fc645e78259cd29bc82caf966a03eef WHIRLPOOL dce810d7d7843b03dbc6ef70ac25c1cc71b42f73ed7e6fa68bb28802cdb4dcc1867b76f4963ad4295c9db8f95588cfd96322b567de70da292a57ca126536c668
diff --git a/www-apps/rpi-monitor/files/2.12/cpu.conf.patch b/www-apps/rpi-monitor/files/2.12/cpu.conf.patch
new file mode 100644
index 00000000..2bd02c6f
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/cpu.conf.patch
@@ -0,0 +1,94 @@
+--- src/etc/rpimonitor/template/cpu.conf.dist 2016-08-23 20:11:00.603785424 +0100
++++ src/etc/rpimonitor/template/cpu.conf 2016-08-23 20:24:22.135113789 +0100
+@@ -7,47 +7,55 @@
+ # - 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.source=vcgencmd measure_clock arm
++dynamic.2.regexp=frequency\(45\)=(\d+)
++dynamic.2.postprocess=sprintf('%.0f',($1/1000000))
++dynamic.2.rrd=GAUGE
++
++dynamic.3.name=cpu_voltage
++dynamic.3.source=/usr/sbin/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
+
+-static.9.name=max_proc
+-static.9.source=nproc
+-static.9.regexp=(.*)
+-static.9.postprocess=$1 + 1
+-
+-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, data.max_proc, 100, 80)+" "+JustGageBar("Load", "5min", 0, data.load5, data.max_proc, 100, 80)+" "+JustGageBar("Load", "15min", 0, data.load15, data.max_proc, 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
++static.12.name=max_proc
++static.12.source=nproc
++static.12.regexp=(.*)
++static.12.postprocess=$1 + 1
++
++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, data.max_proc, 100, 80) + " " + JustGageBar("Load", "5 min", 0, data.load5, data.max_proc, 100, 80) + " " + JustGageBar("Load", "15 min", 0, data.load15, data.max_proc, 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.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/2.12/daemon.conf.patch b/www-apps/rpi-monitor/files/2.12/daemon.conf.patch
new file mode 100644
index 00000000..6d51ae22
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/daemon.conf.patch
@@ -0,0 +1,107 @@
+--- a/src/etc/rpimonitor/daemon.conf
++++ b/src/etc/rpimonitor/daemon.conf
+@@ -1,61 +1,55 @@
+-########################################################################
+-# Daemon configuration
++##############################################################################
+ #
+-# Section 'daemon' is defining the behavior of rpimonitord. It defines
+-# if embedded server should be started and its configuration.
++# rpimonitord embedded server 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 change the default delay, all rrd files will
++# erased and recreated when the server next restarts
+ #daemon.delay=10
+-#
+-# daemon.timeout=10
+-# Define the maximul duration of KPI extraction (default:5)
++
++# Maximum duration of statistic extraction phase
+ #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
++
++# Set to '1' to prevent rpimonitor from starting its built-in web-server
++#
++# Note: A symbolic link from /var/lib/rpi-monitor/stat to
++# /usr/share/rpi-monitor/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)
++
++# 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 specified 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 specified 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.logfile=/var/log/rpimonitor
+-# Define directory where logs are stored (Default:/var/log/rpimonitor)
+-# daemon.logfile=/var/log/rpimonitor
+-#
+-# daemon.shellinabox=https://0.0.0.0:4200/
+-# Define shellinabox address (Default: calculated automatically based on http request)
++
++# Log directory
++#daemon.logfile=/var/log/rpimonitor
++
++# shellinabox bind address
++#
++# Default: calculated automatically based on access
+ #daemon.shellinabox=https://127.0.0.1:4200/
diff --git a/www-apps/rpi-monitor/files/2.12/gentoo.conf.patch b/www-apps/rpi-monitor/files/2.12/gentoo.conf.patch
new file mode 100644
index 00000000..ed13a4fb
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/gentoo.conf.patch
@@ -0,0 +1,723 @@
+--- src/etc/rpimonitor/template/gentoo.conf
++++ src/etc/rpimonitor/template/gentoo.conf
+@@ -1,288 +1,288 @@
+ ########################################################################
+ #
+-# Key Performance Indicators (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.
+-# Note: In <data source> it is possible to refer to another <data name>
+-# with the prefix 'data.' followed by <data name>: 'data.<data name>'
+-# Example: 'data.kernel_version'
+-# This data could refer to dynamic or static KPI. The order of KPI
+-# extraction is important. Data used should already been extracted.
+-#
+-# 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.
++# rpimonitord to read the content of <executable>.1.graph.
+ #
+-# 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>
++# Is is also possible to refer to another static data item by name
++# simply by prefixing the previously-declared <data name> with 'data.',
++# e.g. 'data.kernel_version' refers to the value of the item with
++# 'static.<id>.name=kernel_version'.
++# Data must be defined before it is referenced - ordering is
++# significant.
++#
++# 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.
+ #
+-# Each dynamic KPI is defined by an id and with 5 parameters
++# static.<static data id>.postprocess=<data postprocess>
++# <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 at least 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.
+-#
+-# 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 (cf. swap.conf).
++# <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.
+ #
+ # dynamic.<dynamic data id>.interval=<interval>
+-# rpimonitors extracts data every "daemon.delay" seconds. <interval>
+-# define how many loop have to be waited before extracting this data.
+-# Default value is 1. This means that data is extracted at every loop.
+-#
+-# dynamic.<dynamic data id>.default=<default>
+-# If rpimonitor can't extract information, it is now possible to define
+-# a <default> value which will be set for the KPI.
++# Extract data for the specified item once in every <interval>
++# iterations, determined by 'daemon.delay' as above.
++# If not specified, the interval defaults to '1', to gather data on
++# every run.
++#
++# dynamic.<dynamic data id>.default=<value>
++# Optional default value to substitute if data extraction fails.
++#
++# dynamic.<dynamic data id>.min=<minimum acceptable value>
++# dynamic.<dynamic data id>.max=<maximum acceptable value>
++# Optionally, set a range outside of which values will be registered
++# as 'unknown' in their RRD.
++# These limits are useful to handle counters that can reduce to 0
++# when they reach their limit (such as network graphs)
+ #
+-# 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=<maximal 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.
++# 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>.link=<URL>
+ #
+-# web.friends.<id>.name=<display name>
+-# <display name> is the name printed into the drop down menu
++# 'friends' are intended 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 interface status pages
+ #
+-# 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>.
++# 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 formula> 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>
++# <condition 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>.name=<display name>
+-# <display name> Name displayed as title of the strip
++# web.status.<page id>.content.<status id>.line.<line number>=<expression js>
++# <line number> 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 Unix time <seconds> in the following format:
++# XX year XX days XX hours XX minutes XX seconds;
++#
++# Pad( value )
++# Add a prefix '0' to any <value> less than 10;
++#
++# KMG( value, unit )
++# Output <value> in units of "kilo", "mega", "giga", or "peta".
++# <unit> 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 semi-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 to draw 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
++# 'percentColors' array;
++# <warning> - Gauge level as a percentage to render in
++# the second colour of <levelColors>,
++# defaults to 33;
++# <critical> - Gauge level as a percentage to render in
++# the third colour of <levelColors>,
++# defaults to 66;
++#
++# Plural( value )
++# Output "s " if <value> is greater than one, or " " otherwise;
++#
++# 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 )
++# Insert raw HTML within a page;
++# (See 'top3' for an example showing the process with the 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.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>.
++# Web interface statistics pages
++#
++# 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 to be 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 the 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>, above,
++# <label> is the display-name for 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 for ds_graph_options,
++# see the following link for details:
++# http://javascriptrrd.sourceforge.net/docs/javascriptrrd_v0.5.0/doc/lib/rrdFlot_js.html
+ #
+-# 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.
++# rpimonitord must be restarted when this file is updated.
+ #
+-#######################################################################
++########################################################################
+ #
+ # Alert management
+ #
+-# RPi-Monitor is able to detect if value exceed a defined value or come back
+-# to the normal.
++# RPi-Monitor is able to react if a the value associated with a
++# monitored item crosses a specified threshold.
+ #
+-# Alert/Cancel are sent only when the state is stable to avoid messages
+-# flooding when limit is about to be exceeded as shown in schema bellow:
++# Raise and Cancel commands are only triggered when a steady-state is
++# reached, to avoid instability during transitions:
+ #
+-# send alert
++# Raise
+ # ^
+ # th th <------dh------>| th
+-# _____ __________________|______ _______ send cancel
++# _____ __________________|______ _______ Cancel
+ # | | | | | | ^
+ # | | | | | | |
+ # __| |___| |___| |______________|_____
+@@ -290,65 +290,69 @@
+ # |------------------------------|
+ # Alert is raised
+ #
+-# If alert is still active after resend period, alerte is sent again:
++# If the condition is still asserted after a cool-off period, the Raise
++# command may be triggered again:
+ #
+-# send alert resend alert
+-# ^ ^
+-# th <-----dh------>|<--------------------------------------------->|
+-# __________________|_______________________________________________|_____
++# Raise Raise
++# ^ ^
++# th <-----dh------>|<------------------------------------->|
++# __________________|_______________________________________|_____
+ # |
+ # |
+ # ____|
+ # tl
+-# |----------------------------------------------------->
++# |--------------------------------------------->
+ # Alert is raised
+ #
+ #
+-# Each alert is identified by its <alert name>. Alert configuration is
+-# performed as follow:
++# Each alert is identified by an <alert name>. Alerts are configured
++# as follows:
+ #
+-# alert.<alert name>.active=<activation condition>
+-# <activation condition> defines the alert pre-condition. If this formula
+-# returns false, the trigger will not be checked. Default value is 1.
+-# This command could refer to KPI using keyword 'data.<kpi>'
+-#
+-# alert.<alert name>.kpi=<trigger>
+-# <trigger> is defining the formula to evaluate. If formula returns true, the
+-# alert is detected. This command should refer to KPI using keyword 'data.<kpi>'
+-#
+-# alert.<alert name>.maxalertduration=<duration before raise>
+-# The alert will be dectected immediatly but alert raised commande will
+-# be executed only afer a defined <duration before raise> in seconds
+-# ('dh' in the upper schema)
+-#
+-# alert.<alert name>.cancelvalidation=<duration before cancel>
+-# As for alert raising, cancellation command will be executed only after
+-# <duration before cancel> seconds ('dl' in the upper schema)
++# alert.<alert name>.active=<condition>
++# <condition> defines the alert's pre-condition. If this expression
++# returns false, the trigger will not be activated.
++# Defaults to '1', causing all alerts to become active immediately.
++# Metrics in the 'data' object may be referenced.
++#
++# alert.<alert name>.kpi=<trigger expression>
++# <trigger expression> causes the alert to assert if it evaluates to
++# true.
++# Metrics in the 'data' object may be referenced.
++#
++# alert.<alert name>.maxalertduration=<delay before Raise>
++# Once the alert is asserted, wait for this period of time
++# (in seconds) before triggering the Raise command - 'dh' in the
++# above diagram.
++#
++# alert.<alert name>.cancelvalidation=<delay before Cancel>
++# Once the alert is deasserted, wait for this period of time
++# (in seconds) before triggering the Cancel command - 'dl' in the
++# above diagram.
+ #
+ # alert.<alert name>.resendperiod=<period>
+-# If alert is still active after <period> seconds, the raise command
+-# will be executed again.
++# If the alert is still active after <period> seconds, the Raise
++# command will be executed again.
++#
++# alert.<alert name>.raisecommand=<command>
++# Execute the specified command when the alert is asserted.
++# Metrics in the 'data' object may be referenced.
++#
++# alert.<alert name>.cancelcommand=<command>
++# Execute the specified command when the alert is deasserted.
++# Metrics in the 'data' object may be referenced.
+ #
+-# alert.<alert name>.raisecommand=<Raise Command>
+-# <Raise Command>> is the command to executed when an alert is raised.
+-# This command could refer to KPI using keyword 'data.<kpi>'
+-#
+-# alert.<alert name>.cancelcommand=<Cancel Command>
+-# <Cancel Command> is the command to executed when an alert is canceled
+-# This command could refer to KPI using keyword 'data.<kpi>'
+-#
+-#######################################################################
+-
+-#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
+@@ -357,46 +361,49 @@ web.statistics.1.name=Raspberry Pi
+
+ 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/example.alert.conf
+-#include=/etc/rpimonitor/template/example.interval.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
+-#include=/etc/rpimonitor/template/entropy.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=/usr/share/doc/rpi-monitor-2.11/example.justgage.conf
++#include=/usr/share/doc/rpi-monitor-2.11/example.badge_and_label.conf
++#include=/usr/share/doc/rpi-monitor-2.11/example.progressbar.conf
++#include=/usr/share/doc/rpi-monitor-2.11/example.visibility.conf
++#include=/usr/share/doc/rpi-monitor-2.11/example.alert.conf
++#include=/usr/share/doc/rpi-monitor-2.11/example.interval.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
++#include=/etc/rpimonitord.conf.d/battery.conf
++
++# Further real-world examples:
++#include=/usr/share/doc/rpi-monitor-2.11/printer.conf
++#include=/usr/share/doc/rpi-monitor-2.11/storage.conf
++#include=/usr/share/doc/rpi-monitor-2.11/services.conf
++#include=/usr/share/doc/rpi-monitor-2.11/wlan.conf
++#include=/usr/share/doc/rpi-monitor-2.11/dht11.conf
++#include=/usr/share/doc/rpi-monitor-2.11/entropy.conf
diff --git a/www-apps/rpi-monitor/files/2.12/memory.conf.patch b/www-apps/rpi-monitor/files/2.12/memory.conf.patch
new file mode 100644
index 00000000..85c13e90
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/memory.conf.patch
@@ -0,0 +1,116 @@
+--- src/etc/rpimonitor/template/memory.conf.dist 2015-03-14 15:13:47.409612000 +0000
++++ src/etc/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=/usr/sbin/vcgencmd get_mem arm
++dynamic.9.regexp=^.*=(\d+)M$
++dynamic.9.postprocess=
+ dynamic.9.rrd=GAUGE
+
+-dynamic.15.name=memory_available
+-dynamic.15.source=/proc/meminfo
+-dynamic.15.regexp=MemAvailable:\s+(\d+)
+-dynamic.15.postprocess=$1/1024
+-dynamic.15.rrd=GAUGE
++dynamic.10.name=memory_gpu
++dynamic.10.source=/usr/sbin/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=/usr/bin/free -k
++dynamic.12.regexp=^Mem:\s+\d+\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s*$
++dynamic.12.postprocess=$1/1024
++dynamic.12.rrd=GAUGE
++
++dynamic.13.name=memory_available
++dynamic.13.source=/proc/meminfo
++dynamic.13.regexp=MemAvailable:\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/2.12/network.conf.patch b/www-apps/rpi-monitor/files/2.12/network.conf.patch
new file mode 100644
index 00000000..a59aa588
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/network.conf.patch
@@ -0,0 +1,66 @@
+--- a/src/etc/rpimonitor/template/network.conf
++++ b/src/etc/rpimonitor/template/network.conf
+@@ -5,38 +5,35 @@
+ # - recieved - yes - yes
+ # - send - yes - yes
+ #
+-# Note: Replace 'eth0' in the configuration bellow by the name of your
+-# network interface and uncomment the line according to your needs
++# Note: Replace 'ef0' in the configuration entries below with the name
++# of this host's network interface(s)
+ ########################################################################
+
+-#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.14.name=net_received
++dynamic.14.source=/sys/class/net/ef0/statistics/rx_bytes
++dynamic.14.regexp=(.*)
++dynamic.14.postprocess=$1*-1
++dynamic.14.rrd=DERIVE
++dynamic.14.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.15.name=net_send
++dynamic.15.source=/sys/class/net/ef0/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="To activate network monitoring, edit and customize <font color='#AA0000'><b>network.conf</b></font>"
+-web.status.1.content.8.line.2="Help is available in man pages:"
+-web.status.1.content.8.line.3="<font color='#AA0000'><b>man rpimonitord</b></font> or <font color='#AA0000'><b>man rpimonitord.conf</b></font>"
+-#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.7ds_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/2.12/rpimonitor.utils.js.patch b/www-apps/rpi-monitor/files/2.12/rpimonitor.utils.js.patch
new file mode 100644
index 00000000..be2354f7
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/rpimonitor.utils.js.patch
@@ -0,0 +1,17 @@
+--- src/usr/share/rpimonitor/web/js/rpimonitor.utils.js.dist 2016-04-05 23:07:58.289840545 +0100
++++ src/usr/share/rpimonitor/web/js/rpimonitor.utils.js 2016-04-05 23:11:16.037918553 +0100
+@@ -73,7 +73,13 @@ function KMG(value, initPre){
+ }
+
+ function Percent(value,total){
+- return (100*value/total).toFixed(2)+"%";
++ // For graphs and reports, it's better for the result of dividing by zero
++ // to be zero rather than NaN...
++ var percent = 0
++ if (total != 0 ) {
++ percent = 100*value/total
++ }
++ return percent.toFixed(2)+"%";
+ }
+
+ function ProgressBar(value, max, warning, danger){
diff --git a/www-apps/rpi-monitor/files/2.12/rpimonitord.patch b/www-apps/rpi-monitor/files/2.12/rpimonitord.patch
new file mode 100644
index 00000000..26e08d09
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/rpimonitord.patch
@@ -0,0 +1,24 @@
+--- src/usr/bin/rpimonitord
++++ src/usr/bin/rpimonitord
+@@ -79,9 +79,9 @@
+ my ($path,$file) = /(.*)\/([^\/]*)$/;
+
+ # Add default configuration file if not already defined by command line
+- if ( !@{$this->{'daemon'}->{'confFiles'}} ) {
+- 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'}} ) {
+@@ -177,7 +177,7 @@ sub LoadFile
+ $this->Debug(3,"Loading file: $confFile");
+
+ open ( FILE, $confFile)
+- or die "Error while openning configuration file \"$confFile\" because $!\n";
++ or die "Error while opening configuration file \"$confFile\" because $!\n";
+ while (<FILE>){
+ chomp;
+ /^\s*#|^$/ and next; # Ignore comments
diff --git a/www-apps/rpi-monitor/files/2.12/sdcard.conf.patch b/www-apps/rpi-monitor/files/2.12/sdcard.conf.patch
new file mode 100644
index 00000000..08112f17
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/sdcard.conf.patch
@@ -0,0 +1,89 @@
+--- src/etc/rpimonitor/template/sdcard.conf.dist 2015-03-14 15:25:17.659612000 +0000
++++ src/etc/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/2.12/swap.conf.patch b/www-apps/rpi-monitor/files/2.12/swap.conf.patch
new file mode 100644
index 00000000..7c3a8c00
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/swap.conf.patch
@@ -0,0 +1,52 @@
+--- src/etc/rpimonitor/template/swap.conf.dist 2015-03-14 15:22:33.139612000 +0000
++++ src/etc/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/2.12/temperature.conf.patch b/www-apps/rpi-monitor/files/2.12/temperature.conf.patch
new file mode 100644
index 00000000..b7e9db3b
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/temperature.conf.patch
@@ -0,0 +1,39 @@
+--- src/etc/rpimonitor/template/temperature.conf
++++ src/etc/rpimonitor/template/temperature.conf
+@@ -4,22 +4,22 @@
+ # Information Status Statistics
+ # - cpu temperature - yes - yes
+ #
+-# Note: Rounding temperatures to two digits is done with the
+-# post-processiing formula: sprintf("%.2f", $1/1000)
+-# It is possible to roud to 1 digit with sprintf("%.1f", $1/1000)
++# N.B.: sprintf() may be used in postprocessing expressions in order to
++# round results to a certain number of digits.
+ ########################################################################
+-dynamic.12.name=soc_temp
+-dynamic.12.source=/sys/devices/virtual/thermal/thermal_zone0/temp
+-dynamic.12.regexp=(.*)
+-dynamic.12.postprocess=sprintf("%.2f", $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=sprintf("%.2f", $1/1000)
++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/2.12/top3.html.patch b/www-apps/rpi-monitor/files/2.12/top3.html.patch
new file mode 100644
index 00000000..ae5d5fbd
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/top3.html.patch
@@ -0,0 +1,24 @@
+--- src/usr/share/rpimonitor/web/addons/top3/top3.html.dist 2016-08-16 23:06:56.000000000 +0100
++++ src/usr/share/rpimonitor/web/addons/top3/top3.html 2016-05-18 23:44:56.279889987 +0100
+@@ -9,16 +9,15 @@
+ <h3 class="panel-title">Top3 addons</h3>
+ </div>
+ <div class="panel-body">
+- <b>Top3</b> is design show the 3 process consuming the CPU time of
+- CPU in addition to cunsumption of <code>rpimonitord</code> process.<br>
++ <b>Top3</b> is designed to show the 3 processes consuming the most CPU time
++ in addition to the load due to the <code>rpimonitord</code> process.<br>
+ <br>
+- To activate this addon, copy <code>/usr/share/rpimonitor/web/addons/top3/top3.cron</code>
++ To activate this addon, copy <code>/usr/share/rpi-monitor/addons/top3/top3.cron</code>
+ to <code>/etc/cron.d/top3</code>.<br>
+ <br>
+- Adding the top3 information into status page can be done by uncommenting
+- the following line into <code>cpu.conf</code><br>
++ Adding the top3 information into the status page can be done by uncommenting
++ the following line in <code>cpu.conf</code><br>
+ <code>#web.status.1.content.1.line.4=InsertHTML("/addons/top3/top3.html")</code>
+ </div>
+ </body>
+ </html>
+-
diff --git a/www-apps/rpi-monitor/files/2.12/uptime.conf.patch b/www-apps/rpi-monitor/files/2.12/uptime.conf.patch
new file mode 100644
index 00000000..72ae59c7
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/uptime.conf.patch
@@ -0,0 +1,26 @@
+--- src/etc/rpimonitor/template/uptime.conf.dist 2015-03-14 14:54:39.439612000 +0000
++++ src/etc/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/2.12/version.conf.patch b/www-apps/rpi-monitor/files/2.12/version.conf.patch
new file mode 100644
index 00000000..669d9d19
--- /dev/null
+++ b/www-apps/rpi-monitor/files/2.12/version.conf.patch
@@ -0,0 +1,78 @@
+--- src/etc/rpimonitor/template/version.conf.dist 2015-03-14 14:52:23.219612000 +0000
++++ src/etc/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/rpi-monitor/updatestatus.txt
++#dynamic.1.regexp=(\d+ upgradable\(s\)|.*&nbsp;.*)
++#dynamic.1.postprocess=
++#dynamic.1.rrd=
++
++#dynamic.2.name=packages
++#dynamic.2.source=/var/lib/rpi-monitor/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)
diff --git a/www-apps/rpi-monitor/rpi-monitor-2.12.ebuild b/www-apps/rpi-monitor/rpi-monitor-2.12.ebuild
new file mode 100644
index 00000000..db717ecc
--- /dev/null
+++ b/www-apps/rpi-monitor/rpi-monitor-2.12.ebuild
@@ -0,0 +1,197 @@
+# Copyright (c) 2016 Stuart Shelton <stuart@shelton.me>
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="5"
+
+inherit eutils webapp
+
+DESCRIPTION="RPi-Monitor - always keep an eye on your Raspberry Pi"
+HOMEPAGE="http://rpi-experiences.blogspot.fr"
+SRC_URI="https://github.com/XavierBerger/RPi-Monitor/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+RESTRICT="nomirror"
+
+LICENSE="GPL-3"
+WEBAPP_MANUAL_SLOT="yes"
+SLOT="0"
+KEYWORDS="-* arm"
+IUSE="httpd tools"
+
+DEPEND="app-admin/webapp-config"
+RDEPEND="
+ httpd? (
+ virtual/httpd-cgi
+ )
+ !httpd? (
+ dev-perl/HTTP-Daemon
+ )
+ net-analyzer/rrdtool[perl]
+ || ( ( virtual/perl-JSON-PP dev-perl/JSON-Any ) dev-perl/JSON )
+ dev-perl/File-Which
+ dev-perl/IPC-ShareLite
+ media-libs/raspberrypi-userland"
+
+S="${WORKDIR}/RPi-Monitor-${PV}"
+
+src_prepare() {
+ local patch
+
+ cp src/etc/rpimonitor/template/raspbian.conf src/etc/rpimonitor/template/gentoo.conf
+
+ mkdir "${WORKDIR}"/patches
+ cp "${FILESDIR}"/"${PV}"/*.patch "${WORKDIR}"/patches/
+ if has_version "=media-libs/raspberrypi-userland-9999:0=" || has_version "~media-libs/raspberrypi-userland-9999:0/0="; then
+ sed -i \
+ -e '/vcgencmd/s|/usr/sbin/|/usr/bin/|' \
+ "${WORKDIR}"/patches/*.patch
+ fi
+ for patch in "${WORKDIR}"/patches/*.patch; do
+ epatch "${patch}" || die "epatch failed"
+ done
+
+ # Fix version string...
+ sed -i \
+ -e "s|<b>Version</b>: {DEVELOPMENT} |<b>Version</b>: ${PV} |" \
+ src/usr/share/rpimonitor/web/js/rpimonitor.js || die "Version correction failed"
+
+ chmod 755 "${S}"/tools/conf2man.pl "${S}"/tools/help2man.pl
+ [[ -x "${S}"/tools/help2man.pl && -x "${S}"/tools/conf2man.pl ]] \
+ || die "Portage temporary directory must not be mounted 'noexec'"
+
+ cat src/etc/rpimonitor/daemon.conf src/etc/rpimonitor/template/gentoo.conf > rpimonitord.conf
+
+ "${S}"/tools/help2man.pl src/usr/bin/rpimonitord "${PV}" > rpimonitord.1
+ "${S}"/tools/conf2man.pl rpimonitord.conf "${PV}" > rpimonitord.conf.5
+}
+
+src_compile() {
+ # RPi-Monitor now includes a Makefile, but we want to manage things ourselves...
+ :
+}
+
+src_install() {
+ local file
+
+ use httpd && webapp_src_preinst
+
+ doman rpimonitord.1 rpimonitord.conf.5
+
+ dodoc README.md
+ newdoc tools/reverseproxy nginx.conf.example
+
+ dodoc src/etc/rpimonitor/template/example.*.conf
+ for file in printer storage services wlan dht11 entropy; do
+ dodoc src/etc/rpimonitor/template/"${file}".conf
+ done
+ # We don't want to compress the examples, so that if a user accidentally
+ # uncomments an example in their configuration file, it won't break things...
+ docompress -x /usr/share/doc
+ # Subsequent calls to 'docompress' appear to be ignored :(
+ #docompress /usr/share/doc/"${PF}"/README.md
+ #docompress /usr/share/doc/"${PF}"/nginx.conf.example
+ bzip2 -9 "${ED}"/usr/share/doc/"${PF}"/README.md
+ bzip2 -9 "${ED}"/usr/share/doc/"${PF}"/nginx.conf.example
+
+ dosbin src/usr/bin/rpimonitord
+ if use tools; then
+ exeinto /usr/share/"${PN}"/tools
+ doexe tools/{addnginxuser.sh,make_ca.sh,make_cert.sh,netTraffic.sh,openssl.cnf}
+ fi
+
+ newconfd "${FILESDIR}"/rpimonitor.confd rpimonitor
+ newinitd "${FILESDIR}"/rpimonitor.initd rpimonitor
+ dodir /etc/rpimonitord.conf.d
+ insinto /etc/rpimonitord.conf.d
+ newins src/etc/rpimonitor/template/gentoo.conf data.conf
+ for file in version uptime cpu temperature memory swap sdcard network; do
+ doins src/etc/rpimonitor/template/"${file}".conf
+ done
+ doins "${FILESDIR}"/battery.conf
+
+ if use httpd; then
+ # Try to determine the real root directory...
+ if [[ -n "${vhost_root}" || -r /etc/vhosts/webapp-config ]]; then
+ if ! [[ -n "${vhost_root}" && -n "${vhost_htdocs_insecure}" ]]; then
+ # Do this twice, so that variables defined in terms of other
+ # values are correctly initialised...
+ source /etc/vhosts/webapp-config
+ source /etc/vhosts/webapp-config
+ fi
+ INSTROOT="${vhost_root}/${vhost_htdocs_insecure}"
+ else
+ INSTROOT="${EROOT}/var/www/localhost/htdocs"
+ fi
+
+ insinto "${MY_HTDOCSDIR}"
+ doins -r src/usr/share/rpimonitor/web/*
+ dodir "${MY_HTDOCSDIR}"/custom/net_traffic
+ dodir "${MY_HTDOCSDIR}"/stat
+
+ webapp_serverowned "${MY_HTDOCSDIR}"/custom
+ webapp_serverowned "${MY_HTDOCSDIR}"/custom/net_traffic
+ webapp_serverowned "${MY_HTDOCSDIR}"/stat
+ else
+ INSTROOT="${EROOT}/usr/share"
+
+ insinto /usr/share/"${PN}"
+ doins -r src/usr/share/rpimonitor/web/*
+ diropts -m 0775 -o nobody -g nogroup
+
+ dodir /var/lib/"${PN}"/custom/net_traffic
+ dodir /var/lib/"${PN}"/stat
+
+ dosym ../../../var/lib/"${PN}"/stat /usr/share/"${PN}"/stat
+ dosym ../../../var/lib/"${PN}"/custom /usr/share/"${PN}"/custom
+ fi
+
+ sed -i \
+ -e "s|^#daemon.webroot=/usr/share/rpimonitor/web$|daemon.webroot=${INSTROOT/\/\///}/${PN}|" \
+ -e "s|^#daemon.datastore=/var/lib/rpimonitor$|daemon.datastore=/var/lib/${PN}|" \
+ -e "s|^#daemon.user=pi$|daemon.user=nobody|" \
+ -e "s|^#daemon.group=pi$|daemon.group=nogroup|" \
+ src/etc/rpimonitor/daemon.conf
+ insinto /etc/
+ newins src/etc/rpimonitor/daemon.conf rpimonitord.conf
+
+ use httpd && webapp_src_install
+}
+
+pkg_postinst() {
+ einfo "Edit the file /etc/rpimonitord.conf.d/data.conf to configure RPi-Monitor"
+ echo
+ ewarn "If graphs display incorrect data or values are shown as 'NaN' in the"
+ ewarn "web-interface, especially after configuration changes, try stopping"
+ ewarn "RPi-Monitor and deleting the affected .rrd files from"
+ ewarn "/var/lib/${PN} before restarting RPi-Monitor - which should clear"
+ ewarn "any problems caused by changes in format."
+ echo
+ ewarn "In release 2.10, the single configuration file 'default.conf' has been"
+ ewarn "split up into 'data.conf' and multiple sub-configuration files. Please"
+ ewarn "migrate your 'default.conf' to the new file structure, after which it can"
+ ewarn "be deleted."
+ ewarn "Please note that configuration files are simply concatenated, and so care"
+ ewarn "must be taken not to accidentally re-use Object ID numbers, which are now"
+ ewarn "split across multiple files."
+ echo
+ einfo "If network data collected by earlier versions of ${PN} cause anomalous peaks"
+ einfo "to appear on network graphs, this can be resolved by adjusting the network"
+ einfo "RRD databases:"
+ echo
+ if use httpd; then
+ # Try to determine the real root directory...
+ if [[ -n "${vhost_root}" || -r /etc/vhosts/webapp-config ]]; then
+ if ! [[ -n "${vhost_root}" && -n "${vhost_htdocs_insecure}" ]]; then
+ # Do this twice, so that variables defined in terms of other
+ # values are correctly initialised...
+ source /etc/vhosts/webapp-config
+ source /etc/vhosts/webapp-config
+ fi
+ INSTROOT="${vhost_root}/${vhost_htdocs_insecure}"
+ else
+ INSTROOT="${EROOT}/var/www/localhost/htdocs"
+ fi
+ else
+ INSTROOT="${EROOT}/var/lib/${PN}"
+ fi
+ einfo "rrdtool tune ${INSTROOT//\/\///}/stat/net_received.rrd -a net_received:0"
+ einfo "rrdtool tune ${INSTROOT//\/\///}/stat/net_send.rrd -i net_send:0"
+}