Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F1614930
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Mar 21, 11:34 AM
Size
4 KB
Mime Type
text/x-diff
Expires
Mon, Mar 23, 11:34 AM (12 h, 16 m)
Engine
blob
Format
Raw Data
Handle
351185
Attached To
rWEBDNS WebDNS (edet4)
View Options
diff --git a/app/models/job.rb b/app/models/job.rb
index f333e19..723e18a 100644
--- a/app/models/job.rb
+++ b/app/models/job.rb
@@ -1,124 +1,131 @@
class Job < ActiveRecord::Base
belongs_to :domain
scope :pending, -> { where(status: 0) }
+ scope :failed, -> { where(status: 2) }
scope :completed, -> { where(status: [1, 2]) }
def failed?
status == 2
end
def done?
status == 1
end
def pending?
status == 0
end
def arguments
JSON.parse(args)
end
+ def zone
+ return domain.name if domain
+
+ arguments['zone']
+ end
+
def run_event!
args = arguments
raise 'Not an event!' unless args['event']
Domain
.find_by_name(args['zone'])
.fire_state_event(args['event'])
self.status = 1
self.save!
end
class << self
def add_domain(domain)
ActiveRecord::Base.transaction do
jobs_for_domain(domain, :add_domain)
trigger_event(domain, :installed)
end
end
def shutdown_domain(domain)
ActiveRecord::Base.transaction do
job_for_domain(domain, :remove_domain)
job_for_domain(domain, :opendnssec_remove) if domain.dnssec?
trigger_event(domain, :cleaned_up)
end
end
def dnssec_sign(domain)
ActiveRecord::Base.transaction do
job_for_domain(domain, :opendnssec_add, policy: domain.dnssec_policy.name)
job_for_domain(domain, :bind_convert_to_dnssec)
trigger_event(domain, :signed)
end
end
def wait_for_ready(domain)
jobs_for_domain(domain,
:wait_for_ready_to_push_ds)
end
def dnssec_push_ds(domain, dss)
opts = Hash[:dnssec_parent, domain.dnssec_parent,
:dnssec_parent_authority, domain.dnssec_parent_authority,
:dss, dss]
keytag = dss.map { |ds| ds.split.first }.first # Both records should have the same keytag
ActiveRecord::Base.transaction do
job_for_domain(domain, :publish_ds, opts)
job_for_domain(domain, :wait_for_active, keytag: keytag)
trigger_event(domain, :converted)
end
end
def dnssec_rollover_ds(domain, dss)
opts = Hash[:dnssec_parent, domain.dnssec_parent,
:dnssec_parent_authority, domain.dnssec_parent_authority,
:dss, dss]
keytag = dss.map { |ds| ds.split.first }.first # Both records should have the same keytag
ActiveRecord::Base.transaction do
job_for_domain(domain, :publish_ds, opts)
job_for_domain(domain, :wait_for_active, keytag: keytag)
trigger_event(domain, :complete_rollover)
end
end
def convert_to_plain(domain)
ActiveRecord::Base.transaction do
jobs_for_domain(domain,
:remove_domain,
:add_domain,
:opendnssec_remove)
trigger_event(domain, :converted)
end
end
private
def trigger_event(domain, event)
job_for_domain(domain, :trigger_event, event: event)
end
def jobs_for_domain(domain, *job_names)
job_names.each { |job_name| job_for_domain(domain, job_name) }
end
def job_for_domain(domain, job_name, args = {})
args = { zone: domain.name }.merge!(args)
create!(domain: domain, job_type: job_name, args: args.to_json)
end
end
end
diff --git a/lib/tasks/checks.rake b/lib/tasks/checks.rake
new file mode 100644
index 0000000..28889aa
--- /dev/null
+++ b/lib/tasks/checks.rake
@@ -0,0 +1,16 @@
+namespace :check do
+ desc "Find Failing jobs"
+ task failed_jobs: :environment do
+ failed = Job.failed.order('id asc').to_a
+
+ if failed.any?
+ domains = failed.map { |j|
+ j.domain ? "#{j.domain_id}:#{j.zone}" : "nodb:#{j.zone}"
+ }
+ domains = domains[0,3].join(', ') # Output only the first 3 domains
+ puts "1 FailedJobs - WARN - #{failed.size} failed jobs on #{domains.size} domains (#{domains}...)"
+ else
+ puts "0 FailedJobs - OK - 0 failed jobs"
+ end
+ end
+end
Event Timeline
Log In to Comment