Skip to content

Commit ad3f699

Browse files
author
alexander popov
committed
Merge branch 'python3' into dev
2 parents 81b13a3 + 6569f20 commit ad3f699

File tree

9 files changed

+35311
-4987
lines changed

9 files changed

+35311
-4987
lines changed

Makefile.tests

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ run_builds:
55
docker run --rm -v "$(WORKDIR)":/var/tmp debian:9 /bin/bash -ex "/var/tmp/tests/build_deb.sh"
66

77
run_functional_tests:
8-
docker run --rm -v "$(WORKDIR)":/var/tmp centos:6 /bin/bash -ex "/var/tmp/tests/check.sh"
8+
docker run -v "$(WORKDIR)":/var/tmp centos:7 /bin/bash -ex "/var/tmp/tests/check.sh"

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)

tests/check.sh

Lines changed: 51 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,24 @@ export ZABBIX_TEMPLATE_NAME='PostgresPro'
1111
# install mamonsu
1212
cp -a /var/tmp /root/mamonsu && pushd /root/mamonsu
1313
yum install -y tar make rpm-build python3-devel python3-setuptools
14+
1415
make rpm && yum install -y mamonsu*.rpm
1516

1617
# install postgres
17-
yum install -y https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-redhat-repo-42.0-11.noarch.rpm
18-
yum install -y postgresql95-server postgresql95-contrib
19-
su postgres -c '/usr/pgsql-9.5/bin/initdb -D /var/lib/pgsql/9.5/data'
20-
su postgres -c '/usr/pgsql-9.5/bin/pg_ctl start -w -D /var/lib/pgsql/9.5/data'
18+
yum install -y https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-redhat-repo-42.0-11.noarch.rpm
19+
yum install -y postgresql10-server postgresql10-contrib
20+
su postgres -c '/usr/pgsql-10/bin/initdb -D /var/lib/pgsql/10/data'
21+
su postgres -c '/usr/pgsql-10/bin/pg_ctl start -w -D /var/lib/pgsql/10/data'
2122

2223
# mamonsu tune
23-
echo "shared_preload_libraries = '\"\$libdir/pg_stat_statements\"'" > /var/lib/pgsql/9.5/data/postgresql.auto.conf
24-
su postgres -c '/usr/pgsql-9.5/bin/pg_ctl restart -w -D /var/lib/pgsql/9.5/data'
24+
echo "shared_preload_libraries = '\"\$libdir/pg_stat_statements\"'" > /var/lib/pgsql/10/data/postgresql.auto.conf
25+
su postgres -c '/usr/pgsql-10/bin/pg_ctl restart -w -D /var/lib/pgsql/10/data'
2526
mamonsu tune
26-
su postgres -c '/usr/pgsql-9.5/bin/pg_ctl restart -w -D /var/lib/pgsql/9.5/data'
27-
grep "shared_preload_libraries \= '\"\$libdir/pg_stat_statements\", pg_buffercache'" /var/lib/pgsql/9.5/data/postgresql.auto.conf || (cat /var/lib/pgsql/9.5/data/postgresql.auto.conf && exit 1)
27+
su postgres -c '/usr/pgsql-10/bin/pg_ctl restart -w -D /var/lib/pgsql/10/data'
28+
grep "shared_preload_libraries \= '\"\$libdir/pg_stat_statements\", pg_buffercache'" /var/lib/pgsql/10/data/postgresql.auto.conf || (cat /var/lib/pgsql/10/data/postgresql.auto.conf && exit 1)
2829

2930
# mamonsu report
30-
(mamonsu report | grep version | grep 'PostgreSQL 9.5') || exit 2
31+
(mamonsu report | grep version | grep 'PostgreSQL 10') || exit 2
3132

3233
# export config
3334
cat <<EOF > /etc/mamonsu/plugins/def_conf_test.py
@@ -49,7 +50,7 @@ grep external_plugin_config /tmp/config || exit 3
4950
sed -i 's|.*max_checkpoint_by_wal_in_hour =.*|max_checkpoint_by_wal_in_hour = 5555555555555|g' /tmp/config
5051

5152
# write zabbix template
52-
mamonsu export template $ZABBIX_TEMPLATE -t $ZABBIX_TEMPLATE_NAME -c /tmp/config --old-zabbix
53+
mamonsu export template $ZABBIX_TEMPLATE -t $ZABBIX_TEMPLATE_NAME -c /tmp/config
5354
grep 5555555555555 /tmp/template.xml || exit 4
5455
grep 'pgsql\.uptime\[\]' /tmp/template.xml || exit 4
5556
grep 'system\.disk\.all_read' /tmp/template.xml || exit 4
@@ -72,15 +73,26 @@ mamonsu export config /tmp/config -a /etc/mamonsu/plugins -c /etc/mamonsu/agent.
7273
grep external_plugin_config2 /tmp/config || exit 5
7374

7475
# install zabbix
75-
yum install -y http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
76-
yum install -y zabbix-server-pgsql zabbix-web-pgsql
76+
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
77+
yum clean all
78+
yum install -y zabbix-server-pgsql zabbix-agent
79+
yum install -y centos-release-scl
80+
81+
sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/zabbix.repo
82+
83+
cat /etc/yum.repos.d/zabbix.repo
84+
85+
yum install -y zabbix-web-pgsql-scl zabbix-apache-conf-scl
86+
87+
sed -i "s,;date.timezone =,date.timezone = 'US/Eastern'," /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
88+
89+
sed -i "s|; php_value[date.timezone] = Europe/Riga'|php_value[date.timezone] = Europe/Riga'|g" /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
7790

78-
sed -i "s,;date.timezone =,date.timezone = 'US/Eastern'," /etc/php.ini
7991
su postgres -c 'createdb zabbix'
8092
su postgres -c 'createuser -a -d -E zabbix'
81-
psql -1 -f $TESTDIR/zabbix_sql/schema.sql -U zabbix -d zabbix
82-
psql -1 -f $TESTDIR/zabbix_sql/images.sql -U zabbix -d zabbix
83-
psql -1 -f $TESTDIR/zabbix_sql/data.sql -U zabbix -d zabbix
93+
94+
psql -1 -f $TESTDIR/zabbix_sql/create.sql -U zabbix -d zabbix
95+
8496
cat <<EOF > /etc/zabbix/zabbix_server.conf
8597
AlertScriptsPath=/usr/lib/zabbix/alertscripts
8698
ExternalScripts=/usr/lib/zabbix/externalscripts
@@ -109,26 +121,29 @@ global \$DB;
109121
?>
110122
EOF
111123
cp /usr/share/zabbix/conf/zabbix.conf.php /etc/zabbix/web/zabbix.conf.php
112-
/etc/init.d/zabbix-server start
113-
/etc/init.d/httpd start
114124

115-
# export template to zabbix
125+
/usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
126+
/usr/sbin/httpd -D FOREGROUND&
127+
/opt/rh/rh-php72/root/usr/sbin/php-fpm --nodaemonize&
128+
129+
130+
## export template to zabbix
116131
mamonsu zabbix template export $ZABBIX_TEMPLATE
117132
template_id=$(mamonsu zabbix template id $ZABBIX_TEMPLATE_NAME)
118133
hostgroup_id=$(mamonsu zabbix hostgroup id 'Linux servers')
119134
mamonsu zabbix host create $ZABBIX_CLIENT_HOST $hostgroup_id $template_id 127.0.0.1
120-
135+
#
121136
su postgres -c 'createdb mamonsu'
122-
su postgres -c "/usr/pgsql-9.5/bin/psql -Atc \"CREATE USER mamonsu WITH password 'supersecret'\""
123-
cat <<EOF > /var/lib/pgsql/9.5/data/pg_hba.conf
137+
su postgres -c "/usr/pgsql-10/bin/psql -Atc \"CREATE USER mamonsu WITH password 'supersecret'\""
138+
cat <<EOF > /var/lib/pgsql/10/data/pg_hba.conf
124139
local all all trust
125140
host zabbix zabbix 127.0.0.1/32 trust
126141
host zabbix zabbix ::1/128 trust
127142
host all all 127.0.0.1/32 md5
128143
EOF
129-
su postgres -c '/usr/pgsql-9.5/bin/pg_ctl reload -D /var/lib/pgsql/9.5/data'
144+
su postgres -c '/usr/pgsql-10/bin/pg_ctl reload -D /var/lib/pgsql/10/data'
130145

131-
# start mamonsu and sleep
146+
## start mamonsu and sleep
132147
cat <<EOF > /etc/mamonsu/agent.conf
133148
[postgres]
134149
host = 127.0.0.1
@@ -155,28 +170,29 @@ file = /var/log/mamonsu/agent.log
155170
level = DEBUG
156171
EOF
157172
mamonsu bootstrap -U postgres mamonsu -M mamonsu
158-
/etc/init.d/mamonsu start
173+
##/etc/init.d/mamonsu start
174+
/usr/bin/mamonsu -a /etc/mamonsu/plugins -c /etc/mamonsu/agent.conf&
159175
sleep 125
160176

161-
# check external plugin is worked
177+
## check external plugin is worked
162178
file /tmp/extenal_plugin_is_called || exit 6
163-
164-
# check metric from agent
179+
#
180+
## check metric from agent
165181
mamonsu agent -c /etc/mamonsu/agent.conf version
166182
mamonsu agent metric-get system.disk.all_read[] -c /etc/mamonsu/agent.conf
167183
mamonsu agent -c /etc/mamonsu/agent.conf metric-list | grep system
168184

169-
# metric log
185+
## metric log
170186
grep utilization /tmp/localhost.log || exit 7
171187
grep 'pgsql\.uptime' /tmp/localhost.log || exit 7
172188

173-
# error in zabbix server
189+
## error in zabbix server
174190
(mamonsu zabbix item error $ZABBIX_CLIENT_HOST | grep ZBX_NOTSUPPORTED) && exit 8
175-
176-
# other metric in zabbix server
191+
#
192+
## other metric in zabbix server
177193
(mamonsu zabbix item lastvalue $ZABBIX_CLIENT_HOST | grep uptime) || exit 9
178-
179-
# all plugin alive, exclude pg_wait_sampling
194+
#
195+
## all plugin alive, exclude pg_wait_sampling
180196
(grep -v 'PGWAITSAMPLING' /var/log/mamonsu/agent.log | grep -i 'catch error') && exit 10
181-
197+
#
182198
exit 0

0 commit comments

Comments
 (0)