#!/bin/sh

#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#    
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

# For this module to work, add the www.example.com domain to your /etc/hosts as
# follows:
# 127.0.0.1 www.example.com

here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`

# Configure and start logging
if [ -x ../../components/log/scribe-cat ]; then
    ../../components/log/scribed-central-conf tmp
    ../../components/log/scribed-client-conf tmp localhost
    ../../components/log/scribed-central-start tmp
    ../../components/log/scribed-client-start tmp
fi

# Start memcached
../../components/cache/memcached-start tmp 11211
../../components/cache/memcached-start tmp 11212

# Configure database
../../components/sqldb/pgsql-conf tmp

# Start database
../../components/sqldb/pgsql-start tmp

# Load database tables
./drop-tables 1>/dev/null 2>/dev/null
./create-tables >/dev/null
./load-tables >/dev/null

# Clear document cache
rm -rf tmp/cache

# Configure server
../../modules/http/httpd-conf tmp www.example.com 8090 htdocs
../../modules/http/alt-host-conf tmp ww1.example.com
../../modules/http/alt-host-conf tmp ww2.example.com
../../modules/http/httpd-event-conf tmp
#../../modules/http/cache-conf tmp

# Configure Python component support
../../modules/server/server-conf tmp
../../modules/python/python-conf tmp

# Configure server log streaming
if [ -x ../../components/log/scribe-cat ]; then
    cat >tmp/conf/log.conf <<EOF
# Generated by: start $*
LogLevel notice
ErrorLog "|$here/../../components/log/scribe-cat localhost server"
CustomLog "|$here/../../components/log/scribe-cat localhost server" combined

EOF

else
    cat >tmp/conf/log.conf <<EOF
# Generated by: start $*
ErrorLog $here/tmp/logs/error_log
CustomLog $here/tmp/logs/access_log combined

EOF

fi
#../../modules/http/httpd-loglevel-conf tmp debug

# Configure error pages
cat >>tmp/conf/svhost.conf <<EOF
# Generated by: start $*
# Error pages
ErrorDocument 404 /public/notfound/
ErrorDocument 401 /public/notauth/
ErrorDocument 403 /public/notauth/
ErrorDocument 400 /public/oops/
ErrorDocument 405 /public/oops/
ErrorDocument 500 /public/oops/
ErrorDocument 502 /public/oops/
ErrorDocument 503 /public/oops/

EOF

# Configure SCA contributions
cat >>tmp/conf/httpd.conf <<EOF
# Generated by: start $*
# Configure SCA Composite
SCAContribution $here/
SCAComposite server.composite

# Configure SCA Composite for mass dynamic virtual Hosting
#SCAVirtualContribution $here/data/apps/
#SCAVirtualComposite app.composite
SCAVirtualContributor Composites

# Configure SCA wiring timeout
SCAWiringTimeout 10

EOF

# Configure resource aliases
cat >>tmp/conf/httpd.conf <<EOF
# Generated by: start $*
Alias /home/home.png $here/htdocs/home/home.png
Alias /home/home.b64 $here/htdocs/home/home.b64
Alias /proxy/public/config.js $here/htdocs/public/config.js
Alias /proxy/public/config-min.js $here/public/config-min.js

EOF

# Configure app resource aliases
cat >>tmp/conf/svhost.conf <<EOF
# Generated by: start $*
# Map /v/<app-name>/<path> to htdocs/app/<path>
AliasMatch /v/([^/]+)(.*)$ $here/htdocs/app\$2

EOF

# Start server
../../modules/http/httpd-start tmp

