aeternitas_web_ui 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (187) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15 -0
  3. data/app/assets/javascripts/aeternitas/web_ui/aeternitas_web_ui.js +1 -0
  4. data/app/assets/javascripts/aeternitas/web_ui/sparkline.js +34 -0
  5. data/app/controllers/aeternitas/web_ui/application_controller.rb +19 -0
  6. data/app/controllers/aeternitas/web_ui/dashboard_controller.rb +26 -12
  7. data/app/controllers/aeternitas/web_ui/pollables_controller.rb +36 -22
  8. data/app/helpers/aeternitas/web_ui/application_helper.rb +13 -7
  9. data/app/views/aeternitas/web_ui/dashboard/future_polls.json.jbuilder +11 -0
  10. data/app/views/aeternitas/web_ui/dashboard/index.html.erb +33 -7
  11. data/app/views/aeternitas/web_ui/dashboard/pollable_growth.json.jbuilder +19 -0
  12. data/app/views/aeternitas/web_ui/dashboard/polls_timeline.json.jbuilder +17 -0
  13. data/app/views/aeternitas/web_ui/pollables/all_pollables.json.jbuilder +13 -0
  14. data/app/views/aeternitas/web_ui/pollables/data_growth.json.jbuilder +21 -0
  15. data/app/views/aeternitas/web_ui/pollables/deactivated_pollables.json.jbuilder +12 -0
  16. data/app/views/aeternitas/web_ui/pollables/execution_time.json.jbuilder +29 -0
  17. data/app/views/aeternitas/web_ui/pollables/index.html.erb +45 -10
  18. data/app/views/aeternitas/web_ui/pollables/show.html.erb +69 -14
  19. data/app/views/aeternitas/web_ui/pollables/timeline.json.jbuilder +33 -0
  20. data/config/routes.rb +3 -1
  21. data/lib/aeternitas/web_ui.rb +1 -3
  22. data/lib/aeternitas/web_ui/version.rb +1 -1
  23. data/spec/controllers/dashboard_controller_spec.rb +33 -0
  24. data/spec/controllers/pollables_controller_spec.rb +85 -0
  25. data/spec/dummy/app/models/patent.rb +11 -0
  26. data/spec/dummy/app/models/website.rb +4 -0
  27. data/spec/dummy/db/development.sqlite3 +0 -0
  28. data/spec/dummy/db/migrate/20170629115814_create_patents.rb +7 -0
  29. data/spec/dummy/db/schema.rb +5 -2
  30. data/spec/dummy/db/seeds.rb +45 -0
  31. data/spec/dummy/db/test.sqlite3 +0 -0
  32. data/spec/dummy/log/development.log +14744 -0
  33. data/spec/dummy/log/test.log +23225 -0
  34. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/--/--lWLbvYn0hXyiIPFVa33lr-P1J5OFewU5zxzHLGEJI.cache +1 -0
  35. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-_/-_G27iPKZyXAdNxuGSKddDrOFR3NsMpi175TfU4nn4Y.cache +1 -0
  36. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0J/0J_eEsynrbD8IOLt4b9wMzUcNovIlbvJUFyZuqnYLZw.cache +0 -0
  37. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/0P/0PYtiqW7zEC_O8W5SY38LaRk1EQ5UubbEuigsKwqfIU.cache +1 -0
  38. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/12/12UMYXbXZU_YYZ05urBws9BsxDXk_lPbezAaJStnzxQ.cache +1 -0
  39. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1T/1TGgX5aSkYsopXKTfRBJpC4B-fWma8JDM3VtLpNqUDU.cache +1 -0
  40. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/1Y/1YLYZaz9mqN0SicHJuTWhl6tXgPdyy_khFXjmFP20kk.cache +1 -0
  41. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/30/303MFNdHS0Xmaw9m1jE2xsfh8G2IQRRRqYPzefNbXwc.cache +1 -0
  42. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3C/3C40ttO3I1C2hdHlIN4d9GDXMFGjqCAEI54J38dxs1I.cache +3 -0
  43. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3a/3a9B5kFZTPh0IPBgh0glCvHYBQ-W981LA52FMuLN42w.cache +1 -0
  44. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3t/3tUq8gbTvauqkkgFaklXOWPC5ZLrioD-0LsUfAHO9ww.cache +1 -0
  45. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4S/4SWJkdzdSUXX3wQNuHmLDhKaO9L5nbMeoLOn9otLMtY.cache +1 -0
  46. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4V/4Vt_-zopG3xAfSekn4m6gQsz-rw8A9BcS0wvJzOTSaw.cache +0 -0
  47. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5c/5cTRuFQmUR6bOY_5NSWQqq-cA_s-eHg7kw5NHvD4E4g.cache +1 -0
  48. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5e/5ebL3GatCu_j7v8IcUQ8a6M75dAAMPRXp0A2PjRfAoY.cache +1 -0
  49. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5g/5gvP8rrlydbdZF6Jkx2-kQrrI6OO1dTOK6Mcpwcqnss.cache +0 -0
  50. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5l/5lvZkMM87hGXeJfAsegTXS8QixCH-PGv_ekMPqrAPCs.cache +0 -0
  51. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6F/6FGYPSK_7hAlvjwW3X3fNNleY0LuhzwCoGeIbO1538w.cache +1 -0
  52. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6O/6Oqm_yAl40HaFBnSmruGWisS1oQYcUKBEJQWnwT2iyg.cache +1 -0
  53. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/6c/6c8oijMg6sUGBWcOX0UqRfkZc4G8_EJ0O8-jur-q4sE.cache +1 -0
  54. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7f/7fFXL1dqWwlN6izlPuUj0bybnPXt5YUrlsqenq8hf1M.cache +0 -0
  55. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7o/7ooVC1h6lyy3nHuPZQgAeke8ic61Zyh7PyyHWd28WK8.cache +0 -0
  56. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/86/86D-S2e6CvMHy2qDScwO9a7t58dAsVkp-eKD_lSNagQ.cache +0 -0
  57. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8G/8G9xHNcn_bVvW3WeawefeIsaqTWOGtOB9trQUI7Mjdg.cache +0 -0
  58. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8b/8bOwoZNcKaFppP18YftCWhvO9QyLfHFS4AT-lf_NYPQ.cache +1 -0
  59. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/94/94pY1GE-Id4wemdTeAiDUXwpAztIl1zuycZxPk3uCjA.cache +3 -0
  60. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/97/97Lyyc99KU98M8g4q2JomA4vMnn-J3kgLxm9PA7SMk8.cache +0 -0
  61. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AG/AGXlJSyikBDWW5B00w3GKi0SqfYGG-3XXdxeSUj2Whg.cache +0 -0
  62. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ac/Acc4VrmYAPwLtjY6GRFH07k7QMfBn01hHVHQJy2Rfqg.cache +1 -0
  63. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/BI/BIcBr2rFf5keFa1kzkXiuBWHnHD7A0GFPMBBwWrFPwI.cache +1 -0
  64. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/CR/CRJJy55pmRKMgeq8GowBuftA2FkItxg5yW3122ZVgPk.cache +1 -0
  65. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Cm/Cmm2BEGF__yJWLch3lkArWuChL4q-3VjTBvaALBmPBc.cache +1 -0
  66. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EB/EBft4xQC06k6k3wBhpgyUHwPdDuKfO8SbmyJQ6jrR8M.cache +0 -0
  67. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EK/EK_40tb6g6Imx23FvNbSDj2EnqTIGgacOWZtBIzQCTM.cache +1 -0
  68. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/EW/EWRrCUyjPUdofGY6RYaiuFnFb-Wjq7zwHE4W7Mhrg6E.cache +0 -0
  69. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FL/FLbZALWqjhHzA4SOb0DS3KfgEJIs6BpfYz5Men4nCL0.cache +1 -0
  70. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/FV/FVDWojNULfLlZ9MgT6k-GfWQIb6G8Zeq_pCebNGFn3k.cache +1 -0
  71. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/G0/G0XZJi-5TjrYpkSOWEdTK_tjNlR7fNxMdkHqlkkBYdM.cache +0 -0
  72. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IG/IGT0O63WVA7Sfgl_g8oiNFGJQXNJdqtyJV2atcmRIlg.cache +1 -0
  73. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IG/IGoQsqPdaWt1zxXbzFfrkKiMgQ9FhzVWQ8nJ1_13fLY.cache +0 -0
  74. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IX/IXrWTTUnk5V8RuhnxGDboLGuBzirDpeVWw-XYpKB6yQ.cache +3 -0
  75. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/J3/J3LiXkHyL9Hs9tAExHHwb4qJxhnUu43CmUU7h6hYB64.cache +1 -0
  76. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JW/JWGLd-K-trouzkol-nwigOpk1SUgsCWx4_x9zZDzQjM.cache +0 -0
  77. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Jw/Jw4l22so5t5edJAxQhNupu2IRotJpuQzHEvrf2CBD7I.cache +0 -0
  78. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/K-/K-S7GohJKTXThc993X-xXo0BQqRoWniauRpNHZX3pY8.cache +1 -0
  79. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/K-/K-b8VrEpvUh9amDrIJQ4WcqUFS2G1yjuREW9r4WsQ-o.cache +0 -0
  80. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ku/KuAGuiCplWodV71HALtBne3mmpK9gJcuzytwktUI3og.cache +0 -0
  81. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LQ/LQTTgOccx6ELTkXiyaBjDAFWXVHOkJF81TjyA5rKRuc.cache +1 -0
  82. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ll/LlqS3LuP_6XMnSi8BhbCfAspFrRr8y6zt2KNFPi9jXI.cache +1 -0
  83. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/MZ/MZ3n3_ULFCMIFli9yGGCeYfJpbgrLcJyLzmLDhNZTNg.cache +0 -0
  84. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ms/MsK6xThKWyy3EP0bCwdMjp9MKjFtuYLvGQagnLbVicM.cache +3 -0
  85. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/N0/N0MMPBJNgb0mVLM6EZW-90hw6HG_BZAYYhNFV0np3hI.cache +3 -0
  86. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Na/Nas7iovPFfI0gYVOEu4l0hwX0TQfVNs2erUEu9jvHmA.cache +0 -0
  87. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/PW/PW-7ZnacFMdzmWbcxhyUop5VPyk8HB4p4Eg18QIX5Us.cache +3 -0
  88. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Py/PyVpFUa9fFlhP5qPk66tT8PueWPTTamO7DaMMKtLCQo.cache +1 -0
  89. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QR/QR05DHW6ny1ik589bYoeOoO7-BvQLuPGj0LC9vIDxcY.cache +1 -0
  90. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QY/QY0vQOIniQpL7_K1jQrre1VcZcyNZUD3k6OdxUBMXgs.cache +1 -0
  91. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Qb/QbZgECTXfEHD4lwtjcWc_zjpMguy6eWpAfl0pCKarvg.cache +4 -0
  92. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Qq/QqNTrifu4m6Kxt4TidJJKWfilNw56S9NZvklM7q5vYc.cache +3 -0
  93. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/RY/RYAvTDisyBiKImYGuKuQxw8ld3hWqe9PWf3INZ4E9Sk.cache +1 -0
  94. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rq/RqcPPeowOs4xV6on324eRuDopAD6B8oynqfL7HHkxDs.cache +0 -0
  95. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/S3/S3mVV7r2zY-Mc7fzgbtlm5KwbJZjkaiY42YTbDZjV48.cache +1 -0
  96. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/SS/SScgAnW7RlUYnRQBWejb5q0qvQ1sEPk3AryYRi4aL80.cache +1 -0
  97. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/TS/TSHBEmnF83xFKnw4lXiSnWCzzUcsr4zvdZKYqUY1hX0.cache +1 -0
  98. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/U3/U3YsjRE_IGdtzHfNQrhgJQBwYiN_6g1jXjQXxg6hZiA.cache +1 -0
  99. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/U6/U6qS9nN5ixoa4wv3F8XWc5cyw-WrTy1YAIdfZoVfwnA.cache +1 -0
  100. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UE/UEBQHYNAEm_IuY3ol41KxiO66lsrQDRqrRIHyHx5UwQ.cache +0 -0
  101. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UZ/UZ8KRt8-eMrbo5pUYWvJL4ffNRrZQMBQYAORWLXFkSA.cache +3 -0
  102. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vb/VbJtzpUU-KQNYF68VsGukBB7c08qJ57Bjs6x0cKkKak.cache +1 -0
  103. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Vc/VcXB791lVrLiRxxRTLmb6AyJAzxZ7VSN1nc4ql4-QSc.cache +1 -0
  104. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/WF/WFclMr7-85-jtgOwGV_pZMYgb8xaFKgxcOqvco-keXM.cache +3 -0
  105. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XG/XGiBjxazfVjZ7wS-hY5yBYqdKqgyVmYIPxklgjSMXYM.cache +0 -0
  106. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XS/XSf5zB-mjIUgPxEvQtpvfuqSOrYOmLXHzqUyyUhdbGE.cache +3 -0
  107. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Xm/XmTgbtioYvkiGsl03YdImajUTDxFyg30aYZWLWMPIb0.cache +1 -0
  108. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Y3/Y3am8wO4HZTWNwomPA5X5bqESrX0NZu3GO-0jKbQLm8.cache +0 -0
  109. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YC/YCwXRufXIh-vkVKKWbDUc3BkyrT_XGZD6jbHIdhyepk.cache +3 -0
  110. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/YH/YHg5vYrpTfsB5YidkLyyORH5A6rrhFmFTve5i_17SyM.cache +1 -0
  111. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Y_/Y_e3KyxSRi7bRZPe20VZJmMbUPGk38xfHpCc6yJixU0.cache +1 -0
  112. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZA/ZAOE1JD6lEGNBb5kDMHNxoV66sGUQpzMu4nkeD7xt2o.cache +0 -0
  113. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZA/ZAzFQX1aJM96e-5ZzRXL1cZQh_QCE1WTa2NsdWurQDk.cache +1 -0
  114. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZB/ZBSaR4XYloYIymceg0sMiNbF5qvLXPILjQoPxizS46k.cache +0 -0
  115. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZC/ZCSlSszCgevBj2ZrXNR8-08XBJDVr01iPehedE2lO-o.cache +1 -0
  116. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Zh/ZhLGQrfeZU8xp_6hWWNBb5_QJmcdBuXA1EWlpFeb3Qc.cache +0 -0
  117. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_5/_5gaN8EtTE-aQXThn9Wg2QCfkyXeaP8Z8-RAL0GQwN0.cache +1 -0
  118. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_F/_FoetLNtdW_M4-_NuO_3EWTAaFopK2SNPJkomAAJjWk.cache +1 -0
  119. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/_l/_lPNSNneNjbBtC1ouoQ_dnQZJDcT1xR-R-35EFEq9mU.cache +1 -0
  120. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/a0/a0YN5mBeCfTPvQ-CZFTADpdB565taPrVF_tEO309rx0.cache +0 -0
  121. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aG/aGkwJZ4mCf0xDDV5nIg7eWKHsTrNYs7Fw1uznEvSgvk.cache +1 -0
  122. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/aQ/aQwUkLwfx5QpRgTPlbNkqxQll1crTc64SDUXJj63vCM.cache +1 -0
  123. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bB/bBy8EkfbzgsMAllPC8-WWqVuPonUT82q-sjXk-eKSUY.cache +1 -0
  124. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bD/bD9p84Yyjpi8eMkjYHyMzkgnUceQeF9N4VV2Dljd0D0.cache +0 -0
  125. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bQ/bQtO7GQ_eZq6m6UbqcSzYCBG-E_VGFGDU8ZSnufpIik.cache +1 -0
  126. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bS/bSpBaFGvDXHNCANj1EExhQckeR1T1QiL5HlPhpnl9qA.cache +0 -0
  127. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bl/bleGdVZFXaRC0nIKl2JC38y_thUfNTbUczPV0OHrOys.cache +0 -0
  128. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/c4/c4JZnzmdfa_Y5cHdoN4d0tJ1HCFErE2N-3Wz_d6Xv-8.cache +0 -0
  129. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/dh/dhcT0jK6mpyB_FY1BUGGnYEEqnnavLsnFII_MY9VvSc.cache +1 -0
  130. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/e2/e2Ylc5Zpg2LhF0OIPOGsNV0AHm93ECtnhy9pVj356ec.cache +0 -0
  131. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ep/epF-H1ll29UFuncWum_ND-d6QgogzaMfI30fUjGhrBs.cache +0 -0
  132. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/fh/fhY0UEAu-q5edVt56g_SLI1WWRCW584v7rcMuCj1QPc.cache +1 -0
  133. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gq/gqDzAw8m7txZLFxXRz7xOUikBGaLBv_fAL2XCvo1h1A.cache +0 -0
  134. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/j9/j9OAOISmO3TQwMfMPYS8Fc-xYYQDbCpXpyXXyQsq3GA.cache +3 -0
  135. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jA/jAgvvyUhDy7MDnsrRb5S_qlFkMbqmOiUmh6PBUBcIoY.cache +0 -0
  136. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jm/jmlmHWZSPBR5R0T7YZ3CiN_d_vpUeVz2U6XEHOTVLm4.cache +0 -0
  137. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/k5/k5l-MOIkumCn8GDQ9Pw2hSVyUf_Gn3OuzLekpI4F1as.cache +0 -0
  138. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kH/kHBlPcTnCO-JbUmONO-fvWudygnE1wO1I9PZCoBXIY4.cache +1 -0
  139. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lH/lHdeb7hgAGGUwg2_8NJayk5LtNkuKbhpMCIvgkuPwb4.cache +1 -0
  140. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lP/lPB2ZqnMqP_ZLMb95x3r2k52Zh8qEEYWqJ4_AxOjXdc.cache +0 -0
  141. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lZ/lZvGVbAI3Rtnp8yiAueH-9NPfwztnu5rgsqjebwa5T0.cache +0 -0
  142. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lj/ljYhDBsZG44Y1UQA2AjcM-t_g0P70W42diNZlFhM9Sc.cache +0 -0
  143. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lj/ljnYaLc-iDE8bdgbzw2xrd2S0vfQWl5baJZLaRGbhF0.cache +1 -0
  144. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ll/lldQ0R60REWT-F8wM6QCpjPahC6C8XCO_XqWHqLUgHI.cache +1 -0
  145. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ll/llwjWSKdEo2xM8DLgk6WGLT0RM47h1CRXuoKKz81mC8.cache +0 -0
  146. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/mi/miPsjK0SCTlDu8K0ed2eZpa-fRCgSs16xincvpbfOCg.cache +1 -0
  147. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nB/nBk_dR6xqbVkpd3-EtH5jY_MiZfTPQnU5haxOfWFjck.cache +1 -0
  148. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nN/nNHsv6bCC83nImUn1mxDhqF7xwYLfhZRtyd9xP_bHdk.cache +1 -0
  149. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nV/nVwpWFXAxoxlpooKrvb-VoFGVy8vjUpTl-6-cc6Qbso.cache +1 -0
  150. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/nY/nYblBJo58yX7MoC91aoB2bba5Rz0zfqe51ZXJPmPuMQ.cache +1 -0
  151. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oB/oBuNYsKrWmLGjSZYgM4mQC8963VUHS4DoxE6_hOiYCs.cache +1 -0
  152. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oI/oIG5tF3SkeK_yIc1oYkTkuZ6n95hGBrQFaa-5aMQLvc.cache +0 -0
  153. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/oa/oaUxXaamZX1ibCiWFf8owqI6I3jVT-U4LKtyezEcdA8.cache +0 -0
  154. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ow/ow4Mv_I51uOjs57RGxOTUFplSdRIhx0MQiMgrGf6jOE.cache +0 -0
  155. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ph/phsvbtb-zP02E3p-z5bNacjgFadMrmkSKgZ3djHAjUQ.cache +0 -0
  156. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pq/pq_mP3a7ivW3Qi41nB-dssBXy6aW9l2QUlSEqOI3sE8.cache +1 -0
  157. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pt/pttAugu74o8KjkL84ApsarjE0i6S3Fe6u8TPgKgBexI.cache +1 -0
  158. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pz/pzFArBsQGb0Np4ZX1fPDSq-I7P8qyxDXTCGpziUH4BA.cache +0 -0
  159. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/q9/q99ic0TvyAN3bWzJELu33Zi2DWEtBcyPZ_ilNVgLD9o.cache +0 -0
  160. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qT/qT-g7M2fG6GVSANfjQIQd-VGvvMwApLDGfrL4pDGq5o.cache +2 -0
  161. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/qh/qhZveb8_9dtmVqG4Vt0MfyDvdsWIsVXq8BWTvkvzrYA.cache +1 -0
  162. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r1/r1I_9U513h7qmv7cA2nHAcOj-Q9EzFeo2OsMxwh7L3k.cache +1 -0
  163. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/rQ/rQBfBCBl4HOla4XgxlzPFrWUo2cAxF20bU7bxIcvzaM.cache +1 -0
  164. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/sJ/sJYtWV-oaKQA5jXnVmkmnLB7ZQkrP_8CY0hW_L0m3ws.cache +1 -0
  165. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tm/tm_j3IoioQ5bShNkxEmz_jxXzhQOIBWo8Oa155OD5JE.cache +3 -0
  166. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/u3/u3wEeL53_ax62E0oySJNd0gt7HtSaqzEPtEq3L31ZI0.cache +1 -0
  167. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/uM/uMjIgHxLRsuXQLuq-PXtsxQiWXYb4fujcKC-sPQQSXE.cache +1 -0
  168. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vU/vUWv7YDu0uMx3xbz6ZflAScZJvUm1cV2otfqrO37OHM.cache +1 -0
  169. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/w3/w3wEEOWmMe3mCvTGo32Cv9I3iCCzdQVOKzuZwkbGP34.cache +0 -0
  170. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wD/wDjB26V_MeeK_DPJjK3uxuXhZxUf2RgR3okyAc6Mch0.cache +0 -0
  171. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xT/xTRn9fg9g-onMXDz6G5b0boQH345q2UsDeBKBkQSw34.cache +3 -0
  172. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xq/xqQmPvcrj4Jitvig2QTTFey2pXRUKhMoH4df5FE96x0.cache +0 -0
  173. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xr/xrWMN4OTx2EBuZeoGJSRtyCKPvLKPQOQd6H-NUMMr1s.cache +0 -0
  174. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yI/yIHXtygc2A6GWVrfvtbglVnIQ8G5siPuODwbflQCngc.cache +1 -0
  175. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/yw/yw-zDTjjY1ZpixctdyiDeMnSjZYsj2Ovz_3gvbaiE9k.cache +1 -0
  176. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zH/zH2pIxo90ehFARIotDzvl5QQAJUNJaKjjGuiMvhrV1I.cache +1 -0
  177. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zX/zXI3ayLnfyEdWRMGEpdtvjgTZeEnzFg-mSDJpFheqqc.cache +1 -0
  178. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zz/zztSJp9qxS4Fy_6P7VdOBcp82vg_4mwiF4CE65ixkBM.cache +1 -0
  179. data/spec/factories/website_factory.rb +13 -0
  180. data/spec/spec_helper.rb +22 -4
  181. metadata +363 -11
  182. data/lib/aeternitas/web_ui/dashboard_statistics.rb +0 -96
  183. data/lib/aeternitas/web_ui/pollable_statistics.rb +0 -148
  184. data/lib/aeternitas/web_ui/pollables_index_statistics.rb +0 -36
  185. data/spec/aeternitas/web_ui/dashboard_statistics_spec.rb +0 -5
  186. data/spec/dummy/spec/factories/websites.rb +0 -5
  187. data/spec/dummy/spec/models/website_spec.rb +0 -5
@@ -0,0 +1,12 @@
1
+ json.data do
2
+ json.array! @pollable_meta_data do |meta_data|
3
+ json.identifier get_identifier(meta_data.pollable)
4
+ json.last_polling(meta_data.last_polling.present? ? l(meta_data.last_polling, format: :long) : nil)
5
+ json.deactivation_reason meta_data.deactivation_reason
6
+ json.deactivated_at l(meta_data.deactivated_at, format: :long)
7
+ end
8
+ end
9
+
10
+ count = Aeternitas::PollableMetaData.deactivated.where(pollable_class: @pollable.name).count
11
+ json.recordsTotal count
12
+ json.recordsFiltered count
@@ -0,0 +1,29 @@
1
+ json.labels(@polling_time.map {|v| v[:timestamp].strftime('%B %d. %H:%M')})
2
+ json.datasets do
3
+ json.array! [
4
+ {
5
+ label: 'Average',
6
+ data: @polling_time.map {|v| (v[:avg] * 1000).to_i},
7
+ borderColor: '#96C0CE',
8
+ backgroundColor: 'rgba(171,221,235,0.5)',
9
+ fill: false,
10
+ type: 'line'
11
+ },
12
+ {
13
+ label: 'Minimum',
14
+ data: @polling_time.map {|v| (v[:min] * 1000).to_i},
15
+ borderColor: '#32b643',
16
+ backgroundColor: 'rgba(50,182,67,0.5)',
17
+ fill: false,
18
+ type: 'line'
19
+ },
20
+ {
21
+ label: 'Maximum',
22
+ data: @polling_time.map {|v| (v[:max] * 1000).to_i},
23
+ borderColor: '#ffd59c',
24
+ backgroundColor: 'rgba(255,213,156,0.5)',
25
+ fill: false,
26
+ type: 'line'
27
+ }
28
+ ]
29
+ end
@@ -6,26 +6,61 @@
6
6
  <th> Pollable </th>
7
7
  <th> Count </th>
8
8
  <th> Polls* </th>
9
- <th> Error Rate* </th>
10
- <th> Lock Rate* </th>
9
+ <th> Error Rate** </th>
10
+ <th> Lock Rate** </th>
11
11
  </tr>
12
12
  </thead>
13
13
  <tbody>
14
- <% Aeternitas::WebUi::PollablesIndexStatistics.available_pollables.each do |pollable| %>
14
+ <% @pollable_classes.each do |pollable_class| %>
15
15
  <tr>
16
- <td> <%= link_to pollable.name, pollable_path(id: pollable.name) %> </td>
17
- <td> <%= pollable.count %> </td>
18
- <td> <%= Aeternitas::WebUi::PollablesIndexStatistics.polls(pollable) %> </td>
19
- <td> <%= rate_ratio Aeternitas::WebUi::PollablesIndexStatistics.failure_ratio(pollable) %> </td>
20
- <td> <%= rate_ratio Aeternitas::WebUi::PollablesIndexStatistics.guard_locked_ratio(pollable) %> </td>
16
+ <td> <%= link_to pollable_class.name, pollable_path(id: pollable_class.name) %> </td>
17
+ <td> <%= pollable_class.count %> </td>
18
+ <td>
19
+ <%=
20
+ Aeternitas::Metrics.polls(
21
+ pollable_class,
22
+ from: 24.hours.ago,
23
+ to: Time.now,
24
+ resolution: :hour
25
+ ).map { |v| v[:count] }.sum
26
+ %>
27
+ </td>
28
+ <td>
29
+ <div class="sparkline" style="max-width:250px; max-height:30px">
30
+ <%=
31
+ Aeternitas::Metrics
32
+ .failure_ratio(pollable_class, from: 2.weeks.ago, to: Time.now, resolution: :day)
33
+ .map {|v| v[:ratio]}
34
+ .join(",")
35
+ %>
36
+ </div>
37
+ </td>
38
+ <td>
39
+ <div class="sparkline" style="max-width:250px; max-height:30px">
40
+ <%=
41
+ Aeternitas::Metrics
42
+ .guard_locked_ratio(pollable_class, from: 2.weeks.ago, to: Time.now, resolution: :day)
43
+ .map {|v| v[:ratio]}
44
+ .join(",")
45
+ %>
46
+ </div>
47
+ </td>
21
48
  </tr>
22
49
  <% end %>
23
50
  </tbody>
24
51
  </table>
25
52
  <script>
26
53
  $(document).ready(function() {
27
- $('#pollables-list').DataTable();
54
+ $('#pollables-list').DataTable({
55
+ columns: [
56
+ null,
57
+ null,
58
+ null,
59
+ {orderable: false},
60
+ {orderable: false},
61
+ ]
62
+ });
28
63
  } );
29
64
  </script>
30
- <small>* within the last 24h</small>
65
+ <small>* within the last 24h | ** within the last 2 weeks</small>
31
66
  </div>
@@ -24,7 +24,7 @@
24
24
  </div>
25
25
  <div class="info-box-body">
26
26
  <strong> <%= @pollable.count %> </strong> Pollables
27
- <small>are currently enqueued</small>
27
+ <small>of this type exist</small>
28
28
  </div>
29
29
  </div>
30
30
  </div>
@@ -36,7 +36,14 @@
36
36
  </div>
37
37
  </div>
38
38
  <div class="info-box-body">
39
- <strong> <%= Aeternitas::WebUi::PollableStatistics.enqueued(@pollable) %> </strong> Pollables
39
+ <strong>
40
+ <%=
41
+ Aeternitas::PollableMetaData
42
+ .where(pollable_class: @pollable.name)
43
+ .enqueued
44
+ .count
45
+ %>
46
+ </strong> Pollables
40
47
  <small>are currently enqueued</small>
41
48
  </div>
42
49
  </div>
@@ -49,7 +56,14 @@
49
56
  </div>
50
57
  </div>
51
58
  <div class="info-box-body">
52
- <strong> <%= Aeternitas::WebUi::PollableStatistics.deactivated(@pollable) %> </strong> Pollables
59
+ <strong>
60
+ <%=
61
+ Aeternitas::PollableMetaData
62
+ .where(pollable_class: @pollable.name)
63
+ .deactivated
64
+ .count
65
+ %>
66
+ </strong> Pollables
53
67
  <small>are deactivated</small>
54
68
  </div>
55
69
  </div>
@@ -130,30 +144,71 @@
130
144
  <div class="section-white">
131
145
  <div class="container grid-1280">
132
146
  <h3> Deactivated Pollables </h3>
133
- <table id="pollables-list" class="table">
147
+ <table id="deactivated-pollables" class="table">
134
148
  <thead>
135
149
  <tr>
136
- <th> Data </th>
150
+ <th> Identifier </th>
137
151
  <th> Last Polling </th>
138
152
  <th> Deactivation Reason </th>
139
153
  <th> Deactivated At </th>
140
154
  </tr>
141
155
  </thead>
142
156
  <tbody>
143
- <% Aeternitas::WebUi::PollableStatistics.deactivated_pollables(@pollable).each do |meta_data| %>
144
- <tr>
145
- <td> <%= pretty_print_attributes(meta_data.pollable) %> </td>
146
- <td> <%= meta_data.last_polling %> </td>
147
- <td> <%= meta_data.deactivation_reason %> </td>
148
- <td> <%= l(meta_data.deactivated_at, format: :long) %> </td>
149
- </tr>
150
- <% end %>
151
157
  </tbody>
152
158
  </table>
153
159
  <script>
154
160
  $(document).ready(function() {
155
- $('#pollables-list').DataTable();
161
+ $('#deactivated-pollables').DataTable({
162
+ "processing": true,
163
+ "serverSide": true,
164
+ "ajax": "<%= deactivated_pollables_pollable_path(id: @pollable.name) %>",
165
+ "columns": [
166
+ {data: "identifier"},
167
+ {data: "last_polling"},
168
+ {data: "deactivation_reason"},
169
+ {data: "deactivated_at"}
170
+ ],
171
+ "ordering": false,
172
+ "searching": false
173
+ });
156
174
  } );
157
175
  </script>
158
176
  </div>
177
+ </div>
178
+
179
+ <div class="section-white">
180
+ <div class="container grid-1280">
181
+ <h3> Pollables </h3>
182
+ <table id="pollables-list" class="table">
183
+ <thead>
184
+ <tr>
185
+ <th> Identifier </th>
186
+ <th> Status </th>
187
+ <th> Last Polling </th>
188
+ <th> Next Polling </th>
189
+ <th> Sources </th>
190
+ </tr>
191
+ </thead>
192
+ <tbody>
193
+ </tbody>
194
+ </table>
195
+ <script>
196
+ $(document).ready(function() {
197
+ $('#pollables-list').DataTable({
198
+ "processing": true,
199
+ "serverSide": true,
200
+ "ajax": "<%= all_pollables_pollable_path(id: @pollable.name) %>",
201
+ "columns": [
202
+ {data: "identifier"},
203
+ {data: "status"},
204
+ {data: "last_polling"},
205
+ {data: "next_polling"},
206
+ {data: "sources"}
207
+ ],
208
+ "ordering": false,
209
+ "searching": false
210
+ });
211
+ } );
212
+ </script>
213
+ </div>
159
214
  </div>
@@ -0,0 +1,33 @@
1
+ range = TabsTabs::Helpers.timestamp_range(@from..@to, @resolution)
2
+
3
+ json.labels(range.map {|ts| ts.strftime("%B %d. %H:%M")})
4
+ json.datasets do
5
+ json.array! [
6
+ {
7
+ label: '# Polls',
8
+ data: Aeternitas::Metrics.polls(@pollable, from: @from, to: @to, resolution: @resolution).map {|v| v[:count]},
9
+ borderColor: "#96C0CE",
10
+ backgroundColor: "rgba(171,221,235,0.5)",
11
+ fill: false,
12
+ type: 'line'
13
+ },
14
+ {
15
+ label: '# Successfull Polls',
16
+ data: Aeternitas::Metrics.successful_polls(@pollable, from: @from, to: @to, resolution: @resolution).map {|v| v[:count]},
17
+ borderColor: "#32b643",
18
+ backgroundColor: "rgba(50,182,67,0.5)",
19
+ },
20
+ {
21
+ label: '# Failures',
22
+ data: Aeternitas::Metrics.failed_polls(@pollable, from: @from, to: @to, resolution: @resolution).map {|v| v[:count]},
23
+ borderColor: "#C25B56",
24
+ backgroundColor: "rgba(255,116,111,0.5)",
25
+ },
26
+ {
27
+ label: '# Guard Locked',
28
+ data: Aeternitas::Metrics.guard_locked(@pollable, from: @from, to: @to, resolution: @resolution).map {|v| v[:count]},
29
+ borderColor: "#ffd59c",
30
+ backgroundColor: "rgba(255,213,156,0.5)",
31
+ }
32
+ ]
33
+ end
data/config/routes.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  Aeternitas::WebUi::Engine.routes.draw do
2
2
  resource :dashboard, controller: :dashboard, only: [:index] do
3
- get 'polls_24h', on: :collection
3
+ get 'polls_timeline', on: :collection
4
4
  get 'future_polls', on: :collection
5
5
  get 'pollable_growth', on: :collection
6
6
  end
@@ -9,6 +9,8 @@ Aeternitas::WebUi::Engine.routes.draw do
9
9
  get :timeline, on: :member
10
10
  get :execution_time, on: :member
11
11
  get :data_growth, on: :member
12
+ get :all_pollables, on: :member
13
+ get :deactivated_pollables, on: :member
12
14
  end
13
15
 
14
16
  root 'dashboard#index'
@@ -1,9 +1,7 @@
1
1
  require 'aeternitas/web_ui/engine'
2
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
3
  require 'aeternitas/web_ui/version'
4
+ require 'jbuilder'
7
5
 
8
6
  module Aeternitas
9
7
  module WebUi
@@ -1,5 +1,5 @@
1
1
  module Aeternitas
2
2
  module WebUi
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Aeternitas::WebUi::DashboardController, type: :controller do
4
+ routes { Aeternitas::WebUi::Engine.routes }
5
+
6
+ describe "#index" do
7
+ it 'renders the dashboard page' do
8
+ get :index
9
+ expect(response).to have_http_status(:success)
10
+ end
11
+ end
12
+
13
+ describe "#poll_times" do
14
+ it 'renders polling timeline' do
15
+ get :polls_timeline, params: {from: 3.days.ago.to_s, to: Time.now.to_s, format: :json}
16
+ expect(response).to have_http_status(:success)
17
+ end
18
+ end
19
+
20
+ describe "#future_polls" do
21
+ it 'renders future polls data' do
22
+ get :future_polls, format: :json
23
+ expect(response).to have_http_status(:success)
24
+ end
25
+ end
26
+
27
+ describe "#pollable_growth" do
28
+ it 'renders pollable growth data' do
29
+ get :pollable_growth, params: {from: 3.days.ago.to_s, to: Time.now.to_s, format: :json}
30
+ expect(response).to have_http_status(:success)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe Aeternitas::WebUi::PollablesController, type: :controller do
4
+ routes { Aeternitas::WebUi::Engine.routes }
5
+
6
+ describe "#index" do
7
+ it 'renders the pollable overview' do
8
+ get :index
9
+ expect(response).to have_http_status(:success)
10
+ end
11
+
12
+ it 'selects all pollable classes' do
13
+ get :index
14
+ expect(assigns(:pollable_classes)).to match_array([Website, Patent])
15
+ end
16
+ end
17
+
18
+ describe "#show" do
19
+ it 'renders pollale page' do
20
+ get :show, params: {id: "Website"}
21
+ expect(response).to have_http_status(:success)
22
+ end
23
+
24
+ it 'selects the right pollable' do
25
+ get :show, params: {id: "Website"}
26
+ expect(assigns(:pollable)).to be(Website)
27
+ end
28
+ end
29
+
30
+ describe "timeline" do
31
+ it 'renders the pollables timeline' do
32
+ get :timeline, params: {id: "Website", from: 3.days.ago.to_s, to: Time.now.to_s, format: :json}
33
+ expect(response).to have_http_status(:success)
34
+ end
35
+ end
36
+
37
+ describe "execution_time" do
38
+ it 'renders the execution time data' do
39
+ get :execution_time, params: {id: "Website", from: 3.days.ago.to_s, to: Time.now.to_s, format: :json}
40
+ expect(response).to have_http_status(:success)
41
+ end
42
+ end
43
+
44
+ describe "data_growth" do
45
+ it 'renders the data_growth data' do
46
+ get :data_growth, params: {id: "Website", from: 3.days.ago.to_s, to: Time.now.to_s, format: :json}
47
+ expect(response).to have_http_status(:success)
48
+ end
49
+ end
50
+
51
+ describe "#deactivated_pollables" do
52
+ it 'renders deactivated pollable data' do
53
+ get :deactivated_pollables, params: {id: "Website", format: :json}
54
+ expect(response).to have_http_status(:success)
55
+ end
56
+
57
+ it 'selects the right pollables' do
58
+ get :deactivated_pollables, params: {id: "Website", format: :json}
59
+ expect(assigns(:pollable_meta_data)).to(
60
+ match_array(Aeternitas::PollableMetaData.where(pollable_class: 'Website').deactivated.to_a)
61
+ )
62
+ end
63
+ end
64
+
65
+ describe "#all_pollables" do
66
+ it 'renders pollable data' do
67
+ get :all_pollables, params: {id: "Website", format: :json}
68
+ expect(response).to have_http_status(:success)
69
+ end
70
+
71
+ it 'selects the right pollables' do
72
+ get :all_pollables, params: {id: "Website", format: :json}
73
+ expect(assigns(:pollable_meta_data)).to(
74
+ match_array(
75
+ Aeternitas::PollableMetaData
76
+ .where(pollable_class: 'Website')
77
+ .limit(10)
78
+ .offset(0)
79
+ .order(last_polling: :desc)
80
+ .to_a
81
+ )
82
+ )
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,11 @@
1
+ class Patent < ApplicationRecord
2
+ include Aeternitas::Pollable
3
+
4
+ polling_options do
5
+ polling_frequency ->(patent) { patent.last_polling + 2.weeks }
6
+ end
7
+
8
+ def poll
9
+ raise "Test"
10
+ end
11
+ end
@@ -4,4 +4,8 @@ class Website < ApplicationRecord
4
4
  polling_options do
5
5
  polling_frequency :daily
6
6
  end
7
+
8
+ def poll
9
+ raise "Test"
10
+ end
7
11
  end