Skip to content

Commit

Permalink
Added support for authenticated req. to Jenkins
Browse files Browse the repository at this point in the history
  • Loading branch information
Nils Juenemann committed Aug 1, 2013
1 parent f36f35f commit e550f13
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 3 deletions.
6 changes: 6 additions & 0 deletions jenkins/README.mkdn
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ python module for ganglia 3.1.

## Parameters
* base_url (The URL to query for Jenkins statistics. Default: 'http://127.0.0.1:8080'
* username (Your Jenkins username. Default: ''
* apitoken (Your personal Jenkins API token. Default: ''

## Notes
* This has been tested with:
Expand All @@ -27,3 +29,7 @@ python module for ganglia 3.1.
## AUTHORS

Andreas Lappe <nd@kaeufli.ch>

## CONTRIBUTORS

Nils Juenemann <nils.juenemann@bitplaces.com>
6 changes: 6 additions & 0 deletions jenkins/conf.d/jenkins.pyconf
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ modules {
param base_url {
value = 'http://127.0.0.1:8080'
}
param username {
value = ''
}
param apitoken {
value = ''
}
}
}

Expand Down
22 changes: 19 additions & 3 deletions jenkins/python_modules/jenkins.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import traceback
import urllib2
import json
import base64

logging.basicConfig(level=logging.ERROR)

Expand All @@ -26,6 +27,8 @@ def __init__(self, params):
self.settings = {}
self.refresh_rate = 60
self.base_url = params['base_url']
self.username = params['username']
self.apitoken = params['apitoken']
self._metrics_lock = threading.Lock()
self._settings_lock = threading.Lock()

Expand All @@ -47,12 +50,21 @@ def run(self):
self.running = False

@staticmethod
def _get_jenkins_statistics(url):
def _get_jenkins_statistics(url, username, apitoken):

url += '/api/json'
url += '?tree=jobs[color],overallLoad[busyExecutors[min[latest]],queueLength[min[latest]],totalExecutors[min[latest]]]'

c = urllib2.urlopen(url, None, 2)

if username and apitoken:
url += '&token=' + apitoken
request = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (username, apitoken)).replace('\n','')
request.add_header("Authorization", "Basic %s" % base64string)
c = urllib2.urlopen(request, None, 2)
else:
c = urllib2.urlopen(url, None, 2)

json_data = c.read()
c.close()

Expand Down Expand Up @@ -81,7 +93,7 @@ def refresh_metrics(self):

try:
logging.debug(' opening URL: ' + str(self.base_url))
data = UpdateJenkinsThread._get_jenkins_statistics(self.base_url)
data = UpdateJenkinsThread._get_jenkins_statistics(self.base_url, self.username, self.apitoken)
except:
logging.warning('error refreshing metrics')
logging.warning(traceback.print_exc(file=sys.stdout))
Expand Down Expand Up @@ -225,11 +237,15 @@ def metric_cleanup():
parser.add_option('-u', '--URL', dest='base_url', default='http://127.0.0.1:8080', help='Base-URL for jenkins api (default: http://127.0.0.1:8080)')
parser.add_option('-q', '--quiet', dest='quiet', action='store_true', default=False)
parser.add_option('-d', '--debug', dest='debug', action='store_true', default=False)
parser.add_option('-n', '--username', dest='username', default='', help='Your Jenkins username (default: empty)')
parser.add_option('-a', '--apitoken', dest='apitoken', default='', help='Your API token (default: empty)')

(options, args) = parser.parse_args()

descriptors = metric_init({
'base_url': options.base_url,
'username': options.username,
'apitoken': options.apitoken,
})

if options.debug:
Expand Down

0 comments on commit e550f13

Please sign in to comment.