Add a check_repository_usage method which adds (or removes) a notification on the user/org when they go over their plan usage
This commit is contained in:
parent
525ef8d14f
commit
e5a461989f
6 changed files with 39 additions and 28 deletions
|
@ -479,8 +479,8 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
|
|||
return userService;
|
||||
}]);
|
||||
|
||||
$provide.factory('NotificationService', ['$rootScope', '$interval', 'UserService', 'ApiService', 'StringBuilderService',
|
||||
function($rootScope, $interval, UserService, ApiService, StringBuilderService) {
|
||||
$provide.factory('NotificationService', ['$rootScope', '$interval', 'UserService', 'ApiService', 'StringBuilderService', 'PlanService', 'UserService',
|
||||
function($rootScope, $interval, UserService, ApiService, StringBuilderService, PlanService, UserService) {
|
||||
var notificationService = {
|
||||
'user': null,
|
||||
'notifications': [],
|
||||
|
@ -493,20 +493,35 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
|
|||
var notificationKinds = {
|
||||
'test_notification': {
|
||||
'level': 'primary',
|
||||
'summary': 'This is a test notification',
|
||||
'message': 'This notification is a long message for testing',
|
||||
'page': '/about/'
|
||||
},
|
||||
'password_required': {
|
||||
'level': 'error',
|
||||
'summary': 'A password is needed for your account',
|
||||
'message': 'In order to begin pushing and pulling repositories to Quay.io, a password must be set for your account',
|
||||
'page': '/user?tab=password'
|
||||
},
|
||||
'over_private_usage': {
|
||||
'level': 'error',
|
||||
'message': 'Namespace {namespace} is over its allowed private repository count. ' +
|
||||
'<br><br>Please upgrade your plan to avoid disruptions in service.',
|
||||
'page': function(metadata) {
|
||||
var organization = UserService.getOrganization(metadata['namespace']);
|
||||
if (organization) {
|
||||
return '/organization/' + metadata['namespace'] + '/admin';
|
||||
} else {
|
||||
return '/user';
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
notificationService.getPage = function(notification) {
|
||||
return notificationKinds[notification['kind']]['page'];
|
||||
var page = notificationKinds[notification['kind']]['page'];
|
||||
if (typeof page != 'string') {
|
||||
page = page(notification['metadata']);
|
||||
}
|
||||
return page;
|
||||
};
|
||||
|
||||
notificationService.getMessage = function(notification) {
|
||||
|
@ -514,20 +529,6 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
|
|||
return StringBuilderService.buildString(kindInfo['message'], notification['metadata']);
|
||||
};
|
||||
|
||||
notificationService.getSummary = function(notification) {
|
||||
var kindInfo = notificationKinds[notification['kind']];
|
||||
return StringBuilderService.buildString(kindInfo['summary'], notification['metadata']);
|
||||
};
|
||||
|
||||
notificationService.getSummaries = function(notifications) {
|
||||
var summaries = [];
|
||||
for (var i = 0; i < notifications.length; ++i) {
|
||||
var notification = notifications[i];
|
||||
summaries.push(notificationService.getSummary(notification));
|
||||
}
|
||||
return summaries.join('<br>');
|
||||
};
|
||||
|
||||
notificationService.getClass = function(notification) {
|
||||
return 'notification-' + notificationKinds[notification['kind']]['level'];
|
||||
};
|
||||
|
@ -550,7 +551,6 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
|
|||
ApiService.listUserNotifications().then(function(resp) {
|
||||
notificationService.notifications = resp['notifications'];
|
||||
notificationService.notificationClasses = notificationService.getClasses(notificationService.notifications);
|
||||
notificationService.notificationSummaries = notificationService.getSummaries(notificationService.notifications);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -559,6 +559,12 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
|
|||
pollTimerHandle = $interval(notificationService.update, 5 * 60 * 1000 /* five minutes */);
|
||||
};
|
||||
|
||||
// Watch for plan changes and update.
|
||||
PlanService.registerListener(this, function(plan) {
|
||||
notificationService.reset();
|
||||
notificationService.update();
|
||||
});
|
||||
|
||||
// Watch for user changes and update.
|
||||
$rootScope.$watch(function() { return UserService.currentUser(); }, function(currentUser) {
|
||||
notificationService.reset();
|
||||
|
|
Reference in a new issue