Multiple tag comparison working
This commit is contained in:
@@ -8,4 +8,3 @@
|
||||
module.exports = {
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -55,9 +55,15 @@
|
||||
</div>
|
||||
|
||||
<div class="row topMargin40">
|
||||
<div class="col-md-6">
|
||||
<div class="col-md-12">
|
||||
<a href="/json/CSV/{{tag.id}}/{{startDatetime | dString}}/{{endDatetime | dString }}" class="btn btn-large btn-primary padMe"><i class="fa fa-download"></i> Download Data</a>
|
||||
<table class="table">
|
||||
<button class="btn btn-warning" type="button" data-toggle="collapse" data-target="#collapseJSON" aria-expanded="false" aria-controls="collapseJSON">
|
||||
Show Source Data
|
||||
</button>
|
||||
<div class="collapse" id="collapseJSON">
|
||||
<pre>{{table_vals | json}}</pre>
|
||||
</div>
|
||||
<!-- <table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>ID</td>
|
||||
@@ -72,7 +78,7 @@
|
||||
<td>{{val.dtime | date:'short'}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</table> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -204,9 +204,13 @@
|
||||
<div ng-if="!error" class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addModal">
|
||||
Add Tag
|
||||
</button>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>ID</td>
|
||||
<td>Name</td>
|
||||
<td>Min Expected Value</td>
|
||||
@@ -219,6 +223,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="tag in tags">
|
||||
<td><input type="checkbox" ng-model="tag.selectedForPlot" ng-change="getPlotTags()"></input></td>
|
||||
<td>{{tag.id}}</td>
|
||||
<td><a href="/#/tag/{{tag.id}}">{{tag.name}}</a> <i class="fa fa-info-circle" data-toggle="popover" title="{{tag.name}}" data-content="Tag Name: {{tag.tag}} </br>Details: {{tag.description}}<br/>Type: {{tag.data_type}}"></i></td>
|
||||
<td>{{tag.minExpected}}</td>
|
||||
@@ -235,9 +240,9 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addModal">
|
||||
Add Tag
|
||||
</button>
|
||||
<a ng-if="tags_to_plot" class="btn btn-success" href="/#/tag/{{tags_to_plot}}">
|
||||
Compare Tags
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
"bootstrap": "~3.3.6",
|
||||
"angular-route": "~1.4.9",
|
||||
"font-awesome": "~4.5.0",
|
||||
"ngQuickDate": "^1.3.4"
|
||||
"ngQuickDate": "^1.3.4",
|
||||
"angular-sails": "^1.1.4"
|
||||
},
|
||||
"resolutions": {
|
||||
"angular": "~1.4.9"
|
||||
|
||||
@@ -35,7 +35,6 @@ module.exports.routes = {
|
||||
'/': {
|
||||
view: 'homepage'
|
||||
},
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* Custom routes here... *
|
||||
|
||||
@@ -44,6 +44,8 @@ var jsFilesToInject = [
|
||||
'js/ng-justgage.js',
|
||||
'js/d3.min.js',
|
||||
'js/LineChart.js',
|
||||
'js/dist/sails.io.js',
|
||||
'js/dist/angular-sails.js',
|
||||
'js/router.js',
|
||||
'js/controller.js',
|
||||
'js/**/*.js'
|
||||
|
||||
32
tagserverApp/views/dashboard.ejs
Normal file
32
tagserverApp/views/dashboard.ejs
Normal file
@@ -0,0 +1,32 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<%# <button ng-click="loadDashboard()" class="btn btn-large btn-success"><i class="fa fa-refresh"></i> Reload Dashboard</button>%>
|
||||
<a href="/json/csv/all" class="btn btn-large btn-primary"><i class="fa fa-download"></i> Download All Data</a>
|
||||
|
||||
<% for (var i = 0; i < vals.length; i++){ var val = vals[i]; %>
|
||||
<div class="col-md-4" style="height:200px; margin-bottom:40px;">
|
||||
<div id="<%= val.name %>"></div>
|
||||
<div style="text-align:center">
|
||||
<h5><%= val.dtime %></h5>
|
||||
<a href="/#/tag/<%= val.t_id %>" class="btn btn-large btn-primary"><i class="fa fa-line-chart"></i> View Data</a>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
<% for (var x = 0; x < vals.length; x++){ var val = vals[i]; %>
|
||||
var g = new JustGage({
|
||||
id: "<%= val.name %>",
|
||||
value: <%= val.val %>,
|
||||
min: <%= val.minExpected %>,
|
||||
max: <%= val.maxExpected %>,
|
||||
title: <%= val.name %>,
|
||||
label:<%= val.units %>,
|
||||
decimals:2,
|
||||
refreshAnimationType:'bounce',
|
||||
startAnimationType:'bounce'}
|
||||
});
|
||||
<% } >
|
||||
|
||||
</script>
|
||||
@@ -108,6 +108,8 @@
|
||||
<script src="/js/ng-justgage.js"></script>
|
||||
<script src="/js/d3.min.js"></script>
|
||||
<script src="/js/LineChart.js"></script>
|
||||
<script src="/js/dist/sails.io.js"></script>
|
||||
<script src="/js/dist/angular-sails.js"></script>
|
||||
<script src="/js/router.js"></script>
|
||||
<script src="/js/controller.js"></script>
|
||||
<!--SCRIPTS END-->
|
||||
|
||||
Reference in New Issue
Block a user