From: elgekko Date: Fri, 11 Nov 2022 01:07:00 +0000 (+0100) Subject: Done X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=refs%2Fheads%2F425-mediainfo;p=mediacube.git Done --- diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java index 2bb54471..a71ce5de 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java @@ -33,6 +33,7 @@ import user.jobengine.server.IJobRuntime; import user.jobengine.server.JobEngineException; import user.jobengine.server.steps.shared.EscortFiles; import user.jobengine.server.steps.shared.ItemManagerExtensions; +import user.jobengine.server.steps.shared.MetadataSaver; public class TSMBackupStep extends JobStep { private static final String MXFEXT = ".MXF"; @@ -74,15 +75,13 @@ public class TSMBackupStep extends JobStep { long existingMediaId = archiveItem.getExistingMediaId(); if (fileSize == 0 && existingMediaId == 0) { - existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, - sourceFileName.replace(MXFEXT, "")); + existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, "")); if (existingMediaId == 0) existingMediaId = -1; } if (existingMediaId == 0) - existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, - sourceFileName.replace(MXFEXT, "")); + existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, "")); String targetFileName; if (RANDOMIZE_ARCHIVES) { // a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA @@ -92,8 +91,7 @@ public class TSMBackupStep extends JobStep { targetFileName = sourceFileName; if (existingMediaId == 0) { - StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, - sourceMediaFile.getParent().toString()); + StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, sourceMediaFile.getParent().toString()); final IJobRuntime runtime = getJobRuntime(); sourceUri.addProgressListener(new IProgressEventListener() { @@ -110,25 +108,26 @@ public class TSMBackupStep extends JobStep { }); RemoteFile remoteFile = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName); + + if (RemoteStoreProtocol.LOCAL.equals(sourceUri.getProtocol())) { + MetadataSaver.saveMetadata(archiveItem.getMediaFile()); + } + } if (existingMediaId > 0) - logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.", - sourceFileName); + logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.", sourceFileName); // Fel kell szabadítani, hogy a kovetkezo archivalaskor is nekifusson if (existingMediaId == -1) { - logger.info(marker, - "Az '{}' mentése jelenleg nem lehetséges, mert a szükséges metaadat még nem található meg az archívumban.", - sourceFileName); + logger.info(marker, "Az '{}' mentése jelenleg nem lehetséges, mert a szükséges metaadat még nem található meg az archívumban.", sourceFileName); if (!archiveItem.removeCatchedFile()) logger.error(marker, "Az '{}' állomány .catched jelző állománya nem törölhető. Az újabb archiválási kísérlethez annak kézi eltávolítása szükséges!", sourceMediaFile.getName()); mediaCubeMedia.remove(); } else { - saveMetadata(mediaCubeMedia, sourceMediaFile, targetFileName, existingMediaId, fileSize, - archiveItem.isDisableProxy()); + saveMetadata(mediaCubeMedia, sourceMediaFile, targetFileName, existingMediaId, fileSize, archiveItem.isDisableProxy()); logger.info(marker, "Az '{}' archiválása sikeres.", sourceFileName); if (killDateDays != 0) EscortFiles.createUNCKillDate(sourceMediaFile.getParent(), sourceFileName, killDateDays, marker); @@ -136,8 +135,7 @@ public class TSMBackupStep extends JobStep { } catch (Exception e) { logger.catching(e); - Message m = new ParameterizedMessage("Az '{}' állomány archiválása sikertelen. A rendszer hibaüzenete: {}", - details, e.getMessage()); + Message m = new ParameterizedMessage("Az '{}' állomány archiválása sikertelen. A rendszer hibaüzenete: {}", details, e.getMessage()); logger.error(marker, m); if (!archiveItem.removeCatchedFile()) logger.error(marker, @@ -148,8 +146,7 @@ public class TSMBackupStep extends JobStep { return null; } - private void saveMetadata(Media mediaCubeMedia, File sourceFile, String targetFileName, long existingMediaId, - long fileSize, boolean disableProxy) { + private void saveMetadata(Media mediaCubeMedia, File sourceFile, String targetFileName, long existingMediaId, long fileSize, boolean disableProxy) { if (existingMediaId == 0) { MediaFile mf = manager.createMediaFile(targetFileName, fileType, tsmStore, mediaCubeMedia); @@ -187,8 +184,7 @@ public class TSMBackupStep extends JobStep { mediaCubeMedia.modify(); } - private void setAndCheck(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine) - throws JobEngineException, IOException { + private void setAndCheck(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine) throws JobEngineException, IOException { if (jobEngine == null) { logger.error(marker, "Az folyamatkezelő réteg nem elérhető."); throw new NullPointerException("Internal error, missing JobEngine reference."); @@ -205,13 +201,11 @@ public class TSMBackupStep extends JobStep { sourceMediaFile = new File(archiveItem.getMediaFile()); if (sourceMediaFile == null) { logger.error(marker, "A folyamat 'archiveItem' bemeneti paraméter 'mediaFile' értéke üres."); - throw new NullPointerException( - "System is not configured properly, missing 'mediaFile' value in 'archiveItem' input parameter."); + throw new NullPointerException("System is not configured properly, missing 'mediaFile' value in 'archiveItem' input parameter."); } if (!sourceMediaFile.exists()) { logger.error(marker, "A(z) {} állomány nem létezik vagy nem érhető el.", sourceMediaFile.getName()); - throw new IOException( - String.format("Input file {} does not exist or unreachable.", sourceMediaFile.getName())); + throw new IOException(String.format("Input file {} does not exist or unreachable.", sourceMediaFile.getName())); } tsmStore = manager.getSystemStore(false); if (tsmStore == null) { @@ -230,8 +224,7 @@ public class TSMBackupStep extends JobStep { } if (mediaCubeMedia == null) { logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing."); } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java index 26d8607b..af216f42 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java @@ -1,6 +1,7 @@ package user.jobengine.server.steps; import java.io.IOException; +import java.nio.file.Path; import java.nio.file.Paths; import java.text.Normalizer; import java.util.List; @@ -29,6 +30,7 @@ import user.jobengine.db.Store; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; import user.jobengine.server.steps.shared.EscortFiles; +import user.jobengine.server.steps.shared.MetadataSaver; public class TSMRestoreStep extends JobStep { private static final String DOT = "."; @@ -43,6 +45,12 @@ public class TSMRestoreStep extends JobStep { protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws IOException, Exception { if (killDateDays != 0) EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker); + + if (RemoteStoreProtocol.LOCAL.equals(targetUri.getProtocol())) { + Path path = Paths.get(targetPath, targetFileName); + MetadataSaver.saveMetadata(path.toString()); + } + } protected void beforeRestore(StoreUri targetURI, String targetFileName) throws Exception { @@ -65,8 +73,8 @@ public class TSMRestoreStep extends JobStep { marker = jobRuntime.getSessionMarker(); setAndCheck(mediaCubeMedia, targetPath, targetNamePattern, localRetrievePath, globalRetrievePath, jobEngine); String targetFileName = String.format(targetNamePattern, sourceFileName); - //20210129 - //targetFileName = getMaximizedFileName(mediaCubeMedia, targetFileName, 120); + // 20210129 + // targetFileName = getMaximizedFileName(mediaCubeMedia, targetFileName, 120); Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL); try { @@ -88,10 +96,8 @@ public class TSMRestoreStep extends JobStep { }); RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName); - String globalTargetPath = Paths.get(targetPath, targetFileName) - .getParent() - .toString() - .replace(Paths.get(localRetrievePath).toString(), globalRetrievePath); + String globalTargetPath = Paths.get(targetPath, targetFileName).getParent().toString().replace(Paths.get(localRetrievePath).toString(), + globalRetrievePath); logger.info(marker, "Az '{}' állomány visszatöltése sikeres volt '{}' néven. A célmappa a ide kattintva nyitható meg.", diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMSystemRestoreStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMSystemRestoreStep.java index a3a90be3..e85b9272 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMSystemRestoreStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMSystemRestoreStep.java @@ -1,6 +1,8 @@ package user.jobengine.server.steps; import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import org.apache.commons.lang.StringUtils; @@ -25,6 +27,7 @@ import user.jobengine.db.Store; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; import user.jobengine.server.steps.shared.EscortFiles; +import user.jobengine.server.steps.shared.MetadataSaver; public class TSMSystemRestoreStep extends JobStep { private static final Logger logger = LogManager.getLogger(); @@ -34,10 +37,13 @@ public class TSMSystemRestoreStep extends JobStep { private String sourceFileName; private Marker marker; - protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) - throws IOException, Exception { + protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws IOException, Exception { if (killDateDays > 0) EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker); + if (RemoteStoreProtocol.LOCAL.equals(targetUri.getProtocol())) { + Path path = Paths.get(targetPath, targetFileName); + MetadataSaver.saveMetadata(path.toString()); + } } protected void beforeRestore(StoreUri targetURI, String targetFileName) throws Exception { @@ -55,8 +61,8 @@ public class TSMSystemRestoreStep extends JobStep { } @StepEntry - public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, - int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays, IJobEngine jobEngine, + IJobRuntime jobRuntime) throws Exception { marker = jobRuntime.getSessionMarker(); setAndCheck(mediaCubeMedia, targetPath, targetNamePattern, jobEngine); String targetFileName = String.format(targetNamePattern, sourceFileName); @@ -77,16 +83,14 @@ public class TSMSystemRestoreStep extends JobStep { }); RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName); - Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikeres volt '{}' néven. ", sourceFileName, - targetFileName); + Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikeres volt '{}' néven. ", sourceFileName, targetFileName); if (StringUtils.isNotBlank(successRecipient)) logger.info(new MediaCubeMarker(successRecipient), msg); logger.info(marker, msg); afterRestore(targetUri, targetPath, killDateDays, targetFileName); } catch (Exception e) { - Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}", - sourceFileName, e.getMessage()); + Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}", sourceFileName, e.getMessage()); logger.error(marker, msg); // logger.error(jobRuntime.marker, msg); logger.catching(e); @@ -119,14 +123,12 @@ public class TSMSystemRestoreStep extends JobStep { } if (mediaCubeMedia == null) { logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'mediaCubeMedia' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing."); } checkTargetPath(targetPath); if (StringUtils.isBlank(targetNamePattern)) { logger.error(marker, "A folyamat 'targetNamePattern' bemeneti paramétere üres."); - throw new NullPointerException( - "System is not configured properly, 'targetNamePattern' input parameter missing."); + throw new NullPointerException("System is not configured properly, 'targetNamePattern' input parameter missing."); } Store tsmStore = manager.getSystemStore(false); if (tsmStore == null) { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/shared/MetadataSaver.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/shared/MetadataSaver.java new file mode 100644 index 00000000..fca71538 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/shared/MetadataSaver.java @@ -0,0 +1,44 @@ +package user.jobengine.server.steps.shared; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; + +import user.commons.mediaarea.MediaArea; +import user.commons.nosql.NoSQLUtils; + +public class MetadataSaver { + + private static final Logger logger = LogManager.getLogger(); + + public static void saveMetadata(String file) { + try { + Path filePath = Paths.get(file); + logger.info("Analize: {}", filePath); + if (!Files.exists(filePath)) + return; + + String fileName = filePath.getFileName().toString(); + DB db = NoSQLUtils.getNoSQLDB(); + DBCollection collection = db.getCollection("metadata"); + long existing = collection.find(new BasicDBObject("fileName", fileName)).count(); + if (existing > 0) + return; + + MediaArea mediaArea = new MediaArea(filePath); + mediaArea.process(); + BasicDBObject metadata = mediaArea.getInform(); + collection.save(metadata); + logger.info("Metadata saved for: {}", filePath); + } catch (Exception e) { + logger.error("Can't analyze input {}, skipping. System message is: {}", e.getMessage()); + } + } +}