Alexandros Kosiaris has submitted this change and it was merged.
Change subject: Log for Apertium
......................................................................
Log for Apertium
(Ab)use apertium-apy's daemon mode as it seems to not be a daemon mode
but just a redict of stderr and stdout. Use $log_dir to redirect those 2
streams to $log_Dir by default as they constitute apertium-apy's logging.
Ensure $log_dir has correct permissions and state and provision a
logrotate stanza. Add uid,gid parameters to make this more clear and
also use them in the initscripts ERBs
TODO: document
Bug: T108797
Change-Id: If6b23c0a468a639ea122b3fcabddf3206aa07390
---
M modules/apertium/manifests/init.pp
M modules/apertium/templates/initscripts/apertium-apy.systemd.erb
M modules/apertium/templates/initscripts/apertium-apy.upstart.erb
A modules/apertium/templates/logrotate.erb
4 files changed, 53 insertions(+), 6 deletions(-)
Approvals:
Alexandros Kosiaris: Verified; Looks good to me, approved
diff --git a/modules/apertium/manifests/init.pp
b/modules/apertium/manifests/init.pp
index 7008178..68232d7 100644
--- a/modules/apertium/manifests/init.pp
+++ b/modules/apertium/manifests/init.pp
@@ -9,9 +9,18 @@
# Number of APY instance processes to run
# [*max_idle_seconds*]
# Seconds to wait before shutdown idle process
+# [*log_dir*]
+# Place where Apertium-APY can put log files.
+# [*uid*]
+# The username apertium-apy will run with
+# [*gid*]
+# The group apertium-apy will run with
class apertium(
$num_of_processes = 1,
$max_idle_seconds = 300,
+ $log_dir = '/var/log/apertium',
+ $uid = 'apertium',
+ $gid = 'apertium',
) {
package { [
'apertium',
@@ -74,4 +83,20 @@
hasrestart => true,
}
}
+
+ file { $local_logdir:
+ ensure => directory,
+ owner => $uid,
+ group => 'root', # This on purpose for logrotate to behave
+ mode => '0755',
+ before => Service['apertium-apy'],
+ }
+
+ file { '/etc/logrotate.d/apertium-apy':
+ ensure => present,
+ owner => 'root',
+ group => 'root',
+ mode => '0444',
+ content => template('apertium/logrotate.erb'),
+ }
}
diff --git a/modules/apertium/templates/initscripts/apertium-apy.systemd.erb
b/modules/apertium/templates/initscripts/apertium-apy.systemd.erb
index 8c546db..000e310 100644
--- a/modules/apertium/templates/initscripts/apertium-apy.systemd.erb
+++ b/modules/apertium/templates/initscripts/apertium-apy.systemd.erb
@@ -4,15 +4,20 @@
Description="<%= @title %> service"
[Service]
-User=apertium
-Group=apertium
+User=<%= @uid %>
+Group=<%= @gid %>
Restart=always
RestartSec=2s
# Apertium seems to leak fds, or the current default limit is not enough
LimitNOFILE=8096
# wait 60 seconds for a graceful restart before killing the master
TimeoutStopSec=60
-ExecStart=/usr/bin/python3 /usr/share/apertium-apy/servlet.py -j<%=
@num_of_processes %> -m<%= @max_idle_seconds %> /usr/share/apertium/modes
+# Warning: daemon mode for apertium is not what you might think it is. From
the list
+# of things to do for correct daemon behaviour in
+# https://www.python.org/dev/peps/pep-3143/#correct-daemon-behaviour
+# it only seems to do the first. So we abuse it a bit to get standard behaviour
+# and better logging
+ExecStart=/usr/bin/python3 /usr/share/apertium-apy/servlet.py -j<%=
@num_of_processes %> -m<%= @max_idle_seconds %> --daemon <%= @log_dir %>
--log-path /usr/share/apertium/modes
[Install]
WantedBy=multi-user.target
diff --git a/modules/apertium/templates/initscripts/apertium-apy.upstart.erb
b/modules/apertium/templates/initscripts/apertium-apy.upstart.erb
index 9c3b49e..88786c8 100644
--- a/modules/apertium/templates/initscripts/apertium-apy.upstart.erb
+++ b/modules/apertium/templates/initscripts/apertium-apy.upstart.erb
@@ -7,8 +7,8 @@
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]
-setuid "apertium"
-setgid "apertium"
+setuid "<%= @uid %>
+setgid "<%= @gid %>
# Apertium seems to leak fds, or the current default limit is not enough
limit nofile 8096 8096
@@ -16,7 +16,12 @@
env LC_ALL=en_US.utf-8
respawn
-exec /usr/bin/python3 /usr/share/apertium-apy/servlet.py -j<%=
@num_of_processes %> -m<%= @max_idle_seconds %> /usr/share/apertium/modes
+# Warning: daemon mode for apertium is not what you might think it is. From
the list
+# of things to do for correct daemon behaviour in
+# https://www.python.org/dev/peps/pep-3143/#correct-daemon-behaviour
+# it only seems to do the first. So we abuse it a bit to get standard behaviour
+# and better logging
+exec /usr/bin/python3 /usr/share/apertium-apy/servlet.py -j<%=
@num_of_processes %> -m<%= @max_idle_seconds %> --daemon --log-path <%=
@log_dir %> /usr/share/apertium/modes
# wait 60 seconds for a graceful restart before killing the master
kill timeout 60
diff --git a/modules/apertium/templates/logrotate.erb
b/modules/apertium/templates/logrotate.erb
new file mode 100644
index 0000000..8c0dcaa
--- /dev/null
+++ b/modules/apertium/templates/logrotate.erb
@@ -0,0 +1,12 @@
+#####################################################################
+### THIS FILE IS MANAGED BY PUPPET
+#####################################################################
+
+<%= @log_dir %>/apertium-apy.* {
+ daily
+ copytruncate
+ missingok
+ compress
+ notifempty
+ rotate 15
+}
--
To view, visit https://gerrit.wikimedia.org/r/230992
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If6b23c0a468a639ea122b3fcabddf3206aa07390
Gerrit-PatchSet: 3
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: KartikMistry <[email protected]>
Gerrit-Reviewer: Alexandros Kosiaris <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits