kaya 0.0.9 → 0.0.10

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: 9fb23083e90ae0fe6d348d780f292c8b10745028
4
- data.tar.gz: cc47368d259ff5177c4be752f77fec5af118edef
3
+ metadata.gz: 8c3297f1d73f1e546c0332257f9844b1e5744e2a
4
+ data.tar.gz: 9bc15c57ac5916db0ac45abf286820624eb83dc5
5
5
  SHA512:
6
- metadata.gz: f9f7b1a0b39d08a48fdafeeeeca136223d9516369265ec7e760adcb4baa3267d878e138ed09cbb4fce968671df6b7d038fddf7d740b93f5d166934d25c7ae5e6
7
- data.tar.gz: 5defd6811dd0bf791c251bb76893414ebf05a233f0716ec296261bf467ca88be6534e7319f517555c98fc4f8872f775c21b05d56be33af521f76cf5fba9d4784
6
+ metadata.gz: 81215d73a2e5768c6cf9883da57d729180a2a969d3bbcca611c3ef2b5ee1a101d5541b9ff7b33476fcc117484ecc40742f1f3893888121cdd9430ef338aafa4a
7
+ data.tar.gz: a773c5717f0db26358b3bede1f9b9fd38f7f3a82721b880e16225b3dc97dcaa01dbd24b02610fc0ccfaa684c69f8e3772408076451c4761bea9ddb66486b02e2
@@ -1,7 +1,7 @@
1
1
  module Kaya
2
2
  module API
3
3
  class Execution
4
- def self.start suite_name, query_string
4
+ def self.start suite_name, query_string, ip
5
5
  $K_LOG.debug "Starting suite #{suite_name}" if $K_LOG
6
6
 
7
7
  suite_name.gsub!("%20", " ")
@@ -29,7 +29,9 @@ module Kaya
29
29
 
30
30
  suite = Kaya::Suites::Suite.get_suite_with(suite_name)
31
31
 
32
- if suite.is_ready?
32
+ suite_is_ready_for_ip = !Kaya::Results.running_for_suite_id_and_ip?(suite.id, ip)
33
+
34
+ if suite_is_ready_for_ip
33
35
 
34
36
  $K_LOG.debug "Suite #{suite_name} is ready to run" if $K_LOG
35
37
 
@@ -38,7 +40,8 @@ module Kaya
38
40
  "suite" => {"id" => suite.id, "name" => suite.name},
39
41
  "execution_name" => execution_name,
40
42
  "custom_params" => custom_params,
41
- "git_log" => git_log
43
+ "git_log" => git_log,
44
+ "ip" => ip
42
45
  }
43
46
 
44
47
  suite.last_result = Kaya::Execution.run!(execution_request_data) # Returns result_id
@@ -91,7 +94,7 @@ module Kaya
91
94
  # Kill associated process to the running execution
92
95
  # Sets as finished the result and associated suite as READY
93
96
  #
94
- def self.reset(result_id)
97
+ def self.reset(result_id, ip)
95
98
 
96
99
  $K_LOG.debug "Reset execution request for #{result_id}"
97
100
 
@@ -99,35 +102,40 @@ module Kaya
99
102
 
100
103
  suite = Kaya::Suites::Suite.get(result.suite_id)
101
104
 
102
- if result.process_running? or !result.finished? or !result.stopped?
103
-
104
- begin
105
- Kaya::Support::Processes.kill_by_result_id(result.id)
106
- killed = true
107
- $K_LOG.debug "Execution (id=#{results.id}) killed"
108
- rescue => e
109
- $K_LOG.error "#{e}#{e.backtrace}"
110
- end
111
-
112
- begin
113
- Kaya::Support::FilesCleanner.delete_report_which_has(result.id)
114
- $K_LOG.debug "Execution files(id=#{result.id}) cleanned"
115
- cleanned = true
116
- rescue
117
- end
118
-
119
- result.append_result_to_console_output!
120
- result.save_report!
121
- result.reset!("forced"); $K_LOG.debug "Execution stopped! Kaya restarted"
122
- result.show_as = "pending"
123
- result.save!
124
- # Reset if suite is setted as "RUNNING" and its result_id value corresponds to the result reset request
125
- suite.set_ready! if suite.last_result == result.id
126
- if killed and cleanned
127
- {"message" => "Execution stopped"}
128
- else
129
- {"message" => "Could not stop execution. Process killing: #{filled}. Files cleanned: #{celanned}"}
105
+ #
106
+ if result.ip == ip # is the owner of execution
107
+
108
+ if result.process_running? or !result.finished? or !result.stopped?
109
+ begin
110
+ Kaya::Support::Processes.kill_by_result_id(result.id)
111
+ killed = true
112
+ $K_LOG.debug "Execution (id=#{results.id}) killed"
113
+ rescue => e
114
+ $K_LOG.error "#{e}#{e.backtrace}"
115
+ end
116
+
117
+ begin
118
+ Kaya::Support::FilesCleanner.delete_report_which_has(result.id)
119
+ $K_LOG.debug "Execution files(id=#{result.id}) cleanned"
120
+ cleanned = true
121
+ rescue
122
+ end
123
+
124
+ result.append_result_to_console_output!
125
+ result.save_report!
126
+ result.reset!("forced"); $K_LOG.debug "Execution stopped! Kaya restarted"
127
+ result.show_as = "pending"
128
+ result.save!
129
+ # Reset if suite is setted as "RUNNING" and its result_id value corresponds to the result reset request
130
+ suite.set_ready! if suite.last_result == result.id
131
+ if killed and cleanned
132
+ {"message" => "Execution stopped"}
133
+ else
134
+ {"message" => "Could not stop execution. Process killing: #{filled}. Files cleanned: #{celanned}"}
135
+ end
130
136
  end
137
+ else
138
+ {"message" => "You are not the owner of this execution"}
131
139
  end
132
140
  end
133
141
 
@@ -2,9 +2,11 @@ module Kaya
2
2
  module API
3
3
  module Suites
4
4
 
5
- # @param [hash] options = {:running, :active}
5
+ # @param [hash] options = {:running, :active, :ip}
6
6
  def self.list(options ={})
7
7
 
8
+ start = Time.now.to_f
9
+
8
10
  response = {
9
11
  "project_name" => Dir.pwd.split("/").last,
10
12
  "size" => 0,
@@ -23,8 +25,19 @@ module Kaya
23
25
  if suites.size.zero?
24
26
  response["message"] = options[:running] ? "No running suites found" : "No suites found"
25
27
  else
26
- start = Time.now.to_f
27
- response["suites"] = suites.map{|suite_id| Kaya::Suites::Suite.get(suite_id).api_response}
28
+ # Gets the executions for given ip
29
+ suites = suites.map{|suite_id| Kaya::Suites::Suite.get(suite_id).api_response}
30
+
31
+ suites = suites.map do |suite|
32
+ unless Kaya::Results.results_for_suite_id_and_ip(suite["_id"], options[:ip]).empty?
33
+ suite["status"]="RUNNING"
34
+ suite
35
+ else
36
+ suite
37
+ end
38
+ end
39
+
40
+ response["suites"] = suites
28
41
  $K_LOG.debug "#{suites.size} retrieved in (#{Time.now.to_f - start} s)" if $K_LOG
29
42
 
30
43
  response["size"] = suites.size
@@ -12,7 +12,7 @@ module Kaya
12
12
  suite = Kaya::Suites::Suite.get(suite_id)
13
13
  begin
14
14
  suite.check_last_result!
15
- sleep 5
15
+ sleep 2
16
16
  end while not suite.is_ready?
17
17
  end
18
18
  end
data/lib/kaya/cuba.rb CHANGED
@@ -49,8 +49,8 @@ Cuba.define do
49
49
  result = Kaya::Results::Result.get(result_id)
50
50
  res.redirect "/#{HOSTNAME}/kaya/404/There%20is%20no%20result%20for%20id=#{result_id}" if result.nil?
51
51
  result.mark_as_saw! if (result.finished? or result.stopped?)
52
- template = Mote.parse(File.read("#{Kaya::View.path}/results/console.mote"),self, [:result])
53
- res.write template.call(result:result)
52
+ template = Mote.parse(File.read("#{Kaya::View.path}/results/console.mote"),self, [:result, :ip])
53
+ res.write template.call(result:result, ip:request.ip)
54
54
  end
55
55
 
56
56
 
@@ -67,32 +67,32 @@ Cuba.define do
67
67
  end
68
68
 
69
69
  on "#{HOSTNAME}/kaya/results/:result_id/reset" do |result_id|
70
- result = Kaya::API::Execution.reset(result_id)
70
+ result = Kaya::API::Execution.reset(result_id, request.ip)
71
71
  res.redirect "/#{HOSTNAME}/kaya/results?msg=#{result['message']}"
72
72
  end
73
73
 
74
74
  on "#{HOSTNAME}/kaya/results/suite/:suite_name" do |suite_name|
75
75
  query_string = Kaya::Support::QueryString.new req
76
76
  suite_name.gsub!("%20"," ")
77
- template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
78
- res.write template.call(section:"Results", query_string:query_string, suite_name:suite_name, log_name:nil)
77
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name, :ip])
78
+ res.write template.call(section:"Results", query_string:query_string, suite_name:suite_name, log_name:nil, ip:request.ip)
79
79
  end
80
80
 
81
81
  on "#{HOSTNAME}/kaya/results/all" do
82
82
  query_string = Kaya::Support::QueryString.new req
83
- template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
84
- res.write template.call(section:"All Results", query_string:query_string, suite_name:nil, log_name:nil)
83
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name, :ip])
84
+ res.write template.call(section:"All Results", query_string:query_string, suite_name:nil, log_name:nil, ip:request.ip)
85
85
  end
86
86
 
87
87
  on "#{HOSTNAME}/kaya/results" do
88
88
  query_string = Kaya::Support::QueryString.new req
89
- template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
90
- res.write template.call(section:"Results", query_string:query_string, suite_name:nil, log_name:nil)
89
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name, :ip])
90
+ res.write template.call(section:"Results", query_string:query_string, suite_name:nil, log_name:nil, ip:request.ip)
91
91
  end
92
92
 
93
93
  on "#{HOSTNAME}/kaya/suites/:suite/run" do |suite_name|
94
94
  query_string = Kaya::Support::QueryString.new req
95
- result = Kaya::API::Execution.start suite_name, query_string.values
95
+ result = Kaya::API::Execution.start suite_name, query_string.values, request.ip
96
96
 
97
97
  path = "/#{HOSTNAME}/kaya/suites"
98
98
  path += "?msg=#{result['message']}. " if result["message"]
@@ -107,21 +107,21 @@ Cuba.define do
107
107
  (Kaya::Support::Git.reset_hard and Kaya::Support::Git.pull) if Kaya::Support::Configuration.use_git?
108
108
  Kaya::Suites.update_suites
109
109
  suite_name.gsub!("%20"," ")
110
- template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
111
- res.write template.call(section:"Test Suites", query_string:query_string, suite_name:suite_name, log_name:nil)
110
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name, :ip])
111
+ res.write template.call(section:"Test Suites", query_string:query_string, suite_name:suite_name, log_name:nil, ip:request.ip)
112
112
  end
113
113
 
114
114
  on "#{HOSTNAME}/kaya/suites" do
115
115
  query_string = Kaya::Support::QueryString.new req
116
116
  Kaya::Suites.update_suites
117
- template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
118
- res.write template.call(section:"Test Suites", query_string:query_string, suite_name:nil, log_name:nil)
117
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name, :ip])
118
+ res.write template.call(section:"Test Suites", query_string:query_string, suite_name:nil, log_name:nil, ip:request.ip)
119
119
  end
120
120
 
121
121
  on "#{HOSTNAME}/kaya/logs/:log_name" do |log_name|
122
122
  query_string = Kaya::Support::QueryString.new req
123
- template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name])
124
- res.write template.call(section:"Logs", query_string:query_string, suite_name:nil, log_name:log_name)
123
+ template = Mote.parse(File.read("#{Kaya::View.path}/body.mote"),self, [:section, :query_string, :suite_name, :log_name, :ip])
124
+ res.write template.call(section:"Logs", query_string:query_string, suite_name:nil, log_name:log_name, ip:request.ip)
125
125
  end
126
126
 
127
127
  # ========================================================================
@@ -178,13 +178,13 @@ Cuba.define do
178
178
  end
179
179
 
180
180
  on "#{HOSTNAME}/kaya/api/results/:id/reset" do |result_id|
181
- result = Kaya::API::Execution.reset(result_id)
181
+ result = Kaya::API::Execution.reset(result_id, request.ip)
182
182
  res.write result.to_json
183
183
  end
184
184
 
185
185
  on "#{HOSTNAME}/kaya/api/suites/:suite/run" do |suite_name|
186
186
  query_string = Kaya::Support::QueryString.new req
187
- result = Kaya::API::Execution.start suite_name, query_string.values
187
+ result = Kaya::API::Execution.start suite_name, query_string.values, request.ip
188
188
  res.write result.to_json
189
189
  end
190
190
 
@@ -216,7 +216,7 @@ Cuba.define do
216
216
  on "#{HOSTNAME}/kaya/api/suites" do
217
217
  (Kaya::Support::Git.reset_hard and Kaya::Support::Git.pull) if Kaya::Support::Configuration.use_git?
218
218
  Kaya::Suites.update_suites
219
- output = Kaya::API::Suites.list({"active" => true})
219
+ output = Kaya::API::Suites.list({active:true, ip:request.ip})
220
220
  res.write output.to_json
221
221
  end
222
222
 
@@ -243,6 +243,15 @@ module Kaya
243
243
  end
244
244
  end
245
245
 
246
+ def self.results_for_suite_id_and_ip suite_id, ip
247
+ results = self.find_results_for_ip(ip)
248
+ if results
249
+ results.select{|result| result["suite"]["id"]==suite_id}
250
+ else
251
+ []
252
+ end
253
+ end
254
+
246
255
  def self.result_data_for_id(result_id)
247
256
  @@results.find({"_id" => ensure_int(result_id)}).to_a.first
248
257
  end
@@ -280,6 +289,10 @@ module Kaya
280
289
  end
281
290
  end
282
291
 
292
+ def self.find_results_for_ip ip
293
+ @@results.find({"ip" => ip}, :sort =>["started_at", -1]).to_a
294
+ end
295
+
283
296
  def self.find_results_for_status status
284
297
  all_actual_results = self.all_results
285
298
  if !all_actual_results.empty?
@@ -26,7 +26,8 @@ module Kaya
26
26
  :pid,
27
27
  :last_check_time,
28
28
  :configuration_values,
29
- :timeout
29
+ :timeout,
30
+ :ip
30
31
 
31
32
  attr_reader :console_output
32
33
 
@@ -65,6 +66,7 @@ module Kaya
65
66
  @last_check_time = now_in_seconds
66
67
  @execution_data = {}
67
68
  @configuration_values = Kaya::Support::Configuration.pretty_configuration_values
69
+ @ip = data_for_result["ip"]
68
70
  end
69
71
  end
70
72
 
@@ -106,7 +108,8 @@ module Kaya
106
108
  "pid" => pid,
107
109
  "last_check_time" => last_check_time,
108
110
  "execution_data" => execution_data,
109
- "configuration_values" => configuration_values
111
+ "configuration_values" => configuration_values,
112
+ "ip" => ip
110
113
  }
111
114
  end
112
115
 
@@ -167,7 +170,6 @@ module Kaya
167
170
  self.finished!
168
171
  $K_LOG.debug "[#{@id}] Values updated" if $K_LOG
169
172
  finished = true
170
-
171
173
  elsif (self.seconds_without_changes > Kaya::Support::Configuration.execution_time_to_live)
172
174
  self.finished_by_timeout!
173
175
  finished = true
@@ -268,6 +270,8 @@ module Kaya
268
270
  end
269
271
 
270
272
  def append_result_to_console_output!
273
+ $K_LOG.debug "console retrived #{Time.now.to_i}" if $K_LOG
274
+ $K_LOG.debug "without changes #{self.seconds_without_changes}" if $K_LOG
271
275
  if is_there_console_output_file?
272
276
  begin
273
277
  output = []
@@ -278,6 +282,7 @@ module Kaya
278
282
  if (text.size > @console_output.size )
279
283
  save_console_output(text)
280
284
  @last_check_time = now_in_seconds
285
+ self.save!
281
286
  end
282
287
  true
283
288
  rescue
@@ -445,7 +450,7 @@ module Kaya
445
450
  end
446
451
 
447
452
  # Returns the seconds that there is no console output changes only if it is not finished, else returns 0
448
- # This is aimed to help to detect if execution is freezed (or may have a debugger statement)
453
+ # This is aimed to help to detect if execution is freezed (or has a debugger statement)
449
454
  def seconds_without_changes
450
455
  (self.finished? or self.stopped?) ? 0 : (now_in_seconds - @last_check_time)
451
456
  end
@@ -31,6 +31,21 @@ module Kaya
31
31
  Kaya::Database::MongoConnector.find_results_for_key key
32
32
  end
33
33
 
34
+ def self.all_results_for_ip ip_address
35
+ Kaya::Database::MongoConnector.find_results_for_ip ip_address
36
+ end
37
+
38
+ def self.results_for_suite_id_and_ip suite_id, ip
39
+ Kaya::Database::MongoConnector.results_for_suite_id_and_ip suite_id, ip
40
+ end
41
+
42
+ def self.running_for_suite_id_and_ip? suite_id, ip
43
+ results = self.results_for_suite_id_and_ip suite_id, ip
44
+ not results.select do |res|
45
+ res["status"]=="running"
46
+ end.empty?
47
+ end
48
+
34
49
  # Resets all results with running status
35
50
  def self.reset_defuncts
36
51
  Kaya::Database::MongoConnector.all_results.select do |result|
data/lib/kaya/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kaya
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -4,9 +4,6 @@
4
4
 
5
5
  % title = h1 = section.split.map{|w| w.capitalize}.join " "
6
6
 
7
-
8
- <!--partials -->
9
-
10
7
  % javascript = Mote.parse(File.read("#{Kaya::View.path}/javascript.mote"), self, []).call()
11
8
 
12
9
  % styles = Mote.parse(File.read("#{Kaya::View.path}/styles.mote"), self, []).call()
@@ -20,7 +17,7 @@
20
17
 
21
18
  % template_file_path = File.read("#{Kaya::View.path}/#{Kaya::View::Sections.path_for(section)}.mote")
22
19
 
23
- % content = Mote.parse(template_file_path, self, [:query_string, :suite_name, :log_name]).call(query_string:query_string, suite_name:suite_name, log_name:log_name)
20
+ % content = Mote.parse(template_file_path, self, [:query_string, :suite_name, :log_name, :ip]).call(query_string:query_string, suite_name:suite_name, log_name:log_name, ip:ip)
24
21
 
25
22
  % section = section.gsub(" ","_").downcase
26
23
 
@@ -13,13 +13,4 @@
13
13
  </h4>
14
14
 
15
15
  % end
16
- % if section.downcase == "all results"
17
- <div class='btn-group pull-right' role='group'>
18
- <button type='button' class='btn btn-default' aria-label='Left Align' title='Toggle collapse' onclick="autoCollapse()" title='collapse all panels'>
19
- <div id='collapse_icon'>
20
- <span class='glyphicon glyphicon-minus' aria-hidden='true' style='font-size:18px;'></span>
21
- </div>
22
- </button>
23
- </div>
24
- % end
25
16
  </div>
@@ -1,6 +1,7 @@
1
1
  <?
2
2
  key = query_string.keyword if (query_string.keyword and !query_string.keyword.empty?)
3
3
  status = query_string.status if (query_string.status and !query_string.status.empty?)
4
+ mine = query_string.mine if query_string.mine
4
5
 
5
6
  results = Kaya::API::Results.show()
6
7
  results_list = results["results"]
@@ -21,7 +22,22 @@
21
22
 
22
23
  if status
23
24
  results_list.select! do |res|
24
- res["status"].downcase==status.downcase or (res["summary"].split("step").first.downcase.include? status.downcase and res["summary"].split("step").first.scan(/\(\d.+\)/).first.scan(/[a-z]+/).first == status )
25
+ by_status = res["status"].downcase==status.downcase
26
+ by_first_part_summary = res["summary"].split("step").first.downcase.include? status.downcase
27
+ first_part = res["summary"].split("step").first
28
+ if first_part
29
+ scenarios = first_part.scan(/\(\d.+\)/).first
30
+ if scenarios
31
+ by_partial_summary = scenarios.scan(/[a-z]+/).first == status
32
+ end
33
+ end
34
+ by_status or (by_first_part_summary and by_partial_summary)
35
+ end
36
+ end
37
+
38
+ if mine
39
+ results_list.select! do |res|
40
+ res["ip"] == ip
25
41
  end
26
42
  end
27
43
 
@@ -50,14 +66,24 @@
50
66
  % if key or status
51
67
  <a class='btn btn-danger' href='/{{Kaya::Support::Configuration.hostname}}/kaya/results/all' role='button'>Clear</a>
52
68
  % end
69
+ <input type='checkbox' {{'checked="checked"' if mine=="on"}} name="mine" onclick="form.submit();" /><label>&nbsp;Only mine</label>
70
+
71
+ <div class='btn-group pull-right' role='group'>
72
+ <button type='button' class='btn btn-default' aria-label='Left Align' title='Toggle collapse' onclick="autoCollapse()" title='collapse all panels'>
73
+ <div id='collapse_icon'>
74
+ <span class='glyphicon glyphicon-minus' aria-hidden='true' style='font-size:18px;'></span>
75
+ </div>
76
+ </button>
77
+ </div>
53
78
  </form>
79
+
54
80
  <br>
55
81
  <p style='text-align:right'>{{results_size_text}}</p>
56
82
  </div>
57
83
 
58
84
  % if results_list.size > 0
59
- % result_info = Mote.parse(File.read("#{Kaya::View.path}/results/detailed_info.mote"), self, [:result])
85
+ % result_info = Mote.parse(File.read("#{Kaya::View.path}/results/detailed_info.mote"), self, [:result, :ip])
60
86
  % results_list.each do |result_data|
61
- {{result_info.call(result:result_data)}}
87
+ {{result_info.call(result:result_data, ip:ip)}}
62
88
  % end
63
89
  % end
@@ -67,8 +67,10 @@ javascript = Mote.parse(File.read("#{Kaya::View.path}/javascript.mote"), self, [
67
67
  <a href='#' class='label label-warning' onclick="window.open('/{{Kaya::Support::Configuration.hostname}}/kaya/api/results/{{result.id}}/data', '_blank', 'toolbar=no, scrollbars=yes, resizable=yes, top=300, left=300, width=800, height=600');" class='btn btn-default'>
68
68
  Execution Data</a>
69
69
  % unless result.status =~ /finished|stopped/
70
- <a href='#' onclick="getAndClose('/{{Kaya::Support::Configuration.hostname}}/kaya/results/{{result.id}}/reset');" class='label label-danger'>
71
- Stop execution</a>
70
+ % if result.ip == ip
71
+ <a href='#' onclick="getAndClose('/{{Kaya::Support::Configuration.hostname}}/kaya/results/{{result.id}}/reset');" class='label label-danger'>
72
+ Stop execution</a>
73
+ % end
72
74
  % end
73
75
  </div>
74
76
  </h6>
@@ -5,13 +5,6 @@
5
5
  <div class='panel-heading' data-toggle='collapse' data-target='#{{result["_id"]}}'>
6
6
  <h4><small>Execution name &nbsp; <b>{{result["execution_name"]}}</b>&nbsp;(Result id: {{result["_id"]}})</small></h4></div>
7
7
  <div class='panel-body collapse in' id='{{result["_id"]}}'>
8
- % unless result["status"] =~ /finished|stopped/
9
- <div class='pull-right' title='It seems that the execution gone wrong. Click here to force execution stop'>
10
- <a href='/{{Kaya::Support::Configuration.hostname}}/kaya/results/{{result["_id"]}}/reset' class='label label-danger'>
11
- Stop execution
12
- </a>
13
- </div>
14
- % end
15
8
 
16
9
  <table class="table">
17
10
  <tbody>
@@ -105,6 +98,16 @@
105
98
  Raw
106
99
  </a>
107
100
 
101
+ % unless result["status"] =~ /finished|stopped/
102
+ % if result["ip"]==ip
103
+
104
+ <a href='/{{Kaya::Support::Configuration.hostname}}/kaya/results/{{result["_id"]}}/reset' class='btn btn-danger'>
105
+ Stop execution
106
+ </a>
107
+
108
+ % end
109
+ % end
110
+
108
111
 
109
112
  </div>
110
113
  </div>
@@ -1,8 +1,19 @@
1
- <div class='starter-template'>
2
- <div class='panel panel-{{Kaya::View.color(suite["status"])}}'>
1
+ <?
2
+ last_result_for_ip = Kaya::Results.results_for_suite_id_and_ip(suite["_id"], ip).first
3
+ status = if last_result_for_ip
4
+ last_result_for_ip["status"]=="running" ? "running" : "finished"
5
+ else
6
+ "READY"
7
+ end
8
+
9
+ color = Kaya::View.color(status)
10
+
11
+ ?>
12
+ <div class='starter-template'>
13
+ <div class='panel panel-{{color}}'>
3
14
  <div class='panel-heading' data-toggle='collapse' data-target='#{{suite["name"].gsub(' ','')}}'>
4
15
  <h4 class='panel-title'>{{suite["name"]}}</h4>
5
- % unless suite["status"]=="READY"
16
+ % if status=="running"
6
17
  <div class="spinner">
7
18
  <div class="bounce1"></div>
8
19
  <div class="bounce2"></div>
@@ -16,19 +27,19 @@
16
27
  <li class='list-group-item'>
17
28
  Command: {{suite["command"]}}
18
29
  </li>
19
- % if suite["last_result"]
20
- % unless suite["status"] == "RUNNING"
30
+ % if last_result_for_ip
31
+ % unless status == "running"
21
32
  <li class='list-group-item'>
22
- Last result:&nbsp;{{Kaya::View.label_color_for_result_id suite["last_result"]}}
33
+ Last result:&nbsp;{{Kaya::View.label_color_for_result_id last_result_for_ip["_id"]}}
23
34
  </li>
24
35
  <li class='list-group-item'>
25
- Started on:&nbsp;{{Kaya::Support::TimeHelper.formatted_time_for(Kaya::Results::Result.get(suite["last_result"]).started_at)}}
36
+ Started on:&nbsp;{{Kaya::Support::TimeHelper.formatted_time_for(Kaya::Results::Result.get(last_result_for_ip["_id"]).started_at)}}
26
37
  </li>
27
38
  % end
28
39
  % end
29
- % if suite["status"] == "RUNNING"
40
+ % if status == "running"
30
41
  <li class='list-group-item'>
31
- <a href='#' class='btn btn-info' onclick="refreshAndOpen('/{{Kaya::Support::Configuration.hostname}}/kaya/results/log/{{suite['last_result']}}');">
42
+ <a href='#' class='btn btn-info' onclick="refreshAndOpen('/{{Kaya::Support::Configuration.hostname}}/kaya/results/log/{{last_result_for_ip["_id"]}}');">
32
43
  See progress
33
44
  </a>
34
45
  </li>
@@ -1,10 +1,25 @@
1
- <div class='starter-template'>
2
- <div class='panel panel-{{Kaya::View.color(suite["status"])}}'>
1
+ <?
2
+ last_result_for_ip = Kaya::Results.results_for_suite_id_and_ip(suite["_id"], ip).first
3
+ status = if last_result_for_ip
4
+ if last_result_for_ip["status"]=="running"
5
+ "running"
6
+ else
7
+ "finished"
8
+ end
9
+ else
10
+ "READY"
11
+ end
12
+
13
+ color = Kaya::View.color(status)
14
+
15
+ ?>
16
+ <div class='starter-template'>
17
+ <div class='panel panel-{{color}}'>
3
18
  <div class='panel-heading'">
4
19
  <h3 class='panel-title' onclick="goClean('/{{Kaya::Support::Configuration.hostname}}/kaya/suites/{{suite["name"].gsub(' ','%20')}}');">
5
20
  {{suite["name"]}}
6
21
  </h3>
7
- % unless suite["status"]=="READY"
22
+ % if status=="running"
8
23
  <div class="spinner">
9
24
  <div class="bounce1"></div>
10
25
  <div class="bounce2"></div>
@@ -21,8 +36,8 @@
21
36
  <a href='#' title='{{suite["info"]}}' class='label label-default' aria-hidden='true' data-toggle='modal' data-target='#myModal' onclick="javascript:info('Information about {{suite["name"]}}','{{suite["info"].gsub('\n','<br>')}}', null);">
22
37
  Information</a>
23
38
  % end
24
- % if suite["status"]=="RUNNING"
25
- <a href='#' title='See execution progress' class='label label-warning' onclick="refreshAndOpen('/{{Kaya::Support::Configuration.hostname}}/kaya/results/log/{{suite['last_result']}}');">
39
+ % if status=="running"
40
+ <a href='#' title='See execution progress' class='label label-warning' onclick="refreshAndOpen('/{{Kaya::Support::Configuration.hostname}}/kaya/results/log/{{last_result_for_ip["_id"]}}');">
26
41
  See progress</a>
27
42
  % end
28
43
  </div>
@@ -8,13 +8,13 @@
8
8
  % end
9
9
  % if number_of_suites > 0
10
10
  % if suite_name
11
- % suite_template = Mote.parse(File.read("#{Kaya::View.path}/suites/suite.mote"), self, [:suite])
11
+ % suite_template = Mote.parse(File.read("#{Kaya::View.path}/suites/suite.mote"), self, [:suite, :ip])
12
12
  % else
13
- % suite_template = Mote.parse(File.read("#{Kaya::View.path}/suites/suite_item.mote"), self, [:suite])
13
+ % suite_template = Mote.parse(File.read("#{Kaya::View.path}/suites/suite_item.mote"), self, [:suite, :ip])
14
14
  % end
15
15
  % suites_list = suites_list["suites"]
16
16
  % suites_list.select!{|suite| suite["name"]==suite_name} if suite_name
17
17
  % suites_list.each do |suite_data|
18
- {{suite_template.call(suite:suite_data)}}
18
+ {{suite_template.call(suite:suite_data, ip:ip)}}
19
19
  % end
20
20
  % end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaya
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Rodriguez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-29 00:00:00.000000000 Z
11
+ date: 2015-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor