codemonitor 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e6c5534fbc28c7134e0d88898112fd0eff5db4c92bb0ac86833bb4daff955d6
4
- data.tar.gz: c9d7dc28df1e2d07e6b5377b320df7e947bcb72e13b6fa1dfe3981325d1fc9a0
3
+ metadata.gz: 54b2ce0b7c2997591225e5e7487433854b3fff767e3272b3d02210de337253cf
4
+ data.tar.gz: aa9a60e54480ec4602ec108f45b84323aa04aa46f3df622a4db2a303cb1e6ec3
5
5
  SHA512:
6
- metadata.gz: ea0fe2d521164f1386c4d616a2d8a539265c575af18789184672578711207289b506f67b4ed13fa52768389f8df496561206ea7ca73cdb43793f2f31a66dcd6e
7
- data.tar.gz: 22fcaa2bf3f0c58f565cf055c214ac993cc59b8ea45ff0523d5895060a7adf6cb475bb3db0ec90dbfd22dc8772241c0ee02f5338afb01b7626125f4811ab80c1
6
+ metadata.gz: 47fb68d254802463f047d96ef409b111ee3f65c6e007a74122bb90151a4e4d457ed2b7b3c4e2bb6da0cc7da45284a933a43167714b39d7d6ebe291f68e8a1822
7
+ data.tar.gz: 2a466e51f3cd2e5936600680068af4bdb0ee717e9fcbfcc657394d08640f2b00799e2f82a3f183093bd6e1e8c0ee286c2948b3f5f777b5eb8e2e45fd464d4fcf
data/Gemfile CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- # Specify your gem's dependencies in rubocop-changes.gemspec
5
+ # Specify your gem's dependencies in codemonitor.gemspec
6
6
  gemspec
data/codemonitor.gemspec CHANGED
@@ -37,6 +37,7 @@ Gem::Specification.new do |spec|
37
37
  spec.require_paths = ['lib']
38
38
 
39
39
  spec.add_runtime_dependency 'dogapi', '~> 1.45'
40
+ spec.add_runtime_dependency 'octokit', '~> 4.0'
40
41
 
41
42
  spec.add_development_dependency 'bundler', '~> 2.0'
42
43
  spec.add_development_dependency 'pry', '~> 0.13.1'
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'octokit'
4
+ require 'date'
5
+
6
+ Octokit.configure do |c|
7
+ c.auto_paginate = true
8
+ end
9
+
10
+ module Engines
11
+ module Github
12
+ class Extractor
13
+ METRICS = %i[
14
+ github_number_of_open_pull_requests
15
+ github_number_of_lead_time_in_days
16
+ ].freeze
17
+
18
+ def initialize
19
+ @access_token = ENV['GITHUB_TOKEN']
20
+ @repository = ENV['GITHUB_REPOSITORY']
21
+ @since_days = ENV['GITHUB_SINCE_DAYS'] || 30
22
+ end
23
+
24
+ def call(provider)
25
+ return unless requirements?
26
+
27
+ metrics = METRICS.map do |metric|
28
+ [metric, send(metric)]
29
+ end.to_h
30
+
31
+ provider.emit(metrics)
32
+ end
33
+
34
+ private
35
+
36
+ attr_reader :access_token, :repository, :since_days
37
+
38
+ def github
39
+ @github ||= Octokit::Client.new(access_token: access_token)
40
+ end
41
+
42
+ def requirements?
43
+ !access_token.nil? && !repository.nil?
44
+ end
45
+
46
+ def since
47
+ (Date.today - since_days).to_time.iso8601
48
+ end
49
+
50
+ def github_number_of_open_pull_requests
51
+ github.issues(repository, state: 'open').length
52
+ end
53
+
54
+ def github_number_of_lead_time_in_days
55
+ diffs = github
56
+ .issues(repository, since: since, state: 'closed')
57
+ .map do |issue|
58
+ next nil if issue[:pull_request][:merged_at].nil? || issue[:created_at].nil?
59
+
60
+ merged_at = Time.at(issue[:pull_request][:merged_at])
61
+ created_at = Time.at(issue[:created_at])
62
+
63
+ merged_at - created_at
64
+ end.reject do |diff|
65
+ diff.nil?
66
+ end
67
+
68
+ value = (diffs.reduce(:+) / diffs.size.to_f / (24 * 60 * 60))
69
+
70
+ value.round(2)
71
+ end
72
+ end
73
+ end
74
+ end
data/exe/codemonitor CHANGED
@@ -7,6 +7,7 @@ require_relative '../providers/datadog'
7
7
  require_relative '../engines/eslint/extractor'
8
8
  require_relative '../engines/debug/extractor'
9
9
  require_relative '../engines/git/extractor'
10
+ require_relative '../engines/github/extractor'
10
11
  require_relative '../engines/npm/extractor'
11
12
  require_relative '../engines/packwerk/extractor'
12
13
  require_relative '../engines/rubocop/extractor'
@@ -23,6 +24,7 @@ EXTRACTORS = {
23
24
  eslint: Engines::Eslint::Extractor,
24
25
  debug: Engines::Debug::Extractor,
25
26
  git: Engines::Git::Extractor,
27
+ github: Engines::Github::Extractor,
26
28
  npm: Engines::Npm::Extractor,
27
29
  packwerk: Engines::Packwerk::Extractor,
28
30
  rubocop: Engines::Rubocop::Extractor,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodeMonitor
4
- VERSION = '0.3.4'
4
+ VERSION = '0.3.5'
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.3.4
4
+ version: 0.3.5
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-01-10 00:00:00.000000000 Z
11
+ date: 2022-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dogapi
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.45'
27
+ - !ruby/object:Gem::Dependency
28
+ name: octokit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -119,6 +133,7 @@ files:
119
133
  - engines/debug/extractor.rb
120
134
  - engines/eslint/extractor.rb
121
135
  - engines/git/extractor.rb
136
+ - engines/github/extractor.rb
122
137
  - engines/npm/extractor.rb
123
138
  - engines/packwerk/extractor.rb
124
139
  - engines/rubocop/extractor.rb