perus 0.1.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.
Files changed (113) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +16 -0
  8. data/Rakefile +6 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/exe/perus-pinger +23 -0
  12. data/exe/perus-server +23 -0
  13. data/lib/perus/options.rb +30 -0
  14. data/lib/perus/pinger/chrome_command.rb +54 -0
  15. data/lib/perus/pinger/command.rb +123 -0
  16. data/lib/perus/pinger/commands/chrome_execute.rb +26 -0
  17. data/lib/perus/pinger/commands/chrome_navigate.rb +25 -0
  18. data/lib/perus/pinger/commands/chrome_reload.rb +29 -0
  19. data/lib/perus/pinger/commands/kill_process.rb +13 -0
  20. data/lib/perus/pinger/commands/remove_path.rb +15 -0
  21. data/lib/perus/pinger/commands/replace.rb +18 -0
  22. data/lib/perus/pinger/commands/restart.rb +9 -0
  23. data/lib/perus/pinger/commands/script.rb +59 -0
  24. data/lib/perus/pinger/commands/upgrade.rb +16 -0
  25. data/lib/perus/pinger/commands/upload.rb +15 -0
  26. data/lib/perus/pinger/metrics/chrome.rb +33 -0
  27. data/lib/perus/pinger/metrics/cpu.rb +17 -0
  28. data/lib/perus/pinger/metrics/hd.rb +14 -0
  29. data/lib/perus/pinger/metrics/mem.rb +11 -0
  30. data/lib/perus/pinger/metrics/process.rb +27 -0
  31. data/lib/perus/pinger/metrics/screenshot.rb +36 -0
  32. data/lib/perus/pinger/metrics/temp.rb +18 -0
  33. data/lib/perus/pinger/metrics/uptime.rb +10 -0
  34. data/lib/perus/pinger/metrics/value.rb +18 -0
  35. data/lib/perus/pinger/pinger.rb +218 -0
  36. data/lib/perus/pinger.rb +38 -0
  37. data/lib/perus/server/admin.rb +83 -0
  38. data/lib/perus/server/app.rb +304 -0
  39. data/lib/perus/server/db.rb +29 -0
  40. data/lib/perus/server/form.rb +73 -0
  41. data/lib/perus/server/helpers.rb +36 -0
  42. data/lib/perus/server/migrations/001_create_systems.rb +20 -0
  43. data/lib/perus/server/migrations/002_create_configs.rb +12 -0
  44. data/lib/perus/server/migrations/003_create_values.rb +23 -0
  45. data/lib/perus/server/migrations/004_create_groups.rb +12 -0
  46. data/lib/perus/server/migrations/005_create_errors.rb +15 -0
  47. data/lib/perus/server/migrations/006_create_alerts.rb +14 -0
  48. data/lib/perus/server/migrations/007_create_actions.rb +18 -0
  49. data/lib/perus/server/migrations/008_create_metrics.rb +16 -0
  50. data/lib/perus/server/migrations/009_create_command_config.rb +13 -0
  51. data/lib/perus/server/migrations/010_create_scripts.rb +13 -0
  52. data/lib/perus/server/migrations/011_create_script_commands.rb +14 -0
  53. data/lib/perus/server/migrations/012_create_config_metrics.rb +14 -0
  54. data/lib/perus/server/models/action.rb +71 -0
  55. data/lib/perus/server/models/alert.rb +9 -0
  56. data/lib/perus/server/models/command_config.rb +58 -0
  57. data/lib/perus/server/models/config.rb +30 -0
  58. data/lib/perus/server/models/config_metric.rb +15 -0
  59. data/lib/perus/server/models/error.rb +5 -0
  60. data/lib/perus/server/models/group.rb +12 -0
  61. data/lib/perus/server/models/metric.rb +53 -0
  62. data/lib/perus/server/models/script.rb +39 -0
  63. data/lib/perus/server/models/script_command.rb +15 -0
  64. data/lib/perus/server/models/system.rb +160 -0
  65. data/lib/perus/server/models/value.rb +11 -0
  66. data/lib/perus/server/public/css/reset.css +102 -0
  67. data/lib/perus/server/public/css/style.css +461 -0
  68. data/lib/perus/server/public/fonts/opensans/OpenSans-Italic.ttf +0 -0
  69. data/lib/perus/server/public/fonts/opensans/OpenSans-Light.ttf +0 -0
  70. data/lib/perus/server/public/fonts/opensans/OpenSans-LightItalic.ttf +0 -0
  71. data/lib/perus/server/public/fonts/opensans/OpenSans-Regular.ttf +0 -0
  72. data/lib/perus/server/public/fonts/opensans/OpenSans-Semibold.ttf +0 -0
  73. data/lib/perus/server/public/fonts/opensans/OpenSans-SemiboldItalic.ttf +0 -0
  74. data/lib/perus/server/public/fonts/opensans/opensans-light-webfont.eot +0 -0
  75. data/lib/perus/server/public/fonts/opensans/opensans-light-webfont.svg +1824 -0
  76. data/lib/perus/server/public/fonts/opensans/opensans-light-webfont.ttf +0 -0
  77. data/lib/perus/server/public/fonts/opensans/opensans-light-webfont.woff +0 -0
  78. data/lib/perus/server/public/fonts/opensans/opensans-light-webfont.woff2 +0 -0
  79. data/lib/perus/server/public/fonts/opensans/opensans-regular-webfont.eot +0 -0
  80. data/lib/perus/server/public/fonts/opensans/opensans-regular-webfont.svg +1824 -0
  81. data/lib/perus/server/public/fonts/opensans/opensans-regular-webfont.ttf +0 -0
  82. data/lib/perus/server/public/fonts/opensans/opensans-regular-webfont.woff +0 -0
  83. data/lib/perus/server/public/fonts/opensans/opensans-regular-webfont.woff2 +0 -0
  84. data/lib/perus/server/public/fonts/opensans/opensans-semibold-webfont.eot +0 -0
  85. data/lib/perus/server/public/fonts/opensans/opensans-semibold-webfont.svg +1824 -0
  86. data/lib/perus/server/public/fonts/opensans/opensans-semibold-webfont.ttf +0 -0
  87. data/lib/perus/server/public/fonts/opensans/opensans-semibold-webfont.woff +0 -0
  88. data/lib/perus/server/public/fonts/opensans/opensans-semibold-webfont.woff2 +0 -0
  89. data/lib/perus/server/public/fonts/opensans/stylesheet.css +35 -0
  90. data/lib/perus/server/public/js/dygraph-combined.js +6 -0
  91. data/lib/perus/server/public/js/jquery.js +4 -0
  92. data/lib/perus/server/server.rb +32 -0
  93. data/lib/perus/server/views/admin/edit.erb +9 -0
  94. data/lib/perus/server/views/admin/index.erb +18 -0
  95. data/lib/perus/server/views/admin/new.erb +5 -0
  96. data/lib/perus/server/views/alerts/form.erb +3 -0
  97. data/lib/perus/server/views/command_config.erb +37 -0
  98. data/lib/perus/server/views/configs/edit.erb +36 -0
  99. data/lib/perus/server/views/configs/form.erb +1 -0
  100. data/lib/perus/server/views/errors.erb +6 -0
  101. data/lib/perus/server/views/groups/form.erb +1 -0
  102. data/lib/perus/server/views/index.erb +21 -0
  103. data/lib/perus/server/views/layout.erb +44 -0
  104. data/lib/perus/server/views/scripts/edit.erb +36 -0
  105. data/lib/perus/server/views/scripts/form.erb +2 -0
  106. data/lib/perus/server/views/system.erb +202 -0
  107. data/lib/perus/server/views/systems/form.erb +6 -0
  108. data/lib/perus/server/views/systems.erb +17 -0
  109. data/lib/perus/server.rb +24 -0
  110. data/lib/perus/version.rb +3 -0
  111. data/lib/perus.rb +10 -0
  112. data/perus.gemspec +36 -0
  113. metadata +354 -0
@@ -0,0 +1,461 @@
1
+ html {
2
+ font-family: 'Open Sans', Helvetica, sans-serif;
3
+ }
4
+
5
+ * {
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ a {
10
+ color: #444;
11
+ text-decoration: none;
12
+ }
13
+
14
+ a:hover {
15
+ text-decoration: underline;
16
+ }
17
+
18
+ body > header {
19
+ background-color: #202328;
20
+ position: fixed;
21
+ top: 0px;
22
+ bottom: 0px;
23
+ left: 0px;
24
+ width: 200px;
25
+ }
26
+
27
+ body > header h1 {
28
+ background-color: #9DE0CA;
29
+ color: rgba(255, 255, 255, 0.9);
30
+ text-transform: none;
31
+ font-weight: 300;
32
+ font-size: 26px;
33
+ padding: 25px 15px;
34
+ }
35
+
36
+ body > header > nav {
37
+ padding: 10px 15px 15px 15px;
38
+ }
39
+
40
+ body > header > nav > ul > li {
41
+ padding-top: 15px;
42
+ }
43
+
44
+ body > header a {
45
+ color: rgba(255, 255, 255, 0.5);
46
+ text-decoration: none;
47
+ font-weight: 300;
48
+ display: block;
49
+ padding: 10px 5px;
50
+ font-size: 14px;
51
+ }
52
+
53
+ body > header a.selected {
54
+ color: rgba(255, 255, 255, 0.8);
55
+ font-weight: 400;
56
+ }
57
+
58
+ body > header > nav > ul ul {
59
+ padding-left: 12px;
60
+ padding-top: 3px;
61
+ }
62
+
63
+ body > header > nav > ul ul a {
64
+ font-size: 13px;
65
+ }
66
+
67
+ main {
68
+ padding: 28px 40px 40px 240px;
69
+ background-color: #f5f5f5;
70
+ min-height: 100%;
71
+ }
72
+
73
+ main > h1 {
74
+ text-transform: uppercase;
75
+ font-size: 24px;
76
+ font-weight: 300;
77
+ color: #555;
78
+ margin-bottom: 30px;
79
+ }
80
+
81
+ main > h2.edit {
82
+ margin-top: 30px;
83
+ }
84
+
85
+ main > form, main > section {
86
+ background-color: white;
87
+ padding: 20px;
88
+ border-radius: 4px;
89
+ border-bottom: 1px solid #ddd;
90
+ width: 100%;
91
+ }
92
+
93
+ /* forms */
94
+ main > form > p, form.command > p {
95
+ margin-bottom: 10px;
96
+ position: relative;
97
+ }
98
+
99
+ main > form > p label, form.command > p label {
100
+ position: absolute;
101
+ top: 3px;
102
+ left: 0px;
103
+ font-size: 13px;
104
+ color: #444;
105
+ }
106
+
107
+ main > form > p.errors, form.command > p.errors {
108
+ padding-left: 100px;
109
+ color: red;
110
+ font-size: 13px;
111
+ }
112
+
113
+ main > form > p span, form.command > p span {
114
+ display: inline-block;
115
+ padding-left: 120px;
116
+ width: 100%;
117
+ }
118
+
119
+ main > form > p input[type=text], main > form > p textarea,
120
+ form.command > p input[type=text], form.command > p textarea {
121
+ width: 100%;
122
+ border: 1px solid #ddd;
123
+ font-size: 13px;
124
+ min-height: 30px;
125
+ border-radius: 2px;
126
+ outline: none;
127
+ padding: 5px;
128
+ }
129
+
130
+ main > form > p input[type=text]:focus, main > form > p textarea:focus,
131
+ form.command > p input[type=text]:focus, form.command > p textarea:focus {
132
+ border-color: #3497FF;
133
+ }
134
+
135
+ main > form > p textarea, form.command > p textarea {
136
+ min-height: 80px;
137
+ }
138
+
139
+ main > form > p.actions, form.command > p.actions {
140
+ margin-top: 20px;
141
+ text-align: right;
142
+ margin-bottom: 0px;
143
+ }
144
+
145
+ /* tables */
146
+ main table {
147
+ width: 100%;
148
+ }
149
+
150
+ main table th {
151
+ text-align: left;
152
+ padding-left: 5px;
153
+ padding-bottom: 3px;
154
+ font-size: 13px;
155
+ border-bottom: 1px solid #eee;
156
+ }
157
+
158
+ main table tr:nth-child(odd) td {
159
+ background-color: #f9f9f9;
160
+ }
161
+
162
+ main table td {
163
+ padding: 5px 0px 5px 5px;
164
+ font-size: 13px;
165
+ }
166
+
167
+ /* delete */
168
+ main table td:last-child {
169
+ width: 80px;
170
+ text-align: right;
171
+ padding-right: 10px;
172
+ }
173
+
174
+ main table td:last-child a {
175
+ text-transform: uppercase;
176
+ font-size: 11px;
177
+ }
178
+
179
+ main > .actions {
180
+ text-align: right;
181
+ margin-top: 20px;
182
+ padding-right: 10px;
183
+ }
184
+
185
+ main > .actions a {
186
+ font-size: 13px;
187
+ }
188
+
189
+ /* systems list */
190
+ .systems {
191
+ margin-bottom: 80px;
192
+ }
193
+
194
+ .systems a {
195
+ display: inline-block;
196
+ background-color: white;
197
+ padding: 10px;
198
+ border-radius: 4px;
199
+ border: 1px solid #ddd;
200
+ margin-right: 20px;
201
+ margin-bottom: 20px;
202
+ }
203
+
204
+ .systems a .screenshot {
205
+ background-repeat: no-repeat;
206
+ background-size: cover;
207
+ background-color: rgb(255, 200, 200);
208
+ }
209
+
210
+ .systems a h1 {
211
+ height: 14px;
212
+ margin-top: 8px;
213
+ font-size: 14px;
214
+ font-weight: 300;
215
+ white-space: nowrap;
216
+ overflow: hidden;
217
+ text-overflow: ellipsis;
218
+ }
219
+
220
+ .systems a p {
221
+ font-size: 11px;
222
+ color: #bbb;
223
+ margin-top: 3px;
224
+ font-weight: 300;
225
+ }
226
+
227
+ .systems.portrait a {
228
+ width: 201px;
229
+ height: 338px;
230
+ }
231
+
232
+ .systems.portrait a .screenshot {
233
+ width: 177px;
234
+ height: 280px;
235
+ }
236
+
237
+ .systems.landscape a {
238
+ width: 300px;
239
+ height: 215px;
240
+ }
241
+
242
+ .systems.landscape a .screenshot {
243
+ width: 280px;
244
+ height: 157px;
245
+ }
246
+
247
+ /* system page */
248
+ #meta {
249
+ margin-bottom: 40px;
250
+ }
251
+
252
+ #meta img {
253
+ display: inline-block;
254
+ vertical-align: top;
255
+ width: 450px;
256
+ margin-right: 30px;
257
+ }
258
+
259
+ #meta dl {
260
+ display: inline-block;
261
+ vertical-align: top;
262
+ width: 300px;
263
+ }
264
+
265
+ #meta dt, #meta dd {
266
+ display: inline-block;
267
+ vertical-align: top;
268
+ margin-bottom: 10px;
269
+ font-size: 13px;
270
+ }
271
+
272
+ #meta dt {
273
+ width: 100px;
274
+ font-weight: 600;
275
+ }
276
+
277
+ #meta dd {
278
+ width: 190px;
279
+ line-height: 16px;
280
+ }
281
+
282
+ article.graph {
283
+ display: inline-block;
284
+ margin-bottom: 20px;
285
+ margin-right: 20px;
286
+ }
287
+
288
+ article.graph h2 {
289
+ padding-left: 55px;
290
+ margin-bottom: 20px;
291
+ }
292
+
293
+ /* metric collection errors */
294
+ #errors {
295
+ padding-top: 20px;
296
+ }
297
+
298
+ #errors > p {
299
+ font-size: 13px;
300
+ }
301
+
302
+ #errors > h1 {
303
+ font-size: 17px;
304
+ margin-top: 50px;
305
+ margin-bottom: 10px;
306
+ border-bottom: 1px solid #ddd;
307
+ padding-bottom: 4px;
308
+ }
309
+
310
+ #errors ul {
311
+ list-style-type: none;
312
+ }
313
+
314
+ #errors li {
315
+ margin-bottom: 15px;
316
+ }
317
+
318
+ #errors li h1 {
319
+ font-size: 13px;
320
+ font-weight: 600;
321
+ margin-bottom: 3px;
322
+ line-height: 16px;
323
+ }
324
+
325
+ #errors li p {
326
+ font-size: 12px;
327
+ }
328
+
329
+ #errors div {
330
+ text-align: right;
331
+ }
332
+
333
+ #errors form {
334
+ display: inline-block;
335
+ margin-top: 10px;
336
+ }
337
+
338
+ /* alerts */
339
+ .alert {
340
+ margin-bottom: 30px;
341
+ }
342
+
343
+ .alert h1 {
344
+ margin-bottom: 15px;
345
+ }
346
+
347
+ .alert ul {
348
+ list-style-type: none;
349
+ padding: 0px;
350
+ font-size: 14px;
351
+ }
352
+
353
+ .alert ul li {
354
+ padding-left: 24px;
355
+ position: relative;
356
+ }
357
+
358
+ .alert ul li::before {
359
+ position: absolute;
360
+ left: 0px;
361
+ top: 1px;
362
+ content: ' ';
363
+ width: 15px;
364
+ height: 15px;
365
+ border-radius: 15px;
366
+ }
367
+
368
+ .alert.warning ul li::before {
369
+ background-color: yellow;
370
+ }
371
+
372
+ .alert.error ul li::before {
373
+ background-color: red;
374
+ }
375
+
376
+ .alert.notice ul li::before {
377
+ background-color: blue;
378
+ }
379
+
380
+ .alert p {
381
+ font-size: 13px;
382
+ color: #999;
383
+ }
384
+
385
+ /* commands / actions */
386
+ .command {
387
+ margin-top: 20px;
388
+ }
389
+
390
+ .command h1 {
391
+ margin-bottom: 3px;
392
+ font-size: 16px;
393
+ }
394
+
395
+ .command > p {
396
+ font-size: 12px;
397
+ line-height: 16px;
398
+ color: #777;
399
+ margin-bottom: 20px;
400
+ }
401
+
402
+ #add-command {
403
+ font-size: 13px;
404
+ margin-top: 30px;
405
+ }
406
+
407
+ #add-command select {
408
+ margin-left: 7px;
409
+ }
410
+
411
+ #existing-actions > p {
412
+ font-size: 13px;
413
+ }
414
+
415
+ #existing-actions #command-col {
416
+ width: 160px;
417
+ }
418
+
419
+ #existing-actions #completed-col {
420
+ width: 180px;
421
+ }
422
+
423
+ #existing-actions #delete-col {
424
+ width: 60px;
425
+ }
426
+
427
+ #system-nav a {
428
+ font-size: 13px;
429
+ padding: 8px 15px 10px 15px;
430
+ display: inline-block;
431
+ border-top-left-radius: 4px;
432
+ border-top-right-radius: 4px;
433
+ }
434
+
435
+ #system-nav a.selected {
436
+ background-color: white;
437
+ }
438
+
439
+ #system-nav a.has-errors {
440
+ color: red;
441
+ }
442
+
443
+ .system-panel {
444
+ border-top-left-radius: 0px;
445
+ border-top-right-radius: 0px;
446
+ }
447
+
448
+ #metrics {
449
+ padding-top: 40px;
450
+ }
451
+
452
+ #actions {
453
+ padding-top: 20px;
454
+ }
455
+
456
+ #actions form.command {
457
+ background-color: #fbfbfb;
458
+ border: 1px solid #eee;
459
+ padding: 15px 20px;
460
+ border-radius: 4px;
461
+ }