mirror of
https://github.com/frappe/bench.git
synced 2025-01-22 22:58:31 +00:00
Merge pull request #1355 from gavindsouza/nginx-access_log
feat(nginx): Allow logging settings as site/combined/none
This commit is contained in:
commit
ac796f1bfd
@ -7,6 +7,7 @@ import click
|
||||
|
||||
# imports - module imports
|
||||
from bench.utils import exec_cmd, run_playbook, which
|
||||
from bench.utils.cli import SugaredOption
|
||||
|
||||
|
||||
@click.group(help="Setup command group for enabling setting up a Frappe environment")
|
||||
@ -25,13 +26,23 @@ def setup_sudoers(user):
|
||||
|
||||
|
||||
@click.command("nginx", help="Generate configuration files for NGINX")
|
||||
@click.option(
|
||||
"--logging", default="combined", type=click.Choice(["none", "site", "combined"])
|
||||
)
|
||||
@click.option(
|
||||
"--log_format",
|
||||
help="Specify the log_format for nginx. Use none or '' to not set a value.",
|
||||
only_if_set=["logging"],
|
||||
cls=SugaredOption,
|
||||
default="main",
|
||||
)
|
||||
@click.option(
|
||||
"--yes", help="Yes to regeneration of nginx config file", default=False, is_flag=True
|
||||
)
|
||||
def setup_nginx(yes=False):
|
||||
def setup_nginx(yes=False, logging="combined", log_format=None):
|
||||
from bench.config.nginx import make_nginx_conf
|
||||
|
||||
make_nginx_conf(bench_path=".", yes=yes)
|
||||
make_nginx_conf(bench_path=".", yes=yes, logging=logging, log_format=log_format)
|
||||
|
||||
|
||||
@click.command("reload-nginx", help="Checks NGINX config file and reloads service")
|
||||
|
@ -9,11 +9,12 @@ import click
|
||||
|
||||
# imports - module imports
|
||||
import bench
|
||||
import bench.config
|
||||
from bench.bench import Bench
|
||||
from bench.utils import get_bench_name
|
||||
|
||||
|
||||
def make_nginx_conf(bench_path, yes=False):
|
||||
def make_nginx_conf(bench_path, yes=False, logging=None, log_format=None):
|
||||
conf_path = os.path.join(bench_path, "config", "nginx.conf")
|
||||
|
||||
if not yes and os.path.exists(conf_path):
|
||||
@ -45,6 +46,12 @@ def make_nginx_conf(bench_path, yes=False):
|
||||
"random_string": "".join(random.choice(string.ascii_lowercase) for i in range(7)),
|
||||
}
|
||||
|
||||
if logging and logging != "none":
|
||||
_log_format = ""
|
||||
if log_format and log_format != "none":
|
||||
_log_format = log_format
|
||||
template_vars["logging"] = {"level": logging, "log_format": _log_format}
|
||||
|
||||
if allow_rate_limiting:
|
||||
template_vars.update(
|
||||
{
|
||||
@ -280,8 +287,6 @@ def use_wildcard_certificate(bench_path, ret):
|
||||
|
||||
|
||||
def get_error_pages():
|
||||
import bench
|
||||
|
||||
bench_app_path = os.path.abspath(bench.__path__[0])
|
||||
templates = os.path.join(bench_app_path, "config", "templates")
|
||||
|
||||
|
@ -31,7 +31,7 @@ server {
|
||||
{% if allow_rate_limiting %}
|
||||
limit_conn per_host_{{ bench_name_hash }} 8;
|
||||
{% endif %}
|
||||
|
||||
|
||||
proxy_buffer_size 128k;
|
||||
proxy_buffers 4 256k;
|
||||
proxy_busy_buffers_size 256k;
|
||||
@ -114,11 +114,20 @@ server {
|
||||
|
||||
{% endfor -%}
|
||||
|
||||
# logs in var
|
||||
access_log /var/log/nginx/{{ site_name }}_access.log main;
|
||||
{% if logging %}
|
||||
{%- if logging.level == "site" -%}
|
||||
|
||||
access_log /var/log/nginx/{{ site_name }}_access.log {{ logging.log_format }};
|
||||
error_log /var/log/nginx/{{ site_name }}_error.log;
|
||||
|
||||
|
||||
{%- elif logging.level == "combined" -%}
|
||||
|
||||
access_log /var/log/nginx/access.log {{ logging.log_format }};
|
||||
error_log /var/log/nginx/error.log;
|
||||
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
|
||||
# optimizations
|
||||
sendfile on;
|
||||
keepalive_timeout 15;
|
||||
|
@ -1,3 +1,4 @@
|
||||
from typing import List
|
||||
import click
|
||||
from click.core import _check_multicommand
|
||||
|
||||
@ -34,6 +35,27 @@ class MultiCommandGroup(click.Group):
|
||||
self.commands[_name] = cmd
|
||||
|
||||
|
||||
class SugaredOption(click.Option):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.only_if_set: List = kwargs.pop("only_if_set")
|
||||
kwargs["help"] = (
|
||||
kwargs.get("help", "")
|
||||
+ f". Option is acceptable only if {', '.join(self.only_if_set)} is used."
|
||||
)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def handle_parse_result(self, ctx, opts, args):
|
||||
current_opt = self.name in opts
|
||||
if current_opt and self.only_if_set:
|
||||
for opt in self.only_if_set:
|
||||
if opt not in opts:
|
||||
deafaults_set = [x.default for x in ctx.command.params if x.name == opt]
|
||||
if not deafaults_set:
|
||||
raise click.UsageError(f"Illegal Usage: Set '{opt}' before '{self.name}'.")
|
||||
|
||||
return super().handle_parse_result(ctx, opts, args)
|
||||
|
||||
|
||||
def use_experimental_feature(ctx, param, value):
|
||||
if not value:
|
||||
return
|
||||
|
Loading…
x
Reference in New Issue
Block a user