aeternitas_web_ui 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +38 -0
- data/Rakefile +33 -0
- data/app/assets/config/aeternitas_web_ui_manifest.js +2 -0
- data/app/assets/images/aeternitas/web_ui/DataTables-1.10.15/images/sort_asc.png +0 -0
- data/app/assets/images/aeternitas/web_ui/DataTables-1.10.15/images/sort_asc_disabled.png +0 -0
- data/app/assets/images/aeternitas/web_ui/DataTables-1.10.15/images/sort_both.png +0 -0
- data/app/assets/images/aeternitas/web_ui/DataTables-1.10.15/images/sort_desc.png +0 -0
- data/app/assets/images/aeternitas/web_ui/DataTables-1.10.15/images/sort_desc_disabled.png +0 -0
- data/app/assets/images/aeternitas/web_ui/logo_large.png +0 -0
- data/app/assets/images/aeternitas/web_ui/logo_small.png +0 -0
- data/app/assets/javascripts/aeternitas/web_ui/Chart.min.js +14 -0
- data/app/assets/javascripts/aeternitas/web_ui/aeternitas_web_ui.js +135 -0
- data/app/assets/javascripts/aeternitas/web_ui/datatables.min.js +248 -0
- data/app/assets/javascripts/aeternitas/web_ui/jquery-3.2.1.min.js +4 -0
- data/app/assets/javascripts/aeternitas/web_ui/moment.min.js +7 -0
- data/app/assets/stylesheets/aeternitas/web_ui/aeternitas_web_ui.css.scss +181 -0
- data/app/assets/stylesheets/aeternitas/web_ui/datatables.min.css +21 -0
- data/app/assets/stylesheets/aeternitas/web_ui/normalize.css +427 -0
- data/app/assets/stylesheets/aeternitas/web_ui/spectre-icons.min.css +1 -0
- data/app/assets/stylesheets/aeternitas/web_ui/spectre.min.css +1 -0
- data/app/controllers/aeternitas/web_ui/application_controller.rb +13 -0
- data/app/controllers/aeternitas/web_ui/dashboard_controller.rb +35 -0
- data/app/controllers/aeternitas/web_ui/pollables_controller.rb +54 -0
- data/app/helpers/aeternitas/web_ui/application_helper.rb +28 -0
- data/app/views/aeternitas/web_ui/dashboard/error.html.erb +9 -0
- data/app/views/aeternitas/web_ui/dashboard/index.html.erb +128 -0
- data/app/views/aeternitas/web_ui/pollables/index.html.erb +31 -0
- data/app/views/aeternitas/web_ui/pollables/show.html.erb +159 -0
- data/app/views/layouts/aeternitas/web_ui/application.html.erb +46 -0
- data/app/views/partials/_timepicker.html.erb +39 -0
- data/config/routes.rb +15 -0
- data/lib/aeternitas/web_ui.rb +12 -0
- data/lib/aeternitas/web_ui/color_generator.rb +32 -0
- data/lib/aeternitas/web_ui/dashboard_statistics.rb +96 -0
- data/lib/aeternitas/web_ui/engine.rb +15 -0
- data/lib/aeternitas/web_ui/pollable_statistics.rb +148 -0
- data/lib/aeternitas/web_ui/pollables_index_statistics.rb +36 -0
- data/lib/aeternitas/web_ui/version.rb +5 -0
- data/lib/aeternitas_web_ui.rb +1 -0
- data/spec/aeternitas/web_ui/dashboard_statistics_spec.rb +5 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/config/manifest.js +5 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/javascripts/cable.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/jobs/application_job.rb +2 -0
- data/spec/dummy/app/mailers/application_mailer.rb +4 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/models/website.rb +7 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +38 -0
- data/spec/dummy/bin/update +29 -0
- data/spec/dummy/bin/yarn +11 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/config/application.rb +18 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/cable.yml +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +54 -0
- data/spec/dummy/config/environments/production.rb +91 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/aeternitas.rb +10 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/spec/dummy/config/initializers/assets.rb +14 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/puma.rb +56 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config/secrets.yml +32 -0
- data/spec/dummy/config/spring.rb +6 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20170615142109_add_aeternitas.rb +25 -0
- data/spec/dummy/db/migrate/20170615150918_create_websites.rb +9 -0
- data/spec/dummy/db/schema.rb +43 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +3875 -0
- data/spec/dummy/log/test.log +1134 -0
- data/spec/dummy/package.json +5 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/spec/dummy/public/apple-touch-icon.png +0 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/spec/factories/websites.rb +5 -0
- data/spec/dummy/spec/models/website_spec.rb +5 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-k/-kLXhrSxIY5sbCDe0QBCbBd8WJSNrVJbZ7zFuA6aV4U.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-o/-obCtmhn01hgLEZXS6Mw25q3KANNcbMicP6RfnJqs-c.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/12/12IM8C9fRRfEUMsNUOXTHDTcru6i-Cn9j9i70DXn-y0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1k/1kk-XGxW3hIN5oXoLScKXylNwqB0H99cxBkCcAGGrp8.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/44/44qYkKHvn72T102PBqbRG2moTko92VIJpzYabJfeS6U.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4A/4Abfy3Y5RDhRNeRqhLr4Mk8q91QThKHAcGVU0tGkFoY.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6V/6VIyPljLtQuKrTykLjAx_XoDBfIcX_HOE2yBu9uOSdU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7F/7F9hVvEvdbYDKockjGlOS5MNzdaOmQUMR1k6zB2mmdw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7t/7t3cb8FP9pKH0x6u5zztQaomVd_Ea2byod1xi3z0ND8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9j/9ji3yCrDj1gcUeowiWgvRyr0dM3XZVAwUqOemFCBnPM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9m/9m0b-POOO30jzasjiR7FAaKfuBrmA25ZBDMVfJiMSnI.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/9p/9p_Eg3Rz6Tg7FnFaZ1p-oDm974o0hMPi0dMvHZgwyWk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AW/AWlTynWy_guoR1g4VZ57C4AWiWsEK7uayom46TLjhcA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ac/Ac0qkqaGdxPQD_G88eJzIN5NtBFVhj6HZlXu2kNzeLo.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ba/BaJebplv72wr47Itakhw4S4YXBkHcWjd7ga6K4horSA.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bx/BxEh0bLBiwmzYwWgq0oAcd4yHeJsO_9u-uKv5SZrFTI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/C7/C7HMichzQB_h5pGIx2VspERTa2o5A_X7fLs5FgjxHC8.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/D6/D6gFB9w6_7cFtMEZ4KaYH0fsxUa0Tp7IAsv9UYdgImA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DA/DAtiPOWz7Ioln7UsNTQpNvbSucdOkR5AZLJAunoL_80.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DE/DEHQF18h-J2qGdoGaqqi0_FAcgete1n9NKC4OPvXmB8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dy/DyrUJnjxQEOstDmLQuJzLbs8GhMAPkyUJU4L9x_b1gM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EI/EIURBB_96RWNA74XjxVtVxLU0ERRasHa2Pg16VWng6w.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EM/EMc2SkLN3MQqodjFDJpj2D8YXedVeTpK2uLlSmqVbss.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ey/Ey6Nnx6_lcXWynu4KI-tMB-ZOT2fliARz_CtWN-XhGE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ez/EzuIevPsEIUN4VQW4wV3QYbZd04MTyKRoIHgjOpVSAA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Fg/FgCsX1kws9NdVveaMR1jeww7ipJ_lIOdeCEaVHPVbDc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Fr/Fr-uXijwIrM12om45Lmorl7eDbwi0nPVdZujOGc1LFc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/GQ/GQB9ipr-t7FLwl70MULPxFF4Xp6wRFt2lzXXaIWgys0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HC/HCDOUd7-S45aJ_PjVAC_Vmjyud3i1aQv4cE3t9_Z3Dw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HF/HFaRtgCpi84vLJppHFyBIzaQ5p97APFOGvTJCw7dUhc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/HV/HVZoJobEN5J9PqE1WbEkEt0FemX522vUrFtTHBc3EEI.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hc/HcvaIQ95E3lmzXC6OMHd0Of4ydqPVSjPa4wYkqZQao8.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Hq/HqtzpmawkDHbZ2yivmWYT8_0VnM3oyZejJLXkmuP1UU.cache +4 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ia/Iaw1i5cgoawU32A2pr3v2kDe6Gc0poNyqDsHW0trtvw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JO/JOlHI2qJ5RtGMZTywiAJXWotQ7DYqkPQr1rdAdRB104.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/J_/J_9SEIiFKLoQi7TOv5_4Fw5h6-JxqgigRgR-PjsLaEU.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KBHvjzjkAKo6iwHDC5yVw3biGOheuuN7whkwZNFw3-M.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Kq/Kq_ZJuG7iw-ig4qchZfLnxUdf07QHYz8H01Yp_pHF5o.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Kq/Kqe1JPkLvSaZDqECSzYbVQrphMS6gT7QkYBMdwDNkq4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/L0/L0uas8TUBH9BXOmg8zWTeUBgwu5vFy-bGc0k03zsPq0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ld/LdROBTVvr8zXxr3OPCMHA_3AywvZu7Cez7f_z5XYHI0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Lp/LpyCVxq18ir1EsiBSXY-2BdAagH6hRFOgQWmWrE727I.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/M7/M7oeSeUboehmqBTMJOUCtHIjVLwI1oBmq3xheUYdA2k.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MV/MVXPEOUdfwuem0_FuXAsqoIVmgyXSbmJEK2LioWxWoY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/NE/NE69Jbtcym4T0LF0dzkyARWKFNjG2zdV8Kxn4Oksq8M.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Na/Nas7iovPFfI0gYVOEu4l0hwX0TQfVNs2erUEu9jvHmA.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Oe/OeZruz7mEg_RWeO8mqVMd1ggikG3Il2VIhkllfPcYuE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PH/PHzxpfmyooBZxrJfKGpO230GdqvGWVJ8DYGGY623n2s.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Pg/PguSb9Mfs0IjD3PVAt9qOEvQcMLaChTO257SMo5okN0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Pz/Pzo2OlZ5UJZpc3fiUsgwAY1rfvG5bt9Ky6cgN2K2B5Y.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Qr/QrfetM8gwBYH682Y1WDaWsoMd-vp6bMbMgqfR0k0KQw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RB/RBMwsNLHOEUBuomIxdt5gNL9IXQ4gWKL_0UYPj9RU7Y.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RK/RK-iGPd8VXOujRtH6ZlLNALBwzkLRfAYo5iSBFiTgAE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/S7/S7-GTzruCxIgO_bueFO_IN7OURaoaUqIaJQ3N80AN2w.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/T7/T73Jjweh2QTR_C-gkYCIMWgTFBZ8ldUNWH5uHlRK3J4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Tm/TmWe7cAtOeFgAuw9Vt06ljOiT684y0U3t9oBhB_FKyU.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V2/V2-0Al52o42xi5FXWm3IGV7JUqaAxfitStrGQ7H433s.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V6/V6Vsl1RBICP4cZ5t67Eb1mgxQK3rlYybgeVNUr-DKeg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VE/VERrn9nvVrihdCYH2DvS_vcKOWda9wBeZa8q5r3Icdc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VP/VPJUlXKOX1Eghq4Ort11OUnAzXwGeWH3AJNVhENQi8A.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WD/WDmWIfKziP6Sqlk3O3X_UjMLBE3K5TjPOqGtKd4L3mg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WI/WIycF4IotUXhmZ4hivZuDwg-S0YoIwSV3NmXSvQ9xZ8.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WR/WRwbZt7M1h7_Slke5TBcmDdQR20PbTmiJU0s09m-Zs4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wd/Wda4pcAw7hsQopFe_DdtA3MIzyRqXtvE5r6tLOyNlzs.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ww/Ww54EgV0j7JCXs_EEDkk4vA4D5n0ymQPwaEs9Ar7srI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xj/Xj5lkKia8d1pojluzf8ynxvHol1h-zL9qUaku0TXwTs.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YA/YAcxnT9igycEbRfrzhOc8-9tG58hhMH1k56TCKb5F18.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_2/_2m23tk1LD8fj62Zqm6QScDhq-X1gpV-dEgciUCQ8L4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_2/_2oXM4jNZR8u1y-8AuJJpkAqwSSQxWQyvYipp-yB6D4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_P/_PA4t_tY_hOfyxIMqlx1xkZpkRTrSYEsd8BMzNIQxps.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_V/_VZBKpxURis3xucwR1V-zxi4M3UBHe8or9OFVGRkxSA.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_t/_tIVtc0nLinTijInoofU90hhTpgmQipdkviPWN0hErE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/a-/a-rO42r8yB7agwCLmLqO-QGUJLZ3UGPtuAoyGwstIy4.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/a4/a4FH1D1cwC9PSKViAq8eiVbSMP4n8qJYTatDCApEUVY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ah/ahn0zY8HSOlD-5IKfi1WHXINw_rTYY5W0agkOVUZhz4.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bS/bSpBaFGvDXHNCANj1EExhQckeR1T1QiL5HlPhpnl9qA.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/b_/b_Itlk9QZZd7Rvf8kcA4yLP1R5Acu7jB-m1xQiSU0qE.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bc/bc-PDjPUgmH2SvVE-Y5Nhz9BIegrk_40lJX6G36PUJU.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bx/bx37wPPuhr8859u843Z-C4S40zMtQCq-Wxnj30FcWpw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/c5/c5hmYyFjdofhyjiRT_sxXZfsTVUcn4o3ciS0JMXd3VA.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cc/ccUadB1Y9f684soDnoWJE2voDSkUQvZJ1SB4vrdfJ9E.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/di/diUzyBgz61dxZh-7Wp74bamL6qu-_Anz3eg6_wLYkPw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/e2/e2Ylc5Zpg2LhF0OIPOGsNV0AHm93ECtnhy9pVj356ec.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eY/eYLGncKw3t1qT37TJvSe4WF9h9uSq4OnBX4M2FjxjgM.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/f2/f2XZ7dioB3GDoh0A_ohtmVBxyuTHOJ8UkukUUkUKLLA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fG/fGaY_ebzsFSKi88S8ohAH5jg4Tql_uIwTlp1wHnQo4k.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gr/grLncMCPWjG-0RQaaVsaeFe1cW4PdMdMBZ8YMjrIJJA.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hF/hF2Es43rly3EGSdPsQ16c6np9ZOQSN2-qwVBA0zfAhQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/hi/hin5x482VtKk-L0Jl3gsi9OFc_1VQwBBwut6BgpRioc.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iJ/iJtagkilJK8mzrisxAcq1QOLmKXkL7rZJq3weCsHk2o.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jb/jbAwfZkknwCSaOfeOAtzKZvAuJ_tazQWFbpKg4Om7pI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jv/jvQdoopzi45RJN2hQqE5yaMDJHeER6VeyIB0gkIJrMg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kP/kP3QwEiqwmtW13ebsUP5_Y-22XAkcqTa0l-NcNPKv14.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kP/kPLNtXUpN1Kil4lHmXuTV_wrVwssGteoHkqyEBMnZX8.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kX/kXfIWl2Z5OuZRAU09ocSvyHkxtlp1ndpQWChoeG-wnY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lt/ltzCXMQjQ3RFVpe85xy7b8eBynhvpsRL2_qW4--561Y.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mX/mX1nlsL_SWOB4y22W5FheRX0YEONKyOY7xUeIvRiHco.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mY/mY_p2GAwu3hcYTfl1rhEd2MlQ_CjO0xeWL5Qrt3xGBo.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mk/mkSTCGVDldtV_xWnAzngru6s8S4JnBm1XAaP1uoJyUI.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nU/nUrZgQKv-MhF36iJbrRoSbxzHZCeljQWFb_hMnzRuvQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/n_/n_xYqQYhwEMQknb3jFQnjlxxBE9TzMNHCdJ-bEyZFIw.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nx/nxTv3sKVUQZADJyM3dPaVmUA78MIsMLD_K279yN_GsI.cache +2 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oH/oHUxht4smsuHzMVe-1pNpSjZcD2bGauh5ryDZLdeovE.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/q6/q6mLH7WU7lvJ3RHFZRHWpi6JFgOe8e_25dqXQMcQLHc.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rS/rS6FBiQPDC8x7vLvgojoUd0eMpLTVvmg0Lz8qkc8MT0.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tK/tKTjnoxmWbbw_M7p8NUiVBP6OhgmWKSZ5iArtycjzPg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uG/uGmGo7nxtS613RUuCbgiYqjhkMBFXbtgn3yRFnHeLq8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uQ/uQNb4N1-4Q4P4fcVRkzBOaRGMULQHzBgrO7Z5Fh7DS0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vF/vFuo6Pb49ruU9pthFcaLPnf9BIgxsAj6Q4p-_6Heh6E.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ve/ve7bbMjc3AE8SF89fjquR85_YagiRCmi4Zz6jB98OV0.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wf/wfjV4MWCZieAHBa7nUJFYc1IbECuuoPrM89dS-oejKA.cache +4 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wm/wmTgPVHe2nx7h_J_qR2uAWWoBfw4OrOTmBaCTxm-NxQ.cache +3 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xQ/xQ82LRE4DPMiX_urd6hsUFpcTDkv8NuxSjcNelBATc4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xi/xi9cKsTUSk-kcLGlDBjtjRLJsMa_noMLO49FHtWz7fM.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xv/xvddxGh623sMMUFppu7Qh2WX_cOJTH3OeEMishsijD4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ym/ymUWW3E0GmBz-CBtgQ2Z4C--EZ4vBzXEQGP8P3tWIKU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zC/zCrKEzgZARfJPuDX9jFzxPskAlcimaeRk5YTQ00RiPo.cache +1 -0
- data/spec/spec_helper.rb +18 -0
- metadata +542 -0
@@ -0,0 +1,46 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<title>Æternitas Dashboard</title>
|
6
|
+
<%= stylesheet_link_tag 'aeternitas/web_ui/aeternitas_web_ui' %>
|
7
|
+
<%= javascript_include_tag 'aeternitas/web_ui/aeternitas_web_ui' %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<header class="page-header">
|
11
|
+
<section class="container grid-1280">
|
12
|
+
<nav class="navbar">
|
13
|
+
<section class="navbar-section">
|
14
|
+
<%= link_to root_url, class: 'btn btn-link' do %>
|
15
|
+
<%= image_tag "aeternitas/web_ui/logo_large.png", class: "navbar-logo" %>
|
16
|
+
<% end %>
|
17
|
+
<%= link_to 'Dashboard', root_url, class: 'btn btn-link' %>
|
18
|
+
<%= link_to 'Pollables', pollables_path, class: 'btn btn-link' %>
|
19
|
+
</section>
|
20
|
+
<section class="navbar-section">
|
21
|
+
</section>
|
22
|
+
</nav>
|
23
|
+
</section>
|
24
|
+
</header>
|
25
|
+
<section class="navbar-spacer"> </section>
|
26
|
+
|
27
|
+
<div class="content-wrapper">
|
28
|
+
<%= yield %>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<footer>
|
32
|
+
<div class="container grid-1280">
|
33
|
+
<p>
|
34
|
+
<a href="https://github.com/FHG-IMW/aeternitas"> Github </a>
|
35
|
+
|
|
36
|
+
Æternitas Version <%= Aeternitas::VERSION %>
|
37
|
+
|
|
38
|
+
UI Version <%= Aeternitas::WebUi::VERSION %>
|
39
|
+
</p>
|
40
|
+
<p>
|
41
|
+
Licensed under the <a href="https://github.com/FHG-IMW/aeternitas/blob/master/LICENSE.txt" >MIT License</a>.
|
42
|
+
</p>
|
43
|
+
</div>
|
44
|
+
</footer>
|
45
|
+
</body>
|
46
|
+
</html>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<div class="timepicker">
|
2
|
+
<div class="timepicker-header">
|
3
|
+
<h6>Time Range: </h6>
|
4
|
+
<strong> 1 day </strong>
|
5
|
+
<i class="icon icon-arrow-down float-right"></i>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
|
9
|
+
<div class="timepicker-body closed">
|
10
|
+
<h6>Ending Now</h6>
|
11
|
+
<hr>
|
12
|
+
<ul class="step">
|
13
|
+
<li class="step-item" data-range="30">
|
14
|
+
<a href="#">30 minutes</a>
|
15
|
+
</li>
|
16
|
+
<li class="step-item" data-range="60">
|
17
|
+
<a href="#">1 hour</a>
|
18
|
+
</li>
|
19
|
+
<li class="step-item"data-range="180">
|
20
|
+
<a href="#" >3 hours</a>
|
21
|
+
</li>
|
22
|
+
<li class="step-item" data-range="360">
|
23
|
+
<a href="#">6 hours</a>
|
24
|
+
</li>
|
25
|
+
<li class="step-item" data-range="720">
|
26
|
+
<a href="#">12 hours</a>
|
27
|
+
</li>
|
28
|
+
<li class="step-item active" data-range="1440">
|
29
|
+
<a href="#">1 day</a>
|
30
|
+
</li>
|
31
|
+
<li class="step-item" data-range="4320">
|
32
|
+
<a href="#">3 days</a>
|
33
|
+
</li>
|
34
|
+
<li class="step-item" data-range="20160">
|
35
|
+
<a href="#">2 weeks</a>
|
36
|
+
</li>
|
37
|
+
</ul>
|
38
|
+
</div>
|
39
|
+
</div>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Aeternitas::WebUi::Engine.routes.draw do
|
2
|
+
resource :dashboard, controller: :dashboard, only: [:index] do
|
3
|
+
get 'polls_24h', on: :collection
|
4
|
+
get 'future_polls', on: :collection
|
5
|
+
get 'pollable_growth', on: :collection
|
6
|
+
end
|
7
|
+
|
8
|
+
resources :pollables, only: [:index, :show] do
|
9
|
+
get :timeline, on: :member
|
10
|
+
get :execution_time, on: :member
|
11
|
+
get :data_growth, on: :member
|
12
|
+
end
|
13
|
+
|
14
|
+
root 'dashboard#index'
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'aeternitas/web_ui/engine'
|
2
|
+
require 'aeternitas/web_ui/color_generator'
|
3
|
+
require 'aeternitas/web_ui/dashboard_statistics'
|
4
|
+
require 'aeternitas/web_ui/pollable_statistics'
|
5
|
+
require 'aeternitas/web_ui/pollables_index_statistics'
|
6
|
+
require 'aeternitas/web_ui/version'
|
7
|
+
|
8
|
+
module Aeternitas
|
9
|
+
module WebUi
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'colorable'
|
2
|
+
|
3
|
+
module Aeternitas
|
4
|
+
module WebUi
|
5
|
+
class ColorGenerator
|
6
|
+
def initialize(n, baseColor = "#C25B56")
|
7
|
+
@counter = 0
|
8
|
+
@base_color = Colorable::Color.new(baseColor).hsb
|
9
|
+
@step = 240.0 / n
|
10
|
+
@colors = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def next
|
14
|
+
generate_color(@counter)
|
15
|
+
@counter += 1
|
16
|
+
current
|
17
|
+
end
|
18
|
+
|
19
|
+
def current
|
20
|
+
@colors[@counter] || generate_color(@counter)
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def generate_color(i)
|
25
|
+
next_hue = @base_color[0] + (@step * (i % 240.0))
|
26
|
+
next_color = Colorable::Color.new(Colorable::HSB.new(next_hue, @base_color[1], @base_color[2]))
|
27
|
+
@colors[i] = next_color
|
28
|
+
next_color
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module Aeternitas
|
2
|
+
module WebUi
|
3
|
+
module DashboardStatistics
|
4
|
+
def self.enqueued
|
5
|
+
Aeternitas::PollableMetaData.enqueued.count
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.count_polls_24h
|
9
|
+
Aeternitas::Metrics.polls(Pollable, from: 24.hours.ago, to: Time.now, resolution: :day).map {|v| v[:count]}.sum
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.count_failed_polls_24h
|
13
|
+
Aeternitas::Metrics.failed_polls(Pollable, from: 24.hours.ago, to: Time.now, resolution: :day).map {|v| v[:count]}.sum
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.polls_24h
|
17
|
+
polls = Aeternitas::Metrics.polls(Pollable, from: 24.hours.ago, to: Time.now, resolution: :hour)
|
18
|
+
failures = Aeternitas::Metrics.failed_polls(Pollable, from: 24.hours.ago, to: Time.now, resolution: :hour)
|
19
|
+
|
20
|
+
{
|
21
|
+
labels: polls.map {|v| v[:timestamp].strftime("%H:%M")},
|
22
|
+
datasets: [
|
23
|
+
{
|
24
|
+
label: '# Polls',
|
25
|
+
data: polls.map {|v| v[:count]},
|
26
|
+
borderColor: "#96C0CE",
|
27
|
+
backgroundColor: "rgba(171,221,235,0.5)"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
label: '# Failures',
|
31
|
+
data: failures.map {|v| v[:count]},
|
32
|
+
borderColor: "#C25B56",
|
33
|
+
backgroundColor: "rgba(255,116,111,0.5)"
|
34
|
+
}
|
35
|
+
]
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.future_polls
|
40
|
+
labels = []
|
41
|
+
datapoints = Hash.new { |k, v| k[v] = Array.new(7, 0) }
|
42
|
+
|
43
|
+
(Date.today..6.days.from_now.to_date).each_with_index do |day, i|
|
44
|
+
labels[i] = day.strftime("%b %d")
|
45
|
+
Aeternitas::PollableMetaData
|
46
|
+
.where(next_polling: (day.beginning_of_day..day.end_of_day))
|
47
|
+
.group(:pollable_class)
|
48
|
+
.count
|
49
|
+
.each_pair { |pollable, count| datapoints[pollable][i] = count }
|
50
|
+
end
|
51
|
+
|
52
|
+
colors = ColorGenerator.new(datapoints.count)
|
53
|
+
|
54
|
+
{
|
55
|
+
labels: labels,
|
56
|
+
datasets: datapoints.map do |pollable, data|
|
57
|
+
{
|
58
|
+
label: pollable,
|
59
|
+
data: data,
|
60
|
+
backgroundColor: colors.next.hex,
|
61
|
+
borderColor: colors.current.hex
|
62
|
+
}
|
63
|
+
end
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.pollable_growth
|
68
|
+
pollable_classes = Aeternitas::PollableMetaData.distinct(:pollable_class).pluck(:pollable_class)
|
69
|
+
range = (7.days.ago.to_date..Date.today)
|
70
|
+
|
71
|
+
colors = ColorGenerator.new(pollable_classes.count)
|
72
|
+
|
73
|
+
datasets = pollable_classes.map do |type|
|
74
|
+
values = Aeternitas::Metrics.pollables_created(
|
75
|
+
type.constantize,
|
76
|
+
from: range.begin.beginning_of_day,
|
77
|
+
to: range.end.end_of_day,
|
78
|
+
resolution: :day
|
79
|
+
).map { |v| v[:count] }
|
80
|
+
|
81
|
+
{
|
82
|
+
label: type,
|
83
|
+
data: values,
|
84
|
+
borderColor: colors.next.hex,
|
85
|
+
backgroundColor: colors.current.hex
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
89
|
+
{
|
90
|
+
labels: range.to_a.map { |date| date.strftime("%B %d") },
|
91
|
+
datasets: datasets
|
92
|
+
}
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Aeternitas
|
2
|
+
module WebUi
|
3
|
+
class Engine < ::Rails::Engine
|
4
|
+
isolate_namespace Aeternitas::WebUi
|
5
|
+
|
6
|
+
initializer 'aeternitas.assets.precompile' do |app|
|
7
|
+
app.config.assets.precompile += [
|
8
|
+
'aeternitas/web_ui/aeternitas_web_ui.js',
|
9
|
+
'aeternitas/web_ui/aeternitas_web_ui.css',
|
10
|
+
'aeternitas/web_ui/logo_large.png'
|
11
|
+
]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
module Aeternitas
|
2
|
+
module WebUi
|
3
|
+
module PollableStatistics
|
4
|
+
def self.enqueued(pollable)
|
5
|
+
Aeternitas::PollableMetaData
|
6
|
+
.where(pollable_class: pollable.name)
|
7
|
+
.enqueued
|
8
|
+
.count
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.deactivated(pollable)
|
12
|
+
Aeternitas::PollableMetaData
|
13
|
+
.where(pollable_class: pollable.name)
|
14
|
+
.deactivated
|
15
|
+
.count
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.guard_locked_ratio(pollable)
|
19
|
+
Aeternitas::Metrics.guard_locked_ratio(
|
20
|
+
pollable,
|
21
|
+
from: 24.hours.ago,
|
22
|
+
to: Time.now,
|
23
|
+
resolution: :hour
|
24
|
+
).avg
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.timeline(pollable, from, to)
|
28
|
+
resolution = get_resolution(from, to)
|
29
|
+
polls = Aeternitas::Metrics.polls(pollable, from: from, to: to, resolution: resolution)
|
30
|
+
success = Aeternitas::Metrics.successful_polls(pollable, from: from, to: to, resolution: resolution)
|
31
|
+
failures = Aeternitas::Metrics.failed_polls(pollable, from: from, to: to, resolution: resolution)
|
32
|
+
locks = Aeternitas::Metrics.guard_locked(pollable, from: from, to: to, resolution: resolution)
|
33
|
+
|
34
|
+
{
|
35
|
+
labels: polls.map {|v| v[:timestamp].strftime("%B %d. %H:%M")},
|
36
|
+
datasets: [
|
37
|
+
{
|
38
|
+
label: '# Polls',
|
39
|
+
data: polls.map {|v| v[:count]},
|
40
|
+
borderColor: "#96C0CE",
|
41
|
+
backgroundColor: "rgba(171,221,235,0.5)",
|
42
|
+
fill: false,
|
43
|
+
type: 'line'
|
44
|
+
},
|
45
|
+
{
|
46
|
+
label: '# Successfull Polls',
|
47
|
+
data: success.map {|v| v[:count]},
|
48
|
+
borderColor: "#32b643",
|
49
|
+
backgroundColor: "rgba(50,182,67,0.5)",
|
50
|
+
},
|
51
|
+
{
|
52
|
+
label: '# Failures',
|
53
|
+
data: failures.map {|v| v[:count]},
|
54
|
+
borderColor: "#C25B56",
|
55
|
+
backgroundColor: "rgba(255,116,111,0.5)",
|
56
|
+
},
|
57
|
+
{
|
58
|
+
label: '# Guard Locked',
|
59
|
+
data: locks.map {|v| v[:count]},
|
60
|
+
borderColor: "#ffd59c",
|
61
|
+
backgroundColor: "rgba(255,213,156,0.5)",
|
62
|
+
}
|
63
|
+
]
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.execution_time(pollable, from, to)
|
68
|
+
resolution = get_resolution(from, to)
|
69
|
+
polling_time = Aeternitas::Metrics.execution_time(pollable, from: from, to: to, resolution: resolution)
|
70
|
+
|
71
|
+
{
|
72
|
+
labels: polling_time.map {|v| v[:timestamp].strftime("%B %d. %H:%M")},
|
73
|
+
datasets: [
|
74
|
+
{
|
75
|
+
label: 'Average',
|
76
|
+
data: polling_time.map {|v| (v[:avg] * 1000).to_i},
|
77
|
+
borderColor: "#96C0CE",
|
78
|
+
backgroundColor: "rgba(171,221,235,0.5)",
|
79
|
+
fill: false,
|
80
|
+
type: 'line'
|
81
|
+
},
|
82
|
+
{
|
83
|
+
label: 'Minimum',
|
84
|
+
data: polling_time.map {|v| (v[:min] * 1000).to_i},
|
85
|
+
borderColor: "#32b643",
|
86
|
+
backgroundColor: "rgba(50,182,67,0.5)",
|
87
|
+
fill: false,
|
88
|
+
type: 'line'
|
89
|
+
},
|
90
|
+
{
|
91
|
+
label: 'Maximum',
|
92
|
+
data: polling_time.map {|v| (v[:max] * 1000).to_i},
|
93
|
+
borderColor: "#ffd59c",
|
94
|
+
backgroundColor: "rgba(255,213,156,0.5)",
|
95
|
+
fill: false,
|
96
|
+
type: 'line'
|
97
|
+
}
|
98
|
+
]
|
99
|
+
}
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.data_growth(pollable, from, to)
|
103
|
+
resolution = get_resolution(from, to)
|
104
|
+
pollables_created = Aeternitas::Metrics.pollables_created(pollable, from: from, to: to, resolution: resolution)
|
105
|
+
sources_created = Aeternitas::Metrics.sources_created(pollable, from: from, to: to, resolution: resolution)
|
106
|
+
|
107
|
+
{
|
108
|
+
labels: pollables_created.map { |v| v[:timestamp].strftime('%B %d. %H:%M') },
|
109
|
+
datasets: [
|
110
|
+
{
|
111
|
+
label: "Created #{pollable.name.pluralize}",
|
112
|
+
data: pollables_created.map { |v| v[:count] },
|
113
|
+
borderColor: '#96C0CE',
|
114
|
+
backgroundColor: 'rgba(171,221,235,0.5)',
|
115
|
+
fill: false,
|
116
|
+
type: 'line'
|
117
|
+
},
|
118
|
+
{
|
119
|
+
label: "Created Sources",
|
120
|
+
data: sources_created.map { |v| v[:count] },
|
121
|
+
borderColor: "#32b643",
|
122
|
+
backgroundColor: "rgba(50,182,67,0.5)",
|
123
|
+
fill: false,
|
124
|
+
type: 'line'
|
125
|
+
}
|
126
|
+
]
|
127
|
+
}
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.deactivated_pollables(pollable)
|
131
|
+
Aeternitas::PollableMetaData.deactivated.includes(:pollable).where(pollable_class: pollable.name)
|
132
|
+
end
|
133
|
+
|
134
|
+
def self.get_resolution(from, to)
|
135
|
+
case (to.to_time - from.to_time)
|
136
|
+
when 0.hours..2.hours
|
137
|
+
:minute
|
138
|
+
when 2.hours..12.hours
|
139
|
+
:ten_minutes
|
140
|
+
when 12.hours..3.days
|
141
|
+
:hour
|
142
|
+
else
|
143
|
+
:day
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Aeternitas
|
2
|
+
module WebUi
|
3
|
+
module PollablesIndexStatistics
|
4
|
+
def self.available_pollables
|
5
|
+
Aeternitas::PollableMetaData.distinct(:pollable_class).pluck(:pollable_class).map(&:constantize)
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.failure_ratio(pollable)
|
9
|
+
Aeternitas::Metrics.failure_ratio(
|
10
|
+
pollable,
|
11
|
+
from: 24.hours.ago,
|
12
|
+
to: Time.now,
|
13
|
+
resolution: :hour
|
14
|
+
).avg.round(2)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.guard_locked_ratio(pollable)
|
18
|
+
Aeternitas::Metrics.guard_locked_ratio(
|
19
|
+
pollable,
|
20
|
+
from: 24.hours.ago,
|
21
|
+
to: Time.now,
|
22
|
+
resolution: :hour
|
23
|
+
).avg.round(2)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.polls(pollable)
|
27
|
+
Aeternitas::Metrics.polls(
|
28
|
+
pollable,
|
29
|
+
from: 24.hours.ago,
|
30
|
+
to: Time.now,
|
31
|
+
resolution: :hour
|
32
|
+
).map { |v| v[:count] }.sum
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|