jenkinsgrowler 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'jenkinsgrowler'
@@ -0,0 +1,65 @@
1
+ require 'optparse'
2
+
3
+ module JenkinsGrowler
4
+
5
+ class ArgumentsParser
6
+
7
+ def parse(args)
8
+ options = {}
9
+
10
+ optparse = OptionParser.new do |opts|
11
+ opts.banner = "Usage: jenkinsgrowler [options]"
12
+
13
+ options[:server_url] = nil
14
+ options[:jobs] = []
15
+ options[:poll_interval] = 60
16
+ options[:username] = nil
17
+ options[:password] = nil
18
+ options[:timezone] = "+0530"
19
+
20
+
21
+ opts.on("-s","--server SERVER_URL","URL of the jenkins server") do |url|
22
+ options[:server_url] = url
23
+ end
24
+
25
+ opts.on("-j","--jobs JOBS","Comma separated jobs names") do |jobs|
26
+ if (jobs.length > 0) then
27
+ jobs.split(',').each do |job|
28
+ options[:jobs] << job.strip()
29
+ end
30
+ end
31
+ end
32
+
33
+ opts.on("-i","--interval INTEVAL","Polling interval in seconds. Default (60 seconds)") do |interval|
34
+ options[:poll_interval] = interval.to_i
35
+ end
36
+
37
+ opts.on("-u","--user USERNAME","Username for basic authentication") do |username|
38
+ options[:username] = username
39
+ end
40
+
41
+ opts.on("-p","--password PASSWORD","Password for basic authentication") do |password|
42
+ options[:password] = password
43
+ end
44
+
45
+ opts.on("-t","--timezone TIMEZONE", "Server's timezone. Default (+0530)") do |timezone|
46
+ options[:timezone] = timezone
47
+ end
48
+
49
+ opts.on( "-h", "--help", "Displays help message" ) do
50
+ puts opts
51
+ exit
52
+ end
53
+ end
54
+
55
+ optparse.parse!(args)
56
+
57
+ if(options[:server_url] == nil || options[:jobs].length == 0)
58
+ puts optparse
59
+ exit(-1)
60
+ end
61
+
62
+ options
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,77 @@
1
+ require 'rubygems'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'uri'
5
+ require 'date'
6
+ require 'argumentsparser'
7
+
8
+ options = JenkinsGrowler::ArgumentsParser.new.parse(ARGV)
9
+
10
+ $ciBaseUrl = options[:server_url]
11
+ $jobs = options[:jobs]
12
+ $interval = options[:poll_interval]
13
+ $username = options[:username]
14
+ $password = options[:password]
15
+ $timezone = options[:timezone]
16
+
17
+ $jobRuns = Hash.new
18
+
19
+ def last_build_output(job)
20
+ uri = URI.parse("#{$ciBaseUrl}/job/#{job}/lastBuild/api/json")
21
+ http = Net::HTTP.new(uri.host, uri.port)
22
+ request = Net::HTTP::Get.new(uri.request_uri)
23
+ if ($username !=nil && $password != nil) then
24
+ request.basic_auth($username, $password)
25
+ end
26
+
27
+ res = http.request(request)
28
+ JSON.parse res.body
29
+ end
30
+
31
+
32
+ def changed_recently(buildTime, job)
33
+ buildRunTime = DateTime.strptime("#{buildTime}#{$timezone}", '%Y-%m-%d_%H-%M-%S%z')
34
+
35
+ if $jobRuns[job] == nil then
36
+ $jobRuns[job] = buildRunTime
37
+ return false
38
+ end
39
+
40
+ if buildRunTime > $jobRuns[job] then
41
+ $jobRuns[job] = buildRunTime
42
+ return true
43
+ end
44
+ return false
45
+ end
46
+
47
+
48
+ def build_status(job)
49
+ buildOutput = last_build_output job
50
+ puts(buildOutput)
51
+ building = buildOutput['building']
52
+ buildTime = buildOutput['id']
53
+ duration = buildOutput['duration']
54
+
55
+ if building or !changed_recently(buildTime, job) then
56
+ return
57
+ end
58
+
59
+ result = buildOutput['result']
60
+ description = buildOutput['fullDisplayName']
61
+ url = buildOutput['url']
62
+
63
+ comments = ''
64
+ buildOutput['changeSet']['items'].each do |item|
65
+ comments += item['comment']
66
+ end
67
+
68
+ %x[ growlnotify -t "#{result}" -m "#{description}\n#{comments}" ]
69
+ end
70
+
71
+ while true do
72
+ $jobs.each do |job|
73
+ build_status job
74
+ end
75
+
76
+ sleep $interval
77
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jenkinsgrowler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Srivatsa Katta
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mocha
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.12.3
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.12.3
30
+ description: Jenkinsgrowler is a notifier for jenkins jobs
31
+ email: vatsa.katta@gmail.com
32
+ executables:
33
+ - jenkinsgrowler
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - lib/jenkinsgrowler.rb
38
+ - lib/argumentsparser.rb
39
+ - bin/jenkinsgrowler
40
+ homepage: http://github.com/katta/jenkinsgrowler
41
+ licenses: []
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 1.8.25
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: Growl notifier for jenkins jobs
64
+ test_files: []