Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

V9.9.6 Stable merge #1159

Merged
merged 179 commits into from
Feb 12, 2019
Merged
Changes from 3 commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
18aa826
Add automatic controller registration
adminde Jul 31, 2018
72d2416
Merge branch 'emoncms/master' into emonmuc-support
adminde Aug 1, 2018
2ce1bad
Fix auto registration test
adminde Aug 4, 2018
5c9d436
Merge branch 'emoncms/master' into emonmuc-support
adminde Aug 4, 2018
a8d1fd6
Merge branch 'emoncms/master' into emonmuc-support
adminde Aug 15, 2018
1cd3fad
Merge branch 'emoncms/master' into emonmuc-support
adminde Aug 16, 2018
3955044
Merge branch 'emoncms/master' into emonmuc-support
adminde Aug 17, 2018
0a33bcb
Merge branch 'emoncms/master' into emonmuc-support
adminde Aug 21, 2018
4a03dbb
Merge branch 'emoncms/master' into emonmuc-support
adminde Aug 22, 2018
b4655c1
Merge branch 'emoncms/master' into emonmuc-support
adminde Aug 27, 2018
72b6ff5
Fix theme syntax consistency and indents
adminde Aug 28, 2018
12def97
Add group view affix and hover coloring
adminde Aug 28, 2018
09498f4
Add My Modules section and device model menu
adminde Aug 28, 2018
e483765
Add chevron, new device button in input view keep views clean while l…
adminde Aug 28, 2018
210ca4d
Reverse removed collapse transitions
adminde Sep 6, 2018
ed54814
Merge branch 'emoncms/master' into emonmuc-support
adminde Sep 6, 2018
cfeb527
Fix device autocreation
adminde Sep 13, 2018
f3a66d1
Show footer for no configured inputs
adminde Sep 13, 2018
ecab95d
Merge branch 'emoncms/master' into emonmuc-support
adminde Oct 9, 2018
b952f2c
Fix automatic ctrl test and feed list chevron
adminde Oct 18, 2018
e440ac1
Merge branch 'emoncms/master' into emonmuc-support
adminde Oct 18, 2018
a50ac7e
Fix device view update
adminde Oct 18, 2018
a0c10df
Remove automatic muc registration and change feedlist tooltip color
adminde Oct 18, 2018
7f6370f
Fix bad syntax
adminde Oct 22, 2018
48d3f9e
Merge branch 'emoncms/master' into emonmuc-support
adminde Oct 22, 2018
cc71463
Merge branch 'emoncms/master' into emonmuc-support
adminde Oct 24, 2018
67a36a2
redis: support db selection via dbnum config
karlp Oct 28, 2018
c0d90b1
Merge branch 'emoncms/master' into emonmuc-support
adminde Oct 29, 2018
89ad858
Add forecast parsing for group views and remove device thing dependency
adminde Oct 29, 2018
fe07f2e
Quick fix to colons in MQTT Topic
borpin Nov 2, 2018
c01cc24
Make MQTT Client ID configurable in settings
borpin Nov 2, 2018
3209d67
Revert "Make MQTT Client ID configurable in settings"
borpin Nov 2, 2018
b948627
Add a client Id to the MQTT settings
borpin Nov 2, 2018
ec77b95
Merge branch 'emoncms/master' into emonmuc-support
adminde Nov 9, 2018
05b5c1d
Add very basic template reload button to admin view
adminde Nov 9, 2018
e5c76a7
added autocomplete to node name field
emrysr Nov 16, 2018
d977f45
fix cleardata feed issue.
Nov 16, 2018
2055eb3
Merge pull request #1122 from emoncms/fix_cleardata_feed_issue
TrystanLea Nov 16, 2018
d471c07
fix smoothie
Nov 16, 2018
6f0ce0e
feedwriter systemd service script
Nov 16, 2018
97feb99
Merge branch 'master' of https://github.com/emoncms/emoncms
Nov 16, 2018
136166b
move serivce runner to services for consistency
glynhudson Nov 17, 2018
e1ddae1
Merge branch 'emoncms/master' into emonmuc-support
adminde Nov 18, 2018
17a4c78
Add files via upload
fcauwe Nov 19, 2018
83314de
show status of running services on admin page
glynhudson Dec 1, 2018
8540e01
add service runner
glynhudson Dec 1, 2018
1c2d2c7
fix sidebar
glynhudson Dec 3, 2018
1ac70f4
Merge branch 'emoncms/master' into emonmuc-support
adminde Dec 4, 2018
a525bb4
added feed/data endpoint that takes multiple ids
emrysr Dec 10, 2018
ee0bcc5
Improve theme menu structure
adminde Dec 15, 2018
0f181a8
Update install-service-feedwriter.md
TrystanLea Dec 18, 2018
b358bbd
Update install-service-feedwriter.md
TrystanLea Dec 18, 2018
860c3b1
Update feedwriter.service
TrystanLea Dec 18, 2018
fc2fa84
fix padding spikes where input feed has null value
Dec 18, 2018
f8e05da
Support gzip decompression of bulk input data
SeanDS Dec 18, 2018
a53d14f
Fix theme type selection
adminde Dec 19, 2018
3084227
Merge branch 'emoncms/master' into emonmuc-support
adminde Dec 19, 2018
629b8a9
Merge pull request #1143 from SeanDS/feature/gzip
TrystanLea Dec 19, 2018
19e4909
- remove singular feed/data api, use multiple end-point
Dec 19, 2018
5f995ab
Merge branch 'emrysr-feature/issue-1007-multiple-feed-ids'
Dec 19, 2018
2f103e2
Merge branch 'master' of https://github.com/emoncms/emoncms
Dec 19, 2018
5c5ac8d
Merge branch 'master' into fix_padding_spikes
Dec 20, 2018
949a0f1
Update Feedwriter.service to restart on-failure
borpin Dec 27, 2018
f1b2bb8
update with new models
gablau Dec 28, 2018
d19589d
Merge pull request #1145 from gablau/patch-1
glynhudson Dec 28, 2018
0607e4a
Merge pull request #1144 from borpin/patch-1
glynhudson Dec 28, 2018
5e21b30
Use override conf instead of editing system file.
bwduncan Dec 29, 2018
1046ee9
Merge pull request #1146 from bwduncan/patch-1
glynhudson Dec 29, 2018
92d9466
datafeed edition for PHPFina engine
alexandrecuer Jan 2, 2019
bb0dae1
Update editdaily.php
alexandrecuer Jan 5, 2019
b40ea83
added cors headers
emrysr Jan 7, 2019
5413b84
added checks for files in /home/pi/data
emrysr Jan 7, 2019
a344366
Merge pull request #1149 from emrysr/feature/cors-fix-describe-endpoint
TrystanLea Jan 7, 2019
890964e
Update index.php
TrystanLea Jan 7, 2019
60b9787
Merge remote-tracking branch 'origin/master' into fix_padding_spikes
Jan 7, 2019
905eb38
Merge pull request #1148 from alexandrecuer/PHPTimeSeries_DailyEdition
TrystanLea Jan 10, 2019
cc62fcc
Merge pull request #1147 from alexandrecuer/datafeed_edition
TrystanLea Jan 10, 2019
09a22ee
Merge pull request #1140 from emoncms/fix_padding_spikes
TrystanLea Jan 10, 2019
2d3a906
Merge remote-tracking branch 'origin/master' into service-status
glynhudson Jan 10, 2019
26f54ff
remove start,stop,restart,kill buttons
glynhudson Jan 10, 2019
b03f8f5
Merge pull request #1134 from emoncms/service-status
TrystanLea Jan 10, 2019
686e05f
Merge pull request #1121 from emrysr/feature/issue-1111-edit-feed-nod…
TrystanLea Jan 10, 2019
26ce8ee
Merge pull request #1125 from fcauwe/master
TrystanLea Jan 10, 2019
f5c2bcb
Merge branch 'emonmuc-support' of https://github.com/isc-konstanz/emo…
glynhudson Jan 10, 2019
7944dec
Merge branch 'isc-konstanz-emonmuc-support'
glynhudson Jan 10, 2019
1da0828
Merge pull request #1094 from karlp/redis-db-select
TrystanLea Jan 10, 2019
7f8f4ab
Merge remote-tracking branch 'refs/remotes/emoncms/master' into PHPTi…
alexandrecuer Jan 13, 2019
5645f5d
Merge remote-tracking branch 'refs/remotes/emoncms/master' into PHPTi…
alexandrecuer Jan 13, 2019
380b391
Update phpmqtt_input.php
borpin Jan 14, 2019
15bc0a4
Update CassandraEngine.php
alexandrecuer Jan 14, 2019
4c2849a
Update doc for get_data() method
alexandrecuer Jan 14, 2019
ef351c3
Update PHPFina.php
alexandrecuer Jan 14, 2019
dde1d6c
cosmetic
alexandrecuer Jan 14, 2019
68af069
Update PHPFiwa.php
alexandrecuer Jan 14, 2019
b95aad8
Update PHPTimeSeries.php
alexandrecuer Jan 14, 2019
351d03f
Update RedisBuffer.php
alexandrecuer Jan 14, 2019
7e856ae
Update TemplateEngine.php
alexandrecuer Jan 14, 2019
6e5dbd2
Update PHPTimeSeries.php
alexandrecuer Jan 14, 2019
5eff788
hidden uninstalled services
emrysr Jan 15, 2019
40b6bdf
hidden controls when list is empty
emrysr Jan 15, 2019
3d20821
Merge pull request #1155 from emrysr/features/issue-1154-hide-input-c…
TrystanLea Jan 16, 2019
6c4299b
Merge pull request #1153 from emrysr/feature/issue-1150-service-statuses
TrystanLea Jan 16, 2019
a2a5ad8
Merge pull request #1152 from alexandrecuer/PHPTimeSeries_DailyEdition
TrystanLea Jan 16, 2019
dea28e9
commiting to allow branch change
emrysr Jan 16, 2019
3566350
passed on service status to admin list
emrysr Jan 16, 2019
bd9e8bd
Merge pull request #1157 from emrysr/feature/issue-1150-service-statuses
TrystanLea Jan 16, 2019
64d2e71
Merge pull request #1156 from borpin/bpo-MQTT-chars
TrystanLea Jan 16, 2019
965dd15
updated service status indicators to check for 'running'
emrysr Jan 16, 2019
ecc533e
git push origin masterMerge branch 'emrysr-feature/issue-1150-service…
glynhudson Jan 16, 2019
e8c4104
Merge branch 'master' into bpo-MQTTClientID
borpin Jan 16, 2019
5e3b23b
Merge branch 'master' of https://github.com/emoncms/emoncms into bpo-…
borpin Jan 16, 2019
6811a0d
minor changes to Admin view
borpin Jan 17, 2019
32aefe8
Delete Old git status
borpin Jan 17, 2019
229365b
Merge pull request #1163 from borpin/bpo-Admin-Git
glynhudson Jan 18, 2019
ec446ae
Tidy feedwriter and service-runner for consistency
borpin Jan 18, 2019
eece32d
Make explicit what the button is copying
borpin Jan 22, 2019
f96f361
hidden currently selected feed from feed list
emrysr Jan 22, 2019
f978ee1
Merge pull request #1170 from emoncms/feature/issue-1139-virtual-feed…
TrystanLea Jan 22, 2019
749b0b0
not testing against virtual feeds (feed.engine==7)
emrysr Jan 23, 2019
9ee7566
moved autocomplete input to own js and css
emrysr Jan 23, 2019
656117f
fixed height issue
emrysr Jan 23, 2019
2c50058
fixed window resize issue
emrysr Jan 23, 2019
d052fcd
exit from convertToPlotlist() when no feeds selected
emrysr Jan 23, 2019
2de73b5
used the same connection error as emoncms
emrysr Jan 23, 2019
b8d65f5
Merge pull request #1173 from emrysr/feature/issue-1112-feed-tag-input
TrystanLea Jan 23, 2019
db3f5bd
Merge pull request #1174 from emrysr/feature/issue-1123-full-height-g…
TrystanLea Jan 23, 2019
6ef6ba3
Merge pull request #1175 from emrysr/feature/issue-1126-no-feed-selected
TrystanLea Jan 23, 2019
a0a3b95
Merge pull request #1172 from emrysr/feature/issue-1056-virtual-feed-…
TrystanLea Jan 24, 2019
73a5426
Merge pull request #1176 from emrysr/feature/issue-1124-phpmqtt_input…
TrystanLea Jan 24, 2019
d29dd97
Merge pull request #1169 from borpin/patch-1
TrystanLea Jan 24, 2019
fc4a4d1
allow read access to read api end points
glynhudson Jan 24, 2019
c206e21
disable use of virtual feed as source for itself
glynhudson Jan 24, 2019
ca832c2
Update process_settings.php
borpin Jan 24, 2019
bddc372
Restore setting and add to documentation
borpin Jan 24, 2019
410d875
Update mqtt_input.service
borpin Jan 24, 2019
a2ddaac
Update service-runner.service
borpin Jan 24, 2019
5de2b71
restored missing feedwriter information
emrysr Jan 25, 2019
853858e
added custom message for feedrunner service
emrysr Jan 25, 2019
2774874
checked for rpi-rw script to identify older version
emrysr Jan 25, 2019
2365684
showing feed interval status with colour bars
emrysr Jan 28, 2019
1afcb78
added border below accordion header
emrysr Jan 28, 2019
b20efee
yellow text too bright - changed it
emrysr Jan 28, 2019
010c866
Merge pull request #1183 from emrysr/feature/issue-998-feed-freshness
TrystanLea Jan 29, 2019
691fd05
Merge pull request #1179 from emrysr/feature/issue-1129-admin-filesys…
TrystanLea Jan 29, 2019
a5f843a
Merge pull request #1177 from emrysr/feature/issue-1150-service-statuses
TrystanLea Jan 29, 2019
47ae5ee
Merge branch 'stable' into master
TrystanLea Jan 29, 2019
184d7b3
check for defined keys in menu
glynhudson Jan 29, 2019
7ac8d28
Update version.txt
TrystanLea Jan 29, 2019
fa344f4
use typof to check for undefined
glynhudson Jan 30, 2019
f819fe9
Merge branch 'master' of https://github.com/emoncms/emoncms
glynhudson Jan 30, 2019
b36266d
number of feeds per user in admin user list
glynhudson Jan 30, 2019
ebdb029
fix servicectl and service errors if not present
Jan 30, 2019
4fddcd6
Update with new pi models
gablau Jan 30, 2019
b631bf4
separated locale file loading from feed list view
emrysr Feb 1, 2019
f848e6a
added callback _locale_loaded()
emrysr Feb 1, 2019
6644471
escaping quotes from translation text
emrysr Feb 1, 2019
5b9bdd2
fix sidebar resize
Feb 2, 2019
fac6d3a
Merge branch 'master' of github.com:emoncms/emoncms
emrysr Feb 4, 2019
33de5d4
fixed invalid character
emrysr Feb 4, 2019
3520282
added css rules
emrysr Feb 4, 2019
75495cc
Merge pull request #1192 from emrysr/feature/issue-1185-input-list-co…
TrystanLea Feb 5, 2019
afa8bdb
Merge pull request #1191 from emrysr/feature/issue-1188-feed-edit-rej…
TrystanLea Feb 5, 2019
7509714
Merge pull request #1187 from emrysr/feature/locale-loading-in-separa…
TrystanLea Feb 5, 2019
1d77f34
Merge pull request #1186 from gablau/patch-2
TrystanLea Feb 5, 2019
195a8a2
add small line between sidebar items
Feb 5, 2019
712be0e
Merge branch 'master' of https://github.com/emoncms/emoncms
Feb 5, 2019
a8cbd78
add mqtt_input to services folder for consistency
glynhudson Feb 6, 2019
897c67b
rename mqtt_input service to emoncms_mqtt
glynhudson Feb 6, 2019
6f28951
update admin and docs to refer to emoncms_mqtt service
glynhudson Feb 6, 2019
c2e9cd9
Merge pull request #1165 from borpin/bpo-servicetidy
TrystanLea Feb 7, 2019
95a6efe
fix redis-server ref in service
glynhudson Feb 7, 2019
d683dec
Merge pull request #1160 from borpin/bpo-MQTTClientID
TrystanLea Feb 7, 2019
170732a
update to service-runner.py for redis prefix
borpin Feb 7, 2019
0aa9a36
Merge pull request #1196 from borpin/bpo-servicerunner-redis
TrystanLea Feb 8, 2019
884c34f
improvement by @greebs
glynhudson Feb 8, 2019
69ad755
correct flow - needs double checking
glynhudson Feb 8, 2019
64b3f60
Update copy server info to clipboard
borpin Feb 11, 2019
b21549e
Merge pull request #1201 from borpin/bpo-admin-copytoclipboard
TrystanLea Feb 12, 2019
53991d6
Update version.txt
TrystanLea Feb 12, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
188 changes: 121 additions & 67 deletions Modules/feed/feed_controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@ function feed_controller()
$ui_version_2 = $user->get_preferences($session['userid'], 'deviceView');

if (isset($ui_version_2) && $ui_version_2) {
$result = view("Modules/feed/Views/feedlist_view_v2.php",array());
return view("Modules/feed/Views/feedlist_view_v2.php",array());
} else {
$result = view("Modules/feed/Views/feedlist_view.php",array());
return view("Modules/feed/Views/feedlist_view.php",array());
}
}
else if ($route->action == "api" && $session['write']) $result = view("Modules/feed/Views/feedapi_view.php",array());
else if ($route->action == "api" && $session['write']) return view("Modules/feed/Views/feedapi_view.php",array());
}

else if ($route->format == 'json')
Expand All @@ -52,22 +52,22 @@ function feed_controller()
if ($route->action == "list")
{
if ($session['read']) {
if (!isset($_GET['userid']) || (isset($_GET['userid']) && $_GET['userid'] == $session['userid'])) $result = $feed->get_user_feeds($session['userid']);
else if (isset($_GET['userid']) && $_GET['userid'] != $session['userid']) $result = $feed->get_user_public_feeds(get('userid'));
if (!isset($_GET['userid']) || (isset($_GET['userid']) && $_GET['userid'] == $session['userid'])) return $feed->get_user_feeds($session['userid']);
else if (isset($_GET['userid']) && $_GET['userid'] != $session['userid']) return $feed->get_user_public_feeds(get('userid'));
}
else if (isset($_GET['userid'])) $result = $feed->get_user_public_feeds(get('userid'));
else if (isset($_GET['userid'])) return $feed->get_user_public_feeds(get('userid'));

} elseif ($route->action == "listwithmeta" && $session['read']) {
$result = $feed->get_user_feeds_with_meta($session['userid']);
return $feed->get_user_feeds_with_meta($session['userid']);
} elseif ($route->action == "getid" && $session['read']) {
$route->format = "text";
$result = $feed->get_id($session['userid'],get("name"));
return $feed->get_id($session['userid'],get("name"));
} elseif ($route->action == "create" && $session['write']) {
$result = $feed->create($session['userid'],get('tag'),get('name'),get('datatype'),get('engine'),json_decode(get('options')),get('unit'));
return $feed->create($session['userid'],get('tag'),get('name'),get('datatype'),get('engine'),json_decode(get('options')),get('unit'));
} elseif ($route->action == "updatesize" && $session['write']) {
$result = $feed->update_user_feeds_size($session['userid']);
return $feed->update_user_feeds_size($session['userid']);
} elseif ($route->action == "buffersize" && $session['write']) {
$result = $feed->get_buffer_size();
return $feed->get_buffer_size();
// To "fetch" multiple feed values in a single request
// http://emoncms.org/feed/fetch.json?ids=123,567,890
} elseif ($route->action == "fetch") {
Expand All @@ -81,10 +81,87 @@ function feed_controller()
} else { $result[$i] = false; }
} else { $result[$i] = false; } // false means feed not found
}
return $result;
} else if ($route->action == "csvexport" && $session['write'] && isset($_GET['ids'])) {
// Export multiple feeds on the same csv
// http://emoncms.org/feed/csvexport.json?ids=1,3,4,5,6,7,8,157,156,169&start=1450137600&end=1450224000&interval=10&timeformat=1
$result = $feed->csv_export_multi(get('ids'),get('start'),get('end'),get('interval'),get('timeformat'),get('name'));
return $feed->csv_export_multi(get('ids'),get('start'),get('end'),get('interval'),get('timeformat'),get('name'));

// ----------------------------------------------------------------------------
// Multi feed actions
// ----------------------------------------------------------------------------
} else if (in_array($route->action,array("data","average"))) {
// get data for a list of existing feeds
$result = array('success'=>false, 'message'=>'bad parameters');
// return $_REQUEST;
$singular = false;
$feedids = array();
if (isset($_GET['id'])) {
$feedids = explode(",", get('id'));
$singular = true;
}
else if (isset($_GET['ids'])) $feedids = explode(",", get('ids'));

if (!empty($feedids)) {
$missing = array();
foreach($feedids as $key => $feedid) {
if ($feed->exist($feedid)) { // if the feed exists
$f = $feed->get($feedid);
// if public or belongs to user
if ($f['public'] || ($session['userid']>0 && $f['userid']==$session['userid'] && $session['read']))
{

$results[$key] = array('feedid'=>$feedid);

// feed/data ----------------------------------------------
if ($route->action=="data") {
$skipmissing = 1;
$limitinterval = 1;
if (isset($_GET['skipmissing']) && $_GET['skipmissing']==0) $skipmissing = 0;
if (isset($_GET['limitinterval']) && $_GET['limitinterval']==0) $limitinterval = 0;


if (isset($_GET['interval'])) {
$results[$key]['data'] = $feed->get_data($feedid,get('start'),get('end'),get('interval'),$skipmissing,$limitinterval);
} else if (isset($_GET['mode'])) {
if (isset($_GET['split'])) {
$results[$key]['data'] = $feed->get_data_DMY_time_of_day($feedid,get('start'),get('end'),get('mode'),get('split'));
} else {
$results[$key]['data'] = $feed->get_data_DMY($feedid,get('start'),get('end'),get('mode'));
}
}
// feed/average --------------------------------------------
} else if ($route->action == 'average') {
if (isset($_GET['interval'])) {
$results[$key]['data'] = $feed->get_average($feedid,get('start'),get('end'),get('interval'));
} else if (isset($_GET['mode'])) {
$results[$key]['data'] = $feed->get_average_DMY($feedid,get('start'),get('end'),get('mode'));
}
}
}
} else {
$missing = $feedid;
}
}
if (!empty($missing)) {
// return error if any feed ids not found
return array('success'=>false, 'message'=> count($missing) .' feeds do not exist');
} else {

if ($singular && count($results)==1) {
return $results[0]['data'];
} else {
return $results;
}
// @todo: return array for each feed's data
// and a single array for each interval timestamp
}
} else {
// no ids passed
return array('success'=>false, 'message'=>'no ids given');
}
return $result;
// ----------------------------------------------------------------------------
} else {
$feedid = (int) get('id');
// Actions that operate on a single existing feed that all use the feedid to select:
Expand All @@ -95,45 +172,22 @@ function feed_controller()
// if public or belongs to user
if ($f['public'] || ($session['userid']>0 && $f['userid']==$session['userid'] && $session['read']))
{
if ($route->action == "timevalue") $result = $feed->get_timevalue($feedid);
else if ($route->action == 'data') {
$skipmissing = 1;
$limitinterval = 1;
if (isset($_GET['skipmissing']) && $_GET['skipmissing']==0) $skipmissing = 0;
if (isset($_GET['limitinterval']) && $_GET['limitinterval']==0) $limitinterval = 0;

if (isset($_GET['interval'])) {
$result = $feed->get_data($feedid,get('start'),get('end'),get('interval'),$skipmissing,$limitinterval);
} else if (isset($_GET['mode'])) {
if (isset($_GET['split'])) {
$result = $feed->get_data_DMY_time_of_day($feedid,get('start'),get('end'),get('mode'),get('split'));
} else {
$result = $feed->get_data_DMY($feedid,get('start'),get('end'),get('mode'));
}
}
}
else if ($route->action == 'average') {
if (isset($_GET['interval'])) {
$result = $feed->get_average($feedid,get('start'),get('end'),get('interval'));
} else if (isset($_GET['mode'])) {
$result = $feed->get_average_DMY($feedid,get('start'),get('end'),get('mode'));
}
}
else if ($route->action == "value") $result = $feed->get_value($feedid); // null is a valid response
else if ($route->action == "get") $result = $feed->get_field($feedid,get('field')); // '/[^\w\s-]/'
else if ($route->action == "aget") $result = $feed->get($feedid);
else if ($route->action == "getmeta") $result = $feed->get_meta($feedid);
else if ($route->action == "setstartdate") $result = $feed->set_start_date($feedid,get('startdate'));

else if ($route->action == 'histogram') $result = $feed->histogram_get_power_vs_kwh($feedid,get('start'),get('end'));
else if ($route->action == 'kwhatpower') $result = $feed->histogram_get_kwhd_atpower($feedid,get('min'),get('max'));
else if ($route->action == 'kwhatpowers') $result = $feed->histogram_get_kwhd_atpowers($feedid,get('points'));
else if ($route->action == "csvexport") $result = $feed->csv_export($feedid,get('start'),get('end'),get('interval'),get('timeformat'));
if ($route->action == "timevalue") return $feed->get_timevalue($feedid);
else if ($route->action == "value") return $feed->get_value($feedid); // null is a valid response
else if ($route->action == "get") return $feed->get_field($feedid,get('field')); // '/[^\w\s-]/'
else if ($route->action == "aget") return $feed->get($feedid);
else if ($route->action == "getmeta") return $feed->get_meta($feedid);
else if ($route->action == "setstartdate") return $feed->set_start_date($feedid,get('startdate'));

else if ($route->action == 'histogram') return $feed->histogram_get_power_vs_kwh($feedid,get('start'),get('end'));
else if ($route->action == 'kwhatpower') return $feed->histogram_get_kwhd_atpower($feedid,get('min'),get('max'));
else if ($route->action == 'kwhatpowers') return $feed->histogram_get_kwhd_atpowers($feedid,get('points'));
else if ($route->action == "csvexport") return $feed->csv_export($feedid,get('start'),get('end'),get('interval'),get('timeformat'));
else if ($route->action == "export") {
if ($f['engine']==Engine::MYSQL || $f['engine']==Engine::MYSQLMEMORY) $result = $feed->mysqltimeseries_export($feedid,get('start'));
elseif ($f['engine']==Engine::PHPTIMESERIES) $result = $feed->phptimeseries_export($feedid,get('start'));
elseif ($f['engine']==Engine::PHPFIWA) $result = $feed->phpfiwa_export($feedid,get('start'),get('layer'));
elseif ($f['engine']==Engine::PHPFINA) $result = $feed->phpfina_export($feedid,get('start'));
if ($f['engine']==Engine::MYSQL || $f['engine']==Engine::MYSQLMEMORY) return $feed->mysqltimeseries_export($feedid,get('start'));
elseif ($f['engine']==Engine::PHPTIMESERIES) return $feed->phptimeseries_export($feedid,get('start'));
elseif ($f['engine']==Engine::PHPFIWA) return $feed->phpfiwa_export($feedid,get('start'),get('layer'));
elseif ($f['engine']==Engine::PHPFINA) return $feed->phpfina_export($feedid,get('start'));
}
}

Expand All @@ -155,64 +209,64 @@ function feed_controller()
// exists_tag_name returns false if not found
$unique = $feed->exists_tag_name($session['userid'], $new_tag, $new_name) === false;
// update if tag:name unique else return error;
$result = $unique ? $feed->set_feed_fields($feedid, get('fields')) : array('success'=>false, 'message'=>'fields tag:name must be unique');
return $unique ? $feed->set_feed_fields($feedid, get('fields')) : array('success'=>false, 'message'=>'fields tag:name must be unique');
}else{
// update if no tag/name change
$result = $feed->set_feed_fields($feedid, get('fields'));
return $feed->set_feed_fields($feedid, get('fields'));
}

// Insert datapoint
} else if ($route->action == "insert") {
$result = $feed->insert_data($feedid,time(),get("time"),get("value"));
return $feed->insert_data($feedid,time(),get("time"),get("value"));

// Update datapoint
} else if ($route->action == "update") {
if (isset($_GET['updatetime'])) $updatetime = get("updatetime"); else $updatetime = time();
$result = $feed->update_data($feedid,$updatetime,get("time"),get('value'));
return $feed->update_data($feedid,$updatetime,get("time"),get('value'));

// Delete feed
} else if ($route->action == "delete") {
$result = $feed->delete($feedid);
return $feed->delete($feedid);

// Clear feed
} else if ($route->action == "clear") {
$result = $feed->clear($feedid);
return $feed->clear($feedid);

// Trim feed
} else if ($route->action == "trim") {
if (!filter_var(get('start_time'), FILTER_VALIDATE_INT)) return false;
$start_time = filter_var(get('start_time'), FILTER_SANITIZE_NUMBER_INT);
$result = $feed->trim($feedid, $start_time);
return $feed->trim($feedid, $start_time);

// Process
} else if ($route->action == "process") {
if ($f['engine']!=Engine::VIRTUALFEED) { $result = array('success'=>false, 'message'=>'Feed is not Virtual'); }
else if ($route->subaction == "get") $result = $feed->get_processlist($feedid);
else if ($route->subaction == "set") $result = $feed->set_processlist($session['userid'], $feedid, post('processlist'),$process->get_process_list());
else if ($route->subaction == "reset") $result = $feed->reset_processlist($feedid);
if ($f['engine']!=Engine::VIRTUALFEED) { return array('success'=>false, 'message'=>'Feed is not Virtual'); }
else if ($route->subaction == "get") return $feed->get_processlist($feedid);
else if ($route->subaction == "set") return $feed->set_processlist($session['userid'], $feedid, post('processlist'),$process->get_process_list());
else if ($route->subaction == "reset") return $feed->reset_processlist($feedid);

// Fast bulk uploader
} else if ($route->action == "upload") {
// Start time and interval
if (isset($_GET['start']) && isset($_GET['interval']) && isset($_GET['npoints'])) {
$result = $feed->upload_fixed_interval($feedid,get("start"),get("interval"),get("npoints"));
return $feed->upload_fixed_interval($feedid,get("start"),get("interval"),get("npoints"));
} else if (isset($_GET['npoints'])) {
$result = $feed->upload_variable_interval($feedid,get("npoints"));
return $feed->upload_variable_interval($feedid,get("npoints"));
}
}

if ($f['engine']==Engine::MYSQL || $f['engine']==Engine::MYSQLMEMORY) {
if ($route->action == "deletedatapoint") $result = $feed->mysqltimeseries_delete_data_point($feedid,get('feedtime'));
else if ($route->action == "deletedatarange") $result = $feed->mysqltimeseries_delete_data_range($feedid,get('start'),get('end'));
if ($route->action == "deletedatapoint") return $feed->mysqltimeseries_delete_data_point($feedid,get('feedtime'));
else if ($route->action == "deletedatarange") return $feed->mysqltimeseries_delete_data_range($feedid,get('start'),get('end'));
}
}
}
else
{
$result = array('success'=>false, 'message'=>'Feed does not exist');
return array('success'=>false, 'message'=>'Feed does not exist');
}
}
}

return array('content'=>$result);
return array('content'=>'<br>Action not found');
}