diff --git a/tagserverApp/api/controllers/TagController.js b/tagserverApp/api/controllers/TagController.js index f76951d..fcf68cd 100644 --- a/tagserverApp/api/controllers/TagController.js +++ b/tagserverApp/api/controllers/TagController.js @@ -8,4 +8,3 @@ module.exports = { }; - diff --git a/tagserverApp/api/controllers/Tag_valController.js b/tagserverApp/api/controllers/Tag_valController.js index 4b119c4..a5844d0 100644 --- a/tagserverApp/api/controllers/Tag_valController.js +++ b/tagserverApp/api/controllers/Tag_valController.js @@ -8,7 +8,6 @@ module.exports = { latest: function(req, res){ var query = "SELECT v1.id as id, v1.createdAt as dtime, t.id as t_id, t.name as name, t.tag as tag, v1.val as val, t.units as units, t.description as description, t.minExpected as minExpected, t.maxExpected as maxExpected FROM tag_vals v1 LEFT JOIN tags t ON t.id = v1.tagID WHERE v1.id = (SELECT v2.id FROM tag_vals v2 WHERE v2.tagID = v1.tagID ORDER BY v2.id DESC LIMIT 1)"; - console.log(query); Tag_val.query(query, function(err, results){ if (err) return res.serverError(err); return res.ok(results); diff --git a/tagserverApp/assets/js/controller.js b/tagserverApp/assets/js/controller.js index ac2f4a2..3dae97b 100644 --- a/tagserverApp/assets/js/controller.js +++ b/tagserverApp/assets/js/controller.js @@ -1,4 +1,4 @@ -var tsCtrlrs = angular.module('tsCtrlrs', ['ngJustGage', 'n3-line-chart', "ngQuickDate"]); +var tsCtrlrs = angular.module('tsCtrlrs', ['ngJustGage', 'n3-line-chart', "ngQuickDate", "ngSails"]); function isValidDate(d) { if ( Object.prototype.toString.call(d) !== "[object Date]" ) @@ -63,6 +63,16 @@ var date_to_dString = function(inpDate){ return "".concat(year, month, day, "_", hour, min, sec); }; +var mysqlDate = function(d){ + var year = d.getFullYear().pad(4); + var month = (d.getMonth() + 1).pad(2); + var day = d.getDate().pad(2); + var hour = d.getHours().pad(2); + var min = d.getMinutes().pad(2); + var sec = d.getSeconds().pad(2); + return "".concat(year, "-", month, "-", day, " ", hour, ":", min, ":", sec); +}; + tsCtrlrs.factory('Page', function($log) { var title = 'default'; var page = 'default'; @@ -103,7 +113,8 @@ tsCtrlrs.factory('Alerts', function($log) { tsCtrlrs.factory('tags',function($q, $http, $log){ var getTag = function(id) { var deferred = $q.defer(); - $http.get('/tag/' + id).success(function(data) { + var w ={"where":{"id":id}}; + $http.get('/tag', {params:w}).success(function(data) { deferred.resolve({ tag:data }); @@ -123,7 +134,7 @@ tsCtrlrs.factory('tags',function($q, $http, $log){ var getTagHistoryBetween = function(id, start, end){ var deferred = $q.defer(); - var w = {'where':{'tagID': id, 'createdAt': {">=":0, "<=":end}}}; + var w = {'where':{'tagID': id, 'createdAt': {">":mysqlDate(start), "<": mysqlDate(end)}}}; $http.get("/tag_val", {params:w}).success(function(data) { deferred.resolve({ vals:data @@ -143,7 +154,7 @@ tsCtrlrs.factory('tags',function($q, $http, $log){ }; var createTag = function(tag){ - $http.post('/json/tag/add', { + $http.post('/tag/create', { tag: tag.tag, name: tag.name, units: tag.units, @@ -160,7 +171,7 @@ tsCtrlrs.factory('tags',function($q, $http, $log){ var updateTag = function(tag){ $log.info("updateTag called with "+ JSON.stringify(tag)); - $http.post('/json/tag/update', { + $http.post('/tag/update/1', { id: tag.id, tag: tag.tag, name: tag.name, @@ -180,7 +191,7 @@ tsCtrlrs.factory('tags',function($q, $http, $log){ var deleteTag = function(id){ var deferred = $q.defer(); - var url = '/json/tag/delete/' + id; + var url = '/tag/delete/' + id; $http.get(url).success(function(data) { deferred.resolve({ status: data.status @@ -305,7 +316,7 @@ tsCtrlrs.controller('mainCtrl', function($scope, Page, Alerts) { $scope.Alerts = Alerts; }); -tsCtrlrs.controller('dashboardCtrl', function($scope, $route, $http, $routeParams, Page, Alerts, $log, tags) { +tsCtrlrs.controller('dashboardCtrl', function($scope, $route, $http, $sails, Page, $log, tags) { Page.setTitle('Dashboard'); Page.setPage('dashboard'); $scope.loadDashboard = function(){ @@ -314,9 +325,32 @@ tsCtrlrs.controller('dashboardCtrl', function($scope, $route, $http, $routeParam getCurrentValues.then(function(data) { $scope.loading = false; $scope.vals = data.vals; + $log.info($scope.vals); }); }; $scope.loadDashboard(); + + $sails.get("/tag_val").success(function(data, status, headers, jwr){ + $log.info(data); + }); + + var valHandler = $sails.on('tag_val', function(message){ + if (message.verb === "created"){ + $log.info(message.data); + for(var i = 0; i < $scope.vals.length; i++){ + if(message.data.tagID == $scope.vals[i].t_id){ + $scope.vals[i].val = message.data.val; + $scope.vals[i].dtime = message.data.createdAt; + } + } + } + }); + + $scope.$on('$destroy', function() { + $sails.off('tag_val', valHandler); + }); + + }); tsCtrlrs.controller('tagsCtrl', function($scope, $route, $http, $routeParams, Page, Alerts, $log, tags) { @@ -390,6 +424,16 @@ tsCtrlrs.controller('tagsCtrl', function($scope, $route, $http, $routeParams, Pa $scope.loadTagList(); }; + $scope.getPlotTags = function(){ + var tags_to_plot = []; + for(var i =0; i<$scope.tags.length; i ++){ + if ($scope.tags[i].selectedForPlot){ + tags_to_plot.push($scope.tags[i].id); + } + } + $scope.tags_to_plot = tags_to_plot.join(); + }; + }); tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams, Page, Alerts, $log, tags) { @@ -408,34 +452,79 @@ tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams, $scope.startDatetime = new Date(); $scope.startDatetime.setHours($scope.endDatetime.getHours() - 2); } - + $log.info({start: $scope.startDatetime, end:$scope.endDatetime}); $scope.loadTagVals = function(sDTime, eDTime){ $scope.loading = true; - var getTag = tags.getTag($routeParams.tagID); + var tags_to_get = $routeParams.tagID.split(","); + var getTag = tags.getTag(tags_to_get); getTag.then(function(tagData){ $scope.tag = tagData.tag; Page.setTitle('Tag Series: '+ tagData.tag.tagName); - var getTagHistoryBetween = tags.getTagHistoryBetween($routeParams.tagID, sDTime, eDTime); + var getTagHistoryBetween = tags.getTagHistoryBetween(tags_to_get, sDTime, eDTime); getTagHistoryBetween.then(function(data) { - $log.info(data); + $scope.loading = false; $scope.data = data; - $scope.data.vals = $scope.data.vals.map(function(x){ - return {id: x.id, tagID: x.tagID, val: x.val, dtime: new Date(x.createdAt)}; + + $scope.table_vals = $scope.data.vals.map(function(x){ + var ob = {id: x.id, tagID: x.tagID, dtime: new Date(x.createdAt)}; + for(var t = 0; t< $scope.tag.length; t++){ + if ($scope.tag[t].name === x.tagID.name){ + ob[$scope.tag[t].name] = x.val; + } else { + ob[$scope.tag[t].name] = null; + } + } + + return ob; }); + + var split_vals = {}; + var all_datetimes = []; + for(var t=0; t< $scope.tag.length; t++){ + split_vals[$scope.tag[t].name] = {}; + split_vals[$scope.tag[t].name].dtimes = []; + split_vals[$scope.tag[t].name].vals = []; + split_vals[$scope.tag[t].name].ob = {}; + } + for (var i = 0; i< data.vals.length; i++){ + split_vals[data.vals[i].tagID.name].ob[data.vals[i].createdAt]= data.vals[i].val; + split_vals[data.vals[i].tagID.name].dtimes.push(data.vals[i].createdAt); + split_vals[data.vals[i].tagID.name].vals.push(data.vals[i].val); + if (all_datetimes.indexOf(data.vals[i].createdAt) == -1){ + all_datetimes.push(data.vals[i].createdAt); + } + } + $scope.data.vals = [{dtime:new Date(all_datetimes[0])}] + for (var ta in split_vals){ + $scope.data.vals[0][ta] = split_vals[ta].vals[0]; + } + + for (var j = 0; j < all_datetimes.length; j++){ + var newOb = {dtime: new Date(all_datetimes[j])}; + for(var tag in split_vals){ + if(split_vals[tag].ob[all_datetimes[j]] === undefined){ + newOb[tag] = $scope.data.vals[j][tag] + } else { + newOb[tag] = split_vals[tag].ob[all_datetimes[j]]; + } + } + $scope.data.vals.push(newOb); + } + + + // $scope.data.gVals = data.vals.map(function(x){ + // var ob = {id: x.id, tagID: x.tagID.id, dtime: new Date(x.createdAt)}; + // ob[x.tagID.name] = x.val; + // return ob; + // }); + $log.info(data); + $log.info(split_vals); $scope.error = false; $scope.options = { series: [ - { - axis: "y", - dataset: "vals", - key: "val", - label: "Tag Value", - color: "#1f77b4", - type: ['line'], - id: 'tagChart' - } + ], axes: { x: { @@ -444,6 +533,19 @@ tsCtrlrs.controller('tagValsCtrl', function($scope, $route, $http, $routeParams, } } }; + for(var i2 = 0; i2< $scope.tag.length; i2++){ + $scope.options.series.push({ + axis: "y", + dataset: "vals", + key: $scope.tag[i2].name, + label: $scope.tag[i2].name, + // color: "#1f77b4", + color: '#'+Math.floor(Math.random()*16777215).toString(16), + type: ['line'], + drawDots:false + }); + } + $log.info({options: $scope.options}); }); }); }; @@ -518,8 +620,6 @@ tsCtrlrs.controller('configCtrl', function($scope, Page, Alerts, $log, config) { } }); }; - - }); diff --git a/tagserverApp/assets/templates/tagVals.html b/tagserverApp/assets/templates/tagVals.html index 949e29e..962673e 100644 --- a/tagserverApp/assets/templates/tagVals.html +++ b/tagserverApp/assets/templates/tagVals.html @@ -55,9 +55,15 @@
| ID | Name | Min Expected Value | @@ -219,6 +223,7 @@|
| {{tag.id}} | {{tag.name}} | {{tag.minExpected}} | @@ -235,9 +240,9 @@