From 97b637dbd1303319caadec85d88d969d12830277 Mon Sep 17 00:00:00 2001 From: elgekko Date: Thu, 9 Mar 2023 10:27:34 +0100 Subject: [PATCH] HTV .CONFLICT mappa mentese --- .../server/steps/BackupFileStep.java | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/BackupFileStep.java diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/BackupFileStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/BackupFileStep.java new file mode 100644 index 00000000..396fd24f --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/BackupFileStep.java @@ -0,0 +1,122 @@ +package user.jobengine.server.steps; + +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang.RandomStringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.message.Message; +import org.apache.logging.log4j.message.ParameterizedMessage; + +import user.commons.RemoteFile; +import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.MediaFile; +import user.jobengine.db.MediaFileDAO; +import user.jobengine.db.Store; +import user.jobengine.server.steps.shared.EscortFiles; + +public class BackupFileStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private static boolean RANDOMIZE_ARCHIVES = SystemConfiguration.getInstance().value("tsm.randomize-archives"); + private Marker marker; + public static final String DOT_DONE = ".DONE"; + public static final String DOT_JSON = ".json"; + + MediaFile getMediaFile(String fileName) { + List result = new ArrayList<>(); + MediaFileDAO dao = (MediaFileDAO) getManager().getBaseDAO(MediaFile.class); + getManager().executeQuery("SELECT id FROM MEDIAFILE WHERE relativepath=?", rs -> { + long id = rs.getLong("id"); + result.add((MediaFile) dao.get(id)); + return false; + }, s -> { + s.setString(1, fileName); + }); + + return result.size() > 0 ? result.get(0) : null; + } + + String flag(Object checkObject) { + return checkObject == null ? "-" : "X"; + } + + @StepEntry + public Object[] execute() throws Exception { + marker = getSessionMarker(); + + Path sourceFolder = Paths.get("/mnt/ISILON/ARCHIVE/.CONFLICT"); + Path donePath = Paths.get(sourceFolder.toString(), DOT_DONE); + Store tsmStore = getManager().getSystemStore(false); + StoreUri tsmUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM); + + try (DirectoryStream stream = Files.newDirectoryStream(sourceFolder)) { + for (Path source : stream) { + if (Files.isDirectory(source)) { + continue; + } + + String fileName = source.getFileName().toString(); + if (fileName.toLowerCase().endsWith(".mxf") || fileName.toLowerCase().endsWith(".mp4")) { + + MediaFile mf = getMediaFile(fileName); + RemoteFile tsmFile = tsmUri.getRemoteFile(fileName); + logger.info(marker, "[{}{}] {}", flag(mf), flag(tsmFile), fileName); + if (getJobRuntime().isWaitingCancel()) + break; + + if (tsmFile == null) { + backup(source, tsmUri); + tsmFile = tsmUri.getRemoteFile(fileName); + } + + if (mf != null && tsmFile != null) { + moveToDone(donePath, source, fileName); + } + } + } + } finally { + tsmUri.cleanUp(); + } + + return null; + } + + private void moveToDone(Path donePath, Path source, String fileName) throws IOException { + EscortFiles.ensureUNCFolder(donePath); + Files.move(source, Paths.get(donePath.toString(), fileName)); + Path json = Paths.get(source.getParent().toString(), fileName + DOT_JSON); + Files.move(json, Paths.get(donePath.toString(), fileName + DOT_JSON)); + } + + private void backup(Path source, StoreUri targetUri) throws Exception { + String sourceFileName = source.getFileName().toString(); + try { + getJobRuntime().setDescription(sourceFileName); + + StoreUri sourceUri = getManager().createStoreUri(RemoteStoreProtocol.LOCAL, source.getParent().toString()); + String targetFileName; + if (RANDOMIZE_ARCHIVES) { + targetFileName = String.format("%s-%s", RandomStringUtils.randomAlphanumeric(8), sourceFileName); + } else + targetFileName = sourceFileName; + + RemoteFile remoteFile = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName); + + } catch (Exception e) { + logger.catching(e); + Message m = new ParameterizedMessage("Az '{}' állomány archiválása sikertelen. A rendszer hibaüzenete: {}", sourceFileName, e.getMessage()); + logger.error(marker, m); + throw new Exception(m.getFormattedMessage()); + } + } + +} -- 2.54.0