Skip to content
Snippets Groups Projects
Commit 0aa6a5ba authored by ribeaudc's avatar ribeaudc
Browse files

[DMV-15] - Add 'ConditionalNotificationLogger' and its test.

- Notify the administrator when the script for data completed is not found after DataMover has been started.

SVN: 6328
parent d2df1f30
No related branches found
No related tags found
No related merge requests found
...@@ -21,11 +21,14 @@ import java.util.List; ...@@ -21,11 +21,14 @@ import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import ch.systemsx.cisd.common.logging.ConditionalNotificationLogger;
import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogCategory;
import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.logging.LogFactory;
import ch.systemsx.cisd.common.logging.LogLevel;
import ch.systemsx.cisd.common.process.ProcessExecutionHelper; import ch.systemsx.cisd.common.process.ProcessExecutionHelper;
import ch.systemsx.cisd.common.process.ProcessResult; import ch.systemsx.cisd.common.process.ProcessResult;
import ch.systemsx.cisd.common.utilities.AbstractHashable; import ch.systemsx.cisd.common.utilities.AbstractHashable;
import ch.systemsx.cisd.common.utilities.OSUtilities;
import ch.systemsx.cisd.common.utilities.StoreItem; import ch.systemsx.cisd.common.utilities.StoreItem;
import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore; import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
import ch.systemsx.cisd.datamover.filesystem.intf.StoreItemLocation; import ch.systemsx.cisd.datamover.filesystem.intf.StoreItemLocation;
...@@ -115,6 +118,8 @@ public class DataCompletedFilter implements IStoreItemFilter ...@@ -115,6 +118,8 @@ public class DataCompletedFilter implements IStoreItemFilter
private final long dataCompletedScriptTimeout; private final long dataCompletedScriptTimeout;
private final ConditionalNotificationLogger notificationLogger;
private Status lastStatus = Status.NULL; private Status lastStatus = Status.NULL;
/** /**
...@@ -128,6 +133,7 @@ public class DataCompletedFilter implements IStoreItemFilter ...@@ -128,6 +133,7 @@ public class DataCompletedFilter implements IStoreItemFilter
throw new IllegalArgumentException("Data completed script not specified."); throw new IllegalArgumentException("Data completed script not specified.");
} }
this.dataCompletedScript = dataCompletedScript; this.dataCompletedScript = dataCompletedScript;
notificationLogger = new ConditionalNotificationLogger(getClass(), 0);
this.dataCompletedScriptTimeout = dataCompletedScriptTimeout; this.dataCompletedScriptTimeout = dataCompletedScriptTimeout;
if (fileStore == null) if (fileStore == null)
{ {
...@@ -136,7 +142,40 @@ public class DataCompletedFilter implements IStoreItemFilter ...@@ -136,7 +142,40 @@ public class DataCompletedFilter implements IStoreItemFilter
this.fileStore = fileStore; this.fileStore = fileStore;
} }
public boolean accept(final StoreItem item) private final List<String> createCommand(final StoreItem item)
{
final StoreItemLocation storeItemLocation = fileStore.getStoreItemLocation(item);
final List<String> command = new ArrayList<String>();
command.add("sh");
command.add(getDataCompletedScript());
command.add(storeItemLocation.getAbsolutePath());
final String host = storeItemLocation.getHost();
if (host != null)
{
command.add(host);
}
return command;
}
private final String getDataCompletedScript()
{
if (OSUtilities.executableExists(dataCompletedScript) == false)
{
notificationLogger.log(LogLevel.ERROR, String.format(
"Cannot find specified script '%s'.", dataCompletedScript));
} else
{
notificationLogger.reset(String.format("Script '%s' is again accessible.",
dataCompletedScript));
}
return dataCompletedScript;
}
//
// IStoreItemFilter
//
public final boolean accept(final StoreItem item)
{ {
final List<String> commandLine = createCommand(item); final List<String> commandLine = createCommand(item);
final ProcessResult result = final ProcessResult result =
...@@ -165,19 +204,4 @@ public class DataCompletedFilter implements IStoreItemFilter ...@@ -165,19 +204,4 @@ public class DataCompletedFilter implements IStoreItemFilter
return ok; return ok;
} }
private List<String> createCommand(final StoreItem item)
{
final StoreItemLocation storeItemLocation = fileStore.getStoreItemLocation(item);
final List<String> command = new ArrayList<String>();
command.add("sh");
command.add(dataCompletedScript);
command.add(storeItemLocation.getAbsolutePath());
final String host = storeItemLocation.getHost();
if (host != null)
{
command.add(host);
}
return command;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment