hubba-reports 1.0.0 → 1.0.1

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
  SHA1:
3
- metadata.gz: 7ee2141ffe85e3b014a6daa85aabad4e5af114db
4
- data.tar.gz: f85975570218c0524741c6e2e5e07bb5aee1d81a
3
+ metadata.gz: 70dc07063bf62e795d5108be9264de6775e03d98
4
+ data.tar.gz: 2cd758aeb541c1b5681f424d3114a2fbb157d8fc
5
5
  SHA512:
6
- metadata.gz: 56a8b905a23cf89f4769b16d19fde1dd8af53fbc35c964a64a5aacce7de0e7cecc2adbce6dbfcafed6aaa31bb24b79248dcec67ba3f2e7de00efdff67cc8adc0
7
- data.tar.gz: 822cac3ce1638e3eb539c0517989711e218c6773b4570891cee26fc57d2e2f08c5c9d58e3b5fba2a18f9b10c10eaf47808e80e380f67fdb03d410dca371f3640
6
+ metadata.gz: 55d57dabc6cd034c292ae3d25d1b31d65a065e5604c50894417754ca060e14124b66d07d82ae0f3df9adef3bfcbb70e90cf0aec0dd80a2a06edc682518a03504
7
+ data.tar.gz: 21c0b6274481cab436da6d43961e7fd8fad508069793525324fa501d07e47201283eef510080d0af1a7f386b4113b0ddc482cc850481c953eb203cac37217ba5
@@ -6,6 +6,7 @@ lib/hubba/reports.rb
6
6
  lib/hubba/reports/folio.rb
7
7
  lib/hubba/reports/reports/base.rb
8
8
  lib/hubba/reports/reports/catalog.rb
9
+ lib/hubba/reports/reports/languages.rb
9
10
  lib/hubba/reports/reports/size.rb
10
11
  lib/hubba/reports/reports/stars.rb
11
12
  lib/hubba/reports/reports/summary.rb
