From 6f0eaf7091f161e2cc70d2e8b62e555ec2697404 Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 4 Feb 2015 19:31:46 +0100 Subject: [PATCH 1/2] Don't save data from pusher that won't likely be used If user is logged in and doesn't keep 'recent repositories' tab opened, most of the pusher events from 'common' channel are useless. This commit introduces a logic to reject pusher events if: * recent tab hasn't been opened * user is signed in * Travis CI for open source is used * repository for a given event is not yet in store * repository for a given event is not part of current user's repositories --- app/routes/main/recent.coffee | 3 +++ app/store.coffee | 17 +++++++++++++++++ app/utils/auth.coffee | 2 ++ 3 files changed, 22 insertions(+) diff --git a/app/routes/main/recent.coffee b/app/routes/main/recent.coffee index 9ac661d9..5e8e2e2f 100644 --- a/app/routes/main/recent.coffee +++ b/app/routes/main/recent.coffee @@ -4,4 +4,7 @@ Route = MainTabRoute.extend reposTabName: 'recent' + activate: -> + @store.set('recentReposOpened', true) + `export default Route` diff --git a/app/store.coffee b/app/store.coffee index 213403df..d5c40077 100644 --- a/app/store.coffee +++ b/app/store.coffee @@ -1,4 +1,5 @@ `import DS from 'ember-data'` +`import config from 'travis/config/environment'` Store = DS.Store.extend defaultAdapter: 'application' @@ -7,6 +8,22 @@ Store = DS.Store.extend receivePusherEvent: (event, data) -> [name, type] = event.split(':') + auth = @container.lookup('auth:main') + if !@get('recentReposOpened') && event != 'job:log' && auth.get('signedIn') && + !config.pro && !config.enterprise + # if recent repos hasn't been opened yet, we can safely + # drop any events that doesn't belong to repos owned by + # the logged in user and that aren't related to any + # repositories that are already opened + + permissions = auth.get('permissions') + if name == 'job' + id = data.job.repository_id + else if name == 'build' + id = data.repository.id + + return if !@hasRecordForId('repo', id) && !permissions.contains(id) + if name == 'job' && data.job?.commit @pushPayload(commits: [data.job.commit]) diff --git a/app/utils/auth.coffee b/app/utils/auth.coffee index 9d2c7ff9..5852edee 100644 --- a/app/utils/auth.coffee +++ b/app/utils/auth.coffee @@ -144,4 +144,6 @@ Auth = Ember.Object.extend "#{location.protocol}//www.gravatar.com/avatar/#{@get('currentUser.gravatarId')}?s=48&d=mm" ).property('currentUser.gravatarId') + permissions: Ember.computed.alias('currentUser.permissions') + `export default Auth` From e33af8a672869cf70b1c73d0109627fbf75ce9ad Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 4 Feb 2015 19:47:38 +0100 Subject: [PATCH 2/2] Go one step further with lowering pusher data landing into store If user switches to recent repos tab and then switches away, there's really no point in pushing everything into store. We can still reject all of the events for repos that don't belong to the current user and are not yet in the store. --- app/routes/main/recent.coffee | 5 ++++- app/store.coffee | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/routes/main/recent.coffee b/app/routes/main/recent.coffee index 5e8e2e2f..0d0ff136 100644 --- a/app/routes/main/recent.coffee +++ b/app/routes/main/recent.coffee @@ -5,6 +5,9 @@ Route = MainTabRoute.extend reposTabName: 'recent' activate: -> - @store.set('recentReposOpened', true) + @store.set('recentReposTabIsOpened', true) + + deactivate: -> + @store.set('recentReposTabIsOpened', true) `export default Route` diff --git a/app/store.coffee b/app/store.coffee index d5c40077..75267450 100644 --- a/app/store.coffee +++ b/app/store.coffee @@ -9,7 +9,7 @@ Store = DS.Store.extend [name, type] = event.split(':') auth = @container.lookup('auth:main') - if !@get('recentReposOpened') && event != 'job:log' && auth.get('signedIn') && + if !@get('recentReposTabIsOpened') && event != 'job:log' && auth.get('signedIn') && !config.pro && !config.enterprise # if recent repos hasn't been opened yet, we can safely # drop any events that doesn't belong to repos owned by