zz-export-pull-requests 0.3.10 → 0.3.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/epr +46 -4
  3. metadata +22 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6508eec69dd50e84840ef599ef8cef449bbb6c5ab1aaa4f4ee030ab48ba23926
4
- data.tar.gz: cfe15da1345df4cfcdd61c06777e59b7a466efa9349a4a552a498a390382ca98
3
+ metadata.gz: ec23970f15be8703f88796fd826581b0cb275913be1cbe31620659da0de5e580
4
+ data.tar.gz: 0caf623b5619c463baa10d45cdd3fedb61912058b980bbd3f77d2bf845e3f09e
5
5
  SHA512:
6
- metadata.gz: 8d46731761ebd3959d17e29b9c95888aef6c83bb44d84088ae4e6e537a55c0978c65ef838e8e0c7ae1c64c501c203263fce1fe09e305b6a482ebe165628753a4
7
- data.tar.gz: c2c2f579f861d52b1e9b453ccad9e27c59e7f4c71dcf1ed291cb17d0001c68bae3881c8436198c74a104b3468d807d2959451d9cde7eaa500afaceb3ed99f6d1
6
+ metadata.gz: 88f774bc035801a5def78caaf335f0a26be167544c0b24a7147a2fa402edd5b06831c52e24e8b00a5a154e050b8cad05a1ca3302e9d1e403ba02a831b5c7d7df
7
+ data.tar.gz: 54b5aa18b655620e74642ec2607cd47047c6a81fd054262104abbc365ee72cd903cbe709bbb5835554d5445efa80c0cfafe42fe8d75d600a679bd63111ad9dd2
data/bin/epr CHANGED
@@ -4,12 +4,13 @@ require "csv"
4
4
  require "optparse"
5
5
  require "time"
6
6
  require "logger"
7
+ require 'redis'
7
8
 
8
9
  require "github_api"
9
10
  require "gitlab"
10
11
  require "bitbucket_rest_api"
11
12
 
12
- VERSION = "0.3.10"
13
+ VERSION = "0.3.11"
13
14
  SERVICES = %w[github gitlab bitbucket]
14
15
  GIT_CONFIGS = %w[epr.token github.oauth-token]
15
16
 
@@ -22,6 +23,16 @@ EXPORT_PRS = "pr"
22
23
  EXPORT_PR_COMMENTS = "pr_comments"
23
24
 
24
25
  DEFAULT_BODY_LENGTH = 2 ** 32 - 1
26
+ BITBUCKET_RATE_LIMIT = 950 # actually, it's 1000 - we play safe here
27
+
28
+ # To store rate limit information for fast read & write.
29
+ # Data will persist in Redis DB/server until we shut it down.
30
+ # Docs: https://www.rubydoc.info/github/redis/redis-rb/master/frames
31
+ # Read: https://www.mikeperham.com/2015/09/24/storing-data-with-redis/#databases
32
+ $redisLogger = Logger.new(STDOUT)
33
+ $redisLogger.info("HELLO FROM REDIS LOGGER")
34
+ $redis = Redis.new(host: "localhost", db: 15)
35
+ $redis.set("bb-executed", 0) if $redis.get("bb-executed").nil?
25
36
 
26
37
  def localtime(t)
27
38
  # MM/DD/YY HH:MM:SS
@@ -66,8 +77,32 @@ def extract_hash_from_diff(user, repo, diff_link)
66
77
  end
67
78
 
68
79
  def get_full_hash(user, repo, short_hash)
69
- result = $bitbucket.repos.commit.get_one(user, repo, short_hash)
70
- return result["hash"]
80
+ sleep_if_limit_reached
81
+
82
+ begin
83
+ result = $bitbucket.repos.commit.get_one(user, repo, short_hash)
84
+ $redis.incr("bb-executed")
85
+ return result["hash"]
86
+ rescue
87
+ $redis.incr("bb-executed")
88
+ return "bb-import-commit-not-found"
89
+ end
90
+ end
91
+
92
+ def sleep_if_limit_reached
93
+ executions = $redis.get("bb-executed").to_i
94
+ $redisLogger.info("We have called the API for #{executions} times")
95
+
96
+ if executions >= BITBUCKET_RATE_LIMIT
97
+ now = Time.now
98
+ now_formatted = now.strftime("%I:%M:%S")
99
+ one_hour = 1*60*60
100
+ later = now + one_hour
101
+ later_formatted = later.strftime("%I:%M:%S")
102
+ $redisLogger.info("#{now_formatted} - Rate limit reached. Will pause for an hour and will resume at #{later_formatted}.")
103
+ sleep one_hour
104
+ $redis.set("bb-executed", 0)
105
+ end
71
106
  end
72
107
 
73
108
  def bitbucket(user, repo)
@@ -88,6 +123,7 @@ def bitbucket(user, repo)
88
123
 
89
124
  loop do
90
125
  page += 1
126
+ sleep_if_limit_reached
91
127
 
92
128
  prs = $bitbucket.repos.pull_request.all(user, repo, :page => page, :state => $filter.upcase)
93
129
  prs["values"].each do |pr|
@@ -115,6 +151,7 @@ def bitbucket(user, repo)
115
151
  ]
116
152
  end
117
153
 
154
+ $redis.incr("bb-executed")
118
155
  break unless prs["next"]
119
156
  end
120
157
  end
@@ -124,12 +161,15 @@ def bitbucket(user, repo)
124
161
 
125
162
  loop do
126
163
  pr_page += 1
164
+ sleep_if_limit_reached
127
165
  prs = $bitbucket.repos.pull_request.all(user, repo, :page => pr_page, :state => $filter.upcase)
128
166
 
129
167
  prs["values"].each do |pr|
130
168
  comment_page = 0
131
169
  loop do
132
170
  comment_page += 1
171
+ sleep_if_limit_reached
172
+
133
173
  comments = $bitbucket.repos.pull_request.comments(user, repo, pr.id, :page => comment_page)
134
174
  comments["values"].each do |comment|
135
175
  rows << [
@@ -151,10 +191,12 @@ def bitbucket(user, repo)
151
191
  comment["links"].code? ? extract_hash_from_diff(user, repo, comment["links"].code.href) : ""
152
192
  ]
153
193
  end
194
+ $redis.incr("bb-executed")
154
195
  break unless comments["next"]
155
196
  end
156
197
  end
157
-
198
+
199
+ $redis.incr("bb-executed")
158
200
  break unless prs["next"]
159
201
  end
160
202
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zz-export-pull-requests
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.10
4
+ version: 0.3.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zulhilmi Zainudin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-24 00:00:00.000000000 Z
11
+ date: 2019-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github_api
@@ -66,6 +66,26 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: redis
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.1'
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 4.1.3
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '4.1'
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 4.1.3
69
89
  description: Program to export GitHub, GitLab, or Bitbucket pull requests/merge requests
70
90
  and issues to CSV a file. This is forked version of https://github.com/sshaw/export-pull-requests
71
91
  project.