Merge pull request #294 from coreos-inc/logsload

Switch to using an aggregated logs query and infinite scrolling
This commit is contained in:
Jimmy Zelinskie 2015-08-03 14:52:04 -04:00
commit 8e6a0fbbee
15 changed files with 270 additions and 99 deletions

View file

@ -17,7 +17,7 @@ angular.module('quay').directive('feedbackBar', function () {
$scope.$watch('feedback', function(feedback) {
if (feedback) {
$scope.formattedMessage = StringBuilderService.buildString(feedback.message, feedback.data || {}, 'span');
$scope.formattedMessage = StringBuilderService.buildTrustedString(feedback.message, feedback.data || {}, 'span');
$scope.viewCounter++;
} else {
$scope.viewCounter = 0;

View file

@ -22,7 +22,8 @@ angular.module('quay').directive('logsView', function () {
$scope.logs = null;
$scope.kindsAllowed = null;
$scope.chartVisible = true;
$scope.logsPath = '';
$scope.chartLoading = true;
$scope.currentPage = 1;
$scope.options = {};
@ -253,6 +254,29 @@ angular.module('quay').directive('logsView', function () {
return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days);
};
var getUrl = function(suffix) {
var url = UtilService.getRestUrl('user/' + suffix);
if ($scope.organization) {
url = UtilService.getRestUrl('organization', $scope.organization.name, suffix);
}
if ($scope.repository) {
url = UtilService.getRestUrl('repository', $scope.repository.namespace, $scope.repository.name, suffix);
}
if ($scope.allLogs) {
url = UtilService.getRestUrl('superuser', suffix)
}
url += '?starttime=' + encodeURIComponent(getDateString($scope.options.logStartDate));
url += '&endtime=' + encodeURIComponent(getDateString($scope.options.logEndDate));
if ($scope.performer) {
url += '&performer=' + encodeURIComponent($scope.performer.name);
}
return url;
};
var update = function() {
var hasValidUser = !!$scope.user;
var hasValidOrg = !!$scope.organization;
@ -269,44 +293,44 @@ angular.module('quay').directive('logsView', function () {
$scope.options.logStartDate = twoWeeksAgo;
}
$scope.chartLoading = true;
var aggregateUrl = getUrl('aggregatelogs')
var loadAggregate = Restangular.one(aggregateUrl);
loadAggregate.customGET().then(function(resp) {
$scope.chart = new LogUsageChart(logKinds);
$($scope.chart).bind('filteringChanged', function(e) {
$scope.$apply(function() { $scope.kindsAllowed = e.allowed; });
});
$scope.chart.draw('bar-chart', resp.aggregated, $scope.options.logStartDate,
$scope.options.logEndDate);
$scope.chartLoading = false;
});
$scope.currentPage = 0;
$scope.hasAdditional = true;
$scope.loading = false;
$scope.logs = [];
$scope.nextPage();
};
$scope.nextPage = function() {
if ($scope.loading) { return; }
$scope.loading = true;
// Note: We construct the URLs here manually because we also use it for the download
// path.
var url = UtilService.getRestUrl('user/logs');
if ($scope.organization) {
url = UtilService.getRestUrl('organization', $scope.organization.name, 'logs');
}
if ($scope.repository) {
url = UtilService.getRestUrl('repository', $scope.repository.namespace, $scope.repository.name, 'logs');
}
if ($scope.allLogs) {
url = UtilService.getRestUrl('superuser', 'logs')
}
url += '?starttime=' + encodeURIComponent(getDateString($scope.options.logStartDate));
url += '&endtime=' + encodeURIComponent(getDateString($scope.options.logEndDate));
if ($scope.performer) {
url += '&performer=' + encodeURIComponent($scope.performer.name);
}
var loadLogs = Restangular.one(url);
var logsUrl = getUrl('logs') + '&page=' + ($scope.currentPage + 1);
var loadLogs = Restangular.one(logsUrl);
loadLogs.customGET().then(function(resp) {
$scope.logsPath = '/api/v1/' + url;
resp.logs.forEach(function(log) {
$scope.logs.push(log);
});
if (!$scope.chart) {
$scope.chart = new LogUsageChart(logKinds);
$($scope.chart).bind('filteringChanged', function(e) {
$scope.$apply(function() { $scope.kindsAllowed = e.allowed; });
});
}
$scope.chart.draw('bar-chart', resp.logs, $scope.options.logStartDate, $scope.options.logEndDate);
$scope.kindsAllowed = null;
$scope.logs = resp.logs;
$scope.loading = false;
$scope.currentPage = resp.page;
$scope.hasAdditional = resp.has_additional;
});
};
@ -318,8 +342,9 @@ angular.module('quay').directive('logsView', function () {
return allowed == null || allowed.hasOwnProperty(kind);
};
$scope.getColor = function(kind) {
return $scope.chart.getColor(kind);
$scope.getColor = function(kind, chart) {
if (!chart) { return ''; }
return chart.getColor(kind);
};
$scope.getDescription = function(log) {