bicho 0.0.17 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +9 -0
- data/.rubocop_todo.yml +0 -7
- data/Gemfile +2 -0
- data/README.md +4 -2
- data/Rakefile +3 -2
- data/bicho.gemspec +6 -1
- data/bin/bicho +2 -0
- data/lib/bicho.rb +2 -0
- data/lib/bicho/attachment.rb +2 -0
- data/lib/bicho/bug.rb +12 -0
- data/lib/bicho/cli/command.rb +2 -0
- data/lib/bicho/cli/commands/attachments.rb +2 -0
- data/lib/bicho/cli/commands/history.rb +2 -0
- data/lib/bicho/cli/commands/reopen.rb +60 -0
- data/lib/bicho/cli/commands/search.rb +11 -2
- data/lib/bicho/cli/commands/show.rb +2 -0
- data/lib/bicho/cli/commands/version.rb +2 -0
- data/lib/bicho/client.rb +19 -0
- data/lib/bicho/common_client.rb +2 -0
- data/lib/bicho/export.rb +31 -0
- data/lib/bicho/ext/logger_colors.rb +21 -19
- data/lib/bicho/history.rb +2 -0
- data/lib/bicho/logging.rb +2 -0
- data/lib/bicho/plugins/aliases.rb +2 -0
- data/lib/bicho/plugins/novell.rb +4 -2
- data/lib/bicho/plugins/user.rb +3 -1
- data/lib/bicho/query.rb +2 -0
- data/lib/bicho/reports.rb +2 -0
- data/lib/bicho/version.rb +3 -1
- data/test/fixtures/bugzilla_gnome_org_search_prometheus_export.txt +23 -0
- data/test/fixtures/vcr/bugzilla_gnome_org_search_prometheus_export.yml +59 -0
- data/test/helper.rb +3 -0
- data/test/test_attachments.rb +2 -0
- data/test/test_export.rb +14 -0
- data/test/test_history.rb +3 -1
- data/test/test_novell_plugin.rb +2 -0
- data/test/test_query.rb +2 -0
- data/test/test_reports.rb +2 -0
- data/test/test_user_plugin.rb +2 -0
- data/test/test_version.rb +2 -0
- metadata +24 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 989cbc71faf777687a387a11719ff751e4379221924201ef1119299695cd9048
|
4
|
+
data.tar.gz: ed3b3d6edefe8f016ce659920465ac585fefaaa30f8e7d2f1b6bae287afbbec1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6ed3ef1413ecb35359686c23ff4eff39442dc7f2e7513e881a57b20627be34795d7beecc4217b7e29c94ac3c9bba2bf91f4606e5072da0789e19023987bc97e
|
7
|
+
data.tar.gz: 37b5da1cad2f97e88def0bc0b2e4d3f65cdea47878101d201439781f710534edb1fcaf61a3552b89b7489525b9ac25b4b686e9db4b205166a5c0aa81f2a35c70
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -6,13 +6,6 @@
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count: 1
|
10
|
-
# Configuration parameters: Include.
|
11
|
-
# Include: **/*.gemspec
|
12
|
-
Gemspec/RequiredRubyVersion:
|
13
|
-
Exclude:
|
14
|
-
- 'bicho.gemspec'
|
15
|
-
|
16
9
|
# Offense count: 1
|
17
10
|
# Cop supports --auto-correct.
|
18
11
|
Layout/ClosingHeredocIndentation:
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
* http://github.com/dmacvicar/bicho
|
4
4
|
|
5
5
|
![stable](https://img.shields.io/badge/stability-stable-green.svg)
|
6
|
-
![maintained](https://img.shields.io/maintenance/yes/
|
6
|
+
![maintained](https://img.shields.io/maintenance/yes/2019.svg)
|
7
7
|
[![Build Status](https://travis-ci.org/dmacvicar/bicho.svg?branch=master)](https://travis-ci.org/dmacvicar/bicho)
|
8
8
|
|
9
9
|
## Introduction
|
@@ -19,10 +19,12 @@ Main use case is report generation, therefore only the following
|
|
19
19
|
features are implemented right now:
|
20
20
|
|
21
21
|
* get bugs
|
22
|
-
* search bugs
|
22
|
+
* search bugs (create queries)
|
23
23
|
|
24
24
|
Plugins can be written to deal with specific bugzilla installations.
|
25
25
|
|
26
|
+
Additionally, some utilities are provided, like exporting the total number of bugs of a query to the [Prometheus push gateway](https://prometheus.io/docs/practices/pushing/) format.
|
27
|
+
|
26
28
|
## Example (API)
|
27
29
|
|
28
30
|
### Client API
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$LOAD_PATH.push(File.join(File.dirname(__FILE__), 'lib'))
|
2
4
|
require 'bundler/gem_tasks'
|
3
5
|
require 'bicho/version'
|
@@ -6,9 +8,8 @@ require 'rake/testtask'
|
|
6
8
|
extra_docs = ['README*', 'TODO*', 'CHANGELOG*']
|
7
9
|
|
8
10
|
task default: [:test]
|
9
|
-
|
10
11
|
Rake::TestTask.new do |t|
|
11
|
-
t.
|
12
|
+
t.pattern = 'test/test_*.rb'
|
12
13
|
t.verbose = true if ENV['DEBUG']
|
13
14
|
end
|
14
15
|
|
data/bicho.gemspec
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
2
4
|
require 'bicho/version'
|
3
5
|
|
6
|
+
# rubocop:disable Metrics/BlockLength
|
4
7
|
Gem::Specification.new do |s|
|
5
8
|
s.name = 'bicho'
|
6
9
|
s.version = Bicho::VERSION
|
@@ -13,7 +16,7 @@ Gem::Specification.new do |s|
|
|
13
16
|
|
14
17
|
s.add_dependency('highline', ['~> 2.0.0'])
|
15
18
|
s.add_dependency('inifile', ['~> 3.0.0'])
|
16
|
-
s.add_dependency('nokogiri', ['~> 1.
|
19
|
+
s.add_dependency('nokogiri', ['~> 1.10.4'])
|
17
20
|
s.add_dependency('optimist', ['~> 3.0.0'])
|
18
21
|
s.add_dependency('xmlrpc', ['~> 0.3.0'])
|
19
22
|
|
@@ -21,6 +24,7 @@ Gem::Specification.new do |s|
|
|
21
24
|
s.add_development_dependency('minitest-reporters')
|
22
25
|
s.add_development_dependency('rake')
|
23
26
|
s.add_development_dependency('rubocop', '~> 0.59.0')
|
27
|
+
s.add_development_dependency('solargraph')
|
24
28
|
s.add_development_dependency('vcr')
|
25
29
|
s.add_development_dependency('webmock')
|
26
30
|
|
@@ -32,3 +36,4 @@ Gem::Specification.new do |s|
|
|
32
36
|
s.require_paths = ['lib']
|
33
37
|
s.required_ruby_version = '>= 2.3'
|
34
38
|
end
|
39
|
+
# rubocop:enable Metrics/BlockLength
|
data/bin/bicho
CHANGED
data/lib/bicho.rb
CHANGED
data/lib/bicho/attachment.rb
CHANGED
data/lib/bicho/bug.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'bicho/query'
|
2
4
|
|
3
5
|
module Bicho
|
@@ -85,6 +87,16 @@ module Bicho
|
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
90
|
+
# reopen a closed bug
|
91
|
+
# @param a String comment to add
|
92
|
+
# @param @optional a Boolean indicator if the new comment should be private (defaults to 'false')
|
93
|
+
#
|
94
|
+
# @returns id of re-opened bug
|
95
|
+
#
|
96
|
+
def reopen!(comment, is_private = false)
|
97
|
+
@client.update_bug(id, status: 'REOPENED', comment: { body: comment.to_s, is_private: is_private.to_b })
|
98
|
+
end
|
99
|
+
|
88
100
|
# URL where the bug can be viewed
|
89
101
|
# Example: http://bugs.foo.com/2345
|
90
102
|
def url
|
data/lib/bicho/cli/command.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#--
|
4
|
+
# Copyright (c) 2011 SUSE LINUX Products GmbH
|
5
|
+
#
|
6
|
+
# Author: Klaus Kämpf <kkaempf@suse.de>
|
7
|
+
#
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
9
|
+
# a copy of this software and associated documentation files (the
|
10
|
+
# "Software"), to deal in the Software without restriction, including
|
11
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
12
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
13
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
14
|
+
# the following conditions:
|
15
|
+
#
|
16
|
+
# The above copyright notice and this permission notice shall be
|
17
|
+
# included in all copies or substantial portions of the Software.
|
18
|
+
#
|
19
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
20
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
21
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
22
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
23
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
24
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
25
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
26
|
+
#++
|
27
|
+
|
28
|
+
require 'bicho/cli/command'
|
29
|
+
require 'bicho/client'
|
30
|
+
|
31
|
+
module Bicho
|
32
|
+
module CLI
|
33
|
+
module Commands
|
34
|
+
# Command to reopen a bug.
|
35
|
+
class Reopen < ::Bicho::CLI::Command
|
36
|
+
options do
|
37
|
+
opt :comment, 'Comment to add', type: :string
|
38
|
+
opt :private, 'Set the comment to private', type: :boolean
|
39
|
+
end
|
40
|
+
|
41
|
+
def do(global_opts, opts, args)
|
42
|
+
unless opts[:comment]
|
43
|
+
t.say('Reopen must have a comment')
|
44
|
+
return 1
|
45
|
+
end
|
46
|
+
client = ::Bicho::Client.new(global_opts[:bugzilla])
|
47
|
+
client.get_bugs(*args).each do |bug|
|
48
|
+
id = bug.reopen!(opts[:comment], opts[:private])
|
49
|
+
if id == bug.id
|
50
|
+
t.say("Bug #{id} reopened")
|
51
|
+
else
|
52
|
+
t.say("#{t.color('ERROR:', :error)} Failed to reopen bug #{id}")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
0
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Copyright (c) 2011 SUSE LINUX Products GmbH
|
3
5
|
#
|
@@ -37,10 +39,12 @@ module Bicho::CLI::Commands
|
|
37
39
|
Bicho::SEARCH_FIELDS.each do |field|
|
38
40
|
opt field[0], field[2], type: field[1], multi: field[3]
|
39
41
|
end
|
42
|
+
opt :format, 'Output format (json, prometheus)', type: :string
|
40
43
|
end
|
41
44
|
|
42
45
|
def do(global_opts, opts, _args)
|
43
46
|
server = ::Bicho::Client.new(global_opts[:bugzilla])
|
47
|
+
Bicho.client = server
|
44
48
|
# for most parameter we accept arrays, and also multi mode
|
45
49
|
# this means parameters come in arrays of arrays
|
46
50
|
query = ::Bicho::Query.new
|
@@ -53,8 +57,13 @@ module Bicho::CLI::Commands
|
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
56
|
-
|
57
|
-
|
60
|
+
case opts[:format]
|
61
|
+
when 'prometheus'
|
62
|
+
STDOUT.puts Bicho::Export.to_prometheus_push_gateway(query)
|
63
|
+
else
|
64
|
+
server.search_bugs(query).each do |bug|
|
65
|
+
t.say("#{t.color(bug.id.to_s, :headline)} #{bug.summary}")
|
66
|
+
end
|
58
67
|
end
|
59
68
|
0
|
60
69
|
end
|
data/lib/bicho/client.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Copyright (c) 2011 SUSE LINUX Products GmbH
|
3
5
|
#
|
@@ -207,6 +209,23 @@ module Bicho
|
|
207
209
|
ret['id']
|
208
210
|
end
|
209
211
|
|
212
|
+
# Update a bug
|
213
|
+
#
|
214
|
+
# @param id - bug number (Integer) or alias (String) of bug to be updated
|
215
|
+
# @param **kwargs - keyword-args containing optional/defaulted params
|
216
|
+
#
|
217
|
+
# @returns id of updated bug
|
218
|
+
#
|
219
|
+
def update_bug(id, **kwargs)
|
220
|
+
params = {}
|
221
|
+
params = params.merge(kwargs)
|
222
|
+
params[:ids] = normalize_ids [id]
|
223
|
+
ret = @client.call('Bug.update', params)
|
224
|
+
logger.info "Bug.update returned #{ret.inspect}"
|
225
|
+
handle_faults(ret)
|
226
|
+
ret.dig('bugs', 0, 'id')
|
227
|
+
end
|
228
|
+
|
210
229
|
# Search for a bug
|
211
230
|
#
|
212
231
|
# +query+ has to be either a +Query+ object or
|
data/lib/bicho/common_client.rb
CHANGED
data/lib/bicho/export.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
4
|
+
require 'stringio'
|
2
5
|
|
3
6
|
module Bicho
|
4
7
|
# Utility methods for exporting bugs to other systems
|
@@ -11,5 +14,33 @@ module Bicho
|
|
11
14
|
bug_h['resolution_time'] = Bicho::Reports.resolution_time(bug)
|
12
15
|
JSON.generate(bug_h)
|
13
16
|
end
|
17
|
+
|
18
|
+
# Export a query for usage as a metric in prometheus
|
19
|
+
# See https://github.com/prometheus/pushgateway
|
20
|
+
#
|
21
|
+
# The metric name will be 'bugs_total'
|
22
|
+
# See https://prometheus.io/docs/practices/naming/)
|
23
|
+
#
|
24
|
+
# And every attributed
|
25
|
+
# specified in the query will be used as a label
|
26
|
+
def self.to_prometheus_push_gateway(query)
|
27
|
+
buf = StringIO.new
|
28
|
+
dimensions = [:product, :status, :priority, :severity, :resolution, :component]
|
29
|
+
grouped = query.to_a.group_by do |i|
|
30
|
+
puts i
|
31
|
+
dimensions.map { |d| [d, i[d]] }.to_h
|
32
|
+
end
|
33
|
+
|
34
|
+
buf.write("# TYPE bugs_total gauge\n")
|
35
|
+
grouped.each do |attrs, set|
|
36
|
+
labels = attrs
|
37
|
+
.map { |e| "#{e[0]}=\"#{e[1]}\"" }
|
38
|
+
.join(',')
|
39
|
+
buf.write("bugs_total{#{labels}} #{set.size}\n")
|
40
|
+
end
|
41
|
+
buf.write("\n")
|
42
|
+
buf.close
|
43
|
+
buf.string
|
44
|
+
end
|
14
45
|
end
|
15
46
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Colorizes the output of the standard library logger, depending on the logger level:
|
2
4
|
# To adjust the colors, look at Logger::Colors::SCHEMA and Logger::Colors::constants
|
3
5
|
|
@@ -6,25 +8,25 @@ require 'logger'
|
|
6
8
|
# Utility class to color output.
|
7
9
|
class Logger
|
8
10
|
module Colors
|
9
|
-
VERSION = '1.0.0'
|
10
|
-
|
11
|
-
NOTHING = '0;0'
|
12
|
-
BLACK = '0;30'
|
13
|
-
RED = '0;31'
|
14
|
-
GREEN = '0;32'
|
15
|
-
BROWN = '0;33'
|
16
|
-
BLUE = '0;34'
|
17
|
-
PURPLE = '0;35'
|
18
|
-
CYAN = '0;36'
|
19
|
-
LIGHT_GRAY = '0;37'
|
20
|
-
DARK_GRAY = '1;30'
|
21
|
-
LIGHT_RED = '1;31'
|
22
|
-
LIGHT_GREEN = '1;32'
|
23
|
-
YELLOW = '1;33'
|
24
|
-
LIGHT_BLUE = '1;34'
|
25
|
-
LIGHT_PURPLE = '1;35'
|
26
|
-
LIGHT_CYAN = '1;36'
|
27
|
-
WHITE = '1;37'
|
11
|
+
VERSION = '1.0.0'
|
12
|
+
|
13
|
+
NOTHING = '0;0'
|
14
|
+
BLACK = '0;30'
|
15
|
+
RED = '0;31'
|
16
|
+
GREEN = '0;32'
|
17
|
+
BROWN = '0;33'
|
18
|
+
BLUE = '0;34'
|
19
|
+
PURPLE = '0;35'
|
20
|
+
CYAN = '0;36'
|
21
|
+
LIGHT_GRAY = '0;37'
|
22
|
+
DARK_GRAY = '1;30'
|
23
|
+
LIGHT_RED = '1;31'
|
24
|
+
LIGHT_GREEN = '1;32'
|
25
|
+
YELLOW = '1;33'
|
26
|
+
LIGHT_BLUE = '1;34'
|
27
|
+
LIGHT_PURPLE = '1;35'
|
28
|
+
LIGHT_CYAN = '1;36'
|
29
|
+
WHITE = '1;37'
|
28
30
|
|
29
31
|
SCHEMA = {
|
30
32
|
STDOUT => %w(nothing green brown red purple cyan),
|
data/lib/bicho/history.rb
CHANGED
data/lib/bicho/logging.rb
CHANGED
data/lib/bicho/plugins/novell.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Copyright (c) 2011 SUSE LINUX Products GmbH
|
3
5
|
# =>
|
@@ -37,7 +39,7 @@ module Bicho
|
|
37
39
|
# your oscrc.
|
38
40
|
#
|
39
41
|
class Novell
|
40
|
-
OSCRC_CREDENTIALS = 'https://api.opensuse.org'
|
42
|
+
OSCRC_CREDENTIALS = 'https://api.opensuse.org' unless defined? OSCRC_CREDENTIALS
|
41
43
|
DEFAULT_OSCRC_PATH = File.join(ENV['HOME'], '.oscrc') unless defined? DEFAULT_OSCRC_PATH
|
42
44
|
DOMAINS = ['bugzilla.novell.com', 'bugzilla.suse.com'].freeze
|
43
45
|
XMLRPC_DOMAINS = ['apibugzilla.novell.com', 'apibugzilla.suse.com'].freeze
|
@@ -77,7 +79,7 @@ module Bicho
|
|
77
79
|
end
|
78
80
|
|
79
81
|
def transform_api_url_hook(url, logger)
|
80
|
-
return url unless DOMAINS.map { |domain| url.host
|
82
|
+
return url unless DOMAINS.map { |domain| url.host&.include?(domain) }.any?
|
81
83
|
|
82
84
|
begin
|
83
85
|
url = url.clone
|