codemonitor 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67bdedaed6063ea891d58825204d5dd31d60498325ee9b4b217d5981947282d7
4
- data.tar.gz: 2cdf8289ed5be0af4dfbd1acbb0d7d6d77964b81427ae22edf3f4aff1b081d19
3
+ metadata.gz: f85a1e1dbcae9d0bd26c461505a12449283dbf2029ee34ba59b36a2277e00321
4
+ data.tar.gz: 2cc548a6646d98cbeab3b72ce2dff06fd0d40175bf599fec2db5e12659aec7c4
5
5
  SHA512:
6
- metadata.gz: 8fc80f0a516df374fa081ead8d3de1d3a9a58cd320b36ad867e106aa13c123fb9aed0bafa07f9958df4ce1a3a7c78c6451c49cd56fe9dcb225e1635eb61c5c86
7
- data.tar.gz: 6bc644578c63a242697bea5d17949c610e2ca1b3d1ccda0fcf62999cd3dd77f6d15b44f4dc1dce0cbcd07620dde3bf49e3032f390bb47b91031291017f04b19b
6
+ metadata.gz: 7af9d278c2c2fcbba028ecb161cf7ee49b374ef701aee25bbb2ccfc3fe714a2fcf54d05c18a43653dee3e3d7263904668b38fa74569c8168c22a87be4bd6b4e2
7
+ data.tar.gz: f928807e202db2c1b60b3cec7e5df66abd44b04c8c4ddc165a201476c8e04a36ac3f3bd036abc5e3eb54aac66299bc99ac8827aae822d4587d00a1d22a6ff96d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codemonitor (0.4.0)
4
+ codemonitor (0.5.0)
5
5
  dogapi (~> 1.45)
6
6
  octokit (~> 4.0)
7
7
 
@@ -15,7 +15,7 @@ GEM
15
15
  diff-lcs (1.3)
16
16
  dogapi (1.45.0)
17
17
  multi_json
18
- faraday (1.9.3)
18
+ faraday (1.10.0)
19
19
  faraday-em_http (~> 1.0)
20
20
  faraday-em_synchrony (~> 1.0)
21
21
  faraday-excon (~> 1.1)
@@ -50,7 +50,7 @@ GEM
50
50
  pry (0.13.1)
51
51
  coderay (~> 1.1)
52
52
  method_source (~> 1.0)
53
- public_suffix (4.0.6)
53
+ public_suffix (4.0.7)
54
54
  rainbow (3.0.0)
55
55
  rake (13.0.3)
56
56
  regexp_parser (2.1.1)
@@ -98,4 +98,4 @@ DEPENDENCIES
98
98
  rubocop (~> 0.80)
99
99
 
100
100
  BUNDLED WITH
101
- 2.2.17
101
+ 2.3.12
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Engines
6
+ module JestJsonSummary
7
+ class Extractor
8
+ METRICS = %i[].freeze
9
+
10
+ def initialize; end
11
+
12
+ def call(provider)
13
+ metrics = METRICS.map do |metric|
14
+ [metric, send(metric)]
15
+ end.to_h
16
+
17
+ metrics
18
+ .merge!(total_lines)
19
+ .merge!(total_statements)
20
+ .merge!(total_functions)
21
+ .merge!(total_branches)
22
+ .merge!(total_branches_true)
23
+
24
+ provider.emit(metrics)
25
+ end
26
+
27
+ def requirements?
28
+ File.exist?('jest_json_summary.output.json')
29
+ end
30
+
31
+ private
32
+
33
+ def json_summary
34
+ @json_summary ||= JSON.parse(File.read('jest_json_summary.output.json'))
35
+ end
36
+
37
+ def total_lines
38
+ flatten('lines')
39
+ end
40
+
41
+ def total_statements
42
+ flatten('statements')
43
+ end
44
+
45
+ def total_functions
46
+ flatten('functions')
47
+ end
48
+
49
+ def total_branches
50
+ flatten('branches')
51
+ end
52
+
53
+ def total_branches_true
54
+ flatten('branchesTrue', 'branches_true')
55
+ end
56
+
57
+ def flatten(member, rename = nil)
58
+ json_summary['total'][member].map do |key, value|
59
+ ["jest_json_summary_#{rename || member}_#{key}", value.to_i]
60
+ end.to_h
61
+ end
62
+ end
63
+ end
64
+ end
@@ -8,13 +8,21 @@ module Engines
8
8
  module Npm
9
9
  class Extractor
10
10
  METRICS = %i[
11
- npm_number_of_dependencies
11
+ npm_number_of_prod_dependencies
12
12
  npm_number_of_dev_dependencies
13
13
  npm_number_of_scripts
14
- npm_number_of_vulnerable_dependencies
14
+ npm_number_of_computed_prod_dependencies
15
+ npm_number_of_computed_dev_dependencies
16
+ npm_number_of_computed_optional_dependencies
17
+ npm_number_of_computed_peer_dependencies
18
+ npm_number_of_computed_peer_optional_dependencies
19
+ npm_number_of_computed_total_dependencies
20
+ npm_number_of_vulnerable_dependencies_info
15
21
  npm_number_of_vulnerable_dependencies_low
16
22
  npm_number_of_vulnerable_dependencies_moderate
17
23
  npm_number_of_vulnerable_dependencies_high
24
+ npm_number_of_vulnerable_dependencies_critical
25
+ npm_number_of_vulnerable_dependencies_total
18
26
  ].freeze
19
27
 
20
28
  def call(provider)
@@ -26,25 +34,25 @@ module Engines
26
34
  end
27
35
 
28
36
  def requirements?
29
- File.exist?('package.json')
37
+ File.exist?('package.json') && File.exist?('package-lock.json')
30
38
  end
31
39
 
32
40
  private
33
41
 
34
- def npm_number_of_dependencies
35
- npm_package['dependencies'].keys.length
42
+ def npm_number_of_prod_dependencies
43
+ npm_package['dependencies']&.keys&.length
36
44
  end
37
45
 
38
46
  def npm_number_of_dev_dependencies
39
- npm_package['devDependencies'].keys.length
47
+ npm_package['devDependencies']&.keys&.length
40
48
  end
41
49
 
42
50
  def npm_number_of_scripts
43
51
  npm_package['scripts'].keys.length
44
52
  end
45
53
 
46
- def npm_number_of_vulnerable_dependencies
47
- npm_audit['advisories'].length
54
+ def npm_number_of_vulnerable_dependencies_info
55
+ npm_audit_by_severity['info']
48
56
  end
49
57
 
50
58
  def npm_number_of_vulnerable_dependencies_low
@@ -59,6 +67,38 @@ module Engines
59
67
  npm_audit_by_severity['high']
60
68
  end
61
69
 
70
+ def npm_number_of_vulnerable_dependencies_critical
71
+ npm_audit_by_severity['critical']
72
+ end
73
+
74
+ def npm_number_of_vulnerable_dependencies_total
75
+ npm_audit_by_severity['total']
76
+ end
77
+
78
+ def npm_number_of_computed_prod_dependencies
79
+ npm_audit_by_dependencies['prod']
80
+ end
81
+
82
+ def npm_number_of_computed_dev_dependencies
83
+ npm_audit_by_dependencies['dev']
84
+ end
85
+
86
+ def npm_number_of_computed_optional_dependencies
87
+ npm_audit_by_dependencies['optional']
88
+ end
89
+
90
+ def npm_number_of_computed_peer_dependencies
91
+ npm_audit_by_dependencies['peer']
92
+ end
93
+
94
+ def npm_number_of_computed_peer_optional_dependencies
95
+ npm_audit_by_dependencies['peerOptional']
96
+ end
97
+
98
+ def npm_number_of_computed_total_dependencies
99
+ npm_audit_by_dependencies['total']
100
+ end
101
+
62
102
  def npm_package
63
103
  @npm_package ||= JSON.parse(File.read('package.json'))
64
104
  end
@@ -67,10 +107,12 @@ module Engines
67
107
  @npm_audit ||= JSON.parse(Shell.run('npm audit --json'))
68
108
  end
69
109
 
110
+ def npm_audit_by_dependencies
111
+ npm_audit['metadata']['dependencies']
112
+ end
113
+
70
114
  def npm_audit_by_severity
71
- npm_audit['advisories']
72
- .map { |_key, value| value['severity'] }
73
- .each_with_object(Hash.new(0)) { |e, total| total[e] += 1; }
115
+ npm_audit['metadata']['vulnerabilities']
74
116
  end
75
117
  end
76
118
  end
@@ -6,7 +6,7 @@ module Engines
6
6
  module Scc
7
7
  class Extractor
8
8
  METRICS = %i[].freeze
9
- FIELDS = %w[Bytes Lines Code Comment Blank Complexity Count WeightedComplexity]
9
+ FIELDS = %w[Bytes Lines Code Comment Blank Complexity Count WeightedComplexity].freeze
10
10
 
11
11
  def initialize; end
12
12
 
data/exe/codemonitor CHANGED
@@ -15,6 +15,7 @@ require_relative '../engines/semgrep/extractor'
15
15
  require_relative '../engines/sorbet/extractor'
16
16
  require_relative '../engines/scc/extractor'
17
17
  require_relative '../engines/custom/extractor'
18
+ require_relative '../engines/jest-json-summary/extractor'
18
19
 
19
20
  PROVIDERS = {
20
21
  console: Providers::Console,
@@ -32,7 +33,8 @@ EXTRACTORS = {
32
33
  semgrep: Engines::Semgrep::Extractor,
33
34
  sorbet: Engines::Sorbet::Extractor,
34
35
  scc: Engines::Scc::Extractor,
35
- custom: Engines::Custom::Extractor
36
+ custom: Engines::Custom::Extractor,
37
+ jest_json_summary: Engines::JestJsonSummary::Extractor
36
38
  }.freeze
37
39
 
38
40
  config_provider = ENV['CODEMONITOR_PROVIDER'] || 'console'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodeMonitor
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codemonitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ferran Basora
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-01 00:00:00.000000000 Z
11
+ date: 2022-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dogapi
@@ -134,6 +134,7 @@ files:
134
134
  - engines/eslint/extractor.rb
135
135
  - engines/git/extractor.rb
136
136
  - engines/github/extractor.rb
137
+ - engines/jest-json-summary/extractor.rb
137
138
  - engines/npm/extractor.rb
138
139
  - engines/packwerk/extractor.rb
139
140
  - engines/rubocop/extractor.rb
@@ -167,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
168
  - !ruby/object:Gem::Version
168
169
  version: '0'
169
170
  requirements: []
170
- rubygems_version: 3.0.1
171
+ rubygems_version: 3.1.2
171
172
  signing_key:
172
173
  specification_version: 4
173
174
  summary: Collect many metrics your code is generating