opsask 2.3.0 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 059273659a5289a1e0780e64270cdc848d11e952
4
- data.tar.gz: 35af36122a71a36d9701c9dcde00c42ea626cfe3
3
+ metadata.gz: fcb3fb4ddc972c43047b7d3054306e24c46bf84b
4
+ data.tar.gz: d64ef6ee16b59f914430269d709c23b0080aceb5
5
5
  SHA512:
6
- metadata.gz: 2358424286dc896a03d256401cc0bbbeaa0ed2a30bb28f38e3595da0259b13fa410a13fa4e5111788c8e47a0aeae4cbb51b3aca3e48630a695221a3a1e4dca1b
7
- data.tar.gz: 2ebedfaa512641bd2615d95a01d9f8803c3251895b8df271136081f13f3fbbf35f31383cb278047058cd3b81fd315ecea1f93f6441fcb314d71a6371dbcf6fe8
6
+ metadata.gz: d7ab393965bc433533c93435bbd5147a1ce443507c6daad0d7a9b475102d2519af342c23f9153256f17d387d83fcf5e1f6cf24aae151e2887d957d064d0788ff
7
+ data.tar.gz: f792aa96fe731563e1b34f5e9483780ac3742fcf239ddca9d7544e04c8419af7694bc35276b2b53527cf32c569af606c932ff92e96e7a90e22311efff81d38cb
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.3.1
data/lib/opsask/app.rb CHANGED
@@ -5,6 +5,7 @@ require 'rack-flash'
5
5
  require 'json'
6
6
  require 'jira'
7
7
  require 'tilt/erb'
8
+ require 'logger'
8
9
 
9
10
  require_relative 'helpers'
10
11
  require_relative 'metadata'
@@ -14,8 +15,15 @@ module OpsAsk
14
15
  class App < Sinatra::Base
15
16
  include OpsAsk::Helpers
16
17
 
18
+ @@room = nil
19
+
17
20
  set :root, OpsAsk::ROOT
18
21
 
22
+ enable :logging
23
+ configure :development do
24
+ set :logging, Logger::DEBUG
25
+ end
26
+
19
27
  # Add flash support
20
28
  enable :sessions
21
29
  use Rack::Flash
@@ -27,6 +35,7 @@ module OpsAsk
27
35
 
28
36
  # Serve up our form
29
37
  get '/' do
