mach5-tools 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: 836c5778b2617e690194d748246bf9485c3afa30
4
- data.tar.gz: 84e9ac490ec32457f6af21ad229f7753e912ce7e
3
+ metadata.gz: d531491376f7d66a0280e9383c5ad05cb2370ba1
4
+ data.tar.gz: ed0e957e907164e64b17317f7ade8f8e09034433
5
5
  SHA512:
6
- metadata.gz: c663eff8d089055752384ffddb161430e8bc7e0724063e64c749998e13d27620992c0fed7dd55e142725d8c717a5178e2f5ec7167d2742599f5b511611d9b25a
7
- data.tar.gz: 1c57a2c5ad94f77f81a46740e79461b4ec485981b7f64ca897268a254f88586dc843a2049591d6ef7b5ef72c5ed875c1999673a3a76d64e3b92c41818bb3870e
6
+ metadata.gz: 6bbfe9364b097465db0285a1ae7f2f0dd9beccba1613376783f3924ec2c5d0375ca244bc8f8f6281e50651c4cac2a954bad7ae36987f961a7e8a7e341fd59fcf
7
+ data.tar.gz: 85c0f626d38a433c5df81684e4f90524cf7e0a3651a3ba0f1c5c5ab11f93bc3debac5343d922702153b0b12c14d0bf9df52c713252c28e9faef5ed3b21354733
data/TODO CHANGED
@@ -3,10 +3,14 @@ v0.1.0
3
3
  [x] mach5 benchmark --only commit_id.benchmark
4
4
 
5
5
  v0.2.0
6
- [ ] mach5 graph
7
- [ ] mach5 graph --all
8
- [ ] mach5 graph --list (lista e mostrar o status: se ja existe ou nao)
9
- [ ] mach5 graph --only graph_id
6
+ [x] mach5 chart
7
+ [x] mach5 chart --all
8
+ [x] mach5 chart --list (lista e mostrar o status: se ja existe ou nao)
9
+ [x] mach5 chart --only graph_id
10
+ [x] charts com tags
11
+ [x] mais opções para add_serie
12
+ [x] mais opções para x_axis e y_axis
13
+ [x] definir o tipo do grafico (line ou bar)
10
14
 
11
15
  v0.3.0
12
16
  [ ] mach5 init (cria o Mach5file)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/bin/mach5 CHANGED
@@ -23,6 +23,23 @@ class App < Thor
23
23
  end
24
24
  end
25
25
 
26
+ desc "chart", "Generate charts"
27
+ method_option :all, :type => :boolean, :aliases => "-a", :desc => "Generates all benchmarks even if it was already generated"
28
+ method_option :list, :type => :boolean, :aliases => "-l", :desc => "List all available charts"
29
+ method_option :only, :type => :array, :aliases => "-o", :desc => "Generates only the specified charts"
30
+ def chart
31
+ runner = Mach5::Runner.new(eval(File.open("Mach5file").readlines.join))
32
+ if options.list
33
+ runner.list_charts.each do |chart|
34
+ puts chart
35
+ end
36
+ elsif options.only
37
+ runner.chart(only: options.only)
38
+ else
39
+ runner.chart(all: options.all)
40
+ end
41
+ end
42
+
26
43
  default_task :benchmark
27
44
  end
28
45
 
@@ -27,6 +27,10 @@ module Mach5
27
27
  @memory.keys
28
28
  end
29
29
 
30
+ def tagged
31
+ @tags
32
+ end
33
+
30
34
  def has_tag?(commit_id)
31
35
  @tags.invert[commit_id]
32
36
  end
@@ -0,0 +1,62 @@
1
+ module Mach5
2
+ class Chart
3
+ attr_accessor :type
4
+ attr_accessor :data_type
5
+ attr_accessor :size
6
+ attr_accessor :title
7
+ attr_accessor :x_axis
8
+ attr_accessor :y_axis
9
+ attr_accessor :series
10
+ attr_accessor :config
11
+ attr_reader :id
12
+
13
+ def initialize(id)
14
+ @id = id
15
+ end
16
+
17
+ def build
18
+ hash = {
19
+ "type" => @type,
20
+ "dataType" => @data_type,
21
+ "size" => {
22
+ "width" => size.split("x").map(&:to_i)[0],
23
+ "height" => size.split("x").map(&:to_i)[1]
24
+ },
25
+ "title" => {
26
+ "text" => @title
27
+ },
28
+ "xAxis" => {
29
+ "title" => {
30
+ "text" => @x_axis[:label]
31
+ }
32
+ },
33
+ "yAxis" => {
34
+ "title" => {
35
+ "text" => @y_axis
36
+ }
37
+ },
38
+ "series" => _series(@series)
39
+ }
40
+ hash["xAxis"]["categories"] = @x_axis[:categories] if @x_axis[:categories]
41
+ hash
42
+ end
43
+
44
+ def _series(series)
45
+ result = []
46
+ series.each do |s|
47
+ commit_id = @config.benchmarks.tagged[s[:commit_id]]
48
+ unless commit_id
49
+ commit_id = s[:commit_id]
50
+ end
51
+ serie = {
52
+ "label" => "#{s[:commit_id]}.#{s[:benchmark_id]}",
53
+ "file" => File.join(Dir.pwd, @config.output_folder, "#{commit_id}.#{s[:benchmark_id]}.json")
54
+ }
55
+ serie["label"] = s[:label] if s[:label]
56
+ serie["color"] = s[:color] if s[:color]
57
+ result << serie
58
+ end
59
+ result
60
+ end
61
+ end
62
+ end
@@ -10,10 +10,13 @@ module Mach5
10
10
  attr_accessor :project_name
11
11
  attr_accessor :output_folder
12
12
  attr_accessor :benchmarks
13
+ attr_accessor :charts
13
14
 
14
15
  def initialize(project_name, block)
15
16
  @project_name = project_name
16
17
  @benchmarks = Benchmark.new(Hash.new, Hash.new)
18
+ @charts = []
19
+ @output_folder = "_benchmark"
17
20
  instance_eval(&block)
18
21
  end
19
22
 
@@ -47,5 +50,71 @@ module Mach5
47
50
  def exec(command)
48
51
  @commands << command
49
52
  end
53
+
54
+ def chart(chart_id, &block)
55
+ @chart_series = []
56
+ @chart_type = "line"
57
+ @chart_size = "700x500"
58
+ @chart_title = "Benchmark"
59
+ @chart_x_axis = "X"
60
+ @chart_y_axis = "Y"
61
+ @data_type = "runs_total_time"
62
+ instance_eval(&block)
63
+ chart = Chart.new(chart_id)
64
+ chart.data_type = @data_type
65
+ chart.type = @chart_type
66
+ chart.size = @chart_size
67
+ chart.title = @chart_title
68
+ chart.x_axis = @chart_x_axis
69
+ chart.y_axis = @chart_y_axis
70
+ chart.series = @chart_series
71
+ chart.config = self
72
+ @charts << chart
73
+ end
74
+
75
+ def title(str)
76
+ @chart_title = str
77
+ end
78
+
79
+ def add_serie(benchmark, &block)
80
+ @serie_label = nil
81
+ @serie_color = nil
82
+ block.call if block
83
+ @chart_series << {commit_id: benchmark.keys[0], benchmark_id: benchmark.values[0], label: @serie_label, color: @serie_color}
84
+ end
85
+
86
+ def data_type(type)
87
+ @data_type = type
88
+ end
89
+
90
+ def x_axis(label, &block)
91
+ @chart_x_axis_categories = nil
92
+ block.call if block
93
+ @chart_x_axis = {label: label, categories: @chart_x_axis_categories}
94
+ end
95
+
96
+ def y_axis(label)
97
+ @chart_y_axis = label
98
+ end
99
+
100
+ def size(str)
101
+ @chart_size = str
102
+ end
103
+
104
+ def type(str)
105
+ @chart_type = str
106
+ end
107
+
108
+ def label(str)
109
+ @serie_label = str
110
+ end
111
+
112
+ def color(str)
113
+ @serie_color = str
114
+ end
115
+
116
+ def categories(cat)
117
+ @chart_x_axis_categories = cat
118
+ end
50
119
  end
51
120
  end
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <title>Line Chart</title>
8
+ </head>
9
+ <body>
10
+ <div id="container" style="width:100%; height:100%;"></div>
11
+ <script src="jquery.js"></script>
12
+ <script src="highcharts.js"></script>
13
+ <script type="text/javascript">
14
+ $('#container').height($(document).height());
15
+ $(window).resize(function() {
16
+ console.log($(window).height());
17
+ $('#container').height($(window).height());
18
+ });
19
+ </script>
20
+ </body>
21
+ </html>
@@ -0,0 +1,58 @@
1
+ var page = require('webpage').create(),
2
+ system = require('system'),
3
+ fs = require('fs');
4
+
5
+ page.viewportSize = { width: 960, height: 540 };
6
+
7
+ var process_data = function(data, type) {
8
+ var table = new Array();
9
+ table[0] = new Array();
10
+ table[1] = new Array();
11
+ for (var i = 0; i < data.length; i++) {
12
+ table[0][i] = data[i].index;
13
+ table[1][i] = data[i][type];
14
+ }
15
+ return table;
16
+ }
17
+
18
+ var descriptor = eval(system.args[2])[0],
19
+ current_path = system.args[1],
20
+ output_image = system.args[3];
21
+
22
+ if (typeof descriptor.size !== "undefined")
23
+ page.viewportSize = descriptor.size;
24
+
25
+ page.open(current_path + '/chart.html', function() {
26
+ for (var i = 0; i < descriptor.series.length; i++) {
27
+ var file = fs.open(descriptor.series[i].file, 'r');
28
+ descriptor.series[i].data = eval(file.read());
29
+ }
30
+
31
+ page.evaluate(function(process_data, descriptor) {
32
+ $(function () {
33
+ var series = new Array();
34
+ for (var i = 0; i < descriptor.series.length; i++) {
35
+ series[i] = {
36
+ name: descriptor.series[i].label,
37
+ data: process_data(descriptor.series[i].data, descriptor.dataType)[1],
38
+ color: descriptor.series[i].color,
39
+ animation: false
40
+ };
41
+ }
42
+
43
+ $('#container').highcharts({
44
+ chart: {
45
+ type: descriptor.type,
46
+ animation: false
47
+ },
48
+ title: descriptor.title,
49
+ xAxis: descriptor.xAxis,
50
+ yAxis: descriptor.yAxis,
51
+ series: series
52
+ });
53
+ });
54
+ }, process_data, descriptor);
55
+
56
+ page.render(output_image);
57
+ phantom.exit();
58
+ });