mutx 0.1.69 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/documentation/repos.md +21 -24
- data/lib/generators/task_rack.rb +8 -2
- data/lib/generators/templates/config.ru.tt +1 -1
- data/lib/mutx/API/execution.rb +8 -44
- data/lib/mutx/API/repo.rb +7 -10
- data/lib/mutx/background_jobs/workers/executor.rb +44 -38
- data/lib/mutx/commands/install.rb +1 -1
- data/lib/mutx/commands/start.rb +1 -1
- data/lib/mutx/custom/execution.rb +1 -1
- data/lib/mutx/database/mongo_connector.rb +19 -22
- data/lib/mutx/execution.rb +1 -0
- data/lib/mutx/lib/authentication.rb +23 -0
- data/lib/mutx/lib/helpers.rb +52 -0
- data/lib/mutx/lib/middlewares/database_middleware.rb +16 -0
- data/lib/mutx/lib/middlewares/flash_middleware.rb +31 -0
- data/lib/mutx/lib/middlewares/logger_middleware.rb +13 -0
- data/lib/mutx/lib/monkey_patch.rb +28 -0
- data/lib/mutx/lib/paths.rb +80 -0
- data/lib/mutx/platforms/ruby.rb +8 -0
- data/lib/mutx/public/css/bootstrap.min.css +7 -0
- data/lib/mutx/public/css/font-awesome.min.css +4 -0
- data/lib/mutx/public/css/jquery.json-viewer.css +44 -0
- data/{favicon.ico → lib/mutx/public/img/favicon.ico} +0 -0
- data/lib/mutx/public/js/bootstrap.min.js +6 -0
- data/lib/mutx/public/js/jquery.json-viewer.js +148 -0
- data/lib/mutx/public/js/jquery.min.js +6 -0
- data/lib/mutx/{view/javascript.mote → public/js/mutx.js} +0 -5
- data/lib/mutx/public/js/notify.min.js +1 -0
- data/lib/mutx/results/result.rb +60 -68
- data/lib/mutx/results/results.rb +4 -0
- data/lib/mutx/routes.rb +85 -883
- data/lib/mutx/routes/admin_routes.rb +16 -0
- data/lib/mutx/routes/admin_routes/custom_params_routes.rb +97 -0
- data/lib/mutx/routes/admin_routes/repositories_routes.rb +35 -0
- data/lib/mutx/routes/admin_routes/tasks_routes.rb +110 -0
- data/lib/mutx/routes/api_routes.rb +49 -0
- data/lib/mutx/routes/api_routes/custom_params_routes.rb +41 -0
- data/lib/mutx/routes/api_routes/input_routes.rb +48 -0
- data/lib/mutx/routes/api_routes/repos_routes.rb +74 -0
- data/lib/mutx/routes/api_routes/results_routes.rb +50 -0
- data/lib/mutx/routes/api_routes/tasks_routes.rb +47 -0
- data/lib/mutx/routes/api_routes/tests_routes.rb +42 -0
- data/lib/mutx/routes/features_routes.rb +24 -0
- data/lib/mutx/routes/help_routes.rb +23 -0
- data/lib/mutx/routes/logs_routes.rb +22 -0
- data/lib/mutx/routes/message_routes.rb +24 -0
- data/lib/mutx/routes/repositories_routes.rb +25 -0
- data/lib/mutx/routes/results_routes.rb +53 -0
- data/lib/mutx/routes/task_results_routes.rb +25 -0
- data/lib/mutx/routes/tasks_routes.rb +67 -0
- data/lib/mutx/routes/tests_routes.rb +66 -0
- data/lib/mutx/support/change_inspector.rb +3 -3
- data/lib/mutx/support/files_cleanner.rb +12 -3
- data/lib/mutx/support/git.rb +11 -2
- data/lib/mutx/support/processes.rb +2 -2
- data/lib/mutx/support/project_type.rb +12 -0
- data/lib/mutx/tasks/task.rb +8 -2
- data/lib/mutx/version.rb +1 -1
- data/lib/mutx/view/{custom/params/delete_form.mote → admin/custom-params/_delete_form.mote} +2 -4
- data/lib/mutx/view/{custom/params/create_edit_form.mote → admin/custom-params/_form.mote} +5 -9
- data/lib/mutx/view/{custom/params/custom_param_task_deleting_box.mote → admin/custom-params/_task_deleting_box.mote} +1 -2
- data/lib/mutx/view/{custom/params → admin/custom-params}/delete.mote +1 -3
- data/lib/mutx/view/{custom/params → admin/custom-params}/edit.mote +1 -5
- data/lib/mutx/view/{custom/params/list.mote → admin/custom-params/index.mote} +8 -13
- data/lib/mutx/view/{custom/params → admin/custom-params}/new.mote +1 -5
- data/lib/mutx/view/{custom/params/custom_param_selection_box.mote → admin/custom-params/selection_box.mote} +2 -3
- data/lib/mutx/view/{list_repos.mote → admin/repositories/index.mote} +2 -6
- data/lib/mutx/view/{repos.mote → admin/repositories/new.mote} +2 -6
- data/lib/mutx/view/{tasks/admin/delete_form.mote → admin/tasks/_delete_form.mote} +2 -12
- data/lib/mutx/view/{tasks/admin/create_edit_form.mote → admin/tasks/_form.mote} +6 -9
- data/lib/mutx/view/{tasks/admin → admin/tasks}/delete.mote +1 -3
- data/lib/mutx/view/{tasks/admin → admin/tasks}/edit.mote +1 -4
- data/lib/mutx/view/{tasks/admin/list.mote → admin/tasks/index.mote} +5 -10
- data/lib/mutx/view/{tasks/admin → admin/tasks}/new.mote +1 -5
- data/lib/mutx/view/{tasks/admin/view.mote → admin/tasks/show.mote} +1 -3
- data/lib/mutx/view/body.mote +13 -51
- data/lib/mutx/view/{custom/params.mote → custom-params/_custom_params.mote} +3 -4
- data/lib/mutx/view/{custom/params → custom-params/types}/json.mote +0 -0
- data/lib/mutx/view/{custom/params → custom-params/types}/select_list.mote +0 -0
- data/lib/mutx/view/{custom/params → custom-params/types}/text.mote +0 -0
- data/lib/mutx/view/error_handler.mote +4 -54
- data/lib/mutx/view/features/{feature.mote → file.mote} +0 -0
- data/lib/mutx/view/features/index.mote +9 -0
- data/lib/mutx/view/git_information.mote +2 -8
- data/lib/mutx/view/help/{main.mote → _main.mote} +0 -0
- data/lib/mutx/view/help/{page.mote → _page.mote} +0 -0
- data/lib/mutx/view/help/{search_result.mote → _search_result.mote} +0 -0
- data/lib/mutx/view/help/index.mote +38 -0
- data/lib/mutx/view/layout/flash.mote +7 -0
- data/lib/mutx/view/{footer.mote → layout/footer.mote} +1 -1
- data/lib/mutx/view/layout/javascript.mote +6 -0
- data/lib/mutx/view/{modals.mote → layout/modals.mote} +0 -0
- data/lib/mutx/view/layout/navigation_bar.mote +88 -0
- data/lib/mutx/view/{styles.mote → layout/styles.mote} +10 -0
- data/lib/mutx/view/logs/{logs.mote → index.mote} +1 -1
- data/lib/mutx/view/logs/show.mote +3 -0
- data/lib/mutx/view/repositories/_repository.mote +7 -0
- data/lib/mutx/view/repositories/index.mote +23 -0
- data/lib/mutx/view/repositories/show.mote +21 -0
- data/lib/mutx/view/results/{detailed_info.mote → _result.mote} +5 -5
- data/lib/mutx/view/results/console.mote +63 -106
- data/lib/mutx/view/results/{all.mote → index.mote} +18 -24
- data/lib/mutx/view/sections.rb +36 -24
- data/lib/mutx/view/task_results/_result.mote +57 -0
- data/lib/mutx/view/{results/result.mote → task_results/_result_item.mote} +6 -5
- data/lib/mutx/view/task_results/index.mote +35 -0
- data/lib/mutx/view/tasks/_task.mote +90 -0
- data/lib/mutx/view/tasks/index.mote +61 -0
- data/lib/mutx/view/tasks/show.mote +167 -0
- data/lib/mutx/view/tests/_test.mote +90 -0
- data/lib/mutx/view/tests/index.mote +59 -0
- data/lib/mutx/view/tests/show.mote +172 -0
- data/lib/mutx/view/view.rb +172 -10
- metadata +89 -50
- data/lib/mutx/database/middleware.rb +0 -18
- data/lib/mutx/view/features.mote +0 -57
- data/lib/mutx/view/features/features_list.mote +0 -10
- data/lib/mutx/view/help.mote +0 -75
- data/lib/mutx/view/logs/log.mote +0 -3
- data/lib/mutx/view/message.mote +0 -8
- data/lib/mutx/view/navigation_bar.mote +0 -67
- data/lib/mutx/view/results/results.mote +0 -112
- data/lib/mutx/view/tasks/message.mote +0 -37
- data/lib/mutx/view/tasks/task.mote +0 -167
- data/lib/mutx/view/tasks/task_item.mote +0 -77
- data/lib/mutx/view/tasks/tasks.mote +0 -74
@@ -0,0 +1,59 @@
|
|
1
|
+
% if tests.empty?
|
2
|
+
<br>
|
3
|
+
<br>
|
4
|
+
<div id='well'>
|
5
|
+
<h3>No {{section}} defined</h3>
|
6
|
+
</div>
|
7
|
+
<br>
|
8
|
+
<br>
|
9
|
+
% else
|
10
|
+
|
11
|
+
<div class="panel panel-default">
|
12
|
+
<div class="panel-heading">
|
13
|
+
<h4>{{section.capitalize}}</h4>
|
14
|
+
</div>
|
15
|
+
<table class="table table-striped table-hover">
|
16
|
+
<tbody>
|
17
|
+
% tests.each do |test|
|
18
|
+
<tr>
|
19
|
+
{{ partial('tests/_test', test: test) }}
|
20
|
+
</tr>
|
21
|
+
% end
|
22
|
+
</tbody>
|
23
|
+
</table>
|
24
|
+
</div>
|
25
|
+
<div class="panel panel-default">
|
26
|
+
<div class="panel-body">
|
27
|
+
{{Mutx::View.icon_for("info")}}: Information about task<br>
|
28
|
+
{{Mutx::View.icon_for("cron")}}: Cronned task<br>
|
29
|
+
{{Mutx::View.icon_for("lock")}}: Protected<br>
|
30
|
+
{{Mutx::View.icon_for("notification")}}: Send notification<br>
|
31
|
+
{{Mutx::View.icon_for("attachment")}}: Last execution sent attachment<br>
|
32
|
+
{{Mutx::View.icon_for("results")}}: Results for task<br>
|
33
|
+
{{Mutx::View.icon_for("off")}}: Task is off<br>
|
34
|
+
{{Mutx::View.icon_for("on")}}: Task is on<br>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
% end
|
38
|
+
|
39
|
+
<style>
|
40
|
+
#well {
|
41
|
+
aling: right;
|
42
|
+
height: 50px;
|
43
|
+
background: #F5F5F5;
|
44
|
+
width: 600px;
|
45
|
+
font-size: 20px;
|
46
|
+
#font-style: oblique;
|
47
|
+
color: #696969;
|
48
|
+
text-align: center;
|
49
|
+
padding: 0 20px;
|
50
|
+
margin: 20px;
|
51
|
+
display: flex;
|
52
|
+
justify-content: center;
|
53
|
+
/* align horizontal */
|
54
|
+
align-items: center;
|
55
|
+
/* align vertical */
|
56
|
+
margin-right: auto;
|
57
|
+
margin-left: auto;
|
58
|
+
}
|
59
|
+
</style>
|
@@ -0,0 +1,172 @@
|
|
1
|
+
<?
|
2
|
+
|
3
|
+
running_results = Mutx::Results.running_results_for_task_id test["_id"]
|
4
|
+
max_number_of_execs_reached = running_results.size == test["max_execs"]
|
5
|
+
|
6
|
+
status = if running_results.size>0
|
7
|
+
"running"
|
8
|
+
else
|
9
|
+
"ready"
|
10
|
+
end
|
11
|
+
|
12
|
+
color = Mutx::View.color(status)
|
13
|
+
|
14
|
+
?>
|
15
|
+
<div class='starter-template'>
|
16
|
+
<div class='panel panel-{{color}}'>
|
17
|
+
<div class='panel-heading' data-toggle='collapse' data-target="#{{ test['name'].gsub(' ','') }}">
|
18
|
+
<h4 class='panel-title'>
|
19
|
+
{{ test['name'] }}
|
20
|
+
</h4>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<div class='panel-body collapse in' id="{{ test['name'].gsub(' ','') }}">
|
24
|
+
<ul class='list-group'>
|
25
|
+
|
26
|
+
<!-- Si el test está en running se muestran las ejecuciones -->
|
27
|
+
% if running_results.size > 0
|
28
|
+
<li class='list-group-item'>
|
29
|
+
Running {{ running_results.size }} tests
|
30
|
+
% if max_number_of_execs_reached
|
31
|
+
<small>
|
32
|
+
(Maximum no. of execution reached)
|
33
|
+
</small>
|
34
|
+
% end
|
35
|
+
<div class='panel-body'>
|
36
|
+
<div class='list-group'>
|
37
|
+
% running_results.each do |result|
|
38
|
+
<a class='list-group-item' onclick="goClean('{{ path_for(:results_log, result_id: result["_id"]) }}');">
|
39
|
+
{{Mutx::Support::TimeHelper.formatted_time_for(Mutx::Results::Result.get(result["_id"]).started_at)}}
|
40
|
+
<small>
|
41
|
+
{{result["execution_name"]}}
|
42
|
+
</small>
|
43
|
+
{{Mutx::View.icon_for_running result}}
|
44
|
+
</a>
|
45
|
+
% end
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</li>
|
49
|
+
% end
|
50
|
+
% unless max_number_of_execs_reached
|
51
|
+
<li class='list-group-item'>
|
52
|
+
% task_type = (test["type"] == "test") ? "tests" : "tasks"
|
53
|
+
% form_url = "/#{task_type}/#{test["name"]}/run"
|
54
|
+
<form name='run' id='{{ test["name"] }}' method='GET' action='{{ path_for(:tests_run, test_name: test["name"]) }}'>
|
55
|
+
|
56
|
+
% unless test["custom_params"].empty?
|
57
|
+
{{ partial('custom-params/_custom_params', custom_params: test["custom_params"]) }}
|
58
|
+
% end
|
59
|
+
<br>
|
60
|
+
<div class='container' style='width: inherit'>
|
61
|
+
<button type='submit' class='btn btn-success' value='Execute'/>Execute
|
62
|
+
{{Mutx::View.icon_for('run')}}
|
63
|
+
</button>
|
64
|
+
<input type='text' name='execution_name' class='customParam' title='This value could be used to identify the result execution from other execution of this test. E.g: You could use the release your are going to test' placeholder='Identify your execution' value='{{Mutx::Support::Configuration.auto_execution_id}}' style='height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; font-weight:normal;' />
|
65
|
+
<button type='button' class='btn btn-default' aria-label='Left Align' data-toggle='modal' data-target='#myModal' onclick='javascript:starterLink("{{test['name']}}","{{test['type']}}");'>
|
66
|
+
{{Mutx::View.icon_for('share')}}
|
67
|
+
Share
|
68
|
+
</button>
|
69
|
+
<br>
|
70
|
+
<br>
|
71
|
+
</div>
|
72
|
+
</form>
|
73
|
+
</li>
|
74
|
+
% end
|
75
|
+
<br>
|
76
|
+
<li class="list-group-item">
|
77
|
+
<!-- cron info -->
|
78
|
+
% if test["cronneable"]=="on"
|
79
|
+
<br>
|
80
|
+
<div class="panel panel-default">
|
81
|
+
<div class="panel-heading">
|
82
|
+
{{Mutx::View.icon_for('repeat')}}
|
83
|
+
Cron information
|
84
|
+
</div>
|
85
|
+
<div class="panel-body">
|
86
|
+
<p class="small">
|
87
|
+
Run every {{test["cron_time"]}} minutes
|
88
|
+
{{Mutx::View.from_to(test)}}
|
89
|
+
{{Mutx::View.run_on(test)}}
|
90
|
+
</p>
|
91
|
+
</div>
|
92
|
+
</div>
|
93
|
+
% end
|
94
|
+
<!-- end cron info -->
|
95
|
+
|
96
|
+
<!-- notification info -->
|
97
|
+
% if test["notifications"]=="on"
|
98
|
+
<div class="panel panel-default">
|
99
|
+
<div class="panel-heading">
|
100
|
+
{{Mutx::View.icon_for('notification')}}
|
101
|
+
Notifications
|
102
|
+
</div>
|
103
|
+
<div class="panel-body">
|
104
|
+
<p class="small">
|
105
|
+
Notificates on {{test["notify_on"]}}
|
106
|
+
</p>
|
107
|
+
<p class="small">
|
108
|
+
To: {{test["mail"]}}
|
109
|
+
</p>
|
110
|
+
<p class="small">
|
111
|
+
Subject: {{test["subject"]}}
|
112
|
+
</p>
|
113
|
+
</div>
|
114
|
+
</div>
|
115
|
+
|
116
|
+
% end
|
117
|
+
<!-- end notification info -->
|
118
|
+
|
119
|
+
<!-- information -->
|
120
|
+
% if test["information"]
|
121
|
+
<div class="panel panel-default">
|
122
|
+
<div class="panel-heading">
|
123
|
+
{{Mutx::View.icon_for('info')}}
|
124
|
+
Information about {{test['name']}}
|
125
|
+
</div>
|
126
|
+
<div class="panel-body">
|
127
|
+
<p class="small" style="color:red">
|
128
|
+
{{test["information"]}}
|
129
|
+
</p>
|
130
|
+
</div>
|
131
|
+
</div>
|
132
|
+
% end
|
133
|
+
<!-- end information -->
|
134
|
+
|
135
|
+
% results_list = Mutx::Results.all_results_for test["_id"]
|
136
|
+
% if results_list and ! results_list.empty?
|
137
|
+
<div class="panel panel-default">
|
138
|
+
<div class="panel-heading">
|
139
|
+
Results for {{test["name"]}}
|
140
|
+
</div>
|
141
|
+
<table class="table table-striped table-hover"">
|
142
|
+
<thead>
|
143
|
+
<tr>
|
144
|
+
<th>When started</th>
|
145
|
+
<th>Label</th>
|
146
|
+
<th>Time Elapsed</th>
|
147
|
+
<th style="text-align: center;">Viewed</th>
|
148
|
+
<th style="text-align: center;">Notified</th>
|
149
|
+
<th style="text-align: center;">File Attached</th>
|
150
|
+
<th>Console</th>
|
151
|
+
<th>Status</th>
|
152
|
+
</tr>
|
153
|
+
</thead>
|
154
|
+
% results_list[0..9].each do |result_data|
|
155
|
+
{{ partial('task_results/_result_item', result: result_data) }}
|
156
|
+
% end
|
157
|
+
<tr>
|
158
|
+
<th>
|
159
|
+
<a href='{{ path_for(:task_results_index, query_string: { task_name: test["name"] }) }}' class='btn btn-default'>
|
160
|
+
{{Mutx::View.icon_for('results')}}
|
161
|
+
See all results
|
162
|
+
</a>
|
163
|
+
</th>
|
164
|
+
<tr>
|
165
|
+
</table>
|
166
|
+
</div>
|
167
|
+
% end
|
168
|
+
</li>
|
169
|
+
</ul>
|
170
|
+
</div>
|
171
|
+
</div>
|
172
|
+
</div>
|
data/lib/mutx/view/view.rb
CHANGED
@@ -6,6 +6,127 @@ module Mutx
|
|
6
6
|
File.expand_path('../', __FILE__)
|
7
7
|
end
|
8
8
|
|
9
|
+
def self.icon_for_result_status result
|
10
|
+
return "<i class=\"fa fa-cog fa-spin fa-1x fa-fw margin-bottom\" style=\"color:green\"></i>Running" if ["running","started"].include? result["status"]
|
11
|
+
value = result["result_value"] || result["status"]
|
12
|
+
gliphy, text, color = case value.gsub(/(?:\s|-|_)/,"").downcase
|
13
|
+
when /time/
|
14
|
+
["hourglass","Time out", "red"]
|
15
|
+
when /finish/
|
16
|
+
["ok","Finished","gray"]
|
17
|
+
when /stopped/
|
18
|
+
["ban-circle","Stopped", "red"]
|
19
|
+
when /passed/
|
20
|
+
["thumbs-up","Passed","green"]
|
21
|
+
when /failed/
|
22
|
+
["thumbs-down","Failed","red"]
|
23
|
+
else
|
24
|
+
["fire","Unknown","light-gray"]
|
25
|
+
end
|
26
|
+
"<span class=\"glyphicon glyphicon-#{gliphy}\" aria-hidden=\"true\" style=\"color:#{color}\"></span> <span style=\"color:#{color}\">#{text}</span>"
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.icon_for_running result=nil, size=1
|
30
|
+
size = 2 if size == "big"
|
31
|
+
size = 1 if size == "small"
|
32
|
+
link = " onclick=\"goClean('/results/{{result['_id']}}/log/');\"" if result
|
33
|
+
"<i class=\"fa fa-cog fa-spin fa-#{size}x fa-fw margin-bottom\" #{link}></i>"
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns an gliphy icon by given word
|
37
|
+
# It maps words with icon
|
38
|
+
# @param [String] what = a word
|
39
|
+
# @return [String] the icon html with color, text and alt attribute
|
40
|
+
def self.icon_for what
|
41
|
+
gliphy, color, text, alt = case what.gsub(/(?:\s|-)/,"").downcase
|
42
|
+
|
43
|
+
when /attach/
|
44
|
+
["paperclip",nil,nil,"Attachment"]
|
45
|
+
|
46
|
+
when /back/
|
47
|
+
["circle-arrow-left",nil,nil,"Go Back"]
|
48
|
+
|
49
|
+
when /console/
|
50
|
+
["log-in","black",nil,"console output"]
|
51
|
+
|
52
|
+
when /cron/
|
53
|
+
return "<span class=\"fa fa-clock-o\" aria-hidden=\"true\" alt=\"This test start automatically every minutes\"></span>"
|
54
|
+
|
55
|
+
when /edit/
|
56
|
+
["edit","gray",nil,"Edit"]
|
57
|
+
|
58
|
+
when /forward/
|
59
|
+
["circle-arrow-right",nil,nil,"Forward"]
|
60
|
+
|
61
|
+
when /feature/
|
62
|
+
["file",nil,nil,"Features"]
|
63
|
+
|
64
|
+
when /info/
|
65
|
+
["info-sign",nil,nil,"Information"]
|
66
|
+
|
67
|
+
when /left/
|
68
|
+
["chevron-left",nil,nil,nil]
|
69
|
+
|
70
|
+
when /lock/
|
71
|
+
return "<span class=\"fa fa-lock\" aria-hidden=\"true\" style=\"color:red\" alt=\"Only admin can run this\"></span>"
|
72
|
+
|
73
|
+
when /notification/
|
74
|
+
["envelope",nil,nil,"Notification"]
|
75
|
+
|
76
|
+
when /^on$/
|
77
|
+
["off","green",nil,"On"]
|
78
|
+
|
79
|
+
when /^off$/
|
80
|
+
["off","red",nil,"Off"]
|
81
|
+
|
82
|
+
when /repo/
|
83
|
+
["hdd",nil,nil,"repo"]
|
84
|
+
|
85
|
+
when /right/
|
86
|
+
["chevron-right",nil,nil,nil]
|
87
|
+
|
88
|
+
when /result/
|
89
|
+
["th-list",nil,nil,"Results"]
|
90
|
+
|
91
|
+
when /search/
|
92
|
+
["search",nil,nil,"Search"]
|
93
|
+
|
94
|
+
when /stop/
|
95
|
+
["stop",nil,nil,"Search"]
|
96
|
+
|
97
|
+
when /task/
|
98
|
+
["tasks",nil,nil,"tasks"]
|
99
|
+
|
100
|
+
when /test/
|
101
|
+
["th-list",nil,nil,"test"]
|
102
|
+
|
103
|
+
when /viewed/
|
104
|
+
["eye-open","blue",nil,"Viewed"]
|
105
|
+
|
106
|
+
when /unviewed/
|
107
|
+
["eye-close",nil,nil,"Unviewed"]
|
108
|
+
|
109
|
+
when /(?:run|execute|send)/
|
110
|
+
["send",nil,nil,"#{what}"]
|
111
|
+
|
112
|
+
when /(?:share|execute)/
|
113
|
+
["share",nil,nil,"#{what}"]
|
114
|
+
|
115
|
+
when /(?:cicle|repeat)/
|
116
|
+
["repeat",nil,nil,"#{what}"]
|
117
|
+
|
118
|
+
when /(?:book|doc|help)/
|
119
|
+
["book",nil,nil,"#{what}"]
|
120
|
+
|
121
|
+
when /(?:admin|conf|setup)/
|
122
|
+
["cog",nil,nil,"#{what}"]
|
123
|
+
|
124
|
+
else
|
125
|
+
["fire","yellow",nil,"Undefined icon for #{what}"]
|
126
|
+
end
|
127
|
+
"<span class=\"glyphicon glyphicon-#{gliphy}\" aria-hidden=\"true\" style=\"color:#{color}\" alt=\"#{alt}\"></span> #{text}"
|
128
|
+
end
|
129
|
+
|
9
130
|
def self.label_color_for result
|
10
131
|
if result["status"]
|
11
132
|
label_color = color result["status"]
|
@@ -58,16 +179,26 @@ module Mutx
|
|
58
179
|
self.label_color_for result if result
|
59
180
|
end
|
60
181
|
|
61
|
-
def self.formatted_for seconds
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
182
|
+
def self.formatted_for seconds=nil
|
183
|
+
begin
|
184
|
+
return "0 seconds" if seconds.nil? or !seconds.is_a? Fixnum
|
185
|
+
elapsed = ""
|
186
|
+
hours = minutes = 0
|
187
|
+
if seconds > 3600
|
188
|
+
hours = seconds / 3600
|
189
|
+
seconds = seconds % 3600
|
190
|
+
end
|
191
|
+
if seconds > 60
|
192
|
+
minutes = seconds / 60
|
193
|
+
seconds = seconds % 60
|
194
|
+
end
|
195
|
+
elapsed += "#{hours} h " if hours > 0
|
196
|
+
elapsed += " #{minutes} m " if minutes > 0
|
197
|
+
elapsed += "#{seconds} s" if seconds
|
198
|
+
"#{elapsed}"
|
199
|
+
rescue => e
|
200
|
+
"0 s"
|
201
|
+
end
|
71
202
|
end
|
72
203
|
|
73
204
|
def self.result_started_at result_id
|
@@ -75,6 +206,37 @@ module Mutx
|
|
75
206
|
self.formatted_for result["started_at"] if result
|
76
207
|
end
|
77
208
|
|
209
|
+
def self.run_on task
|
210
|
+
run_on = []
|
211
|
+
run_on << 'Sunday' if task["su"]=="on"
|
212
|
+
run_on << 'Monday' if task["mo"]=="on"
|
213
|
+
run_on << 'Tuesday' if task["tu"]=="on"
|
214
|
+
run_on << 'Wednesday' if task["we"]=="on"
|
215
|
+
run_on << 'Thursday' if task["th"]=="on"
|
216
|
+
run_on << 'Friday' if task["fr"]=="on"
|
217
|
+
run_on << 'Saturday' if task["sa"]=="on"
|
218
|
+
|
219
|
+
run_on << "everyday" if run_on.empty?
|
220
|
+
|
221
|
+
html = ""
|
222
|
+
unless run_on.empty?
|
223
|
+
html += "<p class=\"small\">on: "
|
224
|
+
run_on.each do |day|
|
225
|
+
html += "<span class='label label-primary'>#{day} </span> "
|
226
|
+
end
|
227
|
+
end
|
228
|
+
html
|
229
|
+
end
|
230
|
+
|
231
|
+
def self.from_to task
|
232
|
+
if task["start_time"]!= "" and task["stop_time"]!= ""
|
233
|
+
from_to = "from " + task["start_time"] + " to " + task["stop_time"]
|
234
|
+
end
|
235
|
+
|
236
|
+
"<p class=\"small\">#{from_to}</p>" if from_to
|
237
|
+
|
238
|
+
end
|
239
|
+
|
78
240
|
def self.round_plus number
|
79
241
|
return "10000+" if number > 10000
|
80
242
|
return "#{number/100}00+" if number > 1000
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mutx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roman Rodriguez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -371,7 +371,6 @@ files:
|
|
371
371
|
- documentation/repos.md
|
372
372
|
- documentation/results.md
|
373
373
|
- documentation/start.md
|
374
|
-
- favicon.ico
|
375
374
|
- img/mutx_logo.png
|
376
375
|
- img/mutx_logo.svg
|
377
376
|
- lib/.DS_Store
|
@@ -429,15 +428,50 @@ files:
|
|
429
428
|
- lib/mutx/custom/execution.rb
|
430
429
|
- lib/mutx/custom/params.rb
|
431
430
|
- lib/mutx/database/.DS_Store
|
432
|
-
- lib/mutx/database/middleware.rb
|
433
431
|
- lib/mutx/database/mongo_connection.rb
|
434
432
|
- lib/mutx/database/mongo_connector.rb
|
435
433
|
- lib/mutx/error/errors.rb
|
436
434
|
- lib/mutx/execution.rb
|
435
|
+
- lib/mutx/lib/authentication.rb
|
436
|
+
- lib/mutx/lib/helpers.rb
|
437
|
+
- lib/mutx/lib/middlewares/database_middleware.rb
|
438
|
+
- lib/mutx/lib/middlewares/flash_middleware.rb
|
439
|
+
- lib/mutx/lib/middlewares/logger_middleware.rb
|
440
|
+
- lib/mutx/lib/monkey_patch.rb
|
441
|
+
- lib/mutx/lib/paths.rb
|
437
442
|
- lib/mutx/platforms/ruby.rb
|
443
|
+
- lib/mutx/public/css/bootstrap.min.css
|
444
|
+
- lib/mutx/public/css/font-awesome.min.css
|
445
|
+
- lib/mutx/public/css/jquery.json-viewer.css
|
446
|
+
- lib/mutx/public/img/favicon.ico
|
447
|
+
- lib/mutx/public/js/bootstrap.min.js
|
448
|
+
- lib/mutx/public/js/jquery.json-viewer.js
|
449
|
+
- lib/mutx/public/js/jquery.min.js
|
450
|
+
- lib/mutx/public/js/mutx.js
|
451
|
+
- lib/mutx/public/js/notify.min.js
|
438
452
|
- lib/mutx/results/result.rb
|
439
453
|
- lib/mutx/results/results.rb
|
440
454
|
- lib/mutx/routes.rb
|
455
|
+
- lib/mutx/routes/admin_routes.rb
|
456
|
+
- lib/mutx/routes/admin_routes/custom_params_routes.rb
|
457
|
+
- lib/mutx/routes/admin_routes/repositories_routes.rb
|
458
|
+
- lib/mutx/routes/admin_routes/tasks_routes.rb
|
459
|
+
- lib/mutx/routes/api_routes.rb
|
460
|
+
- lib/mutx/routes/api_routes/custom_params_routes.rb
|
461
|
+
- lib/mutx/routes/api_routes/input_routes.rb
|
462
|
+
- lib/mutx/routes/api_routes/repos_routes.rb
|
463
|
+
- lib/mutx/routes/api_routes/results_routes.rb
|
464
|
+
- lib/mutx/routes/api_routes/tasks_routes.rb
|
465
|
+
- lib/mutx/routes/api_routes/tests_routes.rb
|
466
|
+
- lib/mutx/routes/features_routes.rb
|
467
|
+
- lib/mutx/routes/help_routes.rb
|
468
|
+
- lib/mutx/routes/logs_routes.rb
|
469
|
+
- lib/mutx/routes/message_routes.rb
|
470
|
+
- lib/mutx/routes/repositories_routes.rb
|
471
|
+
- lib/mutx/routes/results_routes.rb
|
472
|
+
- lib/mutx/routes/task_results_routes.rb
|
473
|
+
- lib/mutx/routes/tasks_routes.rb
|
474
|
+
- lib/mutx/routes/tests_routes.rb
|
441
475
|
- lib/mutx/support/change_inspector.rb
|
442
476
|
- lib/mutx/support/clean.rb
|
443
477
|
- lib/mutx/support/configuration.rb
|
@@ -453,6 +487,7 @@ files:
|
|
453
487
|
- lib/mutx/support/mail_sender.rb
|
454
488
|
- lib/mutx/support/notification.rb
|
455
489
|
- lib/mutx/support/processes.rb
|
490
|
+
- lib/mutx/support/project_type.rb
|
456
491
|
- lib/mutx/support/query_string.rb
|
457
492
|
- lib/mutx/support/request.rb
|
458
493
|
- lib/mutx/support/risk.rb
|
@@ -467,62 +502,66 @@ files:
|
|
467
502
|
- lib/mutx/tasks/tasks.rb
|
468
503
|
- lib/mutx/version.rb
|
469
504
|
- lib/mutx/view/.DS_Store
|
505
|
+
- lib/mutx/view/admin/custom-params/_delete_form.mote
|
506
|
+
- lib/mutx/view/admin/custom-params/_form.mote
|
507
|
+
- lib/mutx/view/admin/custom-params/_task_deleting_box.mote
|
508
|
+
- lib/mutx/view/admin/custom-params/delete.mote
|
509
|
+
- lib/mutx/view/admin/custom-params/edit.mote
|
510
|
+
- lib/mutx/view/admin/custom-params/index.mote
|
511
|
+
- lib/mutx/view/admin/custom-params/new.mote
|
512
|
+
- lib/mutx/view/admin/custom-params/selection_box.mote
|
513
|
+
- lib/mutx/view/admin/repositories/index.mote
|
514
|
+
- lib/mutx/view/admin/repositories/new.mote
|
515
|
+
- lib/mutx/view/admin/tasks/_delete_form.mote
|
516
|
+
- lib/mutx/view/admin/tasks/_form.mote
|
517
|
+
- lib/mutx/view/admin/tasks/delete.mote
|
518
|
+
- lib/mutx/view/admin/tasks/edit.mote
|
519
|
+
- lib/mutx/view/admin/tasks/index.mote
|
520
|
+
- lib/mutx/view/admin/tasks/new.mote
|
521
|
+
- lib/mutx/view/admin/tasks/show.mote
|
470
522
|
- lib/mutx/view/body.mote
|
471
|
-
- lib/mutx/view/custom/
|
472
|
-
- lib/mutx/view/custom
|
473
|
-
- lib/mutx/view/custom
|
474
|
-
- lib/mutx/view/custom
|
475
|
-
- lib/mutx/view/custom/params/delete.mote
|
476
|
-
- lib/mutx/view/custom/params/delete_form.mote
|
477
|
-
- lib/mutx/view/custom/params/edit.mote
|
478
|
-
- lib/mutx/view/custom/params/json.mote
|
479
|
-
- lib/mutx/view/custom/params/list.mote
|
480
|
-
- lib/mutx/view/custom/params/new.mote
|
481
|
-
- lib/mutx/view/custom/params/select_list.mote
|
482
|
-
- lib/mutx/view/custom/params/text.mote
|
523
|
+
- lib/mutx/view/custom-params/_custom_params.mote
|
524
|
+
- lib/mutx/view/custom-params/types/json.mote
|
525
|
+
- lib/mutx/view/custom-params/types/select_list.mote
|
526
|
+
- lib/mutx/view/custom-params/types/text.mote
|
483
527
|
- lib/mutx/view/error_handler.mote
|
484
|
-
- lib/mutx/view/features.mote
|
485
|
-
- lib/mutx/view/features/
|
486
|
-
- lib/mutx/view/features/features_list.mote
|
487
|
-
- lib/mutx/view/footer.mote
|
528
|
+
- lib/mutx/view/features/file.mote
|
529
|
+
- lib/mutx/view/features/index.mote
|
488
530
|
- lib/mutx/view/git_information.mote
|
489
|
-
- lib/mutx/view/help.mote
|
490
|
-
- lib/mutx/view/help/
|
491
|
-
- lib/mutx/view/help/
|
492
|
-
- lib/mutx/view/help/
|
493
|
-
- lib/mutx/view/javascript.mote
|
531
|
+
- lib/mutx/view/help/_main.mote
|
532
|
+
- lib/mutx/view/help/_page.mote
|
533
|
+
- lib/mutx/view/help/_search_result.mote
|
534
|
+
- lib/mutx/view/help/index.mote
|
494
535
|
- lib/mutx/view/last_notified.mote
|
495
|
-
- lib/mutx/view/
|
496
|
-
- lib/mutx/view/
|
497
|
-
- lib/mutx/view/
|
498
|
-
- lib/mutx/view/
|
499
|
-
- lib/mutx/view/
|
500
|
-
- lib/mutx/view/
|
536
|
+
- lib/mutx/view/layout/flash.mote
|
537
|
+
- lib/mutx/view/layout/footer.mote
|
538
|
+
- lib/mutx/view/layout/javascript.mote
|
539
|
+
- lib/mutx/view/layout/modals.mote
|
540
|
+
- lib/mutx/view/layout/navigation_bar.mote
|
541
|
+
- lib/mutx/view/layout/styles.mote
|
542
|
+
- lib/mutx/view/logs/index.mote
|
543
|
+
- lib/mutx/view/logs/show.mote
|
501
544
|
- lib/mutx/view/not_found.mote
|
502
545
|
- lib/mutx/view/parser.rb
|
503
|
-
- lib/mutx/view/
|
504
|
-
- lib/mutx/view/
|
546
|
+
- lib/mutx/view/repositories/_repository.mote
|
547
|
+
- lib/mutx/view/repositories/index.mote
|
548
|
+
- lib/mutx/view/repositories/show.mote
|
549
|
+
- lib/mutx/view/results/_result.mote
|
505
550
|
- lib/mutx/view/results/console.mote
|
506
|
-
- lib/mutx/view/results/
|
551
|
+
- lib/mutx/view/results/index.mote
|
507
552
|
- lib/mutx/view/results/report.mote
|
508
|
-
- lib/mutx/view/results/result.mote
|
509
|
-
- lib/mutx/view/results/results.mote
|
510
553
|
- lib/mutx/view/screenshot.mote
|
511
554
|
- lib/mutx/view/sections.rb
|
512
|
-
- lib/mutx/view/
|
555
|
+
- lib/mutx/view/task_results/_result.mote
|
556
|
+
- lib/mutx/view/task_results/_result_item.mote
|
557
|
+
- lib/mutx/view/task_results/index.mote
|
513
558
|
- lib/mutx/view/tasks/.DS_Store
|
514
|
-
- lib/mutx/view/tasks/
|
515
|
-
- lib/mutx/view/tasks/
|
516
|
-
- lib/mutx/view/tasks/
|
517
|
-
- lib/mutx/view/
|
518
|
-
- lib/mutx/view/
|
519
|
-
- lib/mutx/view/
|
520
|
-
- lib/mutx/view/tasks/admin/new.mote
|
521
|
-
- lib/mutx/view/tasks/admin/view.mote
|
522
|
-
- lib/mutx/view/tasks/message.mote
|
523
|
-
- lib/mutx/view/tasks/task.mote
|
524
|
-
- lib/mutx/view/tasks/task_item.mote
|
525
|
-
- lib/mutx/view/tasks/tasks.mote
|
559
|
+
- lib/mutx/view/tasks/_task.mote
|
560
|
+
- lib/mutx/view/tasks/index.mote
|
561
|
+
- lib/mutx/view/tasks/show.mote
|
562
|
+
- lib/mutx/view/tests/_test.mote
|
563
|
+
- lib/mutx/view/tests/index.mote
|
564
|
+
- lib/mutx/view/tests/show.mote
|
526
565
|
- lib/mutx/view/view.rb
|
527
566
|
- mutx.gemspec
|
528
567
|
homepage: https://github.com/romanrod/mutx
|
@@ -545,7 +584,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
545
584
|
version: '0'
|
546
585
|
requirements: []
|
547
586
|
rubyforge_project:
|
548
|
-
rubygems_version: 2.
|
587
|
+
rubygems_version: 2.4.8
|
549
588
|
signing_key:
|
550
589
|
specification_version: 4
|
551
590
|
summary: Mutx lets you expose executions easily
|