Skip to content

Commit a876ffb

Browse files
authored
Merge pull request #86 from renakas/CPCLOUD-5910-Add-support-basic-auth-for-httpd-plugin-in-agent360
[CPCLOUD-5910] Add support for basic auth in apache plugin
2 parents 688bd25 + 67dc3b7 commit a876ffb

1 file changed

Lines changed: 48 additions & 29 deletions

File tree

agent360/plugins/httpd.py

Lines changed: 48 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
from urlparse import urlparse
99
from urllib import urlencode
1010
from urllib2 import urlopen, Request, HTTPError
11+
1112
import time
1213
import plugins
1314
import re
15+
import base64
1416

1517

1618
class Plugin(plugins.BasePlugin):
@@ -21,60 +23,77 @@ def run(self, config):
2123
Apache/httpd status page metrics
2224
'''
2325

24-
prev_cache = {}
25-
next_cache = dict()
26-
next_cache['ts'] = time.time()
27-
prev_cache = self.get_agent_cache() # Get absolute values from previous check
26+
prev_cache = self.get_agent_cache() or {}
27+
next_cache = {'ts': time.time()}
2828

2929
try:
30-
request = Request(config.get('httpd', 'status_page_url'))
30+
url = config.get('httpd', 'status_page_url')
31+
32+
# Optional Basic Auth
33+
#Add to [httpd] in config file:
34+
#username = your_username ; optional
35+
#password = your_password ; optional
36+
37+
username = config.get('httpd', 'username', fallback=None)
38+
password = config.get('httpd', 'password', fallback=None)
39+
40+
request = Request(url)
41+
42+
if username and password:
43+
credentials = f'{username}:{password}'
44+
encoded_credentials = base64.b64encode(credentials.encode('utf-8')).decode('utf-8')
45+
request.add_header('Authorization', f'Basic {encoded_credentials}')
46+
3147
data = urlopen(request).read().decode('utf-8')
48+
3249
except Exception as e:
3350
return False
3451

35-
exp = re.compile('^([A-Za-z ]+):\s+(.+)$')
52+
exp = re.compile(r'^([A-Za-z ]+):\s+(.+)$')
3653
results = {}
37-
def parse_score_board(sb):
38-
39-
ret = []
4054

41-
ret.append(('IdleWorkers', sb.count('_')))
42-
ret.append(('ReadingWorkers', sb.count('R')))
43-
ret.append(('WritingWorkers', sb.count('W')))
44-
ret.append(('KeepaliveWorkers', sb.count('K')))
45-
ret.append(('DnsWorkers', sb.count('D')))
46-
ret.append(('ClosingWorkers', sb.count('C')))
47-
ret.append(('LoggingWorkers', sb.count('L')))
48-
ret.append(('FinishingWorkers', sb.count('G')))
49-
ret.append(('CleanupWorkers', sb.count('I')))
55+
def parse_score_board(sb):
56+
return [
57+
('IdleWorkers', sb.count('_')),
58+
('ReadingWorkers', sb.count('R')),
59+
('WritingWorkers', sb.count('W')),
60+
('KeepaliveWorkers', sb.count('K')),
61+
('DnsWorkers', sb.count('D')),
62+
('ClosingWorkers', sb.count('C')),
63+
('LoggingWorkers', sb.count('L')),
64+
('FinishingWorkers', sb.count('G')),
65+
('CleanupWorkers', sb.count('I')),
66+
]
5067

51-
return ret
5268
for line in data.split('\n'):
5369
if line:
5470
m = exp.match(line)
5571
if m:
56-
k = m.group(1)
57-
v = m.group(2)
58-
59-
# Ignore the following values
60-
if k == 'IdleWorkers' or k == 'Server Built' or k == 'Server Built' \
61-
or k == 'CurrentTime' or k == 'RestartTime' or k == 'ServerUptime' \
62-
or k == 'CPULoad' or k == 'CPUUser' or k == 'CPUSystem' \
63-
or k == 'CPUChildrenUser' or k == 'CPUChildrenSystem' \
64-
or k == 'ReqPerSec':
72+
k, v = m.group(1), m.group(2)
73+
74+
# Skip non-metric fields
75+
ignored_keys = {
76+
'IdleWorkers', 'Server Built', 'CurrentTime', 'RestartTime',
77+
'ServerUptime', 'CPULoad', 'CPUUser', 'CPUSystem',
78+
'CPUChildrenUser', 'CPUChildrenSystem', 'ReqPerSec'
79+
}
80+
if k in ignored_keys:
6581
continue
6682

6783
if k == 'Total Accesses':
6884
results['requests_per_second'] = self.absolute_to_per_second(k, int(v), prev_cache)
6985
next_cache['Total Accesses'] = int(v)
7086

71-
if k == 'Scoreboard':
87+
elif k == 'Scoreboard':
7288
for sb_kv in parse_score_board(v):
7389
results[sb_kv[0]] = sb_kv[1]
7490
else:
7591
results[k] = v
92+
7693
self.set_agent_cache(next_cache)
7794
return results
7895

96+
7997
if __name__ == '__main__':
8098
Plugin().execute()
99+

0 commit comments

Comments
 (0)