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

Reply via email to