diff --git a/site-modules/profile/files/swh/deploy/worker/swh-worker@.service b/site-modules/profile/files/swh/deploy/worker/swh-worker@.service index 7472e33e..22baacd7 100644 --- a/site-modules/profile/files/swh/deploy/worker/swh-worker@.service +++ b/site-modules/profile/files/swh/deploy/worker/swh-worker@.service @@ -1,26 +1,25 @@ [Unit] Description=Software Heritage Worker (%i) After=network.target [Service] User=swhworker Group=swhworker Type=simple Environment=SWH_CONFIG_FILENAME=/etc/softwareheritage/%i.yml -# deprecated (kept for retrocompatibility) -Environment=SWH_WORKER_INSTANCE=%i +Environment=SWH_LOG_TARGET=journal Environment=CONCURRENCY=10 Environment=MAX_TASKS_PER_CHILD=5 Environment=LOGLEVEL=info ExecStart=/usr/bin/python3 -m celery worker --app=swh.scheduler.celery_backend.config.app --pool=prefork --events --concurrency=${CONCURRENCY} --maxtasksperchild=${MAX_TASKS_PER_CHILD} -Ofair --loglevel=${LOGLEVEL} --without-gossip --without-mingle --without-heartbeat -n %i.%%h KillMode=process KillSignal=SIGTERM TimeoutStopSec=0 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target \ No newline at end of file diff --git a/site-modules/profile/manifests/swh/deploy/rpc_server.pp b/site-modules/profile/manifests/swh/deploy/rpc_server.pp index 2c3a40fc..c18666b9 100644 --- a/site-modules/profile/manifests/swh/deploy/rpc_server.pp +++ b/site-modules/profile/manifests/swh/deploy/rpc_server.pp @@ -1,146 +1,147 @@ # Deploy an instance of a rpc service define profile::swh::deploy::rpc_server ( String $executable, String $instance_name = $name, String $config_key = $name, String $http_check_string = "SWH ${capitalize($name)} API server", Enum['sync', 'async'] $worker = 'sync', ) { include ::profile::nginx $conf_file = lookup("swh::deploy::${config_key}::conf_file") $user = lookup("swh::deploy::${config_key}::user") $group = lookup("swh::deploy::${config_key}::group") $service_name = "swh-${instance_name}" $gunicorn_service_name = "gunicorn-${service_name}" $gunicorn_unix_socket = "unix:/run/gunicorn/${service_name}/gunicorn.sock" $backend_listen_host = lookup("swh::deploy::${config_key}::backend::listen::host") $backend_listen_port = lookup("swh::deploy::${config_key}::backend::listen::port") $nginx_server_names = lookup("swh::deploy::${config_key}::backend::server_names") $backend_workers = lookup("swh::deploy::${config_key}::backend::workers") $backend_http_keepalive = lookup("swh::deploy::${config_key}::backend::http_keepalive") $backend_http_timeout = lookup("swh::deploy::${config_key}::backend::http_timeout") $backend_reload_mercy = lookup("swh::deploy::${config_key}::backend::reload_mercy") $backend_max_requests = lookup("swh::deploy::${config_key}::backend::max_requests") $backend_max_requests_jitter = lookup("swh::deploy::${config_key}::backend::max_requests_jitter") $instance_config = lookup("swh::deploy::${config_key}::config") include ::gunicorn case $worker { 'sync': { $gunicorn_worker_class = 'sync' $nginx_proxy_buffering = 'on' } 'async': { $gunicorn_worker_class = 'aiohttp.worker.GunicornWebWorker' $nginx_proxy_buffering = 'off' } default: { fail("Worker class ${worker} is unsupported by this module.") } } file {$conf_file: ensure => present, owner => 'root', group => $group, mode => '0640', content => inline_template("<%= @instance_config.to_yaml %>\n"), notify => Service["gunicorn-swh-${instance_name}"], } ::nginx::resource::upstream {"swh-${instance_name}-gunicorn": upstream_fail_timeout => 0, members => [ $gunicorn_unix_socket, ], } # Default server on listen_port: return 444 for wrong domain name ::nginx::resource::server {"nginx-swh-${instance_name}-default": ensure => present, listen_ip => $backend_listen_host, listen_port => $backend_listen_port, listen_options => 'default_server', maintenance => true, maintenance_value => 'return 444', } # actual server ::nginx::resource::server {"nginx-swh-${instance_name}": ensure => present, listen_ip => $backend_listen_host, listen_port => $backend_listen_port, listen_options => 'deferred', server_name => $nginx_server_names, client_max_body_size => '4G', proxy => "http://swh-${instance_name}-gunicorn", proxy_buffering => $nginx_proxy_buffering, proxy_read_timeout => "${backend_http_timeout}s", format_log => "combined if=\$error_status", } ::gunicorn::instance {$service_name: ensure => enabled, user => $user, group => $group, executable => $executable, environment => { 'SWH_CONFIG_FILENAME' => $conf_file, + 'SWH_LOG_TARGET' => 'journal', }, settings => { bind => $gunicorn_unix_socket, workers => $backend_workers, worker_class => $gunicorn_worker_class, timeout => $backend_http_timeout, graceful_timeout => $backend_reload_mercy, keepalive => $backend_http_keepalive, max_requests => $backend_max_requests, max_requests_jitter => $backend_max_requests_jitter, }, } $icinga_checks_file = '/etc/icinga2/conf.d/exported-checks.conf' @@::icinga2::object::service {"swh-${instance_name} api (localhost on ${::fqdn})": service_name => "swh-${instance_name} api (localhost)", import => ['generic-service'], host_name => $::fqdn, check_command => 'http', command_endpoint => $::fqdn, vars => { http_address => '127.0.0.1', http_vhost => '127.0.0.1', http_port => $backend_listen_port, http_uri => '/', http_header => ['Accept: application/json'], http_string => $http_check_string, }, target => $icinga_checks_file, tag => 'icinga2::exported', } if $backend_listen_host != '127.0.0.1' { @@::icinga2::object::service {"swh-${instance_name} api (remote on ${::fqdn})": service_name => "swh-${instance_name} api (remote)", import => ['generic-service'], host_name => $::fqdn, check_command => 'http', vars => { http_vhost => $::swh_hostname['internal_fqdn'], http_port => $backend_listen_port, http_uri => '/', http_header => ['Accept: application/json'], http_string => $http_check_string, }, target => $icinga_checks_file, tag => 'icinga2::exported', } } } diff --git a/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-listener.service.erb b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-listener.service.erb index 292b552e..884addad 100644 --- a/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-listener.service.erb +++ b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-listener.service.erb @@ -1,19 +1,20 @@ # Scheduler Listener unit file # Managed by puppet class profile::swh::deploy::scheduler # Changes will be overwritten [Unit] Description=Software Heritage scheduler listener Requires=network.target rabbitmq-server.service After=network.target rabbitmq-server.service [Service] User=<%= @user %> Group=<%= @group %> Type=simple +Environment=SWH_LOG_TARGET=journal ExecStart=/usr/bin/swh-scheduler --config-file <%= @config_file %> --log-level <%= @listener_log_level %> listener Restart=always RestartSec=10 [Install] WantedBy=multi-user.target diff --git a/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-runner.service.erb b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-runner.service.erb index bc76c9e7..23aced7a 100644 --- a/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-runner.service.erb +++ b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-runner.service.erb @@ -1,19 +1,20 @@ # Scheduler Runner unit file # Managed by puppet class profile::swh::deploy::scheduler # Changes will be overwritten [Unit] Description=Software Heritage scheduler runner Requires=network.target rabbitmq-server.service After=network.target rabbitmq-server.service [Service] User=<%= @user %> Group=<%= @group %> Type=simple +Environment=SWH_LOG_TARGET=journal ExecStart=/usr/bin/swh-scheduler --config-file <%= @config_file %> --log-level <%= @runner_log_level %> runner --period 10 Restart=always RestartSec=10 [Install] WantedBy=multi-user.target