data/README.md CHANGED
@@ -17,18 +17,24 @@ See the [hubba gem](https://github.com/rubycoco/git/tree/master/hubba) on how to
17
17
 
18
18
 
19
19
 
20
- ### Generate some statistics / reports
20
+ ### Statistics / reports
21
21
 
22
22
 
23
- Hubba has four built-in reports (for now):
23
+ Hubba has about a dozen built-in reports (for now):
24
24
 
25
25
  - `ReportSummary` - A-Z list of your repos by orgs with stars and size in kb
26
26
  - `ReportStars` - your repos ranked by stars
27
27
  - `ReportTimeline` - your repos in reverse chronological order by creation
28
28
  - `ReportUpdates` - your repos in reverse chronological order by last commit
29
+ - ...
29
30
 
31
+ Look into the [/reports](https://github.com/rubycoco/git/tree/master/hubba-reports/lib/hubba/reports/reports)
32
+ directory for all reports and, yes, you can - on how to code your very own.
30
33
 
31
- If you only generate a single report, use:
34
+
35
+ #### Generate statistic / reports
36
+
37
+ If you only generate a single built-in report, use:
32
38
 
33
39
  ``` ruby
34
40
  require 'hubba/reports'
@@ -54,6 +60,8 @@ report.save( './TIMELINE.md' )
54
60
 
55
61
  report = Hubba::ReportUpdates.new( stats )
56
62
  report.save( './UPDATES.md' )
63
+
64
+ # ...
57
65
  ```
58
66
 
59
67
 
@@ -9,6 +9,7 @@ require 'hubba/reports/folio'
9
9
 
10
10
  require 'hubba/reports/reports/base'
11
11
  require 'hubba/reports/reports/catalog'
12
+ require 'hubba/reports/reports/languages'
12
13
  require 'hubba/reports/reports/size'
13
14
  require 'hubba/reports/reports/stars'
14
15
  require 'hubba/reports/reports/summary'
@@ -0,0 +1,97 @@
1
+ module Hubba
2
+
3
+
4
+ class ReportLanguages < Report
5
+
6
+ def build
7
+
8
+ ## note: orgs is orgs+users e.g. geraldb, yorobot etc
9
+ buf = String.new('')
10
+ buf << "# Languages"
11
+ buf << " - #{@stats.repos.size} Repos @ #{@stats.orgs.size} Orgs"
12
+ buf << "\n\n"
13
+
14
+
15
+ buf << "language lines in byte / language used in repos (count)"
16
+ buf << "\n\n"
17
+
18
+
19
+ ### note: skip repos WITHOUT languages stats e.g. empty hash {}
20
+ repos = @stats.repos.select do |repo|
21
+ langs = repo.stats.languages
22
+ res = langs && langs.size > 0 ## return true if present and non-empty hash too
23
+ puts " no languages - skipping >#{repo.full_name}<..." unless res
24
+ res
25
+ end
26
+
27
+
28
+ ## collect all langs with refs to repos
29
+ ## note/warn: do NOT use langs as local variable - will RESET this langs here!!!
30
+ langs = {}
31
+
32
+ repos.each do |repo|
33
+ puts "#{repo.full_name}:"
34
+ pp repo.stats.languages
35
+ repo.stats.languages.each do |lang,bytes|
36
+ # note: keep using all string (NOT symbol) keys - why? why not?
37
+ line = langs[ lang ] ||= { 'count' => 0, 'bytes' => 0 }
38
+ line[ 'count' ] += 1
39
+ line[ 'bytes' ] += bytes
40
+ end
41
+ end
42
+
43
+ langs_by_bytes = langs.sort {|(llang,lline),(rlang,rline)|
44
+ res = rline['bytes'] <=> lline['bytes']
45
+ res = llang <=> rlang if res == 0
46
+ res
47
+ }
48
+ .to_h # convert back to hash (from array)
49
+
50
+
51
+ bytes_total = langs.reduce(0) {|sum,(lang,line)| sum+line['bytes'] }
52
+ langs_by_bytes.each_with_index do |(lang, line),i|
53
+ bytes = line['bytes']
54
+ percent = Float(100*bytes)/Float(bytes_total)
55
+
56
+ buf << "#{i+1}. "
57
+ buf << "#{bytes} (#{('%2.2f' % percent)}%) "
58
+ buf << "**#{lang}** "
59
+ buf << "_(#{line['count']})_"
60
+ buf << "\n"
61
+ end
62
+ buf << "<!-- break -->\n" ## markdown hack: add a list end marker
63
+ buf << "\n\n"
64
+
65
+
66
+ buf << "Languages used in repos (count):"
67
+ buf << "\n\n"
68
+
69
+
70
+ langs_by_count = langs.sort {|(llang,lline),(rlang,rline)|
71
+ res = rline['count'] <=> lline['count']
72
+ res = llang <=> rlang if res == 0
73
+ res
74
+ }
75
+ .to_h # convert back to hash (from array)
76
+
77
+
78
+ count_total = repos.size # note: use (filtered) repos for count total
79
+ langs_by_count.each_with_index do |(lang, line),i|
80
+ count = line['count']
81
+ percent = Float(100*count)/Float(count_total)
82
+
83
+ buf << "#{i+1}. "
84
+ buf << "#{count} (#{('%2.2f' % percent)}%) "
85
+ buf << "**#{lang}** "
86
+ buf << "(#{line['bytes']} bytes)"
87
+ buf << "\n"
88
+ end
89
+ buf << "<!-- break -->\n" ## markdown hack: add a list end marker
90
+ buf << "\n\n"
91
+
92
+
93
+ buf
94
+ end # method build
95
+ end # class ReportLanguages
96
+
97
+ end # module Hubba
@@ -60,6 +60,24 @@ repos_by_org = repos.group_by { |repo|
60
60
  .to_h ## convert back to hash
61
61
 
62
62
 
63
+ ### start with summary
64
+ ## limit to top 10 or top 20 - why? why not?
65
+ repos_by_org.each_with_index do |(owner, repos),i|
66
+ views = repos.reduce(0) {|sum,repo| sum+repo.stats.traffic['summary']['views']['count'] }
67
+ clones = repos.reduce(0) {|sum,repo| sum+repo.stats.traffic['summary']['clones']['count'] }
68
+
69
+ buf << "#{i+1}. **#{owner}** views: #{views}, clones: #{clones} _(#{repos.size})_"
70
+ buf << "\n"
71
+ end
72
+
73
+ buf << "<!-- break -->\n" ## markdown hack: add a list end marker
74
+ buf << "\n\n"
75
+
76
+
77
+
78
+ buf << "Details:" ## markdown hack: add a list end marker
79
+ buf << "\n\n"
80
+
63
81
  repos_by_org.each_with_index do |(owner, repos),i|
64
82
  views = repos.reduce(0) {|sum,repo| sum+repo.stats.traffic['summary']['views']['count'] }
65
83
  clones = repos.reduce(0) {|sum,repo| sum+repo.stats.traffic['summary']['clones']['count'] }
@@ -85,6 +85,22 @@ lines_by_path = lines.group_by { |line|
85
85
  .to_h ## convert back to hash
86
86
 
87
87
 
88
+ ### start with summary
89
+ ## limit to top 10 or top 20 - why? why not?
90
+ lines_by_path.each_with_index do |(path, lines),i|
91
+ count = lines.reduce(0) {|sum,line| sum+line['count']}
92
+ buf << "#{i+1}. **#{path}** #{count} _(#{lines.size})_"
93
+ buf << "\n"
94
+ end
95
+
96
+ buf << "<!-- break -->\n" ## markdown hack: add a list end marker
97
+ buf << "\n\n"
98
+
99
+
100
+
101
+ buf << "Details:"
102
+ buf << "\n\n"
103
+
88
104
  lines_by_path.each_with_index do |(path, lines),i|
89
105
  count = lines.reduce(0) {|sum,line| sum+line['count']}
90
106
  buf << "#{i+1}. **#{path}** #{count} _(#{lines.size})_"
@@ -76,6 +76,23 @@ lines_by_referrer = lines.group_by { |line| line['referrer'] }
76
76
  .to_h ## convert back to hash
77
77
 
78
78
 
79
+ ### start with summary
80
+ ## limit to top 10 or top 20 - why? why not?
81
+ lines_by_referrer.each_with_index do |(referrer, lines),i|
82
+ count = lines.reduce(0) {|sum,line| sum+line['count']}
83
+ buf << "#{i+1}. **#{referrer}** #{count} _(#{lines.size})_"
84
+ buf << "\n"
85
+ end
86
+
87
+ buf << "<!-- break -->\n" ## markdown hack: add a list end marker
88
+ buf << "\n\n"
89
+
90
+
91
+
92
+ buf << "Details:"
93
+ buf << "\n\n"
94
+
95
+
79
96
  lines_by_referrer.each_with_index do |(referrer, lines),i|
80
97
  count = lines.reduce(0) {|sum,line| sum+line['count']}
81
98
  buf << "#{i+1}. **#{referrer}** #{count} _(#{lines.size})_"
@@ -1,7 +1,7 @@
1
1
  module HubbaReports
2
2
  MAJOR = 1 ## todo: namespace inside version or something - why? why not??
3
3
  MINOR = 0
4
- PATCH = 0
4
+ PATCH = 1
5
5
  VERSION = [MAJOR,MINOR,PATCH].join('.')
6
6
 
7
7
  def self.version
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubba-reports
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-15 00:00:00.000000000 Z
11
+ date: 2020-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hubba
@@ -76,6 +76,7 @@ files:
76
76
  - lib/hubba/reports/folio.rb
77
77
  - lib/hubba/reports/reports/base.rb
78
78
  - lib/hubba/reports/reports/catalog.rb
79
+ - lib/hubba/reports/reports/languages.rb
79
80
  - lib/hubba/reports/reports/size.rb
80
81
  - lib/hubba/reports/reports/stars.rb
81
82
  - lib/hubba/reports/reports/summary.rb