Done 425-mediainfo
authorelgekko <vasary@elgekko.net>
Fri, 11 Nov 2022 01:07:00 +0000 (02:07 +0100)
committerelgekko <vasary@elgekko.net>
Fri, 11 Nov 2022 01:07:00 +0000 (02:07 +0100)
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMSystemRestoreStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/shared/MetadataSaver.java [new file with mode: 0644]

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