diff options
author | varac <varacanero@zeromail.org> | 2016-07-13 20:07:09 +0200 |
---|---|---|
committer | Varac <varac@leap.se> | 2017-10-16 13:20:14 +0200 |
commit | 11d443664b7a785b42cbbd5b96347bafa5ad273a (patch) | |
tree | 9a27d4c1fe58e3375ae1868cf7a29da1af106265 /jobs | |
parent | fa7cf47e28a4ac1636e947c269ed83abe49a1491 (diff) |
initial commit, import from pixelated_dashboard
Diffstat (limited to 'jobs')
-rw-r--r-- | jobs/jenkins_build_status.rb | 73 | ||||
-rw-r--r-- | jobs/nagios.rb | 90 |
2 files changed, 163 insertions, 0 deletions
diff --git a/jobs/jenkins_build_status.rb b/jobs/jenkins_build_status.rb new file mode 100644 index 0000000..267b8da --- /dev/null +++ b/jobs/jenkins_build_status.rb @@ -0,0 +1,73 @@ +require 'net/http' +require 'json' + +JENKINS_URI = "https://jenkins.leap.se/" + +JENKINS_AUTH = { + 'name' => 'nobody', + 'password' => 'nopw' +} + +SCHEDULER.every '10s' do + + json = getFromJenkins(JENKINS_URI + 'api/json?pretty=true') + + failedJobs = Array.new + puts failedJobs + succeededJobs = Array.new + array = json['jobs'] + array.each { + |job| + + next if job['color'] == 'disabled' + next if job['color'] == 'notbuilt' + next if job['color'] == 'blue' + next if job['color'] == 'blue_anime' + + jobStatus = ''; + if job['color'] == 'yellow' || job['color'] == 'yellow_anime' + jobStatus = getFromJenkins(job['url'] + 'lastUnstableBuild/api/json') + elsif job['color'] == 'aborted' || job['color'] == 'aborted_anime' + jobStatus = getFromJenkins(job['url'] + 'lastUnsuccessfulBuild/api/json') + else + jobStatus = getFromJenkins(job['url'] + 'lastFailedBuild/api/json') + end + + culprits = jobStatus['culprits'] + + culpritName = getNameFromCulprits(culprits) + if culpritName != '' + culpritName = culpritName.partition('<').first + end + + failedJobs.push({ label: job['name'], value: culpritName}) + } + + failed = failedJobs.size > 0 + + send_event('jenkinsBuildStatus', { failedJobs: failedJobs, succeededJobs: succeededJobs, failed: failed }) +end + +def getFromJenkins(path) + + uri = URI.parse(path) + + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + request = Net::HTTP::Get.new(uri.request_uri) + ##if JENKINS_AUTH['name'] + # request.basic_auth(JENKINS_AUTH['name'], JENKINS_AUTH['password']) + #end + response = http.request(request) + + json = JSON.parse(response.body) + return json +end + +def getNameFromCulprits(culprits) + culprits.each { + |culprit| + return culprit['fullName'] + } + return '' +end diff --git a/jobs/nagios.rb b/jobs/nagios.rb new file mode 100644 index 0000000..4186d22 --- /dev/null +++ b/jobs/nagios.rb @@ -0,0 +1,90 @@ +SCHEDULER.every '10s' do + require 'bundler/setup' + require 'nagiosharder' + require 'pp' + + environments = { + cdev: { + domain: 'cdev.bitmask.i', + query_url: 'https://unstable.bitmask.net/cgi-bin/nagios3/', + home_url: 'https://unstable.bitmask.net/nagios3/', + username: 'nagiosadmin', + password: ENV['UNSTABLE_PASS'] + }, + dev: { + domain: 'dev.bitmask.i', + query_url: 'https://unstable.bitmask.net/cgi-bin/nagios3/', + home_url: 'https://unstable.bitmask.net/nagios3/', + username: 'nagiosadmin', + password: ENV['UNSTABLE_PASS'] + }, + unstable: { + domain: 'unstable.bitmask.i', + query_url: 'https://unstable.bitmask.net/cgi-bin/nagios3/', + home_url: 'https://unstable.bitmask.net/nagios3/', + username: 'nagiosadmin', + password: ENV['UNSTABLE_PASS'] + }, + } + + environments.each do |key, env| + nag = NagiosHarder::Site.new(env[:query_url], env[:username], env[:password],'3','iso8601') + unacked = nag.service_status( + :host_status_types => [:all], + :service_status_types => [:warning, :critical, :unknown], + :service_props => [:no_scheduled_downtime, :state_unacknowledged] + ) + + critical_count = 0 + critical_services = Array.new + warning_count = 0 + warning_services = Array.new + unknown_count = 0 + unknown_services = Array.new + + unacked.each do |alert| + next if ! alert["host"].include? env[:domain] + next if ! tried_at_maximum(alert["attempts"]) + + if alert["status"].eql? "CRITICAL" + critical_count += 1 + critical_services << alert["service"] + elsif alert["status"].eql? "WARNING" + warning_count += 1 + warning_services << alert["service"] + elsif alert["status"].eql? "UNKNOWN" + unknown_count += 1 + unknown_services << alert["service"] + end + end + + if ['cdev.bitmask.i', 'dev.bitmask.i', 'unstable.bitmask.i'].include? env[:domain] + status = critical_count + warning_count + unknown_count > 0 ? "gray" : "green" + else + status = critical_count > 0 ? "red" : (warning_count + unknown_count > 0 ? "yellow" : "green") + end + + # nagiosharder may not alert us to a problem querying nagios. + # If no problems found check that we fetch service status and + # expect to find more than 0 entries. + if critical_count == 0 and warning_count == 0 and unknown_count == 0 + if nag.service_status.length == 0 + status = "error" + end + end + + puts key.to_s + ": " + critical_count.to_s + puts critical_services.join(", ") + puts + + send_event('nagios-' + key.to_s, { + criticals: critical_count, critical_services: critical_services, + warnings: warning_count, warning_services: warning_services, + unknown: unknown_count, unknown_services: unknown_services, + status: status, nagios_url: env[:home_url]}) + end +end + +def tried_at_maximum(attempts) + return attempts ? attempts.split("/").uniq.size == 1 : false +end |