Skip to content

Commit 4ac942e

Browse files
committed
Merge pull request ganglia#115 from bitplaces/master
Added support for authenticated requests to Jenkins
2 parents f36f35f + e550f13 commit 4ac942e

3 files changed

Lines changed: 31 additions & 3 deletions

File tree

jenkins/README.mkdn

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ python module for ganglia 3.1.
1818

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

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

2931
Andreas Lappe <[email protected]>
32+
33+
## CONTRIBUTORS
34+
35+
Nils Juenemann <[email protected]>

jenkins/conf.d/jenkins.pyconf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ modules {
88
param base_url {
99
value = 'http://127.0.0.1:8080'
1010
}
11+
param username {
12+
value = ''
13+
}
14+
param apitoken {
15+
value = ''
16+
}
1117
}
1218
}
1319

jenkins/python_modules/jenkins.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import traceback
1212
import urllib2
1313
import json
14+
import base64
1415

1516
logging.basicConfig(level=logging.ERROR)
1617

@@ -26,6 +27,8 @@ def __init__(self, params):
2627
self.settings = {}
2728
self.refresh_rate = 60
2829
self.base_url = params['base_url']
30+
self.username = params['username']
31+
self.apitoken = params['apitoken']
2932
self._metrics_lock = threading.Lock()
3033
self._settings_lock = threading.Lock()
3134

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

4952
@staticmethod
50-
def _get_jenkins_statistics(url):
53+
def _get_jenkins_statistics(url, username, apitoken):
5154

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

55-
c = urllib2.urlopen(url, None, 2)
58+
59+
if username and apitoken:
60+
url += '&token=' + apitoken
61+
request = urllib2.Request(url)
62+
base64string = base64.encodestring('%s:%s' % (username, apitoken)).replace('\n','')
63+
request.add_header("Authorization", "Basic %s" % base64string)
64+
c = urllib2.urlopen(request, None, 2)
65+
else:
66+
c = urllib2.urlopen(url, None, 2)
67+
5668
json_data = c.read()
5769
c.close()
5870

@@ -81,7 +93,7 @@ def refresh_metrics(self):
8193

8294
try:
8395
logging.debug(' opening URL: ' + str(self.base_url))
84-
data = UpdateJenkinsThread._get_jenkins_statistics(self.base_url)
96+
data = UpdateJenkinsThread._get_jenkins_statistics(self.base_url, self.username, self.apitoken)
8597
except:
8698
logging.warning('error refreshing metrics')
8799
logging.warning(traceback.print_exc(file=sys.stdout))
@@ -225,11 +237,15 @@ def metric_cleanup():
225237
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)')
226238
parser.add_option('-q', '--quiet', dest='quiet', action='store_true', default=False)
227239
parser.add_option('-d', '--debug', dest='debug', action='store_true', default=False)
240+
parser.add_option('-n', '--username', dest='username', default='', help='Your Jenkins username (default: empty)')
241+
parser.add_option('-a', '--apitoken', dest='apitoken', default='', help='Your API token (default: empty)')
228242

229243
(options, args) = parser.parse_args()
230244

231245
descriptors = metric_init({
232246
'base_url': options.base_url,
247+
'username': options.username,
248+
'apitoken': options.apitoken,
233249
})
234250

235251
if options.debug:

0 commit comments

Comments
 (0)