From 993f2a174c8f3854732b29270dd4c77b72961493 Mon Sep 17 00:00:00 2001 From: Charlton Austin Date: Thu, 18 May 2017 17:52:50 -0400 Subject: [PATCH] feat(full-stack): disable notifications after 3 failures This stops notifications from firing over and over again if they are repeatedly failing. [TESTING -> locally with docker compose, DATABASE MIGRATION -> there is a single migration] Issue: https://www.pivotaltracker.com/story/show/b144646649n - [ ] It works! - [ ] Comments provide sufficient explanations for the next contributor - [ ] Tests cover changes and corner cases - [ ] Follows Quay syntax patterns and format --- data/database.py | 1 + ...90_add_notification_number_of_failures_.py | 29 +++++++++ data/model/notification.py | 58 ++++++++++++++---- endpoints/api/repositorynotification.py | 16 ++++- endpoints/api/test/test_disallow_for_apps.py | 1 + endpoints/api/test/test_security.py | 8 +++ endpoints/notificationmethod.py | 2 +- initdb.py | 1 + .../directives/repository-events-table.html | 9 +++ static/js/directives/ui/logs-view.js | 6 ++ .../directives/ui/repository-events-table.js | 14 +++++ test/data/test.db | Bin 1679360 -> 1679360 bytes workers/notificationworker.py | 15 +++-- 13 files changed, 140 insertions(+), 20 deletions(-) create mode 100644 data/migrations/versions/dc4af11a5f90_add_notification_number_of_failures_.py diff --git a/data/database.py b/data/database.py index 457b9f77a..56d62e621 100644 --- a/data/database.py +++ b/data/database.py @@ -1006,6 +1006,7 @@ class RepositoryNotification(BaseModel): title = CharField(null=True) config_json = TextField() event_config_json = TextField(default='{}') + number_of_failures = IntegerField(default=0) class RepositoryAuthorizedEmail(BaseModel): diff --git a/data/migrations/versions/dc4af11a5f90_add_notification_number_of_failures_.py b/data/migrations/versions/dc4af11a5f90_add_notification_number_of_failures_.py new file mode 100644 index 000000000..363ae7438 --- /dev/null +++ b/data/migrations/versions/dc4af11a5f90_add_notification_number_of_failures_.py @@ -0,0 +1,29 @@ +"""add notification number of failures column + +Revision ID: dc4af11a5f90 +Revises: 53e2ac668296 +Create Date: 2017-05-16 17:24:02.630365 + +""" + +# revision identifiers, used by Alembic. +revision = 'dc4af11a5f90' +down_revision = '53e2ac668296' + +import sqlalchemy as sa +from alembic import op + + +def upgrade(tables): + op.add_column('repositorynotification', sa.Column('number_of_failures', sa.Integer(), nullable=False)) + op.bulk_insert(tables.logentrykind, [ + {'name': 'reset_repo_notification'}, + ]) + + +def downgrade(tables): + op.drop_column('repositorynotification', 'number_of_failures') + op.execute(tables + .logentrykind + .delete() + .where(tables.logentrykind.c.name == op.inline_literal('reset_repo_notification'))) diff --git a/data/model/notification.py b/data/model/notification.py index 194e2975b..ef8f40aec 100644 --- a/data/model/notification.py +++ b/data/model/notification.py @@ -1,9 +1,9 @@ import json -from data.model import InvalidNotificationException, db_transaction from data.database import (Notification, NotificationKind, User, Team, TeamMember, TeamRole, RepositoryNotification, ExternalNotificationEvent, Repository, - ExternalNotificationMethod, Namespace) + ExternalNotificationMethod, Namespace, db_for_update) +from data.model import InvalidNotificationException, db_transaction def create_notification(kind_name, target, metadata={}, lookup_path=None): @@ -125,6 +125,29 @@ def delete_matching_notifications(target, kind_name, **kwargs): notification.delete_instance() +def increment_notification_failure_count(notification_id): + """ This increments the number of failures by one """ + RepositoryNotification.update(number_of_failures=RepositoryNotification.number_of_failures + 1).where( + RepositoryNotification.id == notification_id).execute() + + +def reset_notification_number_of_failures(namespace_name, repository_name, uuid): + """ This resets the number of failures for a repo notification to 0 """ + try: + notification = RepositoryNotification.select().where(RepositoryNotification.uuid == uuid).get() + if (notification.repository.namespace_user.username != namespace_name or + notification.repository.name != repository_name): + raise InvalidNotificationException('No repository notification found with uuid: %s' % uuid) + reset_number_of_failures_to_zero(notification.id) + except RepositoryNotification.DoesNotExist: + pass + + +def reset_number_of_failures_to_zero(notification_id): + """ This resets the number of failures for a repo notification to 0 """ + RepositoryNotification.update(number_of_failures=0).where(RepositoryNotification.id == notification_id).execute() + + def create_repo_notification(repo, event_name, method_name, method_config, event_config, title=None): event = ExternalNotificationEvent.get(ExternalNotificationEvent.name == event_name) method = ExternalNotificationMethod.get(ExternalNotificationMethod.name == method_name) @@ -134,23 +157,34 @@ def create_repo_notification(repo, event_name, method_name, method_config, event event_config_json=json.dumps(event_config)) +def _base_get_notification(uuid): + """ This is a base query for get statements """ + return (RepositoryNotification + .select(RepositoryNotification, Repository, Namespace) + .join(Repository) + .join(Namespace, on=(Repository.namespace_user == Namespace.id)) + .where(RepositoryNotification.uuid == uuid)) + + +def get_enabled_notification(uuid): + """ This returns a notification with less than 3 failures """ + try: + return _base_get_notification(uuid).where(RepositoryNotification.number_of_failures < 3).get() + except RepositoryNotification.DoesNotExist: + raise InvalidNotificationException('No repository notification found with uuid: %s' % uuid) + + def get_repo_notification(uuid): try: - return (RepositoryNotification - .select(RepositoryNotification, Repository, Namespace) - .join(Repository) - .join(Namespace, on=(Repository.namespace_user == Namespace.id)) - .where(RepositoryNotification.uuid == uuid) - .get()) + return _base_get_notification(uuid).get() except RepositoryNotification.DoesNotExist: - raise InvalidNotificationException('No repository notification found with id: %s' % uuid) + raise InvalidNotificationException('No repository notification found with uuid: %s' % uuid) def delete_repo_notification(namespace_name, repository_name, uuid): found = get_repo_notification(uuid) - if (found.repository.namespace_user.username != namespace_name or - found.repository.name != repository_name): - raise InvalidNotificationException('No repository notifiation found with id: %s' % uuid) + if found.repository.namespace_user.username != namespace_name or found.repository.name != repository_name: + raise InvalidNotificationException('No repository notifiation found with uuid: %s' % uuid) found.delete_instance() return found diff --git a/endpoints/api/repositorynotification.py b/endpoints/api/repositorynotification.py index ac14ec2e0..9b3e5ae30 100644 --- a/endpoints/api/repositorynotification.py +++ b/endpoints/api/repositorynotification.py @@ -2,6 +2,7 @@ import json +import logging from flask import request from app import notification_queue @@ -14,7 +15,7 @@ from endpoints.notificationmethod import (NotificationMethod, CannotValidateNotificationMethodException) from endpoints.notificationhelper import build_notification_data from data import model - +logger = logging.getLogger(__name__) def notification_view(note): config = {} @@ -36,6 +37,7 @@ def notification_view(note): 'config': config, 'title': note.title, 'event_config': event_config, + 'number_of_failures': note.number_of_failures, } @@ -154,6 +156,18 @@ class RepositoryNotification(RepositoryParamResource): return 'No Content', 204 + @require_repo_admin + @nickname('resetRepositoryNotificationFailures') + @disallow_for_app_repositories + def post(self, namespace, repository, uuid): + """ Resets repository notification to 0 failures. """ + model.notification.reset_notification_number_of_failures(namespace, repository, uuid) + log_action('reset_repo_notification', namespace, + {'repo': repository, 'namespace': namespace, 'notification_id': uuid}, + repo=model.repository.get_repository(namespace, repository)) + + return 'No Content', 204 + @resource('/v1/repository//notification//test') @path_param('repository', 'The full path of the repository. e.g. namespace/name') diff --git a/endpoints/api/test/test_disallow_for_apps.py b/endpoints/api/test/test_disallow_for_apps.py index 27d96c8c2..6de35c03b 100644 --- a/endpoints/api/test/test_disallow_for_apps.py +++ b/endpoints/api/test/test_disallow_for_apps.py @@ -45,6 +45,7 @@ FIELD_ARGS = {'trigger_uuid': '1234', 'field_name': 'foobar'} (RepositoryNotificationList, 'post', None), (RepositoryNotification, 'get', NOTIFICATION_ARGS), (RepositoryNotification, 'delete', NOTIFICATION_ARGS), + (RepositoryNotification, 'post', NOTIFICATION_ARGS), (TestRepositoryNotification, 'post', NOTIFICATION_ARGS), (RepositoryImageSecurity, 'get', IMAGE_ARGS), (RepositoryManifestSecurity, 'get', MANIFEST_ARGS), diff --git a/endpoints/api/test/test_security.py b/endpoints/api/test/test_security.py index 9f1da90cc..40140b6fa 100644 --- a/endpoints/api/test/test_security.py +++ b/endpoints/api/test/test_security.py @@ -2,6 +2,7 @@ import pytest from flask_principal import AnonymousIdentity from endpoints.api import api +from endpoints.api.repositorynotification import RepositoryNotification from endpoints.api.team import OrganizationTeamSyncing from endpoints.api.test.shared import client_with_identity, conduct_api_call from endpoints.api.repository import RepositoryTrust @@ -16,6 +17,8 @@ TEAM_PARAMS = {'orgname': 'buynlarge', 'teamname': 'owners'} BUILD_PARAMS = {'build_uuid': 'test-1234'} REPO_PARAMS = {'repository': 'devtable/someapp'} SEARCH_PARAMS = {'query': ''} +NOTIFICATION_PARAMS = {'namespace': 'devtable', 'repository': 'devtable/simple', 'uuid': 'some uuid'} + @pytest.mark.parametrize('resource,method,params,body,identity,expected', [ (OrganizationTeamSyncing, 'POST', TEAM_PARAMS, {}, None, 403), @@ -52,6 +55,11 @@ SEARCH_PARAMS = {'query': ''} (RepositorySignatures, 'GET', REPO_PARAMS, {}, 'reader', 403), (RepositorySignatures, 'GET', REPO_PARAMS, {}, 'devtable', 404), + (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, None, 403), + (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, 'freshuser', 403), + (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, 'reader', 403), + (RepositoryNotification, 'POST', NOTIFICATION_PARAMS, {}, 'devtable', 204), + (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, None, 403), (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, 'freshuser', 403), (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, 'reader', 403), diff --git a/endpoints/notificationmethod.py b/endpoints/notificationmethod.py index 7bd57f026..06efa2109 100644 --- a/endpoints/notificationmethod.py +++ b/endpoints/notificationmethod.py @@ -51,6 +51,7 @@ class NotificationMethod(object): """ raise NotImplementedError + def perform(self, notification_obj, event_handler, notification_data): """ Performs the notification method. @@ -114,7 +115,6 @@ class QuayNotificationMethod(NotificationMethod): # Lookup the team's members return (True, None, model.organization.get_organization_team_members(org_team.id)) - def perform(self, notification_obj, event_handler, notification_data): repository = notification_obj.repository if not repository: diff --git a/initdb.py b/initdb.py index c196bfff0..387cc50f8 100644 --- a/initdb.py +++ b/initdb.py @@ -332,6 +332,7 @@ def initialize_database(): LogEntryKind.create(name='add_repo_notification') LogEntryKind.create(name='delete_repo_notification') + LogEntryKind.create(name='reset_repo_notification') LogEntryKind.create(name='regenerate_robot_token') diff --git a/static/directives/repository-events-table.html b/static/directives/repository-events-table.html index e8e0c963a..4a97cda02 100644 --- a/static/directives/repository-events-table.html +++ b/static/directives/repository-events-table.html @@ -29,6 +29,7 @@ Title Event Notification + Enabled @@ -70,6 +71,11 @@ + + Disabled due to 3 failed attempts in a row + Enabled + + @@ -93,6 +99,9 @@ Delete Notification + + Re-enable Notification + diff --git a/static/js/directives/ui/logs-view.js b/static/js/directives/ui/logs-view.js index d1054b026..c259857ba 100644 --- a/static/js/directives/ui/logs-view.js +++ b/static/js/directives/ui/logs-view.js @@ -225,6 +225,11 @@ angular.module('quay').directive('logsView', function () { return 'Delete notification of event "' + eventData['title'] + '" for repository {namespace}/{repo}'; }, + 'reset_repo_notification': function(metadata) { + var eventData = ExternalNotificationData.getEventInfo(metadata.event); + return 'Re-enable notification of event "' + eventData['title'] + '" for repository {namespace}/{repo}'; + }, + 'regenerate_robot_token': 'Regenerated token for robot {robot}', 'service_key_create': function(metadata) { @@ -302,6 +307,7 @@ angular.module('quay').directive('logsView', function () { 'reset_application_client_secret': 'Reset Client Secret', 'add_repo_notification': 'Add repository notification', 'delete_repo_notification': 'Delete repository notification', + 'reset_repo_notification': 'Re-enable repository notification', 'regenerate_robot_token': 'Regenerate Robot Token', 'service_key_create': 'Create Service Key', 'service_key_approve': 'Approve Service Key', diff --git a/static/js/directives/ui/repository-events-table.js b/static/js/directives/ui/repository-events-table.js index 02c94ba73..90bdadc74 100644 --- a/static/js/directives/ui/repository-events-table.js +++ b/static/js/directives/ui/repository-events-table.js @@ -93,6 +93,20 @@ angular.module('quay').directive('repositoryEventsTable', function () { }, ApiService.errorDisplay('Cannot delete notification')); }; + $scope.reenableNotification = function(notification) { + var params = { + 'repository': $scope.repository.namespace + '/' + $scope.repository.name, + 'uuid': notification.uuid + }; + + ApiService.resetRepositoryNotificationFailures(null, params).then(function() { + var index = $.inArray(notification, $scope.notifications); + if (index < 0) { return; } + $scope.notifications[index].number_of_failures = 0 + }, ApiService.errorDisplay('Cannot re-enable notification')); + }; + + $scope.showNotifyInfo = function(notification, field) { var dom = document.createElement('input'); dom.setAttribute('type', 'text'); diff --git a/test/data/test.db b/test/data/test.db index 9cd43ae05ff031aa399456f1b1365465e5623127..6514b43796d82fb48afc7e894b02477d22f96453 100644 GIT binary patch delta 75239 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 delta 74753 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 diff --git a/workers/notificationworker.py b/workers/notificationworker.py index e922653a8..67dd2fff0 100644 --- a/workers/notificationworker.py +++ b/workers/notificationworker.py @@ -1,6 +1,5 @@ -import logging - from app import notification_queue +from data.model.notification import increment_notification_failure_count, reset_number_of_failures_to_zero from endpoints.notificationmethod import NotificationMethod, InvalidNotificationMethodException from endpoints.notificationevent import NotificationEvent, InvalidNotificationEventException @@ -9,7 +8,7 @@ from workers.queueworker import QueueWorker, JobException from data import model from data.model import InvalidNotificationException -logger = logging.getLogger(__name__) + class NotificationWorker(QueueWorker): @@ -17,9 +16,8 @@ class NotificationWorker(QueueWorker): notification_uuid = job_details['notification_uuid'] try: - notification = model.notification.get_repo_notification(notification_uuid) + notification = model.notification.get_enabled_notification(notification_uuid) except InvalidNotificationException: - # Probably deleted. return event_name = notification.event.name @@ -36,7 +34,12 @@ class NotificationWorker(QueueWorker): raise JobException('Cannot find notification event: %s' % ex.message) if event_handler.should_perform(job_details['event_data'], notification): - method_handler.perform(notification, event_handler, job_details) + try: + method_handler.perform(notification, event_handler, job_details) + reset_number_of_failures_to_zero(notification.id) + except (NotificationMethod, KeyError) as exc: + increment_notification_failure_count(notification.id) + raise exc if __name__ == "__main__":