1111import traceback
1212import urllib2
1313import json
14+ import base64
1415
1516logging .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