Class: Embulk::Input::JiraApi::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/embulk/input/jira_api/client.rb

Constant Summary collapse

PARALLEL_THREAD_COUNT =
50
SEARCH_TIMEOUT_SECONDS =
5
SEARCH_ISSUES_TIMEOUT_SECONDS =
60
DEFAULT_SEARCH_RETRY_TIMES =
10

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.setup(&block) ⇒ Object



15
16
17
18
# File 'lib/embulk/input/jira_api/client.rb', line 15

def self.setup(&block)
  Jiralicious.configure(&block)
  new
end

Instance Method Details

#check_user_credential(username) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/embulk/input/jira_api/client.rb', line 43

def check_user_credential(username)
  Jiralicious::User.search(username)
rescue Jiralicious::JqlError, Jiralicious::AuthenticationError, Jiralicious::NotLoggedIn, Jiralicious::InvalidLogin => e
  raise Embulk::ConfigError.new(e.message)
rescue ::SocketError => e
  # wrong `uri` option given
  raise Embulk::ConfigError.new(e.message)
rescue MultiJson::ParseError => e
  html = e.message
  title = html[%r|<title>(.*?)</title>|, 1] #=> e.g. "Unauthorized (401)"
  raise ConfigError.new("Can not authorize with your credential.") if title == 'Unauthorized (401)'
end

#search(jql, options = {}) ⇒ Object



33
34
35
36
37
# File 'lib/embulk/input/jira_api/client.rb', line 33

def search(jql, options={})
  timeout_and_retry(SEARCH_TIMEOUT_SECONDS) do
    Jiralicious.search(jql, options)
  end
end

#search_issues(jql, options = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/embulk/input/jira_api/client.rb', line 20

def search_issues(jql, options={})
  timeout_and_retry(SEARCH_ISSUES_TIMEOUT_SECONDS) do
    issues_raw = search(jql, options).issues_raw

    # TODO: below code has race-conditon.
    Parallel.map(issues_raw, in_threads: PARALLEL_THREAD_COUNT) do |issue_raw|
      # https://github.com/dorack/jiralicious/blob/v0.4.0/lib/jiralicious/search_result.rb#L32-34
      issue = Jiralicious::Issue.find(issue_raw["key"])
      JiraApi::Issue.new(issue)
    end
  end
end

#total_count(jql) ⇒ Object



39
40
41
# File 'lib/embulk/input/jira_api/client.rb', line 39

def total_count(jql)
  search(jql, max_results: 1).num_results
end