right_chimp 1.0.7 → 1.0.8
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.
- data/README +5 -5
- data/lib/right_chimp/daemon/ChimpDaemon.rb +39 -23
- data/lib/right_chimp/queue/QueueWorker.rb +15 -8
- data/lib/right_chimp/templates/all_jobs.erb +42 -96
- data/lib/right_chimp/templates/default.css +81 -0
- data/lib/right_chimp/templates/greenscreen.css +82 -0
- data/lib/right_chimp/templates/hotdogstand.css +82 -0
- data/lib/right_chimp/templates/styleswitcher.js +1 -0
- data/lib/right_chimp/version.rb +1 -1
- metadata +6 -2
data/README
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Chimp: a command-line tool for remote command execution using the RightScale platform
|
2
2
|
|
3
|
-
The goal of the Chimp is to provide a simple command line utility for
|
3
|
+
The goal of the Chimp is to provide a simple command line utility for
|
4
4
|
performing bulk operations on servers managed on the RightScale platform.
|
5
5
|
|
6
6
|
EXAMPLE USAGE
|
@@ -18,7 +18,7 @@ Run a shell command on servers with a specific tag:
|
|
18
18
|
|
19
19
|
chimp --tag="service:myservice=true" --ssh="uptime"
|
20
20
|
|
21
|
-
Run a report:
|
21
|
+
Run a report:
|
22
22
|
|
23
23
|
bin/chimp --tag="service:myservice=true" --report="nickname,ip-address,tag=myservice:version"
|
24
24
|
|
@@ -39,13 +39,13 @@ Would include both the server nickname and ip address to the report:
|
|
39
39
|
server1-4.rightscale.com,192.168.0.4
|
40
40
|
|
41
41
|
Any field present on a rest_connection Server object can be queried. This
|
42
|
-
includes:
|
42
|
+
includes:
|
43
43
|
|
44
44
|
Field Example
|
45
45
|
----------------------------------- ----------------------------
|
46
46
|
aws-id i-12345
|
47
47
|
aws-platform Linux/Unix
|
48
|
-
cloud_id
|
48
|
+
cloud_id
|
49
49
|
created_at
|
50
50
|
current_instance_href
|
51
51
|
deployment_href
|
@@ -77,4 +77,4 @@ Additionally you can report on instance tags:
|
|
77
77
|
|
78
78
|
OBLIGATORY MAINTENANCE STRING
|
79
79
|
-----------------------------
|
80
|
-
|
80
|
+
Maintained by the RightScale Red_Team
|
@@ -434,35 +434,51 @@ module Chimp
|
|
434
434
|
#
|
435
435
|
class DisplayServlet < GenericServlet
|
436
436
|
def do_GET(req, resp)
|
437
|
-
|
437
|
+
#
|
438
|
+
# First determine the path to the files to serve
|
439
|
+
#
|
440
|
+
if ENV['CHIMP_TEST'] != 'TRUE'
|
441
|
+
template_path = File.join(Gem.dir, 'gems', 'right_chimp-' + VERSION, 'lib/right_chimp/templates')
|
442
|
+
else
|
443
|
+
template_path = 'lib/right_chimp/templates'
|
444
|
+
end
|
438
445
|
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
446
|
+
#
|
447
|
+
# Check for static CSS files and serve them
|
448
|
+
#
|
449
|
+
if req.request_uri.path =~ /\.(css|js)$/
|
450
|
+
filename = req.request_uri.path.split('/').last
|
451
|
+
resp.body = File.read(File.join(template_path, filename))
|
452
|
+
raise WEBrick::HTTPStatus::OK
|
453
|
+
else
|
445
454
|
|
446
|
-
|
447
|
-
|
455
|
+
#
|
456
|
+
# Otherwise process ERB template
|
457
|
+
#
|
458
|
+
job_filter = self.get_verb(req) || "running"
|
459
|
+
|
460
|
+
if not @template
|
461
|
+
@template = ERB.new(File.read(File.join(template_path, "all_jobs.erb")), nil, ">")
|
462
|
+
end
|
448
463
|
|
449
|
-
|
450
|
-
|
451
|
-
|
464
|
+
queue = ChimpQueue.instance
|
465
|
+
jobs = queue.get_jobs
|
466
|
+
group_name = nil
|
452
467
|
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
468
|
+
if job_filter == "group"
|
469
|
+
group_name = req.request_uri.path.split('/')[-1]
|
470
|
+
g = ChimpQueue[group_name.to_sym]
|
471
|
+
jobs = g.get_jobs if g
|
472
|
+
end
|
458
473
|
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
474
|
+
count_jobs_running = queue.get_jobs_by_status(:running).size
|
475
|
+
count_jobs_queued = queue.get_jobs_by_status(:none).size
|
476
|
+
count_jobs_failed = queue.get_jobs_by_status(:error).size
|
477
|
+
count_jobs_done = queue.get_jobs_by_status(:done).size
|
463
478
|
|
464
|
-
|
465
|
-
|
479
|
+
resp.body = @template.result(binding)
|
480
|
+
raise WEBrick::HTTPStatus::OK
|
481
|
+
end
|
466
482
|
end
|
467
483
|
end # DisplayServlet
|
468
484
|
end # ChimpDaemon
|
@@ -5,13 +5,13 @@
|
|
5
5
|
module Chimp
|
6
6
|
class QueueWorker
|
7
7
|
attr_accessor :delay, :retry_count, :never_exit
|
8
|
-
|
8
|
+
|
9
9
|
def initialize
|
10
10
|
@delay = 0
|
11
11
|
@retry_count = 0
|
12
12
|
@never_exit = true
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
#
|
16
16
|
# Grab work items from the ChimpQueue and process them
|
17
17
|
# Only stop is @ever_exit is false
|
@@ -29,14 +29,21 @@ module Chimp
|
|
29
29
|
else
|
30
30
|
sleep 1
|
31
31
|
end
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
|
33
|
+
#
|
34
|
+
# the rest_connection gem raises RuntimeErrors so we need to
|
35
|
+
# rescue Exception here
|
36
|
+
#
|
37
|
+
rescue Exception => ex
|
38
|
+
Log.error "Exception in QueueWorker.run: #{ex}"
|
39
|
+
Log.debug ex.inspect
|
40
|
+
Log.debug ex.backtrace
|
41
|
+
|
42
|
+
work_item.status = Executor::STATUS_ERROR
|
43
|
+
work_item.error = ex
|
37
44
|
end
|
38
45
|
end
|
39
46
|
end
|
40
|
-
|
47
|
+
|
41
48
|
end
|
42
49
|
end
|
@@ -1,83 +1,22 @@
|
|
1
1
|
<html><head>
|
2
2
|
<title>chimpd</title>
|
3
|
+
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
|
3
4
|
<meta http-equiv="refresh" content="5">
|
4
|
-
<
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
<link rel="stylesheet" href="default.css" title="default" />
|
6
|
+
<link rel="alternate stylesheet" href="greenscreen.css" title="greenscreen" />
|
7
|
+
<link rel="alternate stylesheet" href="hotdogstand.css" title="hotdogstand" />
|
8
|
+
<script src="styleswitcher.js"></script>
|
9
|
+
|
10
|
+
<script type="text/javascript">
|
11
|
+
|
12
|
+
function chimpd_job_control(obj, url) {
|
13
|
+
obj.style.color = "red";
|
14
|
+
xmlhttp = new XMLHttpRequest();
|
15
|
+
xmlhttp.open("GET", url, true);
|
16
|
+
xmlhttp.send();
|
11
17
|
}
|
12
|
-
|
13
|
-
|
14
|
-
font-weight: bold;
|
15
|
-
border-bottom: 2px solid #088A29;
|
16
|
-
}
|
17
|
-
|
18
|
-
ol, ul {
|
19
|
-
list-style-type: none;
|
20
|
-
}
|
21
|
-
|
22
|
-
ol {
|
23
|
-
padding-left: 10px;
|
24
|
-
}
|
25
|
-
|
26
|
-
ul {
|
27
|
-
padding-bottom: 5px;
|
28
|
-
border-bottom: solid #088A29 2px;
|
29
|
-
}
|
30
|
-
|
31
|
-
div#stats {
|
32
|
-
background-color: black; /* #002A5C */
|
33
|
-
color: #088A29;
|
34
|
-
float: left;
|
35
|
-
border-right: solid 2px #088A29;
|
36
|
-
position: fixed;
|
37
|
-
height: 100%;
|
38
|
-
padding: 5px;
|
39
|
-
padding-right: 15px;
|
40
|
-
}
|
41
|
-
|
42
|
-
div#jobs {
|
43
|
-
position: absolute;
|
44
|
-
left: 375px;
|
45
|
-
top: 10px;
|
46
|
-
width: 500px;
|
47
|
-
padding-left: 20px;
|
48
|
-
color: #088A29;
|
49
|
-
}
|
50
|
-
|
51
|
-
div#groups {
|
52
|
-
color: #088A29;
|
53
|
-
background-color: black;
|
54
|
-
}
|
55
|
-
|
56
|
-
div#groups a {
|
57
|
-
color: #088A29;
|
58
|
-
background-color: black;
|
59
|
-
}
|
60
|
-
|
61
|
-
.highlight {
|
62
|
-
background-color: #088A29;
|
63
|
-
color: black;
|
64
|
-
}
|
65
|
-
|
66
|
-
td {
|
67
|
-
padding-right: 10px;
|
68
|
-
}
|
69
|
-
|
70
|
-
a {
|
71
|
-
text-decoration: underline;
|
72
|
-
color: #088A29;
|
73
|
-
font-weight: bold;
|
74
|
-
}
|
75
|
-
|
76
|
-
a:hover, ol a:hover {
|
77
|
-
text-decoration: underline;
|
78
|
-
}
|
79
|
-
|
80
|
-
</style>
|
18
|
+
|
19
|
+
</script>
|
81
20
|
|
82
21
|
</head><body>
|
83
22
|
|
@@ -106,12 +45,12 @@ SINCE 2012</p>
|
|
106
45
|
</table>
|
107
46
|
|
108
47
|
<h3>Job Groups</h3>
|
109
|
-
<div id="groups" width="90%"
|
48
|
+
<div id="groups" width="90%" >
|
110
49
|
<ol style="margin: 0; padding: 3px;">
|
111
50
|
<% queue.group.values.each do |g| %>
|
112
51
|
<li>
|
113
52
|
[<%= sprintf( "%03d", g.get_jobs_by_status(:running).size) %>/<%= sprintf( "%03d", g.get_job_ids.size) %> <%= g.short_name %>] <% if group_name == g.group_id %><span class="highlight"><%=g.group_id%></span><% else %><a href="/display/group/<%=g.group_id%>"><%= g.group_id %></a><% end %>
|
114
|
-
|
53
|
+
|
115
54
|
</li>
|
116
55
|
<% end %>
|
117
56
|
</ol>
|
@@ -120,19 +59,26 @@ SINCE 2012</p>
|
|
120
59
|
|
121
60
|
<h3>Filter Results</h3>
|
122
61
|
|
123
|
-
<p>[
|
124
|
-
<% if job_filter == 'running' or job_filter == nil %>running jobs <% else %><a href="/display/running">running jobs</a><% end %> |
|
62
|
+
<p>[
|
63
|
+
<% if job_filter == 'running' or job_filter == nil %>running jobs <% else %><a href="/display/running">running jobs</a><% end %> |
|
125
64
|
<% if job_filter == 'all' %>all jobs <% else %><a href="/display/all">all jobs</a> <% end %> |
|
126
|
-
<% if job_filter == 'done' %>complete jobs <% else %><a href="/display/done">complete jobs</a><% end %> |
|
65
|
+
<% if job_filter == 'done' %>complete jobs <% else %><a href="/display/done">complete jobs</a><% end %> |
|
127
66
|
<% if job_filter == 'error' %>failed jobs <% else %><a href="/display/error">failed jobs</a><% end %>
|
128
67
|
]
|
129
68
|
</p>
|
130
69
|
|
131
70
|
<h3>Commands</h3>
|
132
71
|
<ol>
|
133
|
-
<li><a href="/job/running/cancel">cancel running jobs</a></li>
|
134
|
-
<li><a href="/job/error/retry">retry failed jobs </a></li>
|
135
|
-
<li><a href="/job/all/report">download execution report</a></li>
|
72
|
+
<li><a href="#" onclick="chimpd_job_control(this, '/job/running/cancel')">cancel running jobs</a></li>
|
73
|
+
<li><a href="#" onclick="chimpd_job_control(this, '/job/error/retry')">retry failed jobs </a></li>
|
74
|
+
<li><a href="#" onclick="chimpd_job_control(this, '/job/all/report')">download execution report</a></li>
|
75
|
+
</ol>
|
76
|
+
|
77
|
+
<h3>Theme</h3>
|
78
|
+
<ol>
|
79
|
+
<li> <a href="#" onclick="setActiveStyleSheet('default')">default</a></li>
|
80
|
+
<li> <a href="#" onclick="setActiveStyleSheet('greenscreen')">green screen</a></li>
|
81
|
+
<li> <a href="#" onclick="setActiveStyleSheet('hotdogstand')">hot dog stand</a></li>
|
136
82
|
</ol>
|
137
83
|
|
138
84
|
</div>
|
@@ -144,7 +90,7 @@ SINCE 2012</p>
|
|
144
90
|
<h1>Job Group: <%=CGI::escapeHTML(group_name)%></h1>
|
145
91
|
<% end %>
|
146
92
|
|
147
|
-
<%
|
93
|
+
<%
|
148
94
|
#
|
149
95
|
# Print out all the jobs
|
150
96
|
#
|
@@ -154,12 +100,12 @@ end
|
|
154
100
|
|
155
101
|
jobs.each do |j|
|
156
102
|
next unless j
|
157
|
-
|
103
|
+
|
158
104
|
status = j.status
|
159
105
|
id = j.job_id
|
160
106
|
|
161
107
|
server_name = CGI::escapeHTML(j.server['nickname']) if j.server
|
162
|
-
|
108
|
+
|
163
109
|
if j.exec
|
164
110
|
action = j.exec.to_s
|
165
111
|
action = j.exec['right_script']['name'] if j.exec['right_script']
|
@@ -170,8 +116,8 @@ jobs.each do |j|
|
|
170
116
|
if job_filter and not (job_filter == 'all' or job_filter == 'group' )
|
171
117
|
next unless status == job_filter.to_sym
|
172
118
|
end
|
173
|
-
|
174
|
-
execution_time_seconds = j.get_total_exec_time
|
119
|
+
|
120
|
+
execution_time_seconds = j.get_total_exec_time
|
175
121
|
h = (execution_time_seconds/3600).to_i
|
176
122
|
m = (execution_time_seconds/60 - h*60).to_i
|
177
123
|
s = (execution_time_seconds - (m*60 + h*3600))
|
@@ -179,9 +125,9 @@ jobs.each do |j|
|
|
179
125
|
|
180
126
|
%>
|
181
127
|
|
182
|
-
<h2
|
128
|
+
<h2>#<%= id %></h2>
|
183
129
|
<%
|
184
|
-
color = "#088A29"
|
130
|
+
color = "#088A29"
|
185
131
|
color = "brightgreen" if status == Executor::STATUS_RUNNING
|
186
132
|
color = "orange" if status == Executor::STATUS_RETRYING
|
187
133
|
color = "red" if status == Executor::STATUS_ERROR
|
@@ -195,15 +141,15 @@ jobs.each do |j|
|
|
195
141
|
<% if status != Executor::STATUS_RUNNING %>
|
196
142
|
<li>Results: <span style="color:#777"><%= j.results %></span></li>
|
197
143
|
<% end %>
|
198
|
-
|
144
|
+
|
199
145
|
<li> <span class="action">
|
200
146
|
<% if status == Executor::STATUS_ERROR %>
|
201
|
-
<a href="/job/<%=id%>/ack">ack</a> |
|
202
|
-
<a href="/job/<%=id%>/retry">retry</a>
|
147
|
+
<a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/ack')">ack</a> |
|
148
|
+
<a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/retry')">retry</a>
|
203
149
|
<% elsif status == Executor::STATUS_RUNNING %>
|
204
|
-
<a href="/job/<%=id%>/cancel">cancel</a>
|
150
|
+
<a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/cancel')">cancel</a>
|
205
151
|
<% else %>
|
206
|
-
<a href="/job/<%=id%>/retry">requeue</a>
|
152
|
+
<a href="#" onclick="chimpd_job_control(this, '/job/<%=id%>/retry')">requeue</a>
|
207
153
|
<% end %>
|
208
154
|
</li>
|
209
155
|
</ul>
|
@@ -0,0 +1,81 @@
|
|
1
|
+
body {
|
2
|
+
color: black;
|
3
|
+
background-color: white;
|
4
|
+
font-family: monospace;
|
5
|
+
font-size: 10px;
|
6
|
+
margin: 0;
|
7
|
+
}
|
8
|
+
|
9
|
+
h3 {
|
10
|
+
font-weight: bold;
|
11
|
+
border-bottom: 2px solid black;
|
12
|
+
}
|
13
|
+
|
14
|
+
h2 {
|
15
|
+
float: left;
|
16
|
+
}
|
17
|
+
|
18
|
+
ol, ul {
|
19
|
+
list-style-type: none;
|
20
|
+
}
|
21
|
+
|
22
|
+
ol {
|
23
|
+
padding-left: 10px;
|
24
|
+
}
|
25
|
+
|
26
|
+
ul {
|
27
|
+
padding-bottom: 5px;
|
28
|
+
border-bottom: solid black 2px;
|
29
|
+
}
|
30
|
+
|
31
|
+
div#stats {
|
32
|
+
background-color: white; /* #002A5C */
|
33
|
+
color: black;
|
34
|
+
float: left;
|
35
|
+
border-right: solid 2px black;
|
36
|
+
position: fixed;
|
37
|
+
height: 100%;
|
38
|
+
padding: 5px;
|
39
|
+
padding-right: 15px;
|
40
|
+
}
|
41
|
+
|
42
|
+
div#jobs {
|
43
|
+
position: absolute;
|
44
|
+
left: 375px;
|
45
|
+
top: 10px;
|
46
|
+
width: 500px;
|
47
|
+
padding-left: 20px;
|
48
|
+
color: black;
|
49
|
+
}
|
50
|
+
|
51
|
+
div#groups {
|
52
|
+
color: black;
|
53
|
+
background-color: white;
|
54
|
+
border: solid 1px;
|
55
|
+
overflow-y: auto;
|
56
|
+
height: 150px;
|
57
|
+
}
|
58
|
+
|
59
|
+
div#groups a {
|
60
|
+
color: black;
|
61
|
+
background-color: white;
|
62
|
+
}
|
63
|
+
|
64
|
+
.highlight {
|
65
|
+
background-color: black;
|
66
|
+
color: white;
|
67
|
+
}
|
68
|
+
|
69
|
+
td {
|
70
|
+
padding-right: 10px;
|
71
|
+
}
|
72
|
+
|
73
|
+
a {
|
74
|
+
text-decoration: underline;
|
75
|
+
color: black;
|
76
|
+
font-weight: bold;
|
77
|
+
}
|
78
|
+
|
79
|
+
a:hover, ol a:hover {
|
80
|
+
text-decoration: underline;
|
81
|
+
}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
body {
|
2
|
+
color: #088A29;
|
3
|
+
background-color: black;
|
4
|
+
font-family: monospace;
|
5
|
+
font-size: 10px;
|
6
|
+
margin: 0;
|
7
|
+
}
|
8
|
+
|
9
|
+
h3 {
|
10
|
+
font-weight: bold;
|
11
|
+
border-bottom: 2px solid #088A29;
|
12
|
+
}
|
13
|
+
|
14
|
+
h2 {
|
15
|
+
float: left;
|
16
|
+
color: #088A29;
|
17
|
+
}
|
18
|
+
|
19
|
+
ol, ul {
|
20
|
+
list-style-type: none;
|
21
|
+
}
|
22
|
+
|
23
|
+
ol {
|
24
|
+
padding-left: 10px;
|
25
|
+
}
|
26
|
+
|
27
|
+
ul {
|
28
|
+
padding-bottom: 5px;
|
29
|
+
border-bottom: solid #088A29 2px;
|
30
|
+
}
|
31
|
+
|
32
|
+
div#stats {
|
33
|
+
background-color: black; /* #002A5C */
|
34
|
+
color: #088A29;
|
35
|
+
float: left;
|
36
|
+
border-right: solid 2px #088A29;
|
37
|
+
position: fixed;
|
38
|
+
height: 100%;
|
39
|
+
padding: 5px;
|
40
|
+
padding-right: 15px;
|
41
|
+
}
|
42
|
+
|
43
|
+
div#jobs {
|
44
|
+
position: absolute;
|
45
|
+
left: 375px;
|
46
|
+
top: 10px;
|
47
|
+
width: 500px;
|
48
|
+
padding-left: 20px;
|
49
|
+
color: #088A29;
|
50
|
+
}
|
51
|
+
|
52
|
+
div#groups {
|
53
|
+
color: #088A29;
|
54
|
+
background-color: black;
|
55
|
+
border: solid 1px #088A29;
|
56
|
+
overflow-y: auto;
|
57
|
+
height: 150px;
|
58
|
+
}
|
59
|
+
|
60
|
+
div#groups a {
|
61
|
+
color: #088A29;
|
62
|
+
background-color: black;
|
63
|
+
}
|
64
|
+
|
65
|
+
.highlight {
|
66
|
+
background-color: #088A29;
|
67
|
+
color: black;
|
68
|
+
}
|
69
|
+
|
70
|
+
td {
|
71
|
+
padding-right: 10px;
|
72
|
+
}
|
73
|
+
|
74
|
+
a {
|
75
|
+
text-decoration: underline;
|
76
|
+
color: #088A29;
|
77
|
+
font-weight: bold;
|
78
|
+
}
|
79
|
+
|
80
|
+
a:hover, ol a:hover {
|
81
|
+
text-decoration: underline;
|
82
|
+
}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
body {
|
2
|
+
color: yellow;
|
3
|
+
background-color: red;
|
4
|
+
font-family: monospace;
|
5
|
+
font-size: 10px;
|
6
|
+
margin: 0;
|
7
|
+
}
|
8
|
+
|
9
|
+
h3 {
|
10
|
+
font-weight: bold;
|
11
|
+
border-bottom: 2px solid yellow;
|
12
|
+
}
|
13
|
+
|
14
|
+
h2 {
|
15
|
+
float: left;
|
16
|
+
color: yellow;
|
17
|
+
}
|
18
|
+
|
19
|
+
ol, ul {
|
20
|
+
list-style-type: none;
|
21
|
+
}
|
22
|
+
|
23
|
+
ol {
|
24
|
+
padding-left: 10px;
|
25
|
+
}
|
26
|
+
|
27
|
+
ul {
|
28
|
+
padding-bottom: 5px;
|
29
|
+
border-bottom: solid yellow 2px;
|
30
|
+
}
|
31
|
+
|
32
|
+
div#stats {
|
33
|
+
background-color: red; /* #002A5C */
|
34
|
+
color: yellow;
|
35
|
+
float: left;
|
36
|
+
border-right: solid 2px yellow;
|
37
|
+
position: fixed;
|
38
|
+
height: 100%;
|
39
|
+
padding: 5px;
|
40
|
+
padding-right: 15px;
|
41
|
+
}
|
42
|
+
|
43
|
+
div#jobs {
|
44
|
+
position: absolute;
|
45
|
+
left: 375px;
|
46
|
+
top: 10px;
|
47
|
+
width: 500px;
|
48
|
+
padding-left: 20px;
|
49
|
+
color: yellow;
|
50
|
+
}
|
51
|
+
|
52
|
+
div#groups {
|
53
|
+
color: yellow;
|
54
|
+
background-color: red;
|
55
|
+
border: solid 1px yellow;
|
56
|
+
overflow-y: auto;
|
57
|
+
height: 150px;
|
58
|
+
}
|
59
|
+
|
60
|
+
div#groups a {
|
61
|
+
color: yellow;
|
62
|
+
background-color: red;
|
63
|
+
}
|
64
|
+
|
65
|
+
.highlight {
|
66
|
+
background-color: yellow;
|
67
|
+
color: red;
|
68
|
+
}
|
69
|
+
|
70
|
+
td {
|
71
|
+
padding-right: 10px;
|
72
|
+
}
|
73
|
+
|
74
|
+
a {
|
75
|
+
text-decoration: underline;
|
76
|
+
color: yellow;
|
77
|
+
font-weight: bold;
|
78
|
+
}
|
79
|
+
|
80
|
+
a:hover, ol a:hover {
|
81
|
+
text-decoration: underline;
|
82
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
function setActiveStyleSheet(title) {
|
2
|
var i, a, main;
|
1
3
|
for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
|
2
4
|
if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
|
3
5
|
a.disabled = true;
|
4
6
|
if(a.getAttribute("title") == title) a.disabled = false;
|
5
7
|
}
|
6
8
|
}
|
7
9
|
var i, a;
|
8
10
|
for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
|
9
11
|
if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
|
10
12
|
}
|
11
13
|
return null;
|
12
14
|
var i, a;
|
13
15
|
for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
|
14
16
|
if(a.getAttribute("rel").indexOf("style") != -1
|
15
17
|
&& a.getAttribute("rel").indexOf("alt") == -1
|
16
18
|
&& a.getAttribute("title")
|
17
19
|
) return a.getAttribute("title");
|
18
20
|
}
|
19
21
|
return null;
|
20
22
|
if (days) {
|
21
23
|
var date = new Date();
|
22
24
|
date.setTime(date.getTime()+(days*24*60*60*1000));
|
23
25
|
var expires = "; expires="+date.toGMTString();
|
24
26
|
}
|
25
27
|
else expires = "";
|
26
28
|
document.cookie = name+"="+value+expires+"; path=/";
|
27
29
|
var nameEQ = name + "=";
|
28
30
|
var ca = document.cookie.split(';');
|
29
31
|
for(var i=0;i < ca.length;i++) {
|
30
32
|
var c = ca[i];
|
31
33
|
while (c.charAt(0)==' ') c = c.substring(1,c.length);
|
32
34
|
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
|
33
35
|
}
|
34
36
|
return null;
|
35
37
|
var cookie = readCookie("style");
|
36
38
|
var title = cookie ? cookie : getPreferredStyleSheet();
|
37
39
|
setActiveStyleSheet(title);
|
38
40
|
var title = getActiveStyleSheet();
|
39
41
|
createCookie("style", title, 365);
|
data/lib/right_chimp/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_chimp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest_connection
|
@@ -143,6 +143,10 @@ files:
|
|
143
143
|
- lib/right_chimp/queue/ExecutionGroup.rb
|
144
144
|
- lib/right_chimp/queue/QueueWorker.rb
|
145
145
|
- lib/right_chimp/templates/all_jobs.erb
|
146
|
+
- lib/right_chimp/templates/default.css
|
147
|
+
- lib/right_chimp/templates/greenscreen.css
|
148
|
+
- lib/right_chimp/templates/hotdogstand.css
|
149
|
+
- lib/right_chimp/templates/styleswitcher.js
|
146
150
|
- lib/right_chimp/version.rb
|
147
151
|
- spec/spec_chimp.rb
|
148
152
|
- spec/spec_chimp_commandline.rb
|