blob: 547d504426358f1682fc12319683a7300c21e33a [file] [log] [blame]
var app = angular.module('xdata-db', [
'ngRoute',
'ngResource',
'ui.bootstrap',
'ngAnimate'
]);
$.ajaxSetup({
beforeSend:function(){
$('.draper').toggleClass('active')
},
complete:function(){
$('.draper').toggleClass('active')
}
})
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'templates/index.html',
controller: 'IndexController'
})
.when('/session/:id', {
templateUrl: 'templates/session.html',
controller: 'SessionController'
})
.when('/stats/compActivity', {
templateUrl: 'templates/stats-comp-activity.html',
controller: 'StatsController'
})
.otherwise({ redirectTo: '/' });
}]);
// app.run(function($rootScope) { // instance-injector
// scope.$watch(function() {
// return $http.pendingRequests.length > 0;
// }, function (v) {
// if(v){
// elm.show();
// }else{
// elm.hide();
// }
// });
// });
app.factory('Session', function($resource) {
// return $resource('http://10.1.90.46:1337/sessions/:id', {}, {
return $resource('/sessions/:id', {}, {
// Use this method for getting a list of observations
query: {
method: 'GET',
params: {},
isArray: true,
}
})
});
app.factory('Document', function($resource) {
return $resource('/rf_docs', {}, {
// Use this method for getting a list of polls
query: {
method: 'GET',
params: {},
isArray: true,
},
})
})
app.controller('AppController', ['$scope', '$location', function($scope, $location) {
$scope.title = 'XDATA Logging Dashboard';
$scope.routes = [
{url: '/#/', name: 'Home'}
]
}]);
app.controller('IndexController', [
'$scope',
'Session',
'$filter',
'$location',
'$window',
function($scope, Session, $filter, $location, $window) {
$scope.numberOfPages = 0;
$scope.pageSize = 20;
$scope.sesFilter = {
curComponent: null,
curUser: null,
dt: null,
orderBy: {
label: 'start',
state: true
}
};
angular.element($window).on('resize', $scope.$apply.bind($scope));
$scope.sessions = Session.query();
$scope.filtSessions = [];
$scope.sessions
.$promise.then(function(d) {
console.log(d);
$scope.components = groupBy(d, 'component').map(function(d) { return d.key; });
$scope.users = groupBy(d, 'user').map(function(d) { return d.key; });
$scope.components2 = groupBy(d, 'component')
$scope.users2 = groupBy(d, 'user')
var tmp = $filter('sessionFilters')($scope.sessions, $scope.sesFilter);
$scope.filtSessions = $filter('orderBy')(tmp, 'start', true);
$scope.numberOfPages = Math.ceil(d.length/$scope.pageSize);
$scope.currentPage = 0;
$scope.pagedData = $filter('pageFilter')(d, $scope.currentPage, $scope.pageSize);
});
$scope.nSysLogs = function(d) {
// console.log(d);
return d.nLogs - d.nUserLogs;
}
// $scope.orderBy = function(field) {
// if ($scope.sesFilter.orderBy[0] === field) {
// $scope.sesFilter.orderBy[1] = !$scope.sesFilter.orderBy[1];
// } else {
// $scope.sesFilter.orderBy = [field, true]
// }
// }
$scope.duration = function(d) {
// console.log(d);
var start = new Date(d.start);
var stop = new Date(d.stop);
return stop.getTime() - start.getTime();
}
$scope.$watch('sesFilter', function(sesFilter) {
console.log('filter Changed')
var tmp = $filter('sessionFilters')($scope.sessions, $scope.sesFilter);
$scope.filtSessions = $filter('orderBy')(tmp, sesFilter.orderBy.label, sesFilter.orderBy.state)
// $scope.pagedData = $filter('pageFilter')($scope.filtSessions, 0, $scope.pageSize);
}, true);
$scope.$watch('filtSessions', function(d) {
$scope.numberOfPages = Math.ceil(d.length/$scope.pageSize);
$scope.pagedData = $filter('pageFilter')(d, $scope.currentPage = 0, $scope.pageSize);
})
function groupBy(data, field) {
var t = d3.nest()
.key(function(d) { return d[field]; })
.entries(data);
return t;
}
$scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];
$scope.format = $scope.formats[0];
$scope.today = function() {
$scope.dt = new Date();
};
$scope.today();
$scope.clear = function () {
$scope.dt = null;
};
// Disable weekend selection
$scope.disabled = function(date, mode) {
return ( mode === 'day' && ( date.getDay() === 0 || date.getDay() === 6 ) );
};
$scope.toggleMin = function() {
$scope.minDate = $scope.minDate ? null : new Date();
};
$scope.toggleMin();
$scope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
$scope.opened = true;
};
$scope.dateOptions = {
formatYear: 'yy',
startingDay: 1
};
$scope.initDate = new Date('2016-15-20');
$scope.redirect = function(d) {
$location.path("/session/" + d._id)
}
$scope.$watch('currentPage', function(d) {
$scope.pagedData = $filter('pageFilter')($scope.filtSessions, $scope.currentPage, $scope.pageSize);
if ($scope.currentPage > $scope.numberOfPages) {
$scope.currentPage = $scope.numberOfPages-1;
}
});
}]);
app.filter('sessionFilters', function() {
return function( items, sesFilter) {
var filtered = [];
angular.forEach(items, function(item, i) {
var component = !sesFilter.curComponent || (item.component === sesFilter.curComponent);
var user = !sesFilter.curUser || (item.user === sesFilter.curUser);
var dt = !sesFilter.dt || (d3.time.day(new Date(item.start)).getTime() == new Date(sesFilter.dt).getTime());
if(component && user && dt) {
filtered.push(item);
}
});
return filtered;
};
});
app.directive('draperLogo', ['$http',
function ($http) {
return {
restrict: 'E',
templateUrl: 'templates/directives/draper-logo.html',
link: function (scope, elm, attrs) {
scope.isLoading = function () {
return $http.pendingRequests.length > 0;
};
scope.$watch(scope.isLoading, function (v)
{
if (v) {
$('.draper').toggleClass('active')
} else {
$('.draper').toggleClass('active')
}
});
}
};
}]);