Skip to content

Commit ae6fb18

Browse files
author
Chris Dent
committed
Allow ceilometer-api to run under mod_wsgi
If CEILOMETER_USE_MOD_WSGI is True then the API app will run under mod wsgi. The default is false (for now). The changes are modeled on keystone's use of apache. Note that these changes are dependent on https://review.openstack.org/#/c/121823/ in ceilometer. Using mod_wsgi allows the ceilometer api to handle "concurrent" requests. This is extremely useful when trying to benchmark various aspects of the service. Change-Id: I4c220c3b52804cd8d9123b47780a98e0346ca81e
1 parent 9241e36 commit ae6fb18

2 files changed

Lines changed: 63 additions & 1 deletion

File tree

files/apache-ceilometer.template

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Listen %PORT%
2+
3+
<VirtualHost *:%PORT%>
4+
WSGIDaemonProcess ceilometer-api processes=2 threads=10 user=%USER% display-name=%{GROUP}
5+
WSGIProcessGroup ceilometer-api
6+
WSGIScriptAlias / %WSGIAPP%
7+
WSGIApplicationGroup %{GLOBAL}
8+
<IfVersion >= 2.4>
9+
ErrorLogFormat "%{cu}t %M"
10+
</IfVersion>
11+
ErrorLog /var/log/%APACHE_NAME%/ceilometer.log
12+
CustomLog /var/log/%APACHE_NAME%/ceilometer_access.log combined
13+
</VirtualHost>
14+
15+
WSGISocketPrefix /var/run/%APACHE_NAME%

lib/ceilometer

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ CEILOMETER_CONF_DIR=/etc/ceilometer
4141
CEILOMETER_CONF=$CEILOMETER_CONF_DIR/ceilometer.conf
4242
CEILOMETER_API_LOG_DIR=/var/log/ceilometer-api
4343
CEILOMETER_AUTH_CACHE_DIR=${CEILOMETER_AUTH_CACHE_DIR:-/var/cache/ceilometer}
44+
CEILOMETER_WSGI_DIR=${CEILOMETER_WSGI_DIR:-/var/www/ceilometer}
4445

4546
# Support potential entry-points console scripts
4647
CEILOMETER_BIN_DIR=$(get_python_exec_prefix)
@@ -52,6 +53,7 @@ CEILOMETER_BACKEND=${CEILOMETER_BACKEND:-mysql}
5253
CEILOMETER_SERVICE_PROTOCOL=http
5354
CEILOMETER_SERVICE_HOST=$SERVICE_HOST
5455
CEILOMETER_SERVICE_PORT=${CEILOMETER_SERVICE_PORT:-8777}
56+
CEILOMETER_USE_MOD_WSGI=$(trueorfalse False $CEILOMETER_USE_MOD_WSGI)
5557

5658
# To enable OSprofiler change value of this variable to "notifications,profiler"
5759
CEILOMETER_NOTIFICATION_TOPICS=${CEILOMETER_NOTIFICATION_TOPICS:-notifications}
@@ -105,12 +107,39 @@ create_ceilometer_accounts() {
105107
}
106108

107109

110+
# _cleanup_keystone_apache_wsgi() - Remove wsgi files, disable and remove apache vhost file
111+
function _cleanup_ceilometer_apache_wsgi {
112+
sudo rm -f $CEILOMETER_WSGI_DIR/*
113+
sudo rm -f $(apache_site_config_for ceilometer)
114+
}
115+
108116
# cleanup_ceilometer() - Remove residual data files, anything left over from previous
109117
# runs that a clean run would need to clean up
110118
function cleanup_ceilometer {
111119
if [ "$CEILOMETER_BACKEND" != 'mysql' ] && [ "$CEILOMETER_BACKEND" != 'postgresql' ] ; then
112120
mongo ceilometer --eval "db.dropDatabase();"
113121
fi
122+
if [ "$CEILOMETER_USE_MOD_WSGI" == "True" ]; then
123+
_cleanup_ceilometer_apache_wsgi
124+
fi
125+
}
126+
127+
function _config_ceilometer_apache_wsgi {
128+
sudo mkdir -p $CEILOMETER_WSGI_DIR
129+
130+
local ceilometer_apache_conf=$(apache_site_config_for ceilometer)
131+
local apache_version=$(get_apache_version)
132+
133+
# copy proxy vhost and wsgi file
134+
sudo cp $CEILOMETER_DIR/ceilometer/api/app.wsgi $CEILOMETER_WSGI_DIR/app
135+
136+
sudo cp $FILES/apache-ceilometer.template $ceilometer_apache_conf
137+
sudo sed -e "
138+
s|%PORT%|$CEILOMETER_SERVICE_PORT|g;
139+
s|%APACHE_NAME%|$APACHE_NAME|g;
140+
s|%WSGIAPP%|$CEILOMETER_WSGI_DIR/app|g;
141+
s|%USER%|$STACK_USER|g
142+
" -i $ceilometer_apache_conf
114143
}
115144

116145
# configure_ceilometer() - Set config files, create data dirs, etc
@@ -163,6 +192,11 @@ function configure_ceilometer {
163192
iniset $CEILOMETER_CONF vmware host_username "$VMWAREAPI_USER"
164193
iniset $CEILOMETER_CONF vmware host_password "$VMWAREAPI_PASSWORD"
165194
fi
195+
196+
if [ "$CEILOMETER_USE_MOD_WSGI" == "True" ]; then
197+
iniset $CEILOMETER_CONF api pecan_debug "False"
198+
_config_ceilometer_apache_wsgi
199+
fi
166200
}
167201

168202
function configure_mongodb {
@@ -223,7 +257,16 @@ function start_ceilometer {
223257
run_process ceilometer-acentral "ceilometer-agent-central --config-file $CEILOMETER_CONF"
224258
run_process ceilometer-anotification "ceilometer-agent-notification --config-file $CEILOMETER_CONF"
225259
run_process ceilometer-collector "ceilometer-collector --config-file $CEILOMETER_CONF"
226-
run_process ceilometer-api "ceilometer-api -d -v --log-dir=$CEILOMETER_API_LOG_DIR --config-file $CEILOMETER_CONF"
260+
261+
if [[ "$CEILOMETER_USE_MOD_WSGI" == "False" ]]; then
262+
run_process ceilometer-api "ceilometer-api -d -v --log-dir=$CEILOMETER_API_LOG_DIR --config-file $CEILOMETER_CONF"
263+
else
264+
enable_apache_site ceilometer
265+
restart_apache_server
266+
tail_log ceilometer /var/log/$APACHE_NAME/ceilometer.log
267+
tail_log ceilometer-api /var/log/$APACHE_NAME/ceilometer_access.log
268+
fi
269+
227270

228271
# Start the compute agent last to allow time for the collector to
229272
# fully wake up and connect to the message bus. See bug #1355809
@@ -248,6 +291,10 @@ function start_ceilometer {
248291

249292
# stop_ceilometer() - Stop running processes
250293
function stop_ceilometer {
294+
if [ "$CEILOMETER_USE_MOD_WSGI" == "True" ]; then
295+
disable_apache_site ceilometer
296+
restart_apache_server
297+
fi
251298
# Kill the ceilometer screen windows
252299
for serv in ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector ceilometer-api ceilometer-alarm-notifier ceilometer-alarm-evaluator; do
253300
stop_process $serv

0 commit comments

Comments
 (0)