-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathchart_creator.rb
61 lines (55 loc) · 2.24 KB
/
chart_creator.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
require 'csv'
require 'pry'
content_top = "<!-- For more on the api used here, see https://developers.google.com/chart/interactive/docs/gallery/bubblechart -->
<html>
<head>
<script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>
<script type='text/javascript'>
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawSeriesChart);
function drawSeriesChart() {
var data = google.visualization.arrayToDataTable([
['ID', 'Commits', 'PRs + Issues', 'Label','Authors'],"
data_row_count = 0;
(!ARGV[3].nil? && ARGV[3].to_i > 0) ? bubble_limit = ARGV[3].to_i : bubble_limit = 999
v_max = h_max = 100
content_data = ""
CSV.foreach(ARGV[0], headers: true) do |row|
data_row_count += 1
break if data_row_count > bubble_limit
bubble_hash = row.to_h
project_id = bubble_hash['project'].gsub(/'/,'’')
project_url = bubble_hash['url']
num_commits = bubble_hash['commits'].to_i
num_pr_iss = bubble_hash['prs'].to_i + bubble_hash['issues'].to_i
project_lbl = project_id + ' (' + project_url + ')'
num_authors = '%.2f' % Math.sqrt(bubble_hash['authors'].to_i)
content_data += " ['#{project_id}',#{num_commits},#{num_pr_iss},'#{project_lbl}',#{num_authors}],\n"
v_max = num_pr_iss if num_pr_iss > v_max
h_max = num_commits if num_commits > h_max
end
v_max *= 1.5
h_max *= 2
content_bottom = " ]);
var options = {
title: '#{ARGV[2]}',
hAxis: {title: 'Commits', logScale: true, minValue: 50, maxValue: #{h_max.to_i}, minorGridlines:{count: 5}},
vAxis: {title: 'PRs + Issues', logScale: true, minValue: 50, maxValue: #{v_max.to_i}, minorGridlines:{count: 5}},
bubble: {textStyle: {fontSize: 12}},
sizeAxis: {minSize: 12, maxSize: 40},
};
var chart = new google.visualization.BubbleChart(document.getElementById('series_chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id='series_chart_div' style='width: 100%; height: 100%;'></div>
</body>
</html>"
# File.open('out.txt', 'w') {|f| f.write('write your stuff here) }
html_file = File.new(ARGV[1], 'w')
html_file.puts(content_top)
html_file.puts(content_data)
html_file.puts(content_bottom)
html_file.close