summaryrefslogtreecommitdiff
path: root/jobs
diff options
context:
space:
mode:
authorvarac <varacanero@zeromail.org>2016-07-13 20:07:09 +0200
committervarac <varacanero@zeromail.org>2016-07-13 20:07:09 +0200
commit5d01197cf893d4a8c9a57f7c963f47393d34e157 (patch)
tree860e97c0af1ad8c7d4bd1aecb0b7e6658b312846 /jobs
initial commit, import from pixelated_dashboard
Diffstat (limited to 'jobs')
-rw-r--r--jobs/jenkins_build_status.rb73
-rw-r--r--jobs/nagios.rb90
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