
This change enables cross request to fetch job logs artifacts. Change-Id: I88ef4d559bb9b8fa3b67b51ec750bf9136a62ffb
146 lines
5.6 KiB
Plaintext
146 lines
5.6 KiB
Plaintext
# -*- apache -*-
|
|
# ************************************
|
|
# Managed by Puppet
|
|
# ************************************
|
|
|
|
NameVirtualHost <%= @vhost_name %>:<%= @port %>
|
|
<VirtualHost <%= @vhost_name %>:<%= @port %>>
|
|
ServerName <%= @srvname %>
|
|
<% if @serveraliases.is_a? Array -%>
|
|
<% @serveraliases.each do |name| -%><%= " ServerAlias #{name}\n" %><% end -%>
|
|
<% elsif ! ['', nil, :undef].include?(@serveraliases) -%>
|
|
<%= " ServerAlias #{@serveraliases}" %>
|
|
<% end -%>
|
|
DocumentRoot <%= @docroot %>
|
|
|
|
# Authorize cross request, e.g. fetch job-output from the zuul builds page
|
|
Header set Access-Control-Allow-Origin "*"
|
|
|
|
WSGIDaemonProcess logs user=www-data group=www-data processes=<%= scope.lookupvar('::openstackci::logserver::wsgi_processes') %> threads=<%= scope.lookupvar('::openstackci::logserver::wsgi_threads') %>
|
|
WSGIProcessGroup logs
|
|
WSGIApplicationGroup %{GLOBAL}
|
|
|
|
AddType text/plain .log
|
|
AddType text/plain .sh
|
|
AddType text/plain .yaml
|
|
AddType text/plain .yml
|
|
|
|
# use Apache to compress the results afterwards, to save on the wire
|
|
# it's approx 18x savings of wire traffic to compress. We need to
|
|
# compress by content types that htmlify can produce
|
|
AddOutputFilterByType DEFLATE text/plain text/html application/x-font-ttf image/svg+xml
|
|
|
|
<FilesMatch \.html\.gz$>
|
|
ForceType text/html
|
|
AddDefaultCharset UTF-8
|
|
AddEncoding x-gzip gz
|
|
</FilesMatch>
|
|
<FilesMatch \.css\.gz$>
|
|
ForceType text/css
|
|
AddDefaultCharset UTF-8
|
|
AddEncoding x-gzip gz
|
|
</FilesMatch>
|
|
<FilesMatch \.js\.gz$>
|
|
ForceType text/javascript
|
|
AddDefaultCharset UTF-8
|
|
AddEncoding x-gzip gz
|
|
</FilesMatch>
|
|
<FilesMatch \.ttf\.gz$>
|
|
ForceType application/x-font-ttf
|
|
AddEncoding x-gzip gz
|
|
</FilesMatch>
|
|
<FilesMatch \.svg\.gz$>
|
|
ForceType image/svg+xml
|
|
AddEncoding x-gzip gz
|
|
</FilesMatch>
|
|
<FilesMatch \.json\.gz$>
|
|
ForceType application/json
|
|
AddEncoding x-gzip gz
|
|
</FilesMatch>
|
|
<FilesMatch \.css$>
|
|
# mod_mime_magic is sometimes passing css files as asm sources
|
|
# e.g css files generated by coverage reports
|
|
ForceType text/css
|
|
</FilesMatch>
|
|
<Directory <%= @docroot %>>
|
|
Options <%= @options %>
|
|
AllowOverride None
|
|
Order allow,deny
|
|
allow from all
|
|
Satisfy Any
|
|
</Directory>
|
|
<Directory /usr/local/lib/python2.7/dist-packages/os_loganalyze>
|
|
Allow from all
|
|
Satisfy Any
|
|
</Directory>
|
|
|
|
<% scope.lookupvar('::openstackci::logserver::readmes').each do |pattern, helpfile| -%>
|
|
<Directory <%= @docroot %><%= pattern %>>
|
|
ReadmeName <%= helpfile %>
|
|
</Directory>
|
|
<% end -%>
|
|
|
|
<Directory <%= @docroot %>/periodic*/*>
|
|
IndexOrderDefault Descending Date
|
|
</Directory>
|
|
|
|
RewriteEngine On
|
|
<% if scope.lookupvar('::openstackci::logserver::ara_middleware') -%>
|
|
<Directory "/usr/local/bin">
|
|
<Files "ara-wsgi-sqlite">
|
|
Allow from all
|
|
Satisfy Any
|
|
</Files>
|
|
</Directory>
|
|
# ARA sqlite middleware configuration
|
|
# See docs for details: https://ara.readthedocs.io/en/latest/advanced.html
|
|
SetEnv ARA_WSGI_TMPDIR_MAX_AGE <%= scope.lookupvar('::openstackci::logserver::ara_middleware_tmpdir_max_age') %>
|
|
SetEnv ARA_WSGI_LOG_ROOT <%= @docroot %>
|
|
SetEnv ARA_WSGI_DATABASE_DIRECTORY <%= scope.lookupvar('::openstackci::logserver::ara_middleware_database_directory') %>
|
|
|
|
# Redirect .*/<%= scope.lookupvar('::openstackci::logserver::ara_middleware_database_directory') %> to the ARA sqlite wsgi middleware
|
|
# This middleware automatically loads the ARA web application with the
|
|
# database located at .*/<%= scope.lookupvar('::openstackci::logserver::ara_middleware_database_directory') %>/ansible.sqlite.
|
|
# If we get a request directly to the database file, don't load the middleware
|
|
# so that users can download the raw database if they wish.
|
|
WSGIScriptAliasMatch ^.*/<%= scope.lookupvar('::openstackci::logserver::ara_middleware_database_directory') %>(?!/ansible.sqlite) /usr/local/bin/ara-wsgi-sqlite
|
|
|
|
# Everything beyond this point is rewritten to htmlify.
|
|
# Make sure we don't do that for dynamic ARA reports.
|
|
RewriteCond %{REQUEST_URI} ^.*/<%= scope.lookupvar('::openstackci::logserver::ara_middleware_database_directory') %> [NC]
|
|
RewriteRule .* - [L]
|
|
<% end -%>
|
|
|
|
# If the specified file does not exist, look if there is a gzipped version
|
|
# If there is, serve that one instead
|
|
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
|
|
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.gz -f
|
|
RewriteRule ^/(.*)$ %{REQUEST_URI}.gz
|
|
|
|
# rewrite (txt|log).gz & console.html[.gz] files to map to our
|
|
# internal htmlify wsgi app
|
|
# PT, Pass-through: to come back around and get picked up by the
|
|
# WSGIScriptAlias
|
|
# NS, No-subrequest: on coming back through, mod-autoindex may have added
|
|
# index.html which would match the !-f condition. We
|
|
# therefore ensure the rewrite doesn't trigger by
|
|
# disallowing subrequests.
|
|
RewriteRule ^/(.*\.(txt|log)\.gz)$ /htmlify/$1 [QSA,L,PT,NS]
|
|
RewriteRule ^/(.*console\.html(\.gz)?)$ /htmlify/$1 [QSA,L,PT,NS]
|
|
|
|
# Check if the request exists as a file, directory or symbolic link
|
|
# If not, write the request to htmlify to see if we can fetch from swift
|
|
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
|
|
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
|
|
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-l
|
|
RewriteCond %{REQUEST_FILENAME} !^/icon
|
|
RewriteRule ^/(.*)$ /htmlify/$1 [QSA,L,PT,NS]
|
|
|
|
WSGIScriptAlias /htmlify /usr/local/lib/python2.7/dist-packages/os_loganalyze/wsgi.py
|
|
|
|
ErrorLog /var/log/apache2/<%= @name %>_error.log
|
|
LogLevel warn
|
|
CustomLog /var/log/apache2/<%= @name %>_access.log combined
|
|
ServerSignature Off
|
|
</VirtualHost>
|