pack_stats 0.1.1 → 0.1.3

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: da6fd6a6975e100b1f2b00e3010cdfb2ebd888f65049bb6a5eccea103a571db7
4
- data.tar.gz: 4f43caf68831237e8488e428123a569142d0a831c73b8f00916234f5f39082b7
3
+ metadata.gz: f060837410e7daee8e07d54e9bbee788401954480eeb0f9f3b2a8222e6216ae6
4
+ data.tar.gz: a72d940a47cb17e98efcb0d658799853a3f295674326caf2f6eca22ee23bacec
5
5
  SHA512:
6
- metadata.gz: 1cd7795aaf3df7f570ba657c225e76989ccf7b0d80215b0749af02084f32e3557ed62d9d719f396512630f72b04147f1bc39e6987e86a8a67b63d721b7c38458
7
- data.tar.gz: 8ad7350d58cde8c6579d5a8fd2d5419e355a23339660def10a22b8888d065d93caff7e907a7ebd48a4f99fcc976a99ec89209339c03f225018a41f848502e85f
6
+ metadata.gz: ebc898c2c55afc4ebb1dc19c7f538cde5667d5bc8e64b7d06163a5d04baf9f6dc867e6038a7e9fa19bc6785b935e86e05499bebe364c5586fec1d56febbb6d53
7
+ data.tar.gz: c16aec135614d559e053410961a74bcbc1ad9d7a25ac02173b72153235a8639fc1a898f0579239840dca39084ad0c35a924075b99da64c2e6aa75ffca986bf49
@@ -6,7 +6,6 @@ require 'pack_stats/private/metrics'
6
6
  require 'pack_stats/private/metrics/files'
7
7
  require 'pack_stats/private/metrics/public_usage'
8
8
  require 'pack_stats/private/metrics/packwerk_checker_usage'
9
- require 'pack_stats/private/metrics/rubocop_usage'
10
9
  require 'pack_stats/private/metrics/dependencies'
11
10
  require 'pack_stats/private/metrics/packages'
12
11
  require 'pack_stats/private/metrics/packages_by_team'
@@ -31,7 +31,6 @@ module PackStats
31
31
  all_metrics << GaugeMetric.for('all_packages.has_readme.count', packages.count { |package| Metrics.has_readme?(package) }, package_tags)
32
32
 
33
33
  all_metrics += Metrics::PackwerkCheckerUsage.get_checker_metrics('all_packages', packages, package_tags)
34
- all_metrics += Metrics::RubocopUsage.get_metrics('all_packages', packages, package_tags)
35
34
  all_metrics << GaugeMetric.for('all_packages.package_based_file_ownership.count', packages.count { |package| !package.metadata['owner'].nil? }, package_tags)
36
35
 
37
36
  inbound_violations_by_package = packages.flat_map(&:violations).group_by(&:to_package_name)
@@ -59,7 +58,10 @@ module PackStats
59
58
  checker.violation_type_tag
60
59
  ]
61
60
 
62
- all_metrics << GaugeMetric.for("by_package.violations.by_other_package.count", Metrics.file_count(violations), tags)
61
+ count = Metrics.file_count(violations)
62
+ if count > 0
63
+ all_metrics << GaugeMetric.for("by_package.violations.by_other_package.count", Metrics.file_count(violations), tags)
64
+ end
63
65
  end
64
66
  when PackwerkCheckerUsage::Direction::Inbound
65
67
  all_violations_of_type = inbound_violations.select { |v| v.type == checker.violation_type }
@@ -72,7 +74,10 @@ module PackStats
72
74
  checker.violation_type_tag
73
75
  ]
74
76
 
75
- all_metrics << GaugeMetric.for("by_package.violations.by_other_package.count", Metrics.file_count(violations), tags)
77
+ count = Metrics.file_count(violations)
78
+ if count > 0
79
+ all_metrics << GaugeMetric.for("by_package.violations.by_other_package.count", count, tags)
80
+ end
76
81
  end
77
82
  else
78
83
  T.absurd(direction)
@@ -44,7 +44,10 @@ module PackStats
44
44
  all_packages.group_by { |package| Private.package_owner(package) }.each do |other_team_name, other_teams_packages|
45
45
  violations = outbound_violations.select{|v| other_teams_packages.map(&:name).include?(v.to_package_name) && v.type == checker.violation_type}
46
46
  tags = team_tags + Metrics.tags_for_other_team(other_team_name) + [checker.violation_type_tag]
47
- all_metrics << GaugeMetric.for("by_team.violations.by_other_team.count", Metrics.file_count(violations), tags)
47
+ count = Metrics.file_count(violations)
48
+ if count > 0
49
+ all_metrics << GaugeMetric.for("by_team.violations.by_other_team.count", count, tags)
50
+ end
48
51
  end
49
52
  when PackwerkCheckerUsage::Direction::Inbound
50
53
  all_violations_of_type = inbound_violations.select { |v| v.type == checker.violation_type }
@@ -56,7 +59,10 @@ module PackStats
56
59
  all_packages.group_by { |package| Private.package_owner(package) }.each do |other_team_name, other_teams_packages|
57
60
  violations = other_teams_packages.flat_map(&:violations).select{|v| packages_for_team.map(&:name).include?(v.to_package_name) && v.type == checker.violation_type}
58
61
  tags = team_tags + Metrics.tags_for_other_team(other_team_name) + [checker.violation_type_tag]
59
- all_metrics << GaugeMetric.for("by_team.violations.by_other_team.count", Metrics.file_count(violations), tags)
62
+ count = Metrics.file_count(violations)
63
+ if count > 0
64
+ all_metrics << GaugeMetric.for("by_team.violations.by_other_team.count", count, tags)
65
+ end
60
66
  end
61
67
  else
62
68
  T.absurd(direction)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pack_stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-12 00:00:00.000000000 Z
11
+ date: 2023-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_teams
@@ -198,7 +198,6 @@ files:
198
198
  - lib/pack_stats/private/metrics/packages_by_team.rb
199
199
  - lib/pack_stats/private/metrics/packwerk_checker_usage.rb
200
200
  - lib/pack_stats/private/metrics/public_usage.rb
201
- - lib/pack_stats/private/metrics/rubocop_usage.rb
202
201
  - lib/pack_stats/private/source_code_file.rb
203
202
  - lib/pack_stats/tag.rb
204
203
  - lib/pack_stats/tags.rb
@@ -1,98 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- module PackStats
5
- module Private
6
- module Metrics
7
- class RubocopUsage
8
- extend T::Sig
9
-
10
- sig { params(prefix: String, packages: T::Array[ParsePackwerk::Package], package_tags: T::Array[Tag]).returns(T::Array[GaugeMetric]) }
11
- def self.get_metrics(prefix, packages, package_tags)
12
- [
13
- *get_rubocop_exclusions(prefix, packages, package_tags),
14
- *get_rubocop_usage_metrics(prefix, packages, package_tags)
15
- ]
16
- end
17
-
18
- sig { params(prefix: String, packages: T::Array[ParsePackwerk::Package], package_tags: T::Array[Tag]).returns(T::Array[GaugeMetric]) }
19
- def self.get_rubocop_usage_metrics(prefix, packages, package_tags)
20
- metrics = T.let([], T::Array[GaugeMetric])
21
-
22
- rubocops.each do |cop_name|
23
- ['false', 'true', 'strict'].each do |enabled_mode|
24
- count_of_packages = ParsePackwerk.all.count do |package|
25
- # We will likely want a rubocop-packs API for this, to be able to ask if a cop is enabled for a pack.
26
- # It's possible we will want to allow these to be enabled at the top-level `.rubocop.yml`,
27
- # in which case we wouldn't get the right metrics with this approach. However, we can also accept
28
- # that as a current limitation.
29
- rubocop_yml_file = package.directory.join(RuboCop::Packs::PACK_LEVEL_RUBOCOP_YML)
30
- next false if !rubocop_yml_file.exist?
31
- rubocop_yml = YAML.load_file(rubocop_yml_file)
32
- cop_config = rubocop_yml[cop_name]
33
-
34
- strict_mode = cop_config && cop_config['FailureMode'] == 'strict'
35
- enabled = cop_config && cop_config['Enabled']
36
- case enabled_mode
37
- when 'false'
38
- !enabled
39
- when 'true'
40
- enabled && !strict_mode
41
- when 'strict'
42
- !!strict_mode
43
- end
44
- end
45
-
46
- metric_name = "#{prefix}.rubocops.#{to_tag_name(cop_name)}.#{enabled_mode}.count"
47
- metrics << GaugeMetric.for(metric_name, count_of_packages, package_tags)
48
- end
49
- end
50
-
51
- metrics
52
- end
53
-
54
- sig { params(prefix: String, packages: T::Array[ParsePackwerk::Package], package_tags: T::Array[Tag]).returns(T::Array[GaugeMetric]) }
55
- def self.get_rubocop_exclusions(prefix, packages, package_tags)
56
- rubocops.flat_map do |cop_name|
57
- metric_name = "#{prefix}.rubocops.#{to_tag_name(cop_name)}.exclusions.count"
58
- all_exclusions_count = ParsePackwerk.all.sum { |package| exclude_count_for_package_and_protection(package, cop_name)}
59
- GaugeMetric.for(metric_name, all_exclusions_count, package_tags)
60
- end
61
- end
62
-
63
- # TODO: `rubocop-packs` may want to expose API for this
64
- sig { params(package: ParsePackwerk::Package, cop_name: String).returns(Integer) }
65
- def self.exclude_count_for_package_and_protection(package, cop_name)
66
- if package.name == ParsePackwerk::ROOT_PACKAGE_NAME
67
- rubocop_todo = package.directory.join('.rubocop_todo.yml')
68
- else
69
- rubocop_todo = package.directory.join(RuboCop::Packs::PACK_LEVEL_RUBOCOP_TODO_YML)
70
- end
71
-
72
- if rubocop_todo.exist?
73
- loaded_rubocop_todo = YAML.load_file(rubocop_todo)
74
- cop_config = loaded_rubocop_todo.fetch(cop_name, {})
75
- cop_config.fetch('Exclude', []).count
76
- else
77
- 0
78
- end
79
- end
80
-
81
- sig { returns(T::Array[String])}
82
- def self.rubocops
83
- [
84
- 'Packs/ClassMethodsAsPublicApis',
85
- 'Packs/RootNamespaceIsPackName',
86
- 'Packs/TypedPublicApis',
87
- 'Packs/DocumentedPublicApis',
88
- ]
89
- end
90
-
91
- sig { params(cop_name: String).returns(String) }
92
- def self.to_tag_name(cop_name)
93
- cop_name.gsub('/', '_').downcase
94
- end
95
- end
96
- end
97
- end
98
- end