diff --git a/app/frontend/packs/application.js b/app/frontend/packs/application.js index 4ae8b7a..d2d55db 100644 --- a/app/frontend/packs/application.js +++ b/app/frontend/packs/application.js @@ -13,8 +13,13 @@ import Turbolinks from 'turbolinks'; import 'bootstrap/js/dist/collapse'; import 'bootstrap/js/dist/dropdown'; import 'bootstrap/js/dist/button'; +import 'bootstrap/js/dist/tooltip'; import '../scss'; Rails.start() Turbolinks.start() + +document.addEventListener("turbolinks:load", () => { + $('[data-toggle="tooltip"]').tooltip(); +}); diff --git a/app/frontend/scss/components/checks.scss b/app/frontend/scss/components/checks.scss index 26f3f5d..6c24b24 100644 --- a/app/frontend/scss/components/checks.scss +++ b/app/frontend/scss/components/checks.scss @@ -2,4 +2,8 @@ .action a { color: black; } + + .kind .octicon { + vertical-align: middle; + } } diff --git a/app/helpers/checks_helper.rb b/app/helpers/checks_helper.rb index 654671d..5976d8e 100644 --- a/app/helpers/checks_helper.rb +++ b/app/helpers/checks_helper.rb @@ -49,4 +49,10 @@ module ChecksHelper "btn-outline-info" end end + + def check_last_success_title(check) + return t(".never_succeeded") if check.last_success_at.nil? + + t(".days_from_last_success", count: check.days_from_last_success) + end end diff --git a/app/models/check.rb b/app/models/check.rb index 5074339..958f5ca 100644 --- a/app/models/check.rb +++ b/app/models/check.rb @@ -27,6 +27,8 @@ # class Check < ApplicationRecord + ERROR_DELAY_DAYS = 3 + belongs_to :user has_many :logs, class_name: "CheckLog" has_many :notifications, validate: true, dependent: :destroy @@ -61,14 +63,29 @@ class Check < ApplicationRecord scope :kind, ->(kind) { where(kind: kind) } scope :by_domain, ->(domain) { where("domain LIKE ?", "%#{domain}%") } scope :recurrent_failures, -> { - where("last_run_at IS NOT NULL") - .where("last_success_at IS NULL OR last_success_at <= DATE_SUB(last_run_at, INTERVAL 3 DAY)") + interval = "INTERVAL #{ERROR_DELAY_DAYS} DAY" + where("last_run_at IS NOT NULL AND created_at <= DATE_SUB(NOW(), #{interval})") + .where("last_success_at IS NULL OR last_success_at <= DATE_SUB(last_run_at, #{interval})") } def self.default_sort { domain_expires_at: :asc } end + def in_error? + return false if created_at > ERROR_DELAY_DAYS.days.ago + return false if last_run_at.nil? + return true if last_success_at.nil? + + last_success_at < ERROR_DELAY_DAYS.days.ago + end + + def days_from_last_success + return unless last_success_at.present? + + (Date.today - last_success_at.to_date).to_i + end + private def domain_created_at_past diff --git a/app/views/checks/_table.html.erb b/app/views/checks/_table.html.erb index 074cd57..e164399 100644 --- a/app/views/checks/_table.html.erb +++ b/app/views/checks/_table.html.erb @@ -21,8 +21,19 @@
<% checks.each do |check| %>