From 73dd4bcd9e71d823960b918beea25006e1b0807c Mon Sep 17 00:00:00 2001
From: gakin <gakin>
Date: Thu, 22 Sep 2016 13:04:50 +0000
Subject: [PATCH] SSDM-4141: Add log file param to the config file and
 programmatically add a new file appender in case this parameter is provided.

SVN: 37100
---
 .../dss/plugins/DataSetRegistrationTask.java  | 42 ++++++++++++++++++-
 .../server/dss/plugins/SyncConfig.java        | 12 ++++++
 2 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationTask.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationTask.java
index fbefdbac2a9..7578bddea3e 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationTask.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/DataSetRegistrationTask.java
@@ -61,7 +61,9 @@ import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.xpath.XPathExpressionException;
 
+import org.apache.log4j.DailyRollingFileAppender;
 import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
 import org.eclipse.jetty.client.HttpClient;
 import org.eclipse.jetty.client.api.AuthenticationStore;
 import org.eclipse.jetty.client.api.ContentResponse;
@@ -211,6 +213,8 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
 
     private static final String HARVESTER_CONFIG_FILE_NAME = "harvester-config-file";
 
+    private static final String LOG_FILE_PROPERTY_NAME = "log-file";
+
     private static final String SEPARATOR = ",";;
 
     private File lastSyncTimestampFile;
@@ -573,6 +577,22 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
         // jdbcTemplate = new JdbcTemplate(dbConfigurationContext.getDataSource());
     }
 
+    private void configureFileAppender()
+    {
+        DailyRollingFileAppender console = new DailyRollingFileAppender(); // create appender
+        // configure the appender
+        console.setName("bdfile");
+        String PATTERN = "%d %-5p [%t] %c - %m%n";
+        console.setLayout(new PatternLayout(PATTERN));
+        // console.setThreshold(Level.FATAL);
+        console.setAppend(false);
+        console.setFile(config.getLogFilePath());
+        console.activateOptions();
+        // add appender to any Logger (here is root)
+        operationLog.addAppender(console);
+        operationLog.setAdditivity(false);
+    }
+
     @Override
     public void execute()
     {
@@ -581,6 +601,10 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
             operationLog.info(this.getClass() + " started.");
 
             readConfiguration();
+            
+            if(config.getLogFilePath() != null) {
+                configureFileAppender();
+            }
 
             createDataSourceToHarvesterSpaceMappings();
 
@@ -775,6 +799,15 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
         } catch (Exception e)
         {
             operationLog.error("Sync failed: " + e.getMessage());
+            
+            sendInfoEmail();
+        }
+    }
+
+    private void sendInfoEmail()
+    {
+        if(config.getLogFilePath() != null) {
+            //send the operation log as attachment
             DataSource dataSource = createDataSource("/Users/gakin/Documents/sync.log");
             for (EMailAddress recipient : emailAddresses)
             {
@@ -783,8 +816,14 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
                         "", new DataHandler(
                                 dataSource), null, null, recipient);
             }
-
         }
+        else {
+            for (EMailAddress recipient : emailAddresses)
+            {
+                mailClient.sendEmailMessage("Synchronization failed",
+                        "Hi, the syncronization failed. See the data store server log for details.", null, null, recipient);
+            }
+         }
     }
 
     private DataSource createDataSource(final String filePath)
@@ -820,6 +859,7 @@ public class DataSetRegistrationTask<T extends DataSetInformation> implements IM
         config.setEmailAddresses(reader.getString(DEFAULT_DATA_SOURCE_SECTION, EMAIL_ADDRESSES_PROPERTY_NAME, null));
         config.setLastSyncTimestampFileName(reader.getString(DEFAULT_DATA_SOURCE_SECTION, HARVESTER_LAST_SYNC_TIMESTAMP_FILE_PROPERTY_NAME,
                 DEFAULT_LAST_SYNC_TIMESTAMP_FILE));
+        config.setLogFilePath(reader.getString(DEFAULT_DATA_SOURCE_SECTION, LOG_FILE_PROPERTY_NAME, null));
 
 
         String fileName = config.getLastSyncTimestampFileName();
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/SyncConfig.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/SyncConfig.java
index a703de5df9f..43e9abc2368 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/SyncConfig.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/SyncConfig.java
@@ -182,6 +182,18 @@ class SyncConfig
 
     private String emailAddresses;
 
+    private String logFilePath;
+
+    public String getLogFilePath()
+    {
+        return logFilePath;
+    }
+
+    public void setLogFilePath(String logFilePath)
+    {
+        this.logFilePath = logFilePath;
+    }
+
     public String getEmailAddresses()
     {
         return emailAddresses;
-- 
GitLab