set home /web/m2 set configDebug 1 ;# set to 1 to print config file values to stdout set configFileList 1 set MainServer jnm # # Upon errors, send email # global ErrorText set ErrorText "" set ErrorFile "/tmp/Errors-jnm.txt" set ConfigTarFile "/tmp/jnm-config-files-list" set ConfigFiles "jnm.tcl" # # Database Usage # set DatabaseConfig "$home/nsdb-jnm.tcl" # # Virtual Servers # set servers { jnm "Junom Test Server" tutos "Tutos" amresolve "Amresolve test" } # # Virtual Server Config Files: # set ServerConfig(jnm) "$home/servers/jnm/config/server.tcl" set ServerConfig(tutos) "$home/servers/tutos/config/server.tcl" set ServerConfig(amresolve) "$home/servers/amresolve/config/server.tcl" # # Global Socket Config Files: # set SockConfig(nssock0) "$home/sock-192.168.111.107:8001.tcl" set SockConfig(nssock2) "$home/sock-192.168.111.107:8005.tcl" set SockConfig(nssock3) "$home/sock-192.168.111.107:80.tcl" # # SockMap: Maps incoming host header with correct server. # set SockMap(nssock0) { amresolve amresolve:8001 amresolve 192.168.111.107:8001 } set SockMap(nssock2) { jnm maria:8005 jnm 192.168.111.107:8005 amresolve amresolve:8005 } set SockMap(nssock3) { tutos maria:80 tutos maria tutos 192.168.111.107 } # # Sock Default Servers # set SockDefaultServer(nssock0) amresolve set SockDefaultServer(nssock2) jnm set SockDefaultServer(nssock3) tutos # # Variables Used Later # set VirtualServerErrors [list] set VirtualServersLoaded [list] # Global Params: ns_section "ns/parameters" ns_param home $home ns_param pidfile $home/log/jnm.nspid ns_param OutputCharset UTF-8 ; #iso8859-1 ns_param URLCharset UTF-8 ; #iso8859-1 ns_param stacksize [expr 64 * 1024] ns_param logusec true ns_param logroll true ns_param logexpand false ns_param debug true ;# false ns_param logdev true ;# false ns_param lognotice true ns_param logmaxbackup 10 ns_param logmaxlevel 256 ;# what is INT_MAX ns_param logmaxbuffer 10 ns_param logflushinterval 10 #ns_param serverlog "jnm-error.log" ;# "server.log" ,relative to home, unless abs ns_param serverlog "/dev/fd/1" ;# redirect to sdtout ns_param shutdowntimeout 20 ns_param schedmaxelapsed 2 ns_param listenbacklog 32 ns_param dnscache true ;# following must be > 0 ns_param dnscachemaxentries 100 ;# entries ns_param dnscachetimeout 60 ;# and timeout > 0 or dnscache disabled ns_param keepalivetimeout 30 ns_param maxkeepalive 100 ns_param keepaliveallmethods false ns_section "ns/mimetypes" ns_param default "*/*" ;# MIME type for unknown extension. ns_param noextension "*/*" ;# MIME type for missing extension. ns_param .adp "text/html; charset=iso-8859-1" ns_param .u_adp "text/html; charset=UTF-8" ns_param .gb_adp "text/html; charset=GB2312" ns_param .sjis_html "text/html; charset=shift_jis" ns_param .sjis_adp "text/html; charset=shift_jis" ns_param .gb_html "text/html; charset=GB2312" ns_param .ico "image/x-icon" # # I18N File-type to Encoding mappings # ns_section "ns/encodings" ns_param .utf_html "utf-8" ns_param .sjis_html "shiftjis" ns_param .gb_html "gb2312" ns_param .big5_html "big5" ns_param .euc-cn_html "euc-cn" ns_param .gb_adp "gb2312" # # Thread library (nsthread) parameters # ns_section "ns/threads" ns_param stacksize [expr 1024*1024] ;# Per-thread stack size. ns_param mutexmeter true # # AOLserver Stats Module # ns_section "ns/server/stats" ns_param enabled 1 ns_param url /aolserver/stats ns_param user nsadmin ns_param password tom ############################ No Editing Below This Line ####################### # # sourcing procedures # proc load_server { server file } { global ErrorText if {![file exists $file]} { append ErrorText " ----------> Unable to load server '$server' ----------> File missing: '$file'\n" return 1 } if {[catch { uplevel source $file } err ]} { append ErrorText " ----------> Unable to load server: '$server' ----------> Error: '$err'\n" return 2 } return 0 } # helper proc proc strip_home_directory { home file } { if {[string first "$home" "$file"] == 0} { return [string range "$file" [string length "$home"] end] } else { return "$file" } } # # Source Virtual Server Config Files: # foreach {server dummy} $servers { #source $ServerConfig($server) if {[load_server "$server" "$ServerConfig($server)"]} { lappend VirtualServerErrors $server } else { lappend VirtualServersLoaded $server lappend ConfigFiles "[file dirname [strip_home_directory "$home/" "$ServerConfig($server)"]]/*" } } # # Set Server Only if Config Loaded: # ns_section "ns/servers" foreach {server server_descr} $servers { if {[lsearch $VirtualServersLoaded $server] > -1} { puts "loading $server $server_descr\n" ns_param $server $server_descr } } # # Virtual Server Mapping to Sock # foreach sock [array names SockConfig] { set Maps($sock) [list] ns_section "ns/module/${sock}/servers" foreach {srv hostname} $SockMap($sock) { if {[lsearch $VirtualServersLoaded $srv] > -1} { ns_param $srv $hostname lappend Maps($sock) $srv } } if {[llength $Maps($sock)] == 0} { # delete socket append ErrorText "nssock: $sock Not Loaded" unset SockMap($sock) } } # # Map Sockets to Servers # # Sockets which have virtual servers mapped will load # foreach {sock} [lsort [array names SockMap]] { if {[file exists $SockConfig($sock)]} { set DefaultVirtualServer $SockDefaultServer($sock) # Default Virtual Server must be set to listen on sock: if {[lsearch $Maps($sock) $DefaultVirtualServer] > -1} { source $SockConfig($sock) lappend ConfigFiles [strip_home_directory "$home/" "$SockConfig($sock)"] } else { append ErrorText "${sock}: default server $SockDefaultServer($sock) not loaded, skipping $sock" } } else { append ErrorText "${sock}: sock config file missing $SockConfig($sock)" } } if {[info exists DatabaseConfig]} { if {[file exists $DatabaseConfig]} { puts "loading $DatabaseConfig\n" source $DatabaseConfig lappend ConfigFiles [strip_home_directory "$home/" "$DatabaseConfig"] } } # # Write Config if Errors Exist # if {![string eq "" "$ErrorText"]} { set configDebug 1 } if {[info exists configDebug] && $configDebug} { set sections [ns_configsections] set output [list] foreach section $sections { set name [ns_set name $section] set section_txt "" append section_txt "ns_section $name\n" set size [ns_set size $section] for {set i 0} {$i < $size} {incr i} { append section_txt "\t[list ns_param [ns_set key $section $i] [ns_set value $section $i]]\n" } lappend output $section_txt } set output "[join [lsort $output] "\n"]\n" puts "\n$output\n" } if {![string eq "" "$ErrorText"]} { set ErrorFd [open $ErrorFile w+] puts $ErrorFd $ErrorText puts $ErrorFd $output close $ErrorFd } if {[info exists ConfigTarFile]} { set ConfigFd [open $ConfigTarFile w+] puts $ConfigFd "\#!/bin/bash cd $home tar cvzf ${MainServer}-config.tar.gz [join $ConfigFiles " "]" close $ConfigFd }