Skip to content

Commit 6569f20

Browse files
committed
fix: create appropriate header for the response to the 'mamonsu agent <...>' command
1 parent 4cb0c4f commit 6569f20

File tree

3 files changed

+124
-29
lines changed

3 files changed

+124
-29
lines changed

mamonsu/tools/agent/agent.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@ def __init__(self, config, *args):
3838
self.sender = config.sender
3939
BaseHTTPRequestHandler.__init__(self, *args)
4040

41-
def do_HEAD(self):
41+
def _set_header(self):
4242
self.send_response(200)
43-
self.send_header('Content-type', 'text/html')
43+
self.send_header("Content-type", "text/html")
4444
self.end_headers()
4545

46+
def do_HEAD(self):
47+
self._set_header()
48+
4649
def do_GET(self):
50+
self._set_header()
4751
req = parse(self.path)
4852
if req.path in '/version':
4953
self.wfile.write(API.VERSION)

mamonsu/tools/agent/start.py

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from mamonsu.lib.const import API
88
from mamonsu.lib.config import Config
99

10-
import urllib.request as urllib2
10+
import urllib.request as urllib
11+
from urllib.error import URLError, HTTPError
1112

1213

1314
def run_agent():
@@ -58,34 +59,32 @@ def print_help():
5859
else:
5960
return print_help()
6061

61-
request = urllib2.Request(url)
62+
request = urllib.Request(url)
6263
try:
63-
response = urllib2.urlopen(request)
64-
except Exception as e:
64+
response = urllib.urlopen(request)
65+
except HTTPError as e:
66+
sys.stderr.write('The server couldn\'t fulfill the request. : {0}, error: {1}\n'.format(
67+
url, e.code))
68+
sys.exit(9)
69+
except URLError as e:
6570
sys.stderr.write('Open url: {0}, error: {1}\n'.format(
71+
url, e.reason))
72+
sys.exit(8)
73+
74+
try:
75+
body = response.read()
76+
except Exception as e:
77+
sys.stderr.write('Read url: {0}, error: {1}\n'.format(
6678
url, e))
6779
sys.exit(9)
68-
69-
if not response.code == 200:
70-
sys.stderr.write('Bad response from url {0}, code: {1}\n'.format(
71-
url,
72-
response.code))
73-
sys.exit(8)
80+
if body == API.UNKNOWN_VERSION:
81+
sys.stderr.write('Unknown API version\n')
82+
sys.exit(9)
83+
elif body == API.METRIC_NOT_FOUND and key is not None:
84+
sys.stderr.write('Metric \'{0}\' not found\n'.format(key))
85+
sys.exit(9)
86+
elif body == API.METRIC_NOT_FOUND and key is None:
87+
sys.stderr.write('Unknown API version\n')
88+
sys.exit(9)
7489
else:
75-
try:
76-
body = response.read()
77-
except Exception as e:
78-
sys.stderr.write('Read url: {0}, error: {1}\n'.format(
79-
url, e))
80-
sys.exit(9)
81-
if body == API.UNKNOWN_VERSION:
82-
sys.stderr.write('Unknown API version\n')
83-
sys.exit(9)
84-
elif body == API.METRIC_NOT_FOUND and key is not None:
85-
sys.stderr.write('Metric \'{0}\' not found\n'.format(key))
86-
sys.exit(9)
87-
elif body == API.METRIC_NOT_FOUND and key is None:
88-
sys.stderr.write('Unknown API version\n')
89-
sys.exit(9)
90-
else:
91-
print(body)
90+
print(body.decode("utf8"))

mamonsu/tools/agent/start.py.bak

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# -*- coding: utf-8 -*-
2+
import sys
3+
import optparse
4+
5+
from mamonsu import __version__
6+
from mamonsu.lib.const import API
7+
from mamonsu.lib.config import Config
8+
import mamonsu.lib.platform as platform
9+
10+
if platform.PY3:
11+
import urllib.request as urllib2
12+
else:
13+
import urllib2
14+
15+
16+
def run_agent():
17+
18+
def print_help():
19+
print(usage_msg)
20+
sys.exit(7)
21+
22+
usage_msg = """
23+
{prog} agent [OPTIONS] COMMANDS
24+
25+
Examples:
26+
{prog} agent version
27+
{prog} agent metric-list
28+
{prog} agent metric-get <metric key>
29+
""".format(prog=sys.argv[0])
30+
31+
parser = optparse.OptionParser(
32+
usage=usage_msg,
33+
version='%prog agent {0}'.format(__version__))
34+
parser.add_option(
35+
'-c', '--config', dest='config',
36+
help=optparse.SUPPRESS_HELP)
37+
args, commands = parser.parse_args()
38+
39+
cfg = Config(args.config)
40+
host = cfg.fetch('agent', 'host')
41+
port = cfg.fetch('agent', 'port', int)
42+
url, key = None, None
43+
44+
if len(commands) == 0:
45+
return print_help()
46+
if commands[0] == 'version':
47+
if len(commands) >= 2:
48+
return print_help()
49+
url = 'http://{0}:{1}/version'.format(host, port)
50+
elif commands[0] == 'metric-list':
51+
if len(commands) >= 2:
52+
return print_help()
53+
url = 'http://{0}:{1}/list'.format(host, port)
54+
elif commands[0] == 'metric-get':
55+
if not len(commands) == 2:
56+
return print_help()
57+
key = commands[1]
58+
url = 'http://{0}:{1}/get?key={2}'.format(host, port, key)
59+
else:
60+
return print_help()
61+
62+
request = urllib2.Request(url)
63+
try:
64+
response = urllib2.urlopen(request)
65+
except Exception as e:
66+
sys.stderr.write('Open url: {0}, error: {1}\n'.format(
67+
url, e))
68+
sys.exit(9)
69+
70+
if not response.code == 200:
71+
sys.stderr.write('Bad response from url {0}, code: {1}\n'.format(
72+
url,
73+
response.code))
74+
sys.exit(8)
75+
else:
76+
try:
77+
body = response.read()
78+
except Exception as e:
79+
sys.stderr.write('Read url: {0}, error: {1}\n'.format(
80+
url, e))
81+
sys.exit(9)
82+
if body == API.UNKNOWN_VERSION:
83+
sys.stderr.write('Unknown API version\n')
84+
sys.exit(9)
85+
elif body == API.METRIC_NOT_FOUND and key is not None:
86+
sys.stderr.write('Metric \'{0}\' not found\n'.format(key))
87+
sys.exit(9)
88+
elif body == API.METRIC_NOT_FOUND and key is None:
89+
sys.stderr.write('Unknown API version\n')
90+
sys.exit(9)
91+
else:
92+
print(body)

0 commit comments

Comments
 (0)