metric_fu 4.11.3 → 4.11.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.rubocop.yml +15 -0
- data/.rubocop_todo.yml +69 -0
- data/.travis.yml +0 -1
- data/CONTRIBUTORS +1 -1
- data/Gemfile +23 -20
- data/Guardfile +9 -9
- data/HISTORY.md +10 -1
- data/checksum/metric_fu-4.11.3.gem.sha512 +1 -0
- data/config/rubocop.yml +269 -0
- data/gem_tasks/rubocop.rake +10 -0
- data/lib/metric_fu.rb +11 -9
- data/lib/metric_fu/calculate.rb +0 -1
- data/lib/metric_fu/cli/client.rb +6 -6
- data/lib/metric_fu/cli/helper.rb +22 -13
- data/lib/metric_fu/cli/parser.rb +14 -18
- data/lib/metric_fu/configuration.rb +7 -11
- data/lib/metric_fu/constantize.rb +4 -4
- data/lib/metric_fu/data_structures/line_numbers.rb +10 -11
- data/lib/metric_fu/data_structures/location.rb +12 -14
- data/lib/metric_fu/data_structures/sexp_node.rb +31 -13
- data/lib/metric_fu/environment.rb +29 -31
- data/lib/metric_fu/formatter.rb +4 -6
- data/lib/metric_fu/formatter/html.rb +13 -13
- data/lib/metric_fu/formatter/syntax.rb +5 -7
- data/lib/metric_fu/formatter/yaml.rb +1 -1
- data/lib/metric_fu/gem_run.rb +13 -15
- data/lib/metric_fu/gem_version.rb +9 -11
- data/lib/metric_fu/generator.rb +5 -8
- data/lib/metric_fu/io.rb +13 -15
- data/lib/metric_fu/loader.rb +17 -18
- data/lib/metric_fu/logger.rb +15 -18
- data/lib/metric_fu/logging/mf_debugger.rb +4 -4
- data/lib/metric_fu/metric.rb +11 -12
- data/lib/metric_fu/metrics/cane/generator.rb +10 -9
- data/lib/metric_fu/metrics/cane/grapher.rb +5 -7
- data/lib/metric_fu/metrics/cane/metric.rb +6 -8
- data/lib/metric_fu/metrics/cane/report.html.erb +3 -3
- data/lib/metric_fu/metrics/cane/violations.rb +6 -6
- data/lib/metric_fu/metrics/churn/generator.rb +2 -6
- data/lib/metric_fu/metrics/churn/hotspot.rb +1 -3
- data/lib/metric_fu/metrics/churn/metric.rb +5 -7
- data/lib/metric_fu/metrics/flay/generator.rb +7 -11
- data/lib/metric_fu/metrics/flay/grapher.rb +5 -6
- data/lib/metric_fu/metrics/flay/hotspot.rb +5 -7
- data/lib/metric_fu/metrics/flay/metric.rb +5 -7
- data/lib/metric_fu/metrics/flog/generator.rb +22 -23
- data/lib/metric_fu/metrics/flog/grapher.rb +11 -11
- data/lib/metric_fu/metrics/flog/hotspot.rb +3 -5
- data/lib/metric_fu/metrics/flog/metric.rb +3 -5
- data/lib/metric_fu/metrics/hotspots/analysis/analyzed_problems.rb +0 -1
- data/lib/metric_fu/metrics/hotspots/analysis/analyzer_tables.rb +19 -18
- data/lib/metric_fu/metrics/hotspots/analysis/grouping.rb +0 -2
- data/lib/metric_fu/metrics/hotspots/analysis/groupings.rb +1 -3
- data/lib/metric_fu/metrics/hotspots/analysis/problems.rb +4 -6
- data/lib/metric_fu/metrics/hotspots/analysis/ranked_problem_location.rb +14 -9
- data/lib/metric_fu/metrics/hotspots/analysis/ranking.rb +4 -5
- data/lib/metric_fu/metrics/hotspots/analysis/rankings.rb +1 -3
- data/lib/metric_fu/metrics/hotspots/analysis/record.rb +3 -5
- data/lib/metric_fu/metrics/hotspots/analysis/scoring_strategies.rb +0 -2
- data/lib/metric_fu/metrics/hotspots/analysis/table.rb +3 -4
- data/lib/metric_fu/metrics/hotspots/generator.rb +3 -6
- data/lib/metric_fu/metrics/hotspots/hotspot.rb +13 -13
- data/lib/metric_fu/metrics/hotspots/hotspot_analyzer.rb +5 -8
- data/lib/metric_fu/metrics/hotspots/metric.rb +1 -3
- data/lib/metric_fu/metrics/hotspots/report.html.erb +1 -1
- data/lib/metric_fu/metrics/rails_best_practices/generator.rb +10 -12
- data/lib/metric_fu/metrics/rails_best_practices/grapher.rb +5 -6
- data/lib/metric_fu/metrics/rails_best_practices/metric.rb +1 -3
- data/lib/metric_fu/metrics/rcov/external_client.rb +1 -3
- data/lib/metric_fu/metrics/rcov/generator.rb +13 -15
- data/lib/metric_fu/metrics/rcov/grapher.rb +6 -7
- data/lib/metric_fu/metrics/rcov/hotspot.rb +5 -7
- data/lib/metric_fu/metrics/rcov/metric.rb +5 -7
- data/lib/metric_fu/metrics/rcov/rcov_format_coverage.rb +16 -55
- data/lib/metric_fu/metrics/rcov/rcov_line.rb +48 -0
- data/lib/metric_fu/metrics/rcov/report.html.erb +2 -2
- data/lib/metric_fu/metrics/rcov/simplecov_formatter.rb +10 -11
- data/lib/metric_fu/metrics/reek/generator.rb +22 -23
- data/lib/metric_fu/metrics/reek/grapher.rb +5 -6
- data/lib/metric_fu/metrics/reek/hotspot.rb +5 -7
- data/lib/metric_fu/metrics/reek/metric.rb +2 -4
- data/lib/metric_fu/metrics/roodi/generator.rb +9 -10
- data/lib/metric_fu/metrics/roodi/grapher.rb +5 -6
- data/lib/metric_fu/metrics/roodi/hotspot.rb +1 -3
- data/lib/metric_fu/metrics/roodi/metric.rb +2 -4
- data/lib/metric_fu/metrics/saikuro/generator.rb +23 -27
- data/lib/metric_fu/metrics/saikuro/hotspot.rb +1 -3
- data/lib/metric_fu/metrics/saikuro/metric.rb +7 -8
- data/lib/metric_fu/metrics/saikuro/parsing_element.rb +6 -8
- data/lib/metric_fu/metrics/saikuro/report.html.erb +1 -1
- data/lib/metric_fu/metrics/saikuro/scratch_file.rb +24 -29
- data/lib/metric_fu/metrics/stats/generator.rb +9 -12
- data/lib/metric_fu/metrics/stats/grapher.rb +8 -9
- data/lib/metric_fu/metrics/stats/hotspot.rb +1 -3
- data/lib/metric_fu/metrics/stats/metric.rb +3 -5
- data/lib/metric_fu/reporter.rb +1 -1
- data/lib/metric_fu/reporting/graphs/graph.rb +8 -12
- data/lib/metric_fu/reporting/graphs/grapher.rb +7 -9
- data/lib/metric_fu/reporting/result.rb +0 -3
- data/lib/metric_fu/run.rb +12 -3
- data/lib/metric_fu/tasks/metric_fu.rake +8 -8
- data/lib/metric_fu/templates/configuration.rb +2 -5
- data/lib/metric_fu/templates/metrics_template.rb +19 -19
- data/lib/metric_fu/templates/report.rb +5 -8
- data/lib/metric_fu/templates/template.rb +20 -24
- data/lib/metric_fu/utility.rb +7 -8
- data/lib/metric_fu/version.rb +1 -1
- data/metric_fu.gemspec +31 -32
- data/spec/cli/helper_spec.rb +7 -14
- data/spec/dummy/lib/bad_encoding.rb +1 -1
- data/spec/fixtures/coverage-153.rb +2 -2
- data/spec/fixtures/coverage.rb +2 -2
- data/spec/metric_fu/calculate_spec.rb +3 -3
- data/spec/metric_fu/configuration_spec.rb +70 -82
- data/spec/metric_fu/data_structures/line_numbers_spec.rb +3 -5
- data/spec/metric_fu/data_structures/location_spec.rb +13 -31
- data/spec/metric_fu/formatter/configuration_spec.rb +11 -13
- data/spec/metric_fu/formatter/html_spec.rb +21 -28
- data/spec/metric_fu/formatter/yaml_spec.rb +9 -17
- data/spec/metric_fu/formatter_spec.rb +6 -6
- data/spec/metric_fu/gem_version_spec.rb +3 -5
- data/spec/metric_fu/generator_spec.rb +28 -38
- data/spec/metric_fu/loader_spec.rb +1 -3
- data/spec/metric_fu/metric_spec.rb +17 -21
- data/spec/metric_fu/metrics/cane/configuration_spec.rb +8 -8
- data/spec/metric_fu/metrics/cane/generator_spec.rb +26 -29
- data/spec/metric_fu/metrics/churn/configuration_spec.rb +6 -8
- data/spec/metric_fu/metrics/churn/generator_spec.rb +6 -11
- data/spec/metric_fu/metrics/flay/configuration_spec.rb +6 -8
- data/spec/metric_fu/metrics/flay/generator_spec.rb +36 -37
- data/spec/metric_fu/metrics/flay/grapher_spec.rb +2 -2
- data/spec/metric_fu/metrics/flog/configuration_spec.rb +11 -13
- data/spec/metric_fu/metrics/flog/generator_spec.rb +29 -31
- data/spec/metric_fu/metrics/flog/grapher_spec.rb +8 -10
- data/spec/metric_fu/metrics/hotspots/analysis/analyzed_problems_spec.rb +18 -24
- data/spec/metric_fu/metrics/hotspots/analysis/analyzer_tables_spec.rb +12 -17
- data/spec/metric_fu/metrics/hotspots/analysis/ranking_spec.rb +2 -6
- data/spec/metric_fu/metrics/hotspots/analysis/rankings_spec.rb +5 -14
- data/spec/metric_fu/metrics/hotspots/analysis/table_spec.rb +1 -3
- data/spec/metric_fu/metrics/hotspots/generator_spec.rb +6 -8
- data/spec/metric_fu/metrics/hotspots/hotspot_analyzer_spec.rb +1 -3
- data/spec/metric_fu/metrics/hotspots/hotspot_spec.rb +4 -5
- data/spec/metric_fu/metrics/rails_best_practices/configuration_spec.rb +6 -10
- data/spec/metric_fu/metrics/rails_best_practices/generator_spec.rb +2 -3
- data/spec/metric_fu/metrics/rails_best_practices/grapher_spec.rb +3 -3
- data/spec/metric_fu/metrics/rcov/configuration_spec.rb +20 -22
- data/spec/metric_fu/metrics/rcov/generator_spec.rb +6 -10
- data/spec/metric_fu/metrics/rcov/grapher_spec.rb +2 -2
- data/spec/metric_fu/metrics/rcov/hotspot_spec.rb +8 -8
- data/spec/metric_fu/metrics/rcov/rcov_line_spec.rb +89 -0
- data/spec/metric_fu/metrics/rcov/simplecov_formatter_spec.rb +31 -33
- data/spec/metric_fu/metrics/reek/configuration_spec.rb +6 -6
- data/spec/metric_fu/metrics/reek/generator_spec.rb +19 -20
- data/spec/metric_fu/metrics/reek/grapher_spec.rb +4 -4
- data/spec/metric_fu/metrics/roodi/configuration_spec.rb +7 -9
- data/spec/metric_fu/metrics/roodi/generator_spec.rb +3 -3
- data/spec/metric_fu/metrics/roodi/grapher_spec.rb +2 -2
- data/spec/metric_fu/metrics/saikuro/configuration_spec.rb +18 -19
- data/spec/metric_fu/metrics/saikuro/generator_spec.rb +7 -7
- data/spec/metric_fu/metrics/stats/generator_spec.rb +9 -9
- data/spec/metric_fu/metrics/stats/grapher_spec.rb +2 -2
- data/spec/metric_fu/reporter_spec.rb +3 -4
- data/spec/metric_fu/reporting/graphs/graph_spec.rb +1 -4
- data/spec/metric_fu/reporting/graphs/grapher_spec.rb +5 -5
- data/spec/metric_fu/reporting/result_spec.rb +9 -11
- data/spec/metric_fu/run_spec.rb +18 -32
- data/spec/metric_fu/templates/configuration_spec.rb +28 -34
- data/spec/metric_fu/templates/metrics_template_spec.rb +11 -0
- data/spec/metric_fu/templates/report_spec.rb +4 -4
- data/spec/metric_fu/templates/template_spec.rb +62 -48
- data/spec/metric_fu/utility_spec.rb +2 -2
- data/spec/metric_fu_spec.rb +5 -7
- data/spec/shared/configured.rb +9 -11
- data/spec/shared/test_coverage.rb +5 -9
- data/spec/spec_helper.rb +9 -9
- data/spec/support/deferred_garbaged_collection.rb +1 -2
- data/spec/support/matcher_create_file.rb +2 -4
- data/spec/support/matcher_create_files.rb +2 -4
- data/spec/support/suite.rb +3 -3
- data/spec/support/test_fixtures.rb +5 -7
- data/spec/support/timeout.rb +1 -1
- data/spec/support/usage_test.rb +23 -24
- data/spec/usage_test_spec.rb +18 -20
- metadata +12 -2
- metadata.gz.sig +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require
|
2
|
+
require "rubygems"
|
3
3
|
module MetricFu
|
4
4
|
class GemVersion
|
5
5
|
# regexp from https://github.com/gemnasium/gemnasium-parser/blob/807d7ccc/lib/gemnasium/parser/patterns.rb#L11
|
@@ -14,13 +14,12 @@ module MetricFu
|
|
14
14
|
COMMENT = /(#[^\n]*)?/
|
15
15
|
ADD_DEPENDENCY_CALL = /^[ \t]*\w+\.add(?<type>_runtime|_development)?_dependency\(?[ \t]*#{QUOTED_GEM_NAME}(?:[ \t]*,[ \t]*#{REQUIREMENTS})?[ \t]*\)?[ \t]*#{COMMENT}$/
|
16
16
|
|
17
|
-
|
18
17
|
def initialize
|
19
|
-
@gem_spec = File.open(gemspec,
|
18
|
+
@gem_spec = File.open(gemspec, "rb") { |f| f.readlines }
|
20
19
|
end
|
21
20
|
|
22
21
|
def gemspec
|
23
|
-
File.join(MetricFu.root_dir,
|
22
|
+
File.join(MetricFu.root_dir, "metric_fu.gemspec")
|
24
23
|
end
|
25
24
|
|
26
25
|
def new_dependency(name, version)
|
@@ -32,10 +31,10 @@ module MetricFu
|
|
32
31
|
begin
|
33
32
|
@gem_spec.grep(/add_dependency|add_runtime/).map do |line|
|
34
33
|
match = line.match(ADD_DEPENDENCY_CALL)
|
35
|
-
name = match[
|
36
|
-
version = [match[
|
34
|
+
name = match["name"].downcase.sub("metric_fu-", "")
|
35
|
+
version = [match["req1"], match["req2"]].compact
|
37
36
|
new_dependency(name, version)
|
38
|
-
end.compact << new_dependency(
|
37
|
+
end.compact << new_dependency("rcov", ["~> 0.8"])
|
39
38
|
end
|
40
39
|
end
|
41
40
|
|
@@ -49,7 +48,7 @@ module MetricFu
|
|
49
48
|
end
|
50
49
|
|
51
50
|
def unknown_dependency(name)
|
52
|
-
->{ new_dependency(name, [
|
51
|
+
-> { new_dependency(name, [">= 0"]) }
|
53
52
|
end
|
54
53
|
|
55
54
|
RESOLVER = new
|
@@ -79,8 +78,8 @@ module MetricFu
|
|
79
78
|
name = gem_dep.name
|
80
79
|
version = activated_version(gem_dep.name) || gem_dep.requirements_list
|
81
80
|
{
|
82
|
-
|
83
|
-
|
81
|
+
"name" => name,
|
82
|
+
"version" => version,
|
84
83
|
}
|
85
84
|
end
|
86
85
|
|
@@ -89,6 +88,5 @@ module MetricFu
|
|
89
88
|
dependency_summary(gem_dep)
|
90
89
|
end
|
91
90
|
end
|
92
|
-
|
93
91
|
end
|
94
92
|
end
|
data/lib/metric_fu/generator.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
MetricFu.lib_require {
|
1
|
+
MetricFu.lib_require { "utility" }
|
2
2
|
module MetricFu
|
3
|
-
|
4
3
|
# = Generator
|
5
4
|
#
|
6
5
|
# The Generator class is an abstract class that provides the
|
@@ -31,10 +30,9 @@ module MetricFu
|
|
31
30
|
# in general setup the directory structure that the MetricFu system
|
32
31
|
# expects.
|
33
32
|
class Generator
|
34
|
-
|
35
33
|
attr_reader :result, :template, :options
|
36
34
|
|
37
|
-
def initialize(options={})
|
35
|
+
def initialize(options = {})
|
38
36
|
@options = options
|
39
37
|
end
|
40
38
|
|
@@ -53,7 +51,7 @@ module MetricFu
|
|
53
51
|
end
|
54
52
|
|
55
53
|
def self.get_generator(metric)
|
56
|
-
generators.find{|generator|generator.metric.to_s == metric.to_s.downcase}
|
54
|
+
generators.find { |generator|generator.metric.to_s == metric.to_s.downcase }
|
57
55
|
end
|
58
56
|
|
59
57
|
def self.inherited(subclass)
|
@@ -66,7 +64,7 @@ module MetricFu
|
|
66
64
|
MetricFu::Metric.get_metric(metric).run_options[:output_directory] ||
|
67
65
|
begin
|
68
66
|
metric_directory = MetricFu::Io::FileSystem.scratch_directory(metric)
|
69
|
-
MetricFu::Utility.mkdir_p(metric_directory, :
|
67
|
+
MetricFu::Utility.mkdir_p(metric_directory, verbose: false)
|
70
68
|
end
|
71
69
|
end
|
72
70
|
|
@@ -109,7 +107,7 @@ module MetricFu
|
|
109
107
|
end
|
110
108
|
|
111
109
|
def round_to_tenths(decimal)
|
112
|
-
decimal = 0.0 if decimal.to_s.eql?(
|
110
|
+
decimal = 0.0 if decimal.to_s.eql?("NaN")
|
113
111
|
(decimal * 10).round / 10.0
|
114
112
|
end
|
115
113
|
|
@@ -133,6 +131,5 @@ module MetricFu
|
|
133
131
|
information.
|
134
132
|
EOF
|
135
133
|
end
|
136
|
-
|
137
134
|
end
|
138
135
|
end
|
data/lib/metric_fu/io.rb
CHANGED
@@ -1,16 +1,15 @@
|
|
1
|
-
MetricFu.lib_require {
|
1
|
+
MetricFu.lib_require { "utility" }
|
2
2
|
module MetricFu
|
3
3
|
module Io
|
4
4
|
# TODO: Move this module / functionality elsewhere and make less verbose
|
5
5
|
module FileSystem
|
6
|
-
|
7
6
|
# TODO: Use a better environmental variable name for the output / artiface dir. Set to a different default in tests.
|
8
|
-
@default_artifact_dir =
|
7
|
+
@default_artifact_dir = "tmp/metric_fu"
|
9
8
|
def self.default_artifact_dir
|
10
9
|
@default_artifact_dir
|
11
10
|
end
|
12
11
|
def self.artifact_dir
|
13
|
-
(ENV[
|
12
|
+
(ENV["CC_BUILD_ARTIFACTS"] || @artifact_dir)
|
14
13
|
end
|
15
14
|
def self.artifact_dir=(artifact_dir)
|
16
15
|
@artifact_dir = artifact_dir
|
@@ -28,7 +27,7 @@ module MetricFu
|
|
28
27
|
end
|
29
28
|
|
30
29
|
def scratch_directory(name)
|
31
|
-
File.join(directory(
|
30
|
+
File.join(directory("scratch_directory"), name.to_s)
|
32
31
|
end
|
33
32
|
|
34
33
|
def file_globs_to_ignore
|
@@ -37,15 +36,15 @@ module MetricFu
|
|
37
36
|
|
38
37
|
def set_directories
|
39
38
|
@directories = {}
|
40
|
-
@directories[
|
41
|
-
@directories[
|
42
|
-
@directories[
|
43
|
-
@directories[
|
39
|
+
@directories["base_directory"] = MetricFu.artifact_dir
|
40
|
+
@directories["scratch_directory"] = MetricFu.scratch_dir
|
41
|
+
@directories["output_directory"] = MetricFu.output_dir
|
42
|
+
@directories["data_directory"] = MetricFu.data_dir
|
44
43
|
create_directories @directories.values
|
45
44
|
|
46
|
-
@directories[
|
45
|
+
@directories["root_directory"] = MetricFu.root_dir
|
47
46
|
# TODO Though this is true of the general AwesomeTemplate, it is not necessarily true of templates within each Metric. Each metric should probably know how to use AwesomeTemplate (or whatever)
|
48
|
-
@directories[
|
47
|
+
@directories["template_directory"] = File.join(@directories.fetch("root_directory"), "lib", "templates")
|
49
48
|
@file_globs_to_ignore = []
|
50
49
|
set_code_dirs
|
51
50
|
end
|
@@ -60,9 +59,8 @@ module MetricFu
|
|
60
59
|
|
61
60
|
# Add the 'app' directory if we're running within rails.
|
62
61
|
def set_code_dirs
|
63
|
-
@directories[
|
62
|
+
@directories["code_dirs"] = %w(app lib).select { |dir| Dir.exists?(dir) }
|
64
63
|
end
|
65
|
-
|
66
64
|
end
|
67
65
|
|
68
66
|
# Writes the output to a file or io stream.
|
@@ -114,7 +112,7 @@ module MetricFu
|
|
114
112
|
end
|
115
113
|
|
116
114
|
def file_for(path, &block)
|
117
|
-
File.open(path_relative_to_base(path),
|
115
|
+
File.open(path_relative_to_base(path), "w") do |file|
|
118
116
|
block.call(file)
|
119
117
|
end
|
120
118
|
end
|
@@ -127,7 +125,7 @@ module MetricFu
|
|
127
125
|
end
|
128
126
|
|
129
127
|
def path_relative_to_base(path)
|
130
|
-
pathname = MetricFu.run_path.join(MetricFu::Io::FileSystem.directory(
|
128
|
+
pathname = MetricFu.run_path.join(MetricFu::Io::FileSystem.directory("base_directory")) # make full path relative to base directory
|
131
129
|
pathname.join(path)
|
132
130
|
end
|
133
131
|
end
|
data/lib/metric_fu/loader.rb
CHANGED
@@ -9,14 +9,14 @@ module MetricFu
|
|
9
9
|
@loaded_files = []
|
10
10
|
end
|
11
11
|
|
12
|
-
def lib_require(base=
|
12
|
+
def lib_require(base = "", &_block)
|
13
13
|
paths = []
|
14
14
|
base_path = File.join(@lib_root, base)
|
15
15
|
Array((yield paths, base_path)).each do |path|
|
16
16
|
file = File.join(base_path, *Array(path))
|
17
17
|
require file
|
18
18
|
if @loaded_files.include?(file)
|
19
|
-
puts "!!!\tAlready loaded #{file}" if !!(ENV[
|
19
|
+
puts "!!!\tAlready loaded #{file}" if !!(ENV["MF_DEBUG"] =~ /true/i)
|
20
20
|
else
|
21
21
|
@loaded_files << file
|
22
22
|
end
|
@@ -36,9 +36,9 @@ module MetricFu
|
|
36
36
|
class << klass
|
37
37
|
Array(yield).each do |dir|
|
38
38
|
define_method("#{dir}_dir") do
|
39
|
-
File.join(lib_dir,dir)
|
39
|
+
File.join(lib_dir, dir)
|
40
40
|
end
|
41
|
-
module_eval(%
|
41
|
+
module_eval(%(def #{dir}_require(&block); lib_require('#{dir}', &block); end), __FILE__, __LINE__)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -52,41 +52,41 @@ module MetricFu
|
|
52
52
|
def create_artifact_subdirs(klass)
|
53
53
|
class << klass
|
54
54
|
Array(yield).each do |dir|
|
55
|
-
define_method("#{dir.gsub(/[^A-Za-z0-9]/,'')}_dir") do
|
56
|
-
File.join(artifact_dir,dir)
|
55
|
+
define_method("#{dir.gsub(/[^A-Za-z0-9]/, '')}_dir") do
|
56
|
+
File.join(artifact_dir, dir)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
def setup
|
63
|
-
MetricFu.lib_require {
|
64
|
-
MetricFu.logger.debug_on = !!(ENV[
|
63
|
+
MetricFu.lib_require { "logger" }
|
64
|
+
MetricFu.logger.debug_on = !!(ENV["MF_DEBUG"] =~ /true/i)
|
65
65
|
|
66
66
|
load_metric_configuration
|
67
67
|
|
68
|
-
MetricFu.lib_require {
|
69
|
-
MetricFu.reporting_require {
|
68
|
+
MetricFu.lib_require { "reporter" }
|
69
|
+
MetricFu.reporting_require { "result" }
|
70
70
|
|
71
|
-
MetricFu.load_tasks(
|
71
|
+
MetricFu.load_tasks("metric_fu.rake", task_name: "metrics:all")
|
72
72
|
end
|
73
73
|
|
74
74
|
def load_metric_configuration
|
75
|
-
MetricFu.lib_require {
|
75
|
+
MetricFu.lib_require { "configuration" }
|
76
76
|
load_installed_metrics
|
77
77
|
MetricFu.configuration.configure_metrics
|
78
78
|
load_user_configuration
|
79
79
|
end
|
80
80
|
|
81
81
|
def load_installed_metrics
|
82
|
-
MetricFu.lib_require {
|
83
|
-
Dir.glob(File.join(MetricFu.metrics_dir,
|
82
|
+
MetricFu.lib_require { "metric" }
|
83
|
+
Dir.glob(File.join(MetricFu.metrics_dir, "**/metric.rb")).each do |metric_config|
|
84
84
|
require metric_config
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
88
|
def load_user_configuration
|
89
|
-
file = File.join(MetricFu.run_dir,
|
89
|
+
file = File.join(MetricFu.run_dir, ".metrics")
|
90
90
|
load file if File.exist?(file)
|
91
91
|
end
|
92
92
|
|
@@ -96,11 +96,10 @@ module MetricFu
|
|
96
96
|
# @param tasks_relative_path [String] 'metric_fu.rake' by default
|
97
97
|
# @param options [Hash] optional task_name to check if loaded
|
98
98
|
# @option options [String] :task_name The task_name to load, if not yet loaded
|
99
|
-
def load_tasks(tasks_relative_path, options={task_name:
|
99
|
+
def load_tasks(tasks_relative_path, options = { task_name: "" })
|
100
100
|
if defined?(Rake::Task) and not Rake::Task.task_defined?(options[:task_name])
|
101
|
-
load File.join(@lib_root,
|
101
|
+
load File.join(@lib_root, "tasks", *Array(tasks_relative_path))
|
102
102
|
end
|
103
103
|
end
|
104
|
-
|
105
104
|
end
|
106
105
|
end
|
data/lib/metric_fu/logger.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "logger"
|
2
|
+
require "forwardable"
|
3
3
|
module MetricFu
|
4
|
-
|
5
4
|
def self.logger
|
6
5
|
@logger ||= ::MetricFu::Logger.new($stdout)
|
7
6
|
end
|
@@ -13,12 +12,12 @@ module MetricFu
|
|
13
12
|
def initialize(stdout)
|
14
13
|
@logger = MfLogger.new(stdout)
|
15
14
|
self.debug_on = false
|
16
|
-
self.formatter = ->(
|
17
|
-
self.level =
|
15
|
+
self.formatter = ->(_severity, _time, _progname, msg) { "#{msg}\n" }
|
16
|
+
self.level = "info"
|
18
17
|
end
|
19
18
|
|
20
19
|
def debug_on=(bool)
|
21
|
-
self.level = bool ?
|
20
|
+
self.level = bool ? "debug" : "info"
|
22
21
|
end
|
23
22
|
|
24
23
|
def debug_on
|
@@ -28,12 +27,12 @@ module MetricFu
|
|
28
27
|
def_delegators :@logger, :info, :warn, :error, :fatal, :unknown
|
29
28
|
|
30
29
|
LEVELS = {
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
"debug" => MfLogger::DEBUG,
|
31
|
+
"info" => MfLogger::INFO,
|
32
|
+
"warn" => MfLogger::WARN,
|
33
|
+
"error" => MfLogger::ERROR,
|
34
|
+
"fatal" => MfLogger::FATAL,
|
35
|
+
"unknown" => MfLogger::UNKNOWN,
|
37
36
|
}
|
38
37
|
|
39
38
|
def level=(level)
|
@@ -45,21 +44,19 @@ module MetricFu
|
|
45
44
|
end
|
46
45
|
|
47
46
|
def log(msg)
|
48
|
-
@logger.info
|
47
|
+
@logger.info "*" * 5 + msg.to_s
|
49
48
|
end
|
50
49
|
|
51
50
|
def debug(msg)
|
52
|
-
@logger.debug
|
51
|
+
@logger.debug "*" * 5 + msg.to_s
|
53
52
|
end
|
54
|
-
|
55
53
|
end
|
56
|
-
|
57
54
|
end
|
58
55
|
# For backward compatibility
|
59
|
-
def mf_debug(msg
|
56
|
+
def mf_debug(msg, &block)
|
60
57
|
MetricFu.logger.debug(msg, &block)
|
61
58
|
end
|
62
59
|
|
63
|
-
def mf_log(msg
|
60
|
+
def mf_log(msg, &block)
|
64
61
|
MetricFu.logger.log(msg, &block)
|
65
62
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
warn "MfDebugger if deprecated. Please use MetricFu.logger"
|
2
|
-
MetricFu.lib_require {
|
2
|
+
MetricFu.lib_require { "logger" }
|
3
3
|
module MfDebugger
|
4
4
|
extend self
|
5
5
|
class Logger
|
@@ -9,13 +9,13 @@ module MfDebugger
|
|
9
9
|
end
|
10
10
|
def self.debug_on=(bool)
|
11
11
|
warn "MfDebugger if deprecated. Please use MetricFu.logger"
|
12
|
-
MetricFu.logger.level = bool ?
|
12
|
+
MetricFu.logger.level = bool ? "debug" : "info"
|
13
13
|
end
|
14
|
-
def self.log(msg, &
|
14
|
+
def self.log(msg, &_block)
|
15
15
|
warn "MfDebugger if deprecated. Please use MetricFu.logger"
|
16
16
|
MetricFu.logger.info msg
|
17
17
|
end
|
18
|
-
def self.debug(msg, &
|
18
|
+
def self.debug(msg, &_block)
|
19
19
|
warn "MfDebugger if deprecated. Please use MetricFu.logger"
|
20
20
|
MetricFu.logger.debug msg
|
21
21
|
end
|
data/lib/metric_fu/metric.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
require
|
2
|
-
MetricFu.lib_require {
|
3
|
-
MetricFu.lib_require {
|
1
|
+
require "set"
|
2
|
+
MetricFu.lib_require { "gem_run" }
|
3
|
+
MetricFu.lib_require { "generator" }
|
4
4
|
# Encapsulates the configuration options for each metric
|
5
5
|
module MetricFu
|
6
6
|
class Metric
|
7
|
-
|
8
7
|
attr_accessor :enabled, :activated
|
9
8
|
|
10
9
|
def initialize
|
@@ -20,7 +19,7 @@ module MetricFu
|
|
20
19
|
# TODO: Confirm this catches load errors from requires in subclasses, such as for flog
|
21
20
|
def activate
|
22
21
|
MetricFu.metrics_require { default_metric_library_paths }
|
23
|
-
@libraries.each {|library| require(library) }
|
22
|
+
@libraries.each { |library| require(library) }
|
24
23
|
self.activated = true
|
25
24
|
rescue LoadError => e
|
26
25
|
mf_log "#{name} metric not activated, #{e.message}"
|
@@ -41,7 +40,7 @@ module MetricFu
|
|
41
40
|
end
|
42
41
|
|
43
42
|
def default_run_args
|
44
|
-
run_options.map { |k, v| "--#{k} #{v}" }.join(
|
43
|
+
run_options.map { |k, v| "--#{k} #{v}" }.join(" ")
|
45
44
|
end
|
46
45
|
|
47
46
|
def run
|
@@ -49,12 +48,12 @@ module MetricFu
|
|
49
48
|
end
|
50
49
|
|
51
50
|
def run_external(args = default_run_args)
|
52
|
-
runner = GemRun.new(
|
51
|
+
runner = GemRun.new(
|
53
52
|
gem_name: gem_name.to_s,
|
54
53
|
metric_name: name.to_s,
|
55
54
|
# version: ,
|
56
55
|
args: args,
|
57
|
-
|
56
|
+
)
|
58
57
|
stdout, stderr, status = runner.run
|
59
58
|
# TODO: do something with the stderr
|
60
59
|
# for now, just acknowledge we got it
|
@@ -90,11 +89,11 @@ module MetricFu
|
|
90
89
|
end
|
91
90
|
|
92
91
|
def self.enabled_metrics
|
93
|
-
metrics.select{|metric| metric.enabled && metric.activated}.sort_by {|metric| metric.name == :hotspots ? 1 : 0 }
|
92
|
+
metrics.select { |metric| metric.enabled && metric.activated }.sort_by { |metric| metric.name == :hotspots ? 1 : 0 }
|
94
93
|
end
|
95
94
|
|
96
95
|
def self.get_metric(name)
|
97
|
-
metrics.find{|metric|metric.name.to_s == name.to_s}
|
96
|
+
metrics.find { |metric|metric.name.to_s == name.to_s }
|
98
97
|
end
|
99
98
|
|
100
99
|
def self.inherited(subclass)
|
@@ -119,7 +118,7 @@ module MetricFu
|
|
119
118
|
|
120
119
|
# Used above to identify the stem of a setter method
|
121
120
|
def method_to_attr(method)
|
122
|
-
method.to_s.sub(/=$/,
|
121
|
+
method.to_s.sub(/=$/, "").to_sym
|
123
122
|
end
|
124
123
|
|
125
124
|
private
|
@@ -136,7 +135,7 @@ module MetricFu
|
|
136
135
|
paths = []
|
137
136
|
paths << generator_path = "#{name}/generator"
|
138
137
|
if has_graph?
|
139
|
-
|
138
|
+
paths << grapher_path = "#{name}/grapher"
|
140
139
|
end
|
141
140
|
paths
|
142
141
|
end
|