From a14eb49d5ce21e87594c851a194e536fe5b37b0f Mon Sep 17 00:00:00 2001
From: Michael Seevogel <git_projects@michaelseevogel.de>
Date: Fri, 24 Mar 2017 11:26:18 +0100
Subject: [PATCH] WiP log file retention for webserver logs

---
 install/sql/ispconfig3.sql                         |  1 +
 .../web/sites/form/web_vhost_domain.tform.php      | 14 +++++++++++++-
 interface/web/sites/lib/lang/de_web_domain.lng     |  2 ++
 .../web/sites/lib/lang/de_web_vhost_domain.lng     |  2 ++
 .../sites/templates/web_vhost_domain_advanced.htm  |  4 ++++
 server/lib/classes/cron.d/200-logfiles.inc.php     | 14 ++++++++++----
 6 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 1934cd8957..f2f497ae10 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1986,6 +1986,7 @@ CREATE TABLE `web_domain` (
   `http_port` int(11) unsigned NOT NULL DEFAULT '80',
   `https_port` int(11) unsigned NOT NULL DEFAULT '443',
   `folder_directive_snippets` text,
+  `log_retention` int(11) NOT NULL DEFAULT '30',
   PRIMARY KEY  (`domain_id`),
   UNIQUE KEY `serverdomain` (  `server_id` , `ip_address`,  `domain` )
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 923e73b2b0..10f08f643d 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -917,7 +917,19 @@ if($_SESSION["s"]["user"]["typ"] == 'admin'
 				'value'  => '',
 				'width'  => '3',
 				'maxlength' => '6'
-			)
+			),
+                        'log_retention' => array (
+                                'datatype' => 'INTEGER',
+                                'formtype' => 'TEXT',
+                                'validators' => array (  0 => array ( 'type' => 'REGEX',
+                                                'regex' => '/^([0-9]{1,5})$/',
+                                                'errmsg'=> 'log_retention_error_regex'),
+                                ),
+                                'default' => '30',
+                                'value' => '',
+                                'width' => '4',
+                                'maxlength' => '6'
+                        )
 			//#################################
 			// ENDE Datatable fields
 			//#################################
diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng
index 75a4f14669..c2d8ff9020 100644
--- a/interface/web/sites/lib/lang/de_web_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_domain.lng
@@ -133,4 +133,6 @@ $wb['http_port_txt'] = 'HTTP Port';
 $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
 $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
+$wb['log_retention_txt'] = 'Log-Datei Aufbewahrungszeit';
+$wb['log_retention_error_regex'] = 'Nur Nummern von 0-9999 zulässig.'
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_vhost_domain.lng b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
index 5a73247189..f7b0063425 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_domain.lng
@@ -148,4 +148,6 @@ $wb['https_port_txt'] = 'HTTPS Port';
 $wb['http_port_error_regex'] = 'HTTP Port invalid.';
 $wb['https_port_error_regex'] = 'HTTPS Port invalid.';
 $wb['enable_pagespeed_txt'] = 'Enable PageSpeed';
+$wb['log_retention_txt'] = 'Log-Datei Aufbewahrungszeit';
+$wb['log_retention_error_regex'] = 'Nur Nummern von 0-9999 zulässig.'
 ?>
diff --git a/interface/web/sites/templates/web_vhost_domain_advanced.htm b/interface/web/sites/templates/web_vhost_domain_advanced.htm
index 2ef8c7daf4..7ca4710f40 100644
--- a/interface/web/sites/templates/web_vhost_domain_advanced.htm
+++ b/interface/web/sites/templates/web_vhost_domain_advanced.htm
@@ -35,6 +35,10 @@
                 </div>
                 <input name="system_group" id="system_group" value="{tmpl_var name='system_group'}" type="hidden" />
             </div>
+            <div class="form-group">
+                <label for="log_retention" class="col-sm-3 control-label">{tmpl_var name='log_retention_txt'}</label>
+                <div class="col-sm-9"><input name="log_retention" id="log_retention" value="{tmpl_var name='log_retention'}" type="text" class="form-control" /></div>
+            </div>
             <div class="form-group apache">
                 <label for="allow_override" class="col-sm-3 control-label">{tmpl_var name='allow_override_txt'}</label>
                 <div class="col-sm-9"><input type="text" name="allow_override" id="allow_override" value="{tmpl_var name='allow_override'}" class="form-control" /></div></div>
diff --git a/server/lib/classes/cron.d/200-logfiles.inc.php b/server/lib/classes/cron.d/200-logfiles.inc.php
index 98dd662f69..035a084e37 100644
--- a/server/lib/classes/cron.d/200-logfiles.inc.php
+++ b/server/lib/classes/cron.d/200-logfiles.inc.php
@@ -60,7 +60,7 @@ class cronjob_logfiles extends cronjob {
 		// Manage and compress web logfiles and create traffic statistics
 		//######################################################################################################
 
-		$sql = "SELECT domain_id, domain, type, document_root, web_folder, parent_domain_id FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') AND server_id = ?";
+		$sql = "SELECT domain_id, domain, type, document_root, web_folder, parent_domain_id, log_retention FROM web_domain WHERE (type = 'vhost' or type = 'vhostsubdomain' or type = 'vhostalias') AND server_id = ?";
 		$records = $app->db->queryAllRecords($sql, $conf['server_id']);
 		foreach($records as $rec) {
 
@@ -76,6 +76,8 @@ class cronjob_logfiles extends cronjob {
 				unset($tmp);
 			}
 
+                        $log_retention = $rec['log_retention'];
+
 			$logfile = $rec['document_root'].'/' . $log_folder . '/'.$yesterday.'-access.log';
 			$total_bytes = 0;
 
@@ -142,21 +144,25 @@ class cronjob_logfiles extends cronjob {
 				exec("cat /dev/null > $logfile");
 			}
 
-			// delete logfiles after 30 days
-			$month_ago = date('Ymd', time() - 86400 * 30);
+			// delete logfiles after x days (default 30)
+                        if($log_retention > 0) {
+			$month_ago = date('Ymd', time() - 86400 * $log_retention);
 			$logfile = escapeshellcmd($rec['document_root'].'/' . $log_folder . '/'.$month_ago.'-access.log.gz');
 			if(@is_file($logfile)) {
 				unlink($logfile);
 			}
+			}
 
 			//* Delete older Log files, in case that we missed them before due to serverdowntimes.
-			$datepart = date('Ym', time() - 86400 * 31 * 2);
+                        if($log_retention > 0) {
+			$datepart = date('Ym', time() - 86400 * $log_retention+1 * 2);
 
 			$logfile = escapeshellcmd($rec['document_root']).'/' . $log_folder . '/'.$datepart.'*-access.log.gz';
 			exec('rm -f '.$logfile);
 
 			$logfile = escapeshellcmd($rec['document_root']).'/' . $log_folder . '/'.$datepart.'*-access.log';
 			exec('rm -f '.$logfile);
+			}
 		}
 
 		//* Delete old logfiles in /var/log/ispconfig/httpd/ that were created by vlogger for the hostname of the server
-- 
GitLab