38
+ # $stderr.puts 'get-/'
30
39
  erb :index, locals: {
31
40
  jiras_for_today: issues_for(today),
32
41
  jiras_for_tomorrow: issues_for(tomorrow),
@@ -36,6 +45,7 @@ module OpsAsk
36
45
  end
37
46
 
38
47
  get '/glance' do
48
+ # $stderr.puts 'get-/glance'
39
49
  erb :days, locals: {
40
50
  jiras_by_day: issues_for_days(2),
41
51
  untracked_jiras: untracked_issues,
@@ -44,6 +54,7 @@ module OpsAsk
44
54
  end
45
55
 
46
56
  get '/week' do
57
+ # $stderr.puts 'get-/week'
47
58
  erb :days, locals: {
48
59
  jiras_by_day: issues_for_days(4),
49
60
  untracked_jiras: untracked_issues,
@@ -52,6 +63,7 @@ module OpsAsk
52
63
  end
53
64
 
54
65
  get '/days/:n' do
66
+ # $stderr.puts 'get-/days/:n'
55
67
  n, m = params[:n].split('+', 2)
56
68
  n = n.to_i
57
69
  m = m.nil? ? 0 : m.to_i
@@ -63,16 +75,21 @@ module OpsAsk
63
75
  end
64
76
 
65
77
  get '/room' do
78
+ # $stderr.puts 'get-/room'
66
79
  content_type :json
67
- room = {}
68
- (0..365).each do |n|
69
- date = today n * one_day
70
- room[date] = room_for_new_jiras_for? date
80
+ @@room ||= {}
81
+ if @@room.empty?
82
+ # $stderr.puts 'RECALC ROOM!'
83
+ (0..365).each do |n|
84
+ date = today n * one_day
85
+ @@room[date] = room_for_new_jiras_for? date
86
+ end
71
87
  end
72
- JSON.pretty_generate(room)
88
+ JSON.pretty_generate(@@room)
73
89
  end
74
90
 
75
91
  get '/untracked' do
92
+ # $stderr.puts 'get-/untracked'
76
93
  erb :untracked, locals: {
77
94
  untracked_jiras: untracked_issues,
78
95
  stragglers: straggling_issues
@@ -80,6 +97,7 @@ module OpsAsk
80
97
  end
81
98
 
82
99
  get '/stragglers' do
100
+ # $stderr.puts 'get-/stragglers'
83
101
  erb :stragglers, locals: {
84
102
  untracked_jiras: untracked_issues,
85
103
  stragglers: straggling_issues
@@ -87,6 +105,7 @@ module OpsAsk
87
105
  end
88
106
 
89
107
  get '/sprint/:sprint_num' do
108
+ # $stderr.puts 'get-/sprint/:n'
90
109
  num = params[:sprint_num]
91
110
  sprint = get_sprint(num)
92
111
  id = sprint['id']
@@ -114,6 +133,7 @@ module OpsAsk
114
133
  end
115
134
 
116
135
  get '/sprint' do
136
+ # $stderr.puts 'get-/sprint'
117
137
  num = current_sprint_num
118
138
  id = current_sprint_id
119
139
  sprint = current_sprint
@@ -142,11 +162,13 @@ module OpsAsk
142
162
 
143
163
  # I think everyone should do this
144
164
  get '/version' do
165
+ # $stderr.puts 'get-/version'
145
166
  content_type :txt
146
167
  "opsask #{settings.config[:app_version]}"
147
168
  end
148
169
 
149
170
  get '/v' do
171
+ # $stderr.puts 'get-/v'
150
172
  content_type :txt
151
173
  settings.config[:app_version]
152
174
  end
@@ -154,6 +176,7 @@ module OpsAsk
154
176
 
155
177
  # Try to create a JIRA
156
178
  post '/' do
179
+ # $stderr.puts 'post-/'
157
180
  component, summary, description, assign_to_me, epic, ops_only, datepicker = validate_jira_params
158
181
 
159
182
  if datepicker.nil? || datepicker.empty?
@@ -175,6 +198,7 @@ module OpsAsk
175
198
  | ]
176
199
  end
177
200
 
201
+ @@room = nil # will recalculate
178
202
  redirect '/'
179
203
  end
180
204
 
@@ -182,11 +206,13 @@ module OpsAsk
182
206
  # Public assets
183
207
  %w[ css img js fonts ].each do |asset|
184
208
  get "/#{asset}/:file" do
209
+ # $stderr.puts 'get-/%s/:file' % asset
185
210
  send_file "public/#{asset}/#{params[:file]}", :disposition => 'inline'
186
211
  end
187
212
  end
188
213
 
189
214
  get '/favicon.ico' do
215
+ # $stderr.puts 'get-/favicon'
190
216
  send_file 'public/favicon.ico', :disposition => 'inline'
191
217
  end
192
218
 
@@ -196,6 +222,7 @@ module OpsAsk
196
222
  # OAuth consumer details including the consumer key, private key,
197
223
  # site uri, and the request token, access token, and authorize paths
198
224
  before do
225
+ # $stderr.puts 'before-1'
199
226
  options = {
200
227
  :site => settings.config[:jira_url],
201
228
  :context_path => '',
@@ -208,9 +235,11 @@ module OpsAsk
208
235
  :consumer_key => settings.config[:jira_consumer_key]
209
236
  }
210
237
 
238
+ # $stderr.puts 'before-2'
211
239
  @jira_client = JIRA::Client.new(options)
212
240
  # @jira_client.consumer.http.set_debug_output($stderr)
213
241
 
242
+ # $stderr.puts 'before-3'
214
243
  # Add AccessToken if authorised previously.
215
244
  if session[:jira_auth]
216
245
  @jira_client.set_access_token(
@@ -223,6 +252,7 @@ module OpsAsk
223
252
  end
224
253
  end
225
254
 
255
+ # $stderr.puts 'before-4'
226
256
  # Keep a pointer to myself
227
257
  begin
228
258
  response = @jira_client.get(
@@ -234,6 +264,7 @@ module OpsAsk
234
264
  end
235
265
 
236
266
  back_to = request.fullpath
267
+ # $stderr.puts 'before-5 (back_to=%s)' % back_to.inspect
237
268
  case back_to
238
269
  when /callback/
239
270
  when /login/
@@ -245,31 +276,36 @@ module OpsAsk
245
276
  # Retrieves the @access_token then stores it inside a session cookie. In a real app,
246
277
  # you'll want to persist the token in a datastore associated with the user.
247
278
  get '/callback/' do
279
+ # $stderr.puts 'callback-1'
248
280
  request_token = @jira_client.set_request_token(
249
281
  session[:request_token], session[:request_secret]
250
282
  )
283
+ # $stderr.puts 'callback-2'
251
284
  access_token = @jira_client.init_access_token(
252
285
  :oauth_verifier => params[:oauth_verifier]
253
286
  )
254
-
287
+ # $stderr.puts 'callback-3'
255
288
  session[:jira_auth] = {
256
289
  :access_token => access_token.token,
257
290
  :access_key => access_token.secret
258
291
  }
259
-
292
+ # $stderr.puts 'callback-4'
260
293
  session.delete(:request_token)
261
294
  session.delete(:request_secret)
262
295
  back_to = session.delete(:back_to) || '/'
263
-
296
+ # $stderr.puts 'callback-5'
264
297
  redirect back_to
265
298
  end
266
299
 
267
300
  # Initialize the JIRA session
268
301
  get '/login' do
302
+ # $stderr.puts 'get-/login-1'
269
303
  if logged_in?
304
+ # $stderr.puts 'get-/login-3 (was logged in)'
270
305
  session.clear
271
306
  redirect '/logout'
272
307
  end
308
+ # $stderr.puts 'get-/login-2 (was logged out)'
273
309
  request_token = @jira_client.request_token
274
310
  session[:request_token] = request_token.token
275
311
  session[:request_secret] = request_token.secret
@@ -278,7 +314,11 @@ module OpsAsk
278
314
 
279
315
  # Expire the JIRA session
280
316
  get '/logout' do
317
+ # $stderr.puts 'get-/logout'
281
318
  session.delete(:jira_auth)
319
+ session.delete(:request_token)
320
+ session.delete(:request_secret)
321
+ session.delete(:back_to)
282
322
  redirect '/'
283
323
  end
284
324
 
@@ -356,14 +356,13 @@ module OpsAsk
356
356
  params['jira-summary'],
357
357
  params['jira-description'],
358
358
  !!params['jira-assign_to_me'],
359
- params['jira-epic'],
359
+ nil,
360
360
  !!params['jira-ops_only'],
361
361
  params['jira-datepicker']
362
362
  ]
363
363
  end
364
364
 
365
365
  def create_jira duedate, component, summary, description, assign_to_me, epic, ops_only
366
- epic = 'INF-3091' if epic.nil? # OpsAsk default epic
367
366
  assignee = assign_to_me ? @me : settings.config[:assignee]
368
367
  components = []
369
368
  components = [ { name: component } ] unless component
@@ -383,7 +382,6 @@ module OpsAsk
383
382
  reporter: { name: @me },
384
383
  labels: labels,
385
384
  customfield_10002: 1, # Story Points = 1
386
- # customfield_10350: epic,
387
385
  customfield_10040: { id: '-1' } # Release Priority = None
388
386
  }
389
387
  }
@@ -469,30 +467,6 @@ module OpsAsk
469
467
  end
470
468
  end
471
469
 
472
- def epic key
473
- url = "#{settings.config[:jira_url]}/rest/api/latest/issue/#{key}"
474
- curl_request = Curl::Easy.http_get(url) do |curl|
475
- curl.headers['Accept'] = 'application/json'
476
- curl.headers['Content-Type'] = 'application/json'
477
- curl.http_auth_types = :basic
478
- curl.username = settings.config[:jira_user]
479
- curl.password = settings.config[:jira_pass]
480
- curl.verbose = true
481
- end
482
-
483
- raw_response = curl_request.body_str
484
- begin
485
- response = JSON::parse raw_response
486
- rescue
487
- $stderr.puts "Failed to parse response from JIRA: #{raw_response}"
488
- return nil
489
- end
490
- return {
491
- 'key' => response['key'],
492
- 'name' => response['fields']['customfield_10351'] || response['fields']['summary']
493
- }
494
- end
495
-
496
470
  def normalized_jql query, \
497
471
  project: settings.config[:project_name], \
498
472
  require_label: settings.config[:require_label],
@@ -1,6 +1,3 @@
1
1
  <% components.each do |component| %>
2
2
  <span class="label radius"><%= component['name'] %></span>
3
- <% end unless components.nil? %>
4
- <% unless epic.nil? %>
5
- <span class="label radius"><%= epic['name'] %></span>
6
- <% end %>
3
+ <% end unless components.nil? %>
data/views/_form.erb CHANGED
@@ -1,14 +1,6 @@
1
1
  <% if not logged_in? %>
2
2
  <!-- Nothing to see here... -->
3
3
 
4
- <% elsif not room_for_new_jiras? %>
5
- <h3 class="ops-queues-are-full">Sorry, we&#8217;re out of room</h3>
6
- <p class="ops-queues-are-full">
7
- We've reached the maximum number of OpsAsks filed for the next couple of
8
- days. Please send your request to the Network Operations mailing list
9
- (<a href="mailto:netops@bluejeans.com">netops@bluejeans.com</a>), and we'll
10
- respond shortly. Our apologies for any inconvenience.</p>
11
-
12
4
  <% else %>
13
5
  <form method="post" action="/" data-abide>
14
6
  <fieldset>
data/views/_queue.erb CHANGED
@@ -16,7 +16,7 @@
16
16
  { 'name' => settings.config[:ignore_label] }
17
17
  ]
18
18
  %>
19
- <h3><%= jira.key %> <%= partial :components, locals: { components: labels, epic: epic(jira.fields['customfield_10350']) } %></h3>
19
+ <h3><%= jira.key %> <%= partial :components, locals: { components: labels } %></h3>
20
20
  <p><%= jira.fields['summary'] %></p>
21
21
  <p><%= %></p>
22
22
  </a>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opsask
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Clemmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-12 00:00:00.000000000 Z
11
+ date: 2015-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor