5 # Manage settings for the Zabbix installtion and
6 # other monitor-related things
8 # Stephen Soltesz <soltesz@cs.princeton.edu>
9 # Copyright (C) 2008 The Trustees of Princeton University
14 # Source function library and configuration
15 . /etc/plc.d/functions
16 . /etc/plc.d/monitor.functions
17 . /etc/planetlab/plc_config
18 local_config=/etc/planetlab/configs/site.xml
20 MONITORPATH=/usr/share/monitor
26 PGDATA=/var/lib/pgsql/data
27 postgresql_conf=$PGDATA/postgresql.conf
28 pghba_conf=$PGDATA/pg_hba.conf
30 # Export so that we do not have to specify -p to psql invocations
31 export PGPORT=$PLC_DB_PORT
34 MONITOR_DB_USER="monitoruser"
35 MONITOR_DB_NAME="monitor"
39 if [ -z "$PLC_MONITOR_IP" ] ; then
40 PLC_MONITOR_IP=$( gethostbyname $PLC_MONITOR_HOST )
43 function check_monitor_schema_and_data()
45 # NOTE: call create_all() to setup the database from the info model.
46 python -c "from monitor.database.info.model import *; from elixir import create_all; create_all()"
49 function check_monitor_conf ()
51 MONITOR_CONFIG=/etc/monitor.conf
53 # Using plcsh add default, monitor user
54 plcsh <<EOF &>/dev/null
55 AddPerson({'first_name' : 'Monitor', 'last_name' : 'Server', 'password' : '${PLC_MONITOR_DBPASSWORD}', 'email' : '${PLC_MONITOR_EMAIL}'})
56 AddRoleToPerson('admin', '${PLC_MONITOR_EMAIL}')
57 AddPersonToSite('${PLC_MONITOR_EMAIL}', '${PLC_SLICE_PREFIX}')
58 UpdatePerson('${PLC_MONITOR_EMAIL}', { 'enabled' : True, 'password' : '${PLC_MONITOR_DBPASSWORD}' })
61 if [ ! -f ${MONITOR_CONFIG} ] ; then
62 cat <<EOF > ${MONITOR_CONFIG}
65 RT_WEB_SERVER=http://${PLC_RT_HOST}/
66 RT_WEB_TOOLS_PATH=/usr/bin/
67 RT_WEB_USER=${PLC_RT_WEB_USER}
68 RT_WEB_PASSWORD=${PLC_RT_WEB_PASSWORD}
70 RT_QUEUE=${PLC_MONITOR_RT_QUEUE}
73 API_SERVER=https://${PLC_API_HOST}:${PLC_API_PORT}/PLCAPI/
74 API_AUTH_USER=${PLC_MONITOR_EMAIL}
75 API_AUTH_PASSWORD=${PLC_MONITOR_DBPASSWORD}
78 MONITOR_SCRIPT_ROOT=${MONITORPATH}
79 MONITOR_DATA_ROOT=/var/lib/monitor
80 MONITOR_ARCHIVE_ROOT=/var/lib/monitor/archive-pdb
81 MONITOR_BOOTMANAGER_LOG=/var/www/html/monitorlog
83 MONITOR_HOSTNAME=${PLC_MONITOR_HOST}
84 MONITOR_IP=${PLC_MONITOR_IP}
86 PLC_WWW_HOSTNAME=${PLC_WWW_HOST}
90 email=${PLC_MONITOR_CC_EMAIL}
91 # all messages will appear to be from this address
92 from_email=${PLC_MONITOR_EMAIL}
93 # a separate address for support messages
94 support_email=${PLC_MAIL_SUPPORT_ADDRESS}
95 # mailing list copied on all out-going messages
96 cc_email=${PLC_MONITOR_CC_EMAIL}
98 # these are reserved values
99 RT_DB_HOST=${PLC_RT_HOST}
105 monitor_dburi=postgres://${MONITOR_DB_USER}:${PLC_MONITOR_DBPASSWORD}@localhost:5432/${MONITOR_DB_NAME}
106 zabbix_dburi=postgres://${ZABBIX_DB_USER}:${PLC_MONITOR_DBPASSWORD}@localhost:5432/${ZABBIX_DB_NAME}
110 # Evaluated as true or false
128 function create_httpd_conf ()
130 MONITOR_HTTP_CONF=/etc/httpd/conf.d/monitorweb.conf
132 if [ ! -f ${MONITOR_HTTP_CONF} ] ; then
133 # note: we need to either start this script before httpd, or always
134 # restart httpd, since there's no way to know beyond file's existence
135 # whether the values have changed or not.
136 WROTE_HTTP_CONFIG="true"
139 # TODO: support HTTPS as well as port 80. currently not specifying port
140 # 80 breaks https for other content on the myplc.
141 # TODO: make proxy port configurable.
143 cat <<EOF > ${MONITOR_HTTP_CONF}
145 # NOTE: I've tried other means of redirection, including mod_rewrite, but did
146 # not have any success. The means below is not idea, b/c it does not keep
147 # non-ssl session as non-ssl. But it works.
149 # NOTE: redirect path without trailing '/' to path with. Favor SSL.
150 Redirect /monitor https://${PLC_MONITOR_HOST}:${PLC_WWW_SSL_PORT}/monitor/
152 # NOTE: this directive strips '/monitor/' from the requested path and pastes
153 # the remaining part to the end of the ProxyPass url below. All TG urls
154 # should be relative to their current position, or the absolute path
155 # that includes /monitor/ at the beginning.
156 # TODO: make location configurable.
157 <Location '/monitor/'>
159 #Errorlog /var/log/httpd/monitorwebapp-error_log
160 #Customlog /var/log/httpd/monitorwebapp-access_log common
162 ProxyPass http://127.0.0.1:8082/
163 ProxyPassReverse http://127.0.0.1:8082/
169 function start_tg_server ()
172 pushd ${MONITORPATH}/web/MonitorWeb/
173 ./start-monitorweb.py ${MONITORPATH}/web/MonitorWeb/prod.cfg &> /var/log/monitorweb.log &
177 function stop_tg_server ()
179 pid=$( cat /var/run/monitorweb.pid )
180 if [ -n "$pid" ] ; then
185 if [ "$PLC_MONITOR_ENABLED" != "1" ] ; then
191 MESSAGE=$"Bootstrap Monitoring (please wait...)"
194 # DATABASE acces, creation, and data loading
195 check_pg_hba $MONITOR_DB_NAME $MONITOR_DB_USER
196 check_user_and_db $MONITOR_DB_NAME $MONITOR_DB_USER
197 # WRITE default /etc/monitor.conf
200 if [ -n "$WROTE_PG_CONFIG" ] ; then
201 # NOTE: restart db to enable access by users granted above.
202 service plc restart postgresql
203 service plc restart httpd
204 MESSAGE=$"Bootstrap Monitoring 2 (please wait...)"
208 check_monitor_schema_and_data
210 # create /etc/httpd/conf.d/monitorweb.conf
212 if [ -n "$WROTE_HTTP_CONFIG" ] ; then
213 # NOTE: restart web server to enable access web cfg
214 service plc restart httpd
215 MESSAGE=$"Bootstrap Monitoring 3 (please wait...)"
224 MESSAGE=$"Restarting monitor web app..."
234 MESSAGE=$"Deleting databases..."
237 dropdb -U postgres $MONITOR_DB_NAME
238 dropuser -U postgres $MONITOR_DB_USER
244 MESSAGE=$"Stopping Monitor"
248 # todo: disable cron entry?