git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Tue, 10 Aug 2021 13:51:16 +0000 (13:51 +0000)
committervasary.daniel <TFS\vasary.daniel>
Tue, 10 Aug 2021 13:51:16 +0000 (13:51 +0000)
38 files changed:
server/-product/production/MEDIAVIVANTIS/jobs/executors.xml
server/-product/production/MEDIAVIVANTIS/jobs/schedules.json
server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveMaterialSubmitStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveRecursive.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/CancelableStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/CleanupMountedLocationStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateMissingLowresStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalCommandExecutor.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalProfile.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalProfilesConfig.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/IExternalCallback.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/ItemManagerExtensions.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/MediaCubeClient.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/MediaToolStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataType.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataTypeDetector.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/OutputPathAndNameSelectorStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/PrepareMediaRestoreStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/PrepareRemoteTranscodeJobParametersStep.java [deleted file]
server/-product/production/MEDIAVIVANTIS/jobs/steps/QueryMissingProxyMediaStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/RemoteJobStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/SafeDeleteRecursive.java [new file with mode: 0644]
server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMBackupStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMExtendedRetrieveStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMRestoreStep.java
server/-product/production/MEDIAVIVANTIS/jobs/steps/UpdateGhostMediaDataStep.java
server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-recursive.xml
server/-product/production/MEDIAVIVANTIS/jobs/templates/cancelable.xml
server/-product/production/MEDIAVIVANTIS/jobs/templates/create-lowres-ondemand - Copy.xml [new file with mode: 0644]
server/-product/production/MEDIAVIVANTIS/jobs/templates/create-lowres-ondemand.xml
server/-product/production/MEDIAVIVANTIS/jobs/templates/delete-materials.xml
server/-product/production/MEDIAVIVANTIS/jobs/templates/integration-test.xml [new file with mode: 0644]
server/-product/production/MEDIAVIVANTIS/jobs/templates/remote-transcode.xml
server/-product/production/MEDIAVIVANTIS/jobs/templates/safe-delete-recursive.xml [new file with mode: 0644]
server/-product/production/MEDIAVIVANTIS/restart-mediacube.sh [new file with mode: 0644]
server/-product/production/MEDIAVIVANTIS/settings/application.yaml
server/-product/production/MEDIAVIVANTIS/start-mediacube.sh [new file with mode: 0644]
server/-product/production/MEDIAVIVANTIS/stop-mediacube.sh [new file with mode: 0644]

index 5ec9b71eda181b8cbca8b4c97899f7aeecad3575..22205fbbe20d7e21e61395cef3bf7c02e2f74566 100644 (file)
@@ -1,7 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <executors>\r
+       <executor className="SafeDeleteRecursive.java" maxConcurrent="1" isRemote="false" />\r
+       <executor className="SaveMediaProxy.java" maxConcurrent="1" isRemote="false" />\r
+       <executor className="DeleteFile.java" maxConcurrent="1" isRemote="false" />\r
+       <executor className="TransferStep.java" maxConcurrent="1" isRemote="false" />\r
+       <executor className="IntegrationTestStep.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="QueryMissingProxyMediaStep.java" maxConcurrent="1" isRemote="false" />\r
-       <executor className="PrepareRemoteTranscodeJobParametersStep.java" maxConcurrent="1" isRemote="false" />\r
+       <executor className="PrepareRemoteTranscodeStep.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="TramsferStep.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="PrepareMediaRestoreStep.java" maxConcurrent="1" isRemote="false" />\r
        <executor className="RemoteJobStep.java" maxConcurrent="1" isRemote="false" />\r
index 9167bcfe1dd5284a37b1370285d506c29561c049..f9cae31a81e9802001566d1ad5a2a0deedf20e45 100644 (file)
@@ -1,6 +1,23 @@
 {"joblist":[\r
        {\r
+      "active": false,\r
+      "executeimmediate": false,\r
+         "name" : "Rekurzív törlés /mnt/POLC/FINISHED_SHOWS (DEMO)",\r
+      "template": "safe-delete-recursive.xml",\r
+      "cronexpression": "0 */1 * * * ?",\r
+      "parameters": [ \r
+               {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"},\r
+         ]\r
+       },\r
+       {\r
+      "template": "integration-test.xml"\r
+       },\r
+       {\r
       "template": "remote-transcode.xml",\r
+         "name" : "Proxy generálás",\r
+      "active": true,\r
+      "executeimmediate": false,\r
+      "cronexpression": "0 */1 * * * ?",\r
       "parameters": [ \r
        {"name": "remoteServer", "value": "http://10.11.1.111:9080", "type": "java.lang.String"}, \r
        {"name": "transcodeTemplate", "value": "create-proxy-ffmpeg.xml", "type": "java.lang.String"}, \r
       ]\r
        },\r
        {\r
-      "template": "test-fork-cancelable.xml",\r
-      "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
-       },\r
-       {\r
-      "active": true,\r
-      "executeimmediate": true,\r
-         "name" : "Proxy generálás",\r
-      "template": "sys-recreate-lowres.xml",\r
-      "cronexpression": "0 */1 * * * ?",\r
+      "template": "create-lowres-ondemand.xml",\r
+         "name" : "Manuális proxy generálás",\r
       "parameters": [ \r
-       {"name": "globalRetrievePath", "value": "file://10.11.1.90/data", "type": "java.lang.String"},\r
-       {"name": "localRetrievePath", "value": "/mediacube/data", "type": "java.lang.String"},\r
-       {"name": "localHiresPath", "value": "/mediacube/data", "type": "java.lang.String" },\r
-       {"name": "globalHiresPath", "value": "\\\\10.11.1.90\\data", "type": "java.lang.String" },\r
-       {"name": "localLowresPath", "value": "/mediacube/data/TRANSCODER_OUT", "type": "java.lang.String" },\r
-       {"name": "transcoderAddress", "value": "http://10.11.1.111:65445/api/json/v1/", "type": "java.lang.String"},\r
-       {"name": "transcoderTemplateName", "value": "MP4", "type": "java.lang.String"}\r
+       {"name": "remoteServer", "value": "http://10.11.1.111:9080", "type": "java.lang.String"}, \r
+       {"name": "transcodeTemplate", "value": "create-proxy-ffmpeg.xml", "type": "java.lang.String"}, \r
+       {"name": "jobName", "value": "Create proxy (slave process)", "type": "java.lang.String"}, \r
+       {"name": "profileName", "value": "proxy", "type": "java.lang.String"},\r
+       {"name": "tempStoreName", "value": "LOCAL", "type": "java.lang.String"},\r
+       {"name": "tempStoreProtocol", "value": "LOCAL", "type": "java.lang.String"}\r
       ]\r
        },\r
        {\r
+      "template": "test-fork-cancelable.xml",\r
+      "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ]\r
+       },\r
+       {\r
       "active": false,\r
       "executeimmediate": false,\r
-         "name" : "Rekurzív archiválás a POLC/FINISHED_SHOWS mappából",\r
+         "name" : "Rekurzív archiválás a /mediacube/data/ARCHIVE-TEST",\r
       "template": "archive-recursive.xml",\r
       "cronexpression": "0 */1 * * * ?",\r
       "parameters": [ \r
-               {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"},\r
+               {"name": "sourcePath", "value": "/mediacube/data/ARCHIVE-TEST", "type": "java.lang.String"},\r
                {"name": "killDateDays", "value": 1, "type": "java.lang.Integer"},\r
-               {"name": "limit", "value": 1, "type": "java.lang.Integer"}\r
+               {"name": "limit", "value": 20, "type": "java.lang.Integer"},\r
+               {"name": "disableProxy", "value": true, "type": "java.lang.Boolean"}\r
          ]\r
        },\r
        {\r
       "template": "delete-materials.xml",\r
       "cronexpression": "0 */10 * * * ?",\r
       "parameters": [ \r
-       {"name": "sourcePath", "value": "/mediacube/data/ARCHIVE", "type": "java.lang.String"}\r
+       {"name": "sourcePath", "value": "/mediacube/data/ARCHIVE", "type": "java.lang.String"},\r
+       {"name": "skipArchiveCheck", "value": false, "type": "java.lang.Boolean"}\r
       ]\r
        },      \r
        {\r
       "template": "delete-materials.xml",\r
       "cronexpression": "0 */10 * * * ?",\r
       "parameters": [ \r
-       {"name": "sourcePath", "value": "/mediacube/data/OMARCHIVE", "type": "java.lang.String"}\r
+       {"name": "sourcePath", "value": "/mediacube/data/OMARCHIVE", "type": "java.lang.String"},\r
+       {"name": "skipArchiveCheck", "value": false, "type": "java.lang.Boolean"}\r
       ]\r
        },      \r
        {\r
       "template": "delete-materials.xml",\r
       "cronexpression": "0 */10 * * * ?",\r
       "parameters": [ \r
-       {"name": "sourcePath", "value": "/mnt/PROMISE/ARCHIVE", "type": "java.lang.String"}\r
+       {"name": "sourcePath", "value": "/mnt/PROMISE/ARCHIVE", "type": "java.lang.String"},\r
+       {"name": "skipArchiveCheck", "value": false, "type": "java.lang.Boolean"}\r
       ]\r
        },      \r
        {\r
       "template": "delete-materials.xml",\r
       "cronexpression": "0 * 11 * * ?",\r
       "parameters": [ \r
-       {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"}\r
+       {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"},\r
+       {"name": "skipArchiveCheck", "value": false, "type": "java.lang.Boolean"}\r
       ]\r
        },      \r
        {\r
       "executeimmediate": false\r
        },\r
        {\r
-      "template": "create-lowres-ondemand.xml",\r
-      "active": false,\r
-      "executeimmediate": false,\r
-      "parameters": [ \r
-       {"name": "globalRetrievePath", "value": "file://10.11.1.90/data", "type": "java.lang.String"},\r
-       {"name": "localRetrievePath", "value": "/mediacube/data", "type": "java.lang.String"},\r
-       {"name": "localHiresPath", "value": "/mediacube/data", "type": "java.lang.String" },\r
-       {"name": "globalHiresPath", "value": "\\\\10.11.1.90\\data", "type": "java.lang.String" },\r
-       {"name": "localLowresPath", "value": "/mediacube/data/TRANSCODER_OUT", "type": "java.lang.String" },\r
-       {"name": "transcoderAddress", "value": "http://10.11.1.111:65445/api/json/v1/", "type": "java.lang.String"},\r
-       {"name": "transcoderTemplateName", "value": "MP4", "type": "java.lang.String"}\r
-      ]\r
-       },\r
-       {\r
       "active": false,\r
       "executeimmediate": false,\r
       "template": "cancelable.xml",\r
index f11e3a52054f5feebe907e44a024ca3bfdab1785..c00a3e4c9e648b828ce05acfd296454321982d6b 100644 (file)
@@ -31,9 +31,9 @@ public class ArchiveMaterialSubmitStep extends JobStep {
                                try {\r
                                        IJobRuntime runtime = jobEngine.submit(jobRuntime, null, JOBTEMPLATE, ARCHIVE,\r
                                                        ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays));\r
-                                                       \r
                                        int progress = (i + 1) * 100 / archiveList.size();\r
                                        setProgress(progress);\r
+                                       //TODO kivezetni a submit hibaüzenetet\r
                                        if (runtime == null)\r
                                                throw new Exception("Submit returned null runtime");\r
                                } catch (Exception e) {\r
index 6a65d5fa85489c10148204980deb0a6d0e0d0790..ba6aba2cb9c96a095d77cbbd46f82c08e85ee742 100644 (file)
@@ -10,21 +10,27 @@ import java.nio.file.Paths;
 import java.nio.file.attribute.BasicFileAttributes;\r
 import java.text.SimpleDateFormat;\r
 import java.util.Arrays;\r
+import java.util.HashSet;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.Set;\r
 \r
 import org.apache.commons.io.FilenameUtils;\r
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.message.Message;\r
+import org.apache.logging.log4j.message.ParameterizedMessage;\r
 \r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
 import user.commons.JobStatus;\r
 import user.commons.ListUtils;\r
+import user.commons.MediaCubeMarker;\r
 import user.commons.mediatool.MediaInfo;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.steps.shared.EscortFiles;\r
 import user.mediacube.metadata.interfaces.IMetadata;\r
 import user.mediacube.metadata.interfaces.IMetadataProvider;\r
 import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
@@ -46,10 +52,12 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        private static final String KILL_DATE_DAYS = "killDateDays";\r
        private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");\r
 \r
-       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", "VASAROLT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER);\r
+       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", EscortFiles.STATUSFOLDER,\r
+                       EscortFiles.CONFLICTFOLDER);\r
        private int limit;\r
        private int submitted;\r
        private int killDateDays;\r
+       private boolean disableProxy;\r
 \r
        private boolean canReadMediaInfo(Path mediaFilePath) {\r
                boolean result = false;\r
@@ -63,21 +71,32 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                return result;\r
        }\r
 \r
-       private void checkArchiveItem(ArchiveItem archiveItem, Path mediaPath) throws Exception {\r
+       private void checkArchiveItem(ArchiveItem archiveItem) throws Exception {\r
                if (archiveItem == null)\r
-                       throw new Exception(mediaPath + " has no metadata specified.");\r
+                       throw new Exception("No metadata specified.");\r
 \r
                if (StringUtils.isBlank(archiveItem.getItemHouseId()))\r
-                       throw new Exception(mediaPath + " has no Item HouseID specified in metadata.");\r
+                       throw new Exception("No Item HouseID specified in metadata.");\r
 \r
                if (StringUtils.isBlank(archiveItem.getItemTitle()))\r
-                       throw new Exception(mediaPath + " has no Item Title specified in metadata.");\r
+                       throw new Exception("No Item Title specified in metadata.");\r
 \r
                if (StringUtils.isBlank(archiveItem.getMediaHouseId()))\r
-                       throw new Exception(mediaPath + " has no Media HouseID specified in metadata.");\r
+                       throw new Exception("No Media HouseID specified in metadata.");\r
 \r
                if (StringUtils.isBlank(archiveItem.getMediaTitle()))\r
-                       throw new Exception(mediaPath + " has no Media Title specified in metadata.");\r
+                       throw new Exception("No Media Title specified in metadata.");\r
+       }\r
+\r
+       private String archiveItemJSON(ArchiveItem result) {\r
+               BasicDBObject obj = new BasicDBObject();\r
+               obj.put("itemHouseId", result.getItemHouseId());\r
+               obj.put("itemTitle", result.getItemTitle());\r
+               obj.put("mediaHouseId", result.getMediaHouseId());\r
+               obj.put("mediaTitle", result.getMediaTitle());\r
+               obj.put("mediaDescription", result.getMediaDescription());\r
+               obj.put("mediaType", result.getMediaType());\r
+               return obj.toPrettyString("");\r
        }\r
 \r
        private ArchiveItem createArchiveItem(Path filePath) throws Exception {\r
@@ -87,13 +106,21 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                String mediaHouseId = FilenameUtils.removeExtension(fileName);\r
                try {\r
                        result = getPlanAirMetadata(mediaHouseId);\r
-               } catch (Exception e) {\r
 \r
-                       logger.error("PlanAir metadata error", e);\r
-                       //nem latja a drivert pl.\r
+                       if (result != null) {\r
+                               result.setMediaFile(filePath.toString());\r
+                               // 210617 proxy keszites tiltasa\r
+                               result.setDisableProxy(disableProxy);\r
+                       }\r
+\r
+                       logger.info(getSessionMarker(), "PlanAir query done for {}", filePath);\r
+               } catch (Exception e) {\r
+                       logger.error(getSessionMarker(), "PlanAir metadata error", e);\r
+                       // nem latja a drivert pl.\r
                        throw e;\r
                }\r
 \r
+//210616 Ha nincs metaadat, nem archivalunk\r
                if (result == null) {\r
                        result = new ArchiveItem();\r
                        BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);\r
@@ -101,31 +128,32 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                        result.setItemTitle(filePath.getParent().toString());\r
                        result.setMediaHouseId(mediaHouseId);\r
                        result.setMediaTitle(fileName);\r
-                       //TODO kesobb kivenni\r
-                       //result.setMediaDescription("/OMARCHIVE");\r
+                       result.setMediaDescription("/ARCHIVE-TEST");\r
                        result.setMediaType("Generic");\r
+                       result.setMediaFile(filePath.toString());\r
                }\r
 \r
-               result.setMediaFile(filePath.toString());\r
                return result;\r
        }\r
 \r
        @StepEntry\r
-       public Object[] execute(String sourcePath, int killDateDays, int limit) throws Exception {\r
+       public Object[] execute(String sourcePath, int killDateDays, int limit, boolean disableProxy) throws Exception {\r
                this.killDateDays = killDateDays;\r
                this.limit = limit;\r
+               this.disableProxy = disableProxy;\r
+               logger.info(getSessionMarker(), "Starting in {}", sourcePath);\r
                try {\r
                        if (getJobRuntime().forkPrepare()) {\r
                                Files.walkFileTree(Paths.get(sourcePath), this);\r
                        }\r
                } catch (Exception e) {\r
-                       logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+                       logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath,\r
+                                       e.getMessage());\r
                } finally {\r
                        if (submitted > 0)\r
                                getJobRuntime().forkWaitComplete();\r
                        else\r
                                getJobRuntime().cancelForkPrepare();\r
-\r
                }\r
                return null;\r
        }\r
@@ -139,7 +167,12 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                List<IMetadata> data = null;\r
 \r
                IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+               if (factory == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProviderFactory is null");\r
+\r
                IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR);\r
+               if (planairProvider == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProvider is null");\r
 \r
                ArchiveItem result = null;\r
                data = planairProvider.list(opt);\r
@@ -175,36 +208,7 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                if (getManager().isMediaFileExists(sourceFileName)) {\r
                        EscortFiles.createMediaCatch(mediaPath);\r
                        result = true;\r
-\r
-                       //                      try {\r
-                       //                              Path parent = sourcePath.getParent();\r
-                       //                              Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
-                       //                              File folder = conflictPath.toFile();\r
-                       //                              if (!folder.exists() || !folder.isDirectory()) {\r
-                       //                                      Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
-                       //                                      FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
-                       //                                      try {\r
-                       //                                              Files.createDirectories(conflictPath, attr);\r
-                       //                                      } catch (Exception e) {\r
-                       //                                              try {\r
-                       //                                                      Files.createDirectory(conflictPath);\r
-                       //                                              } catch (Exception e1) {\r
-                       //                                                      logger.catching(e);\r
-                       //                                                      throw e;\r
-                       //                                              }\r
-                       //                                      }\r
-                       //                              }\r
-                       //\r
-                       //                              Path conflictFile = Paths.get(conflictPath.toString(), sourceFileName);\r
-                       //                              if (conflictFile.toFile().exists())\r
-                       //                                      conflictFile = Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime());\r
-                       //                              Files.move(sourcePath, conflictFile);\r
-                       //                              result = true;\r
-                       //                      } catch (Exception e1) {\r
-                       //                              logger.error(getSessionMarker(), "Hiba az '{}' állomány mappába mozgatásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
-                       //                      }\r
                }\r
-\r
                return result;\r
        }\r
 \r
@@ -214,46 +218,71 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        }\r
 \r
        @Override\r
-       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
+       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes)\r
+                       throws IOException {\r
                Path dirName = dir.getFileName();\r
-               logger.info("PreVisit {}", dir);\r
 \r
-               if (skipPathNames.contains(dirName.toString()))\r
+               if (skipPathNames.contains(dirName.toString())) {\r
+                       logger.info(getSessionMarker(), "PreVisit skip {}", dir);\r
                        return FileVisitResult.SKIP_SUBTREE;\r
-               else\r
-                       logger.info("PreVisit {}", dir);\r
+               else\r
+                       logger.info(getSessionMarker(), "PreVisit {}", dir);\r
 \r
                return FileVisitResult.CONTINUE;\r
        }\r
 \r
        private boolean processPathItem(Path mediaPath) throws Exception {\r
-               if (submitted == limit)\r
+               if (limit != 0 && submitted == limit) {\r
+                       logger.info(getSessionMarker(), "Limit reached {}, canceling", limit);\r
+                       return false;\r
+               }\r
+\r
+               String fileName = mediaPath.getFileName().toString();\r
+               if (fileName.startsWith(".") || fileName.endsWith(".nomd"))\r
                        return false;\r
 \r
-               //              if (!"Transfered".equals(mediaPath.getParent().getFileName().toString()))\r
-               //                      return false;\r
+               logger.info(getSessionMarker(), "Processing {}", mediaPath);\r
 \r
-               if (mediaPath.getFileName().toString().startsWith("."))\r
+               File mediaFile = mediaPath.toFile();  \r
+               if (mediaFile.isDirectory()) {\r
+                       //logger.info(getSessionMarker(), "Skipping directory {}", mediaPath);\r
                        return false;\r
+               }\r
 \r
-               File mediaFile = mediaPath.toFile();\r
-               if (mediaFile.isDirectory())\r
+               if (EscortFiles.isMediaCatched(mediaPath)) {\r
+                       //logger.info(getSessionMarker(), "Skipping already catched {}", mediaPath);\r
                        return false;\r
+               }\r
 \r
-               if (EscortFiles.isMediaCatched(mediaPath))\r
+               Path nomdFile = Paths.get(mediaPath.toString() + ".nomd");\r
+\r
+               if (nomdFile.toFile().exists()) {\r
+                       //logger.info(getSessionMarker(), "Skipping nomd file exists {}", nomdFile);\r
                        return false;\r
+               }\r
 \r
-               if (handleArchiveConflict(mediaPath))\r
+               if (handleArchiveConflict(mediaPath)) {\r
+                       logger.info(getSessionMarker(), "Skipping archive db already contains {}", mediaPath);\r
                        return false;\r
+               }\r
 \r
-               if (!canReadMediaInfo(mediaPath))\r
+               if (!canReadMediaInfo(mediaPath)) {\r
+                       logger.info(getSessionMarker(), "Skipping cant read mediainfo {}", mediaPath);\r
                        return false;\r
+               }\r
 \r
                ArchiveItem archiveItem = createArchiveItem(mediaPath);\r
 \r
+               if (archiveItem == null) {\r
+                       Message msg = new ParameterizedMessage("Nincs metaadat!");\r
+                       logger.info(new MediaCubeMarker("vasary@elgekko.net,muszak@mediavivantis.hu",\r
+                                       "Értesítés problémás " + mediaPath.getFileName().toString() + " archiválásról"), msg);\r
+                       Files.createFile(nomdFile);\r
+                       return false;\r
+               }\r
+\r
                try {\r
-                       checkArchiveItem(archiveItem, mediaPath);\r
-                       submitted++;\r
+                       checkArchiveItem(archiveItem);\r
 \r
                        Map<String, Object> parameters = ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays);\r
                        IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
@@ -264,9 +293,13 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                                throw new Exception("Submit returned null runtime");\r
                        runtime.setRelated(mediaPath.toString());\r
                        EscortFiles.createMediaCatch(mediaPath);\r
+                       String metadata = archiveItemJSON(archiveItem);\r
+                       EscortFiles.createMetadata(mediaPath.getParent().toString(), mediaPath.getFileName().toString(), metadata);\r
+                       submitted++;\r
                } catch (Exception e) {\r
-                       String fileName = new File(archiveItem.getMediaFile()).getName();\r
-                       logger.error(getSessionMarker(), "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", fileName, e.getMessage());\r
+                       logger.error(getSessionMarker(),\r
+                                       "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", mediaPath,\r
+                                       e.getMessage());\r
                }\r
 \r
                return true;\r
@@ -274,7 +307,7 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
 \r
        @Override\r
        public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
-               //logger.info("Will archived {}", filePath);\r
+               logger.info(getSessionMarker(), "Will checked {}", filePath);\r
                try {\r
                        processPathItem(filePath);\r
                } catch (Exception e) {\r
index ebbe2d362f07c1b9ff1efb558349845a41d451e2..299068879eeeaf535eec200b6d99368468d593aa 100644 (file)
@@ -1,43 +1,30 @@
 package user.jobengine.server.steps;\r
 \r
-import org.apache.commons.net.ftp.FTPClient;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
-import org.apache.logging.log4j.Marker;\r
-import org.apache.logging.log4j.MarkerManager;\r
+import org.apache.logging.log4j.message.Message;\r
+import org.apache.logging.log4j.message.ParameterizedMessage;\r
 \r
-import user.commons.StoreUri;\r
-import user.commons.remotestore.FtpDirectoryLister;\r
-import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.commons.MediaCubeMarker;\r
 \r
 public class CancelableStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
-       int count = 10;\r
 \r
        @StepEntry\r
        public Object[] execute(int param) throws Exception {\r
-               try {\r
+               logger.info(getMarker(), "Executing");\r
+               Message msg = new ParameterizedMessage("");\r
+               logger.info(new MediaCubeMarker("vasary@elgekko.net,vasary@gmail.com", "MediaCube rendszerüzenet"), msg);\r
 \r
-                       Marker marker = MarkerManager.getMarker("MEDIAPROFILE");\r
-                       getJobRuntime().setRelated("TESZT" + param);\r
-\r
-                       for (int i = 0; i < count; i++) {\r
-                               if (getJobRuntime().isWaitingCancel())\r
-                                       break;\r
-                               Thread.sleep(500);\r
-                               if (param==0)\r
-                                       throw new Exception();\r
-                               if (param==1) {\r
-                                       getJobRuntime().setDisableRetry(true);\r
-                                       throw new Exception();\r
-                               }\r
-                               int progress = (i + 1) * 100 / count;\r
-                               setProgress(progress);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.info(e.getMessage());\r
-                       throw e;\r
+               for (int i = 0; i < 10; i++) {\r
+                       logger.info(getMarker(), "Executing {}", i);\r
+                       if (getJobRuntime().isWaitingCancel())\r
+                               break;\r
+                       Thread.sleep(100);\r
+                       int progress = (i + 1) * 100 / 10;\r
+                       setProgress(progress);\r
                }\r
+\r
                return null;\r
        }\r
 \r
index 4e6f10d13ded11e555a20ff7080cc0dd5e16cfed..3ed0e4f407e052b00bf7768c9cd1a74e7455ba52 100644 (file)
@@ -23,12 +23,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 import org.apache.logging.log4j.Marker;\r
 \r
-import user.commons.RemoteFile;\r
-import user.commons.StoreUri;\r
-import user.commons.remotestore.RemoteStoreProtocol;\r
-import user.jobengine.db.Store;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.steps.shared.ItemManagerExtensions;\r
 \r
 public class CleanupMountedLocationStep extends JobStep implements FileVisitor<Path> {\r
 \r
@@ -68,7 +63,7 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
 \r
        private Path sourcePath;\r
        private SimpleDateFormat dateFormat;\r
-       private StoreUri tsmStoreUri;\r
+       private boolean skipArchiveCheck;\r
 \r
        private Date checkExpiration(List<Path> killDateFiles) {\r
                Date killDate = null;\r
@@ -83,7 +78,8 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
        }\r
 \r
        @StepEntry\r
-       public Object[] execute(String sourceFolder, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+       public Object[] execute(String sourceFolder, boolean skipArchiveCheck) throws Exception {\r
+               this.skipArchiveCheck = skipArchiveCheck;\r
                marker = getSessionMarker();\r
                sourcePath = Paths.get(sourceFolder);\r
                DirectoryStream<Path> directoryStream = null;\r
@@ -97,14 +93,6 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
                        throw new NullPointerException(String.format("Directory %s not exists.", sourceFolder));\r
                }\r
 \r
-               Store tsmStore = getManager().getSystemStore(false);\r
-               if (tsmStore == null)\r
-                       throw new NullPointerException("A TSM bejegyzés nem található!");\r
-\r
-               tsmStoreUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
-               if (tsmStoreUri == null)\r
-                       throw new NullPointerException("A TSM forrás elérése nem található!");\r
-\r
                try {\r
                        setProgress(1);\r
                        dateFormat = new SimpleDateFormat(DATEFORMAT);\r
@@ -176,29 +164,6 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
                return result;\r
        }\r
 \r
-       private boolean isArchived(Path filePath) {\r
-               boolean result = false;\r
-               String name = filePath.getFileName().toString();\r
-               String[] tsmName = new String[] { null };\r
-               String query = String.format("SELECT relativepath FROM MEDIAFILE WHERE houseid = '%s'", name);\r
-               getManager().executeQuery(query, rs -> {\r
-                       tsmName[0] = rs.getString("relativepath");\r
-                       return false;\r
-               }, null);\r
-\r
-               if (tsmName[0] != null) {\r
-                       try {\r
-                               RemoteFile remoteFile = tsmStoreUri.getRemoteFile(tsmName[0]);\r
-                               result = remoteFile != null;\r
-                       } catch (Exception e) {\r
-                               logger.error(e.getMessage());\r
-                       } finally {\r
-                               tsmStoreUri.cleanUp();\r
-                       }\r
-               }\r
-               return result;\r
-       }\r
-\r
        @Override\r
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {\r
                if (!dir.equals(sourcePath) && isEmpty(dir)) {\r
@@ -246,9 +211,11 @@ public class CleanupMountedLocationStep extends JobStep implements FileVisitor<P
                if (killDate == null)\r
                        return;\r
 \r
-               if (!isArchived(filePath)) {\r
-                       logger.error(marker, "A(z) {} anyag törlésre van kijelölve, de nem található az archívumban.", filePath);\r
-                       return;\r
+               if (!skipArchiveCheck && filePath.toFile().length() > 0) {\r
+                       if (!ItemManagerExtensions.isArchived(getManager(), filePath)) {\r
+                               logger.error(marker, "A(z) {} anyag törlésre van kijelölve, de nem található az archívumban.", filePath);\r
+                               return;\r
+                       }\r
                }\r
 \r
                if (removeFiles(filePath, killDateFiles))\r
index 19bad479f092e0a4f3e1deb3688dd80eb85caaf9..b549e59e97051ce256c365cc6e6e3f60a47b67c4 100644 (file)
@@ -13,6 +13,7 @@ import user.commons.MediaCubeUndoMarker;
 import user.commons.nosql.NoSQLUtils;\r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.Media;\r
+import user.jobengine.db.MediaFile;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
 \r
@@ -22,6 +23,7 @@ public class CreateMissingLowresStep extends JobStep {
        @StepEntry\r
        public Object[] execute(String localHiresPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
                Object[] result = new Object[] { null, null, "%s", null, 0, true };\r
+\r
                DB db = NoSQLUtils.getNoSQLDB();\r
                DBCollection collection = db.getCollection("missing_lowres");\r
                IItemManager manager = jobEngine.getItemManager();\r
@@ -55,21 +57,30 @@ public class CreateMissingLowresStep extends JobStep {
 \r
        private Media getFirstUntranscodedMedia(IItemManager manager, DBCollection collection) {\r
                Media[] result = new Media[] { null };\r
-               //MV\r
+               // MV\r
                String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS WHERE HOUSEID like 'M%' or HOUSEID like 'P%' or HOUSEID like 'R%' ORDER BY modified DESC";\r
 \r
-               //HTV\r
-               //String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS";\r
+               // HTV\r
+               // String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS";\r
                manager.executeQuery(query, rs -> {\r
                        try {\r
                                long mediaId = rs.getLong(1);\r
                                Media media = manager.getMedia(mediaId);\r
-                               //a nevgeneralas miatt az eredeti MediaFilesName nem jo, a pontos nev kell nekunk\r
+                               // a nevgeneralas miatt az eredeti MediaFilesName nem jo, a pontos nev kell\r
+                               // nekunk\r
                                String name = media.getMediaFileRealName();\r
-                               logger.info(getSessionMarker(), "Checking {}", name);\r
+                               //logger.info(getSessionMarker(), "Checking {}", name);\r
                                long existing = collection.find(new BasicDBObject("name", name)).count();\r
                                if (existing > 0) {\r
-                                       logger.info(getSessionMarker(), "{} is on missing_lowres list", name);\r
+                                       // logger.info(getSessionMarker(), "{} is on missing_lowres list", name);\r
+                                       return true;\r
+                               }\r
+\r
+                               // 210617 proxy keszites tiltasa\r
+                               MediaFile mf = manager.getSystemMediaFile(media);\r
+                               if (mf.isDisableProxy()) {\r
+                                       logger.info(getSessionMarker(), "Proxy disabled {}", name);\r
+                                       \r
                                        return true;\r
                                }\r
 \r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalCommandExecutor.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalCommandExecutor.java
deleted file mode 100644 (file)
index a34ff7f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-package user.jobengine.server.steps.shared;\r
-\r
-import user.commons.configuration.SystemConfiguration;\r
-\r
-public class ExternalCommandExecutor {\r
-\r
-       public void execute(String profileName, String input, String output, IExternalCallback responseCallBack) throws Exception {\r
-               ExternalCommand externalCommand = getExternalCommand(profileName);\r
-               externalCommand.execute(input, output, false, responseCallBack);\r
-       }\r
-\r
-       private ExternalCommand getExternalCommand(String profileName) throws Exception {\r
-               ExternalProfilesConfig config = SystemConfiguration.getInstance().load("settings/external-commands.yaml", ExternalProfilesConfig.class);\r
-\r
-               if (config == null)\r
-                       throw new Exception("Missing external-commands.yaml configuration");\r
-\r
-               ExternalProfile selectedProfile = null;\r
-               for (ExternalProfile profile : config.getProfiles()) {\r
-                       if (profileName.equals(profile.getName())) {\r
-                               selectedProfile = profile;\r
-                               break;\r
-                       }\r
-               }\r
-\r
-               if (selectedProfile == null)\r
-                       throw new Exception("Missing profile " + profileName + " in external-commands.yaml configuration");\r
-\r
-               return new ExternalCommand(selectedProfile);\r
-       }\r
-\r
-}\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalProfile.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalProfile.java
deleted file mode 100644 (file)
index 68e22f4..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-package user.jobengine.server.steps.shared;\r
-\r
-import java.util.List;\r
-\r
-public class ExternalProfile {\r
-       private String executable;\r
-       private String name;\r
-       private List<String> arguments;\r
-\r
-       public List<String> getArguments() {\r
-               return arguments;\r
-       }\r
-\r
-       public String getExecutable() {\r
-               return executable;\r
-       }\r
-\r
-       public String getName() {\r
-               return name;\r
-       }\r
-\r
-       public void setArguments(List<String> arguments) {\r
-               this.arguments = arguments;\r
-       }\r
-\r
-       public void setExecutable(String executable) {\r
-               this.executable = executable;\r
-       }\r
-\r
-       public void setName(String name) {\r
-               this.name = name;\r
-       }\r
-}
\ No newline at end of file
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalProfilesConfig.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ExternalProfilesConfig.java
deleted file mode 100644 (file)
index 7ef7729..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package user.jobengine.server.steps.shared;\r
-\r
-import java.util.List;\r
-\r
-public class ExternalProfilesConfig {\r
-       private List<ExternalProfile> profiles;\r
-\r
-       public List<ExternalProfile> getProfiles() {\r
-               return profiles;\r
-       }\r
-\r
-       public void setProfiles(List<ExternalProfile> profiles) {\r
-               this.profiles = profiles;\r
-       }\r
-}
\ No newline at end of file
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/IExternalCallback.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/IExternalCallback.java
deleted file mode 100644 (file)
index 1e07191..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-package user.jobengine.server.steps.shared;\r
-\r
-public interface IExternalCallback {\r
-       void onResponse(String data);\r
-}
\ No newline at end of file
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/ItemManagerExtensions.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ItemManagerExtensions.java
deleted file mode 100644 (file)
index bf80779..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import com.ibm.nosql.json.api.BasicDBObject;\r
-\r
-import user.jobengine.db.IItemManager;\r
-import user.jobengine.db.IResultSetConsumer;\r
-\r
-public class ItemManagerExtensions {\r
-\r
-       public static BasicDBObject getArchiveInfo(IItemManager manager, long houseid) {\r
-               final BasicDBObject[] result = { null };\r
-               StringBuilder query = new StringBuilder();\r
-               query.append("select count(*) as count, sum(length) as duration FROM media");\r
-               query.append(" ");\r
-               query.append(String.format("where houseid='%d' and itemtypeid = 82", houseid));\r
-               query.append(" ");\r
-               query.append("group by houseid");\r
-               IResultSetConsumer consumer = rs -> {\r
-                       BasicDBObject o = new BasicDBObject();\r
-                       o.put("count", rs.getLong("count"));\r
-                       o.put("duration", rs.getLong("duration"));\r
-                       result[0] = o;\r
-                       return false;\r
-               };\r
-               manager.executeQuery(query.toString(), consumer, null);\r
-               return result[0];\r
-       }\r
-\r
-       public static long getExistingRundownMedia(IItemManager manager, String houseid) {\r
-               final long[] result = { 0 };\r
-               final String[] idToCheck = { houseid };\r
-               int pos = houseid.lastIndexOf("-");\r
-               //a hivas a CopyForArchiveNEXIOMaterialsStep-bol is johet, ott meg nincs idobelyegezve a nev!\r
-               if (pos > 0 && houseid.length() - pos > 4)\r
-                       idToCheck[0] = houseid.substring(0, pos);\r
-               MetadataType metadataType = MetadataTypeDetector.GuessMetadataType(idToCheck[0]);\r
-               if (metadataType == MetadataType.OctopusPlaceholder) {\r
-                       StringBuilder query = new StringBuilder();\r
-                       query.append("select mediaid, mediafilehouseid, filename");\r
-                       query.append(" ");\r
-                       query.append(String.format("from vw_rundown_items where mediafilehouseid like '%s%%'", idToCheck[0]));\r
-                       query.append(" ");\r
-                       query.append("order by filename, mediaid");\r
-                       IResultSetConsumer consumer = rs -> {\r
-                               String fileName = rs.getString("filename");\r
-                               if (idToCheck[0].equals(fileName)) {\r
-                                       result[0] = rs.getLong("mediaid");\r
-                                       return false;\r
-                               } else\r
-                                       return true;\r
-                       };\r
-                       manager.executeQuery(query.toString(), consumer, null);\r
-               }\r
-\r
-               return result[0];\r
-       }\r
-\r
-}\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/MediaCubeClient.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MediaCubeClient.java
deleted file mode 100644 (file)
index 840925e..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import javax.ws.rs.client.Entity;\r
-import javax.ws.rs.client.Invocation.Builder;\r
-import javax.ws.rs.core.MediaType;\r
-import javax.ws.rs.core.MultivaluedMap;\r
-import javax.ws.rs.core.Response;\r
-import javax.ws.rs.core.Response.Status;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-import org.jboss.resteasy.client.jaxrs.ResteasyClient;\r
-import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;\r
-import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;\r
-import org.jboss.resteasy.specimpl.MultivaluedMapImpl;\r
-\r
-import com.ibm.nosql.json.JSONUtil;\r
-import com.ibm.nosql.json.api.BasicDBObject;\r
-\r
-public class MediaCubeClient {\r
-       private static Logger logger = LogManager.getLogger();\r
-       private ResteasyWebTarget webTarget;\r
-\r
-       public MediaCubeClient(String address) {\r
-               ResteasyClient client = new ResteasyClientBuilder().build();\r
-               webTarget = client.target(address);\r
-       }\r
-\r
-       BasicDBObject getDbObject(String json) {\r
-               BasicDBObject result = (BasicDBObject) JSONUtil.jsonToDbObject(json);\r
-\r
-               if (result == null)\r
-                       throw new NullPointerException("API Result is null!");\r
-\r
-               if (result.containsKey("exception")) {\r
-                       BasicDBObject e = (BasicDBObject) result.get("exception");\r
-                       throw new RuntimeException(e.getString("message"));\r
-               }\r
-               //{"exception":{"message":"Invalid credentials.","publicName":"AuthenticationFailedException"}}\r
-               return result;\r
-       }\r
-\r
-       public BasicDBObject getStatus(long jobId) {\r
-               MultivaluedMap<String, Object> vars = new MultivaluedMapImpl<>();\r
-               vars.add("jobId", jobId);\r
-               Response response = query("services/rest/jobengine/jobstatus", vars).get();\r
-               if (response.getStatus() != Status.OK.getStatusCode()) {\r
-                       logger.error(response.readEntity(String.class));\r
-                       System.out.println(response.readEntity(String.class));\r
-                       return null;\r
-               }\r
-               String result = response.readEntity(String.class);\r
-               return getDbObject(result);\r
-       }\r
-\r
-       private Builder query(String path, MultivaluedMap<String, Object> vars) {\r
-               ResteasyWebTarget target = webTarget.path(path).queryParams(vars);\r
-               Builder result = target.request();\r
-               return result;\r
-       }\r
-\r
-       public long startjob(String template, String name, BasicDBObject jobParams) throws Exception {\r
-               MultivaluedMap<String, Object> vars = new MultivaluedMapImpl<>();\r
-               vars.add("template", template);\r
-               vars.add("name", name);\r
-               Response response = query("services/rest/jobengine/startjob", vars).post(Entity.entity(jobParams.toString(), MediaType.APPLICATION_JSON));\r
-\r
-               if (response.getStatus() != Status.OK.getStatusCode()) {\r
-                       logger.error(response.readEntity(String.class));\r
-                       return 0;\r
-               }\r
-\r
-               String resultObject = response.readEntity(String.class);\r
-               return Long.parseLong(resultObject);\r
-       }\r
-\r
-}\r
index c0c56f689e87c8d67e990448ce4b2efc4cc4d6c1..ecc0ba2db08d9809ce5a37bb973838ec565d04ed 100644 (file)
@@ -5,35 +5,23 @@ import java.nio.file.Paths;
 \r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
-import org.apache.logging.log4j.Marker;\r
 \r
-import user.commons.mediatool.MediaInfo;\r
+import user.commons.mediaarea.MediaArea;\r
 import user.jobengine.db.Media;\r
 \r
 public class MediaToolStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
-       private Marker marker;\r
 \r
        @StepEntry\r
        public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia) throws Exception {\r
-               marker = getSessionMarker();\r
-\r
-               //TODO ez most minden esetben ujranezi\r
-               //              if (mediaCubeMedia.getLength() > 0)\r
-               //                      return null;\r
-\r
                Path filePath = Paths.get(archiveItem.getMediaFile());\r
-               MediaInfo mi = new MediaInfo(filePath);\r
-               try {\r
-                       mi.process();\r
-                       long frames = mi.getFrames();\r
-                       if (frames > 0) {\r
-                               mediaCubeMedia.setLength(frames);\r
-                               getManager().modify(mediaCubeMedia);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.catching(e);\r
-                       logger.error(marker, "A '{}' média analizálása sikertelen. A  rendszer üzenete: {}", filePath, e.getMessage());\r
+               MediaArea ma = new MediaArea(filePath);\r
+               ma.process();\r
+               long frames = ma.getFrameCount();\r
+               if (frames > 0) {\r
+                       logger.info("Media {} length is {}", filePath, frames);\r
+                       mediaCubeMedia.setLength(frames);\r
+                       getManager().modify(mediaCubeMedia);\r
                }\r
                return null;\r
        }\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataType.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataType.java
deleted file mode 100644 (file)
index 12e166c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-public enum MetadataType {\r
-       TrafficMaterial, TrafficPromo, TrafficAD, OctopusStory, OctopusPlaceholder, Generic\r
-}\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataTypeDetector.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataTypeDetector.java
deleted file mode 100644 (file)
index 0bb6992..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import org.apache.commons.lang.StringUtils;\r
-\r
-public class MetadataTypeDetector {\r
-\r
-       private static final String HYPHEN = "-";\r
-       private static final String DOT = ".";\r
-\r
-       private static final String REGEXP_TRAFFICMATERIALID = "^M{1}[0-9]{6}[A-Z]{1}$";\r
-       private static final String REGEXP_TRAFFICADID = "^R{1}[0-9]{6}[A-Z]{1}$";\r
-       private static final String REGEXP_TRAFFICPROMOID = "^P{1}[0-9]{6}[A-Z]{1}$";\r
-       private static final String REGEXP_OCTOPUSSTORYID = "^[0-9]+$";\r
-       private static final String REGEXP_OCTOPUSPLACEHOLDERID = "^[0-9]+_[0-9]+$";\r
-       private static final String REGEXP_OCTOPUSPLACEHOLDERVERSIONEDID = "^[0-9]+_[0-9]+-[0-9]{3}$";\r
-\r
-       public static MetadataType GuessMetadataType(String id) {\r
-               if (StringUtils.isBlank(id))\r
-                       return MetadataType.Generic;\r
-               if (id.matches(REGEXP_TRAFFICMATERIALID))\r
-                       return MetadataType.TrafficMaterial;\r
-               if (id.matches(REGEXP_TRAFFICPROMOID))\r
-                       return MetadataType.TrafficPromo;\r
-               if (id.matches(REGEXP_TRAFFICADID))\r
-                       return MetadataType.TrafficAD;\r
-               if (id.matches(REGEXP_OCTOPUSSTORYID))\r
-                       return MetadataType.OctopusStory;\r
-               if (id.matches(REGEXP_OCTOPUSPLACEHOLDERID))\r
-                       return MetadataType.OctopusPlaceholder;\r
-               if (id.matches(REGEXP_OCTOPUSPLACEHOLDERVERSIONEDID))\r
-                       return MetadataType.OctopusPlaceholder;\r
-               return MetadataType.Generic;\r
-       }\r
-\r
-       public static String truncateExtension(String name) {\r
-               String result = name;\r
-               if (result != null && result.contains(DOT))\r
-                       result = result.substring(0, result.lastIndexOf(DOT));\r
-               return result;\r
-       }\r
-\r
-       public static String truncateVersion(String name) {\r
-               String result = name;\r
-               if (result != null && result.contains(HYPHEN))\r
-                       result = result.split(HYPHEN)[0];\r
-               return result;\r
-       }\r
-\r
-}\r
index 6950babe665e7e7791c6199d731324f8b99145e1..f0203ca5f5c925b14f7f187810f0bce5b315d5a4 100644 (file)
@@ -17,12 +17,9 @@ import org.apache.logging.log4j.Marker;
 import user.jobengine.db.ArchivedMedia;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
-\r
-/*\r
-package user.jobengine.server.steps.MetadataType;\r
-package user.jobengine.server.steps.MetadataTypeDetector;\r
-package user.jobengine.server.steps.EscortFiles;\r
-*/\r
+import user.jobengine.server.steps.shared.EscortFiles;\r
+import user.jobengine.server.steps.shared.MetadataType;\r
+import user.jobengine.server.steps.shared.MetadataTypeDetector;\r
 \r
 public class OutputPathAndNameSelectorStep extends JobStep {\r
 \r
index fd7d25ec80468dcfa6053658f99c68716fedff72..3708aa3e0179e284baf3c8dd2f04301290f053e4 100644 (file)
@@ -1,5 +1,7 @@
 package user.jobengine.server.steps;\r
 \r
+import java.util.List;\r
+\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
@@ -7,16 +9,21 @@ import user.commons.StoreUri;
 import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.Store;\r
 \r
 public class PrepareMediaRestoreStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
 \r
        @StepEntry\r
-       public Object[] execute(Media media, String mediaStoreProtocol, String tempStoreName, String tempStoreProtocol) throws Exception {\r
+       public Object[] execute(Media media, String tempStoreName, String tempStoreProtocol) throws Exception {\r
                StoreUri mediaStoreUri = null;\r
-               for (MediaFile mediaFile : media.getMediaFiles()) {\r
-                       if (mediaFile.getStore().isSystem() && !mediaFile.getStore().isLowres()) {\r
-                               mediaStoreUri = mediaFile.getStore().getStoreUri(Enum.valueOf(RemoteStoreProtocol.class, mediaStoreProtocol));\r
+               List<MediaFile> mediaFiles = media.getMediaFiles();\r
+               if (mediaFiles.size() > 1)\r
+                       throw new Exception("Media " + media.getId() + " already has proxy");\r
+               for (MediaFile mediaFile : mediaFiles) {\r
+                       Store store = mediaFile.getStore();\r
+                       if (store.isSystem() && !store.isLowres()) {\r
+                               mediaStoreUri = store.getStoreUri(RemoteStoreProtocol.TSM);\r
                                if (mediaStoreUri != null)\r
                                        break;\r
                        }\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/PrepareRemoteTranscodeJobParametersStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/PrepareRemoteTranscodeJobParametersStep.java
deleted file mode 100644 (file)
index 37306e6..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-package user.jobengine.server.steps;\r
-\r
-import java.nio.file.Paths;\r
-\r
-import com.ibm.nosql.json.api.BasicDBObject;\r
-\r
-public class PrepareRemoteTranscodeJobParametersStep extends JobStep {\r
-       @StepEntry\r
-       public Object[] execute(String profileName, String fileName) throws Exception {\r
-               String transcoderInputDir = "m:\";\r
-               String transcoderOutputDir = "m:\";\r
-               String outFileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".mp4";\r
-               BasicDBObject parameters = new BasicDBObject();\r
-               parameters.put("profile", profileName);\r
-               parameters.put("input", Paths.get(transcoderInputDir, fileName));\r
-               parameters.put("output", Paths.get(transcoderOutputDir, outFileName));\r
-               return new Object[] { parameters };\r
-       }\r
-\r
-}\r
index 9e8d19496ed53137d7937a853f9cf9b1af07f6ee..a91f9e97bf8794a8b7c443506dba105bca42359f 100644 (file)
@@ -11,37 +11,28 @@ import user.commons.MediaCubeUndoMarker;
 import user.commons.nosql.NoSQLUtils;\r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.Media;\r
+import user.jobengine.db.MediaFile;\r
 \r
 public class QueryMissingProxyMediaStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
 \r
        @StepEntry\r
        public Object[] execute() throws Exception {\r
-               Object[] result = new Object[] { null };\r
+               setDescription("Looking for missing proxy");\r
                DB db = NoSQLUtils.getNoSQLDB();\r
                DBCollection collection = db.getCollection("missing_lowres");\r
                Media media = getFirstUntranscodedMedia(collection);\r
 \r
-               try {\r
-                       if (media == null) {\r
-                               logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
-                               // throw new Exception("Nincs feldolgozandó hiány.");\r
-                               cancel();\r
-                               return null;\r
-                       }\r
-\r
-                       String name = media.getMediaFileRealName();\r
-                       collection.save(new BasicDBObject("name", name));\r
-                       logger.info(getSessionMarker(), "Processing mediaID: {}", media.getId());\r
-                       result[0] = media;\r
-               } catch (Exception e) {\r
-                       logger.catching(e);\r
-                       logger.error(getSessionMarker(), e.getMessage());\r
-                       throw e;\r
-               } finally {\r
-                       setProgress(100);\r
+               if (media == null) {\r
+                       logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
+                       cancel();\r
+                       return null;\r
                }\r
-               return result;\r
+\r
+               String name = media.getMediaFileRealName();\r
+               collection.save(new BasicDBObject("name", name));\r
+               logger.info(getSessionMarker(), "Processing mediaID: {}", media.getId());\r
+               return new Object[] { media };\r
        }\r
 \r
        private Media getFirstUntranscodedMedia(DBCollection collection) {\r
@@ -58,10 +49,17 @@ public class QueryMissingProxyMediaStep extends JobStep {
                                Media media = manager.getMedia(mediaId);\r
                                //a nevgeneralas miatt az eredeti MediaFilesName nem jo, a pontos nev kell nekunk\r
                                String name = media.getMediaFileRealName();\r
-                               logger.info(getSessionMarker(), "Checking {}", name);\r
+                               //logger.info(getSessionMarker(), "Checking {}", name);\r
                                long existing = collection.find(new BasicDBObject("name", name)).count();\r
                                if (existing > 0) {\r
-                                       logger.info(getSessionMarker(), "{} is on missing_lowres list", name);\r
+                                       //logger.info(getSessionMarker(), "{} is on missing_lowres list", name);\r
+                                       return true;\r
+                               }\r
+                               // 210617 proxy keszites tiltasa\r
+                               MediaFile mf = manager.getSystemMediaFile(media);\r
+                               if (mf.isDisableProxy()) {\r
+                                       //logger.info(getSessionMarker(), "Proxy disabled {}", name);\r
+                                       \r
                                        return true;\r
                                }\r
 \r
index 8e022f434471209be70f23069e862287296a5567..d4900d7625c93c0296600df9115b08638091d559 100644 (file)
@@ -5,39 +5,32 @@ import org.apache.logging.log4j.Logger;
 \r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
-/*\r
-import user.jobengine.server.steps.MediaCubeClient;\r
-*/\r
+import user.jobengine.server.steps.shared.MediaCubeClient;\r
+\r
 public class RemoteJobStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
 \r
        @StepEntry\r
-       public Object[] execute(String server, String template, String name, String profile) throws Exception {\r
-               try {\r
-                       MediaCubeClient mc = new MediaCubeClient(server);\r
-                       BasicDBObject params = new BasicDBObject();\r
-                       params.put("profile", profile);\r
-                       params.put("input", "c:/_workspace/data/video/proba1.mxf");\r
-                       params.put("output", "c:/_video/proba1.mp4");\r
-\r
-                       long jobId = mc.startjob(template, name, params);\r
-                       logger.info(getMarker(), "Started {} on server {}", jobId, server);\r
-                       while (true) {\r
-                               BasicDBObject status = mc.getStatus(jobId);\r
-                               if (status != null)\r
-                                       setProgress(status.getInt("progress"));\r
-\r
-                               String jobStatus = status.getString("status");\r
-                               if ("SUSPENDED".equals(jobStatus))\r
-                                       throw new Exception(status.getString("description"));\r
-\r
-                               if ("FINISHED".equals(jobStatus))\r
-                                       break;\r
-                       }\r
-\r
-               } catch (Exception e) {\r
-                       throw e;\r
+       public Object[] execute(String remoteServer, String template, String name, BasicDBObject remoteJobParameters) throws Exception {\r
+               setDescription("Executing on {}, template {}, profile {}", remoteServer, template, remoteJobParameters.getString("profile"));\r
+               MediaCubeClient mc = new MediaCubeClient(remoteServer);\r
+               long jobId = mc.startjob(template, name, remoteJobParameters);\r
+               logger.info(getMarker(), "Started {} on server {}", jobId, remoteServer);\r
+               while (true) {\r
+                       BasicDBObject status = mc.getStatus(jobId);\r
+                       if (status != null)\r
+                               setProgress(status.getInt("progress"));\r
+\r
+                       Thread.sleep(2000);\r
+\r
+                       String jobStatus = status.getString("status");\r
+                       if ("SUSPENDED".equals(jobStatus))\r
+                               throw new Exception(status.getString("description"));\r
+\r
+                       if ("FINISHED".equals(jobStatus))\r
+                               break;\r
                }\r
-               return new Object[] { null };\r
+\r
+               return null;\r
        }\r
 }\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/SafeDeleteRecursive.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/SafeDeleteRecursive.java
new file mode 100644 (file)
index 0000000..42c1bf9
--- /dev/null
@@ -0,0 +1,416 @@
+package user.jobengine.server.steps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.file.DirectoryStream;\r
+import java.nio.file.FileVisitResult;\r
+import java.nio.file.FileVisitor;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.attribute.BasicFileAttributes;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Collections;\r
+import java.util.Date;\r
+import java.util.LinkedHashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.commons.io.FileUtils;\r
+import org.apache.commons.io.FilenameUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.commons.IEntityBase;\r
+import user.commons.RemoteFile;\r
+import user.commons.StoreUri;\r
+import user.commons.mediatool.MediaInfo;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.Item;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.MediaFile;\r
+import user.jobengine.db.MediaFileDAO;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.steps.shared.EscortFiles;\r
+import user.mediacube.metadata.interfaces.IMetadata;\r
+import user.mediacube.metadata.interfaces.IMetadataListOptions;\r
+import user.mediacube.metadata.interfaces.IMetadataProvider;\r
+import user.mediacube.metadata.interfaces.IMetadataProviderFactory;\r
+import user.mediacube.metadata.interfaces.MetadataProviderType;\r
+import user.mediacube.metadata.interfaces.MetadataType;\r
+import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions;\r
+\r
+public class SafeDeleteRecursive extends JobStep implements FileVisitor<Path> {\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private static final String ITEM_TITLE = "itemTitle";\r
+       private static final String ITEM_HOUSEID = "itemHouseId";\r
+       private static final String MEDIA_HOUSEID = "mediaHouseId";\r
+       private static final String MEDIA_TITLE = "mediaTitle";\r
+       private static final String MEDIA_DESCRIPTION = "mediaDescription";\r
+       private static final String MEDIA_TYPE = "mediaType";\r
+       private static final String KILLDATEEXT = ".killdate";\r
+       private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");\r
+\r
+       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", EscortFiles.STATUSFOLDER,\r
+                       EscortFiles.CONFLICTFOLDER);\r
+       private Set<String> includeList;\r
+\r
+       private boolean canReadMediaInfo(Path mediaFilePath) {\r
+               boolean result = false;\r
+               try {\r
+                       MediaInfo mi = new MediaInfo(mediaFilePath);\r
+                       mi.process();\r
+                       result = true;\r
+               } catch (Exception e) {\r
+                       logger.warn(getSessionMarker(), e.getMessage());\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private boolean checkArchiveItem(ArchiveItem archiveItem, Item item, Media media) {\r
+               if (archiveItem == null)\r
+                       return false;\r
+\r
+               String itemHouseId = archiveItem.getItemHouseId() == null ? "" : archiveItem.getItemHouseId();\r
+               if (!itemHouseId.equals(item.getHouseId())) {\r
+                       logger.error(getSessionMarker(), "ItemHouseId");\r
+                       return false;\r
+               }\r
+\r
+               String itemTitle = archiveItem.getItemTitle() == null ? "" : archiveItem.getItemTitle();\r
+               if (!itemTitle.equals(item.getTitle())) {\r
+                       logger.error(getSessionMarker(), "ItemTitle");\r
+                       return false;\r
+               }\r
+               String mediaHouseId = archiveItem.getMediaHouseId() == null ? "" : archiveItem.getMediaHouseId();\r
+               if (!mediaHouseId.equals(media.getHouseId())) {\r
+                       logger.error(getSessionMarker(), "MediaHouseId");\r
+                       return false;\r
+               }\r
+               String mediaTitle = archiveItem.getMediaTitle() == null ? "" : archiveItem.getMediaTitle();\r
+               if (!mediaTitle.equals(media.getTitle())) {\r
+                       logger.error(getSessionMarker(), "MediaTitle");\r
+                       return false;\r
+               }\r
+\r
+               String mediaDescription = archiveItem.getMediaDescription() == null ? "" : archiveItem.getMediaDescription();\r
+               String storedMediaDescription = media.getDescription() == null ? "" : media.getDescription();\r
+               if (!mediaDescription.equals(storedMediaDescription)) {\r
+                       logger.error(getSessionMarker(), "MediaDescription");\r
+                       return false;\r
+               }\r
+\r
+               return true;\r
+       }\r
+\r
+       private ArchiveItem createArchiveItem(Path filePath) throws Exception {\r
+               ArchiveItem result = null;\r
+\r
+               String fileName = filePath.getFileName().toString();\r
+               String mediaHouseId = FilenameUtils.removeExtension(fileName);\r
+               try {\r
+                       result = getPlanAirMetadata(mediaHouseId);\r
+\r
+                       if (result != null)\r
+                               result.setMediaFile(filePath.toString());\r
+\r
+               } catch (Exception e) {\r
+                       logger.error(getSessionMarker(), "PlanAir metadata error", e);\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+       @StepEntry\r
+       public Object[] execute(String sourcePath) throws Exception {\r
+               logger.info(getSessionMarker(), "Starting in {}", sourcePath);\r
+               logger.info(getSessionMarker(), "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", "Napló időbélyeg",\r
+                               "Neve", "Elérése", "Mérete", "Létrehozva", "Módosítva", "Archiválva (MC)", "Archiválva (TSM)",\r
+                               "Méret (TSM)", ".catched", ".killdate", ".nomd", "Archivált (MC)", "Archivált (TSM)",\r
+                               "Metaadat egyezés", "Méret egyezés", "Törölhető", "Kezelendő");\r
+\r
+               try {\r
+                       String location = "/opt/test-mediacube/file_list_original.txt";\r
+                       includeList = loadIncludeList(location);\r
+                       Files.walkFileTree(Paths.get(sourcePath), this);\r
+               } catch (Exception e) {\r
+                       logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath,\r
+                                       e.getMessage());\r
+               }\r
+               return null;\r
+       }\r
+\r
+       private ArchiveItem getPlanAirMetadata(String mediaHouseId) throws Exception {\r
+               PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions();\r
+               opt.setSearch(mediaHouseId);\r
+               opt.setType(MetadataType.Material);\r
+\r
+               BasicDBObject json = null;\r
+               List<IMetadata> data = null;\r
+\r
+               IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+               if (factory == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProviderFactory is null");\r
+\r
+               IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR);\r
+               if (planairProvider == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProvider is null");\r
+\r
+               ArchiveItem result = null;\r
+               data = planairProvider.list(opt);\r
+               if (data.size() != 0)\r
+                       json = data.get(0).asJSON();\r
+               else {\r
+                       opt.setType(MetadataType.Promo);\r
+                       data = planairProvider.list(opt);\r
+                       if (data.size() != 0)\r
+                               json = data.get(0).asJSON();\r
+                       else {\r
+                               opt.setType(MetadataType.AD);\r
+                               data = planairProvider.list(opt);\r
+                               if (data.size() != 0)\r
+                                       json = data.get(0).asJSON();\r
+                       }\r
+               }\r
+               if (json != null) {\r
+                       result = new ArchiveItem();\r
+                       result.setItemHouseId(json.getString(ITEM_HOUSEID));\r
+                       result.setItemTitle(json.getString(ITEM_TITLE));\r
+                       result.setMediaHouseId(json.getString(MEDIA_HOUSEID));\r
+                       result.setMediaTitle(json.getString(MEDIA_TITLE));\r
+                       result.setMediaDescription(json.getString(MEDIA_DESCRIPTION));\r
+                       result.setMediaType(json.getString(MEDIA_TYPE));\r
+               }\r
+               return result;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult postVisitDirectory(Path paramT, IOException paramIOException) throws IOException {\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes)\r
+                       throws IOException {\r
+               Path dirName = dir.getFileName();\r
+\r
+               if (skipPathNames.contains(dirName.toString())) {\r
+                       //logger.info(getSessionMarker(), "PreVisit skip {}", dir);\r
+                       return FileVisitResult.SKIP_SUBTREE;\r
+               } //else\r
+                       //logger.info(getSessionMarker(), "PreVisit {}", dir);\r
+\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       private boolean processPathItem(Path mediaPath) throws Exception {\r
+               if (getJobRuntime().isWaitingCancel()) {\r
+                       cancel();\r
+                       return false;\r
+               }\r
+\r
+               BasicFileAttributes attr = Files.readAttributes(mediaPath, BasicFileAttributes.class);\r
+               File mediaFSFile = mediaPath.toFile();\r
+               String fileName = mediaPath.getFileName().toString();\r
+\r
+               if (mediaFSFile.isDirectory())\r
+                       return true;\r
+\r
+               if (fileName.startsWith(".") || fileName.endsWith(".nomd"))\r
+                       return true;\r
+\r
+               Path nomdFile = Paths.get(mediaPath.toString() + ".nomd");\r
+               ArchiveItem archiveItem = createArchiveItem(mediaPath);\r
+               List<Path> killDateFiles = getKillDateFiles(mediaPath);\r
+               MediaFile mediaFile = getMediaFile(fileName);\r
+\r
+               long size = mediaFSFile.length();\r
+               Date lastModifiedDate = new Date(attr.lastModifiedTime().toMillis());\r
+               //Date lastAccesDate = new Date(attr.lastAccessTime().toMillis());\r
+               Date createDate = new Date(attr.creationTime().toMillis());\r
+               boolean catchedExists = EscortFiles.isMediaCatched(mediaPath);\r
+               boolean noMDExists = nomdFile.toFile().exists();\r
+               boolean killdateExists = killDateFiles.size() > 0;\r
+               //boolean mediaInfoAvailable = canReadMediaInfo(mediaPath);\r
+               boolean mcArchived = mediaFile != null;\r
+               boolean metadataEquals = false;\r
+               boolean tsmArchived = false;\r
+               boolean sizeEquals = false;\r
+               Date mcArchivedDate = null;\r
+               long tsmSize = 0;\r
+               Date tsmBackupDate = null;\r
+               boolean includeContains = includeList.contains(mediaPath.toString());\r
+\r
+               if (mcArchived) {\r
+                       //metadata\r
+                       Media media = getManager().getMedia(mediaFile.getMediaId());\r
+                       mcArchivedDate = media.getCreated();\r
+                       Item item = getManager().getItem(media.getItemId());\r
+                       metadataEquals = checkArchiveItem(archiveItem, item, media);\r
+\r
+                       //tsm\r
+                       String tsmFileName = mediaFile.getRelativePath();\r
+                       RemoteFile tsmFile = getTSMFile(tsmFileName);\r
+                       tsmArchived = tsmFile != null;\r
+                       if (tsmArchived) {\r
+                               tsmSize = tsmFile.getSize();\r
+                               tsmBackupDate = getTSMBackupDate(tsmFileName);\r
+                               sizeEquals = tsmSize == size;\r
+                       }\r
+               }\r
+\r
+               boolean canDelete = !noMDExists && catchedExists && killdateExists && mcArchived && tsmArchived\r
+                               && metadataEquals;\r
+               Date now = new Date(System.currentTimeMillis());\r
+               logger.info(getSessionMarker(), "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now), fileName,\r
+                               mediaPath.getParent(), size, D(createDate), D(lastModifiedDate), D(mcArchivedDate), D(tsmBackupDate),\r
+                               tsmSize, YN(catchedExists), YN(killdateExists), YN(noMDExists), YN(mcArchived), YN(tsmArchived),\r
+                               YN(metadataEquals), YN(sizeEquals), YN(canDelete), YN(includeContains));\r
+\r
+               return true;\r
+       }\r
+\r
+       private Date getTSMBackupDate(String tsmFileName) throws Exception {\r
+               Date result = null;\r
+               IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+               if (factory == null)\r
+                       return null;\r
+               IMetadataProvider provider = factory.getProvider(MetadataProviderType.TSM);\r
+               if (provider == null)\r
+                       return null;\r
+\r
+               IMetadataListOptions opt = provider.createOptions(new BasicDBObject("fileName", tsmFileName));\r
+\r
+               List<IMetadata> tsmContents = provider.list(opt);\r
+               if (tsmContents != null && tsmContents.size() > 0) {\r
+\r
+                       for (IMetadata md : tsmContents) {\r
+                               Date backupDate = md.asJSON().getDate("backupDate");\r
+                               if (result == null)\r
+                                       result = backupDate;\r
+                               else {\r
+                                       if (backupDate.after(result))\r
+                                               result = backupDate;\r
+                               }\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private char YN(boolean value) {\r
+               return value ? 'Y' : 'N';\r
+       }\r
+\r
+       private String D(Date value) {\r
+               return value == null ? "" : df.format(value);\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
+               //logger.info(getSessionMarker(), "Will checked {}", filePath);\r
+               try {\r
+                       if (!processPathItem(filePath))\r
+                               return FileVisitResult.TERMINATE;\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+               }\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       @Override\r
+       public FileVisitResult visitFileFailed(Path filePath, IOException paramIOException) throws IOException {\r
+               logger.info("Error archive {}", filePath);\r
+               return FileVisitResult.CONTINUE;\r
+       }\r
+\r
+       private List<Path> getKillDateFiles(Path filePath) {\r
+               String killDateFilePattern = String.format("%s.*%s", filePath.getFileName().toString(), KILLDATEEXT);\r
+               List<Path> result = new ArrayList<>();\r
+               Path statusPath = null;\r
+               try {\r
+                       statusPath = Paths.get(filePath.getParent().toString(), EscortFiles.STATUSFOLDER);\r
+               } catch (Exception e) {\r
+                       logger.catching(e);\r
+                       return null;\r
+               }\r
+               File statusPathFile = statusPath.toFile();\r
+               if (statusPathFile.exists() && statusPathFile.isDirectory()) {\r
+                       try (DirectoryStream<Path> stream = Files.newDirectoryStream(statusPath, killDateFilePattern)) {\r
+                               stream.forEach(p -> result.add(p));\r
+                       } catch (Exception e) {\r
+                               logger.catching(e);\r
+                       }\r
+               }\r
+               Collections.sort(result);\r
+               return result;\r
+       }\r
+\r
+       MediaFile getMediaFile(String fileName) {\r
+               MediaFile result = null;\r
+               MediaFileDAO mfDAO = (MediaFileDAO) getManager().getBaseDAO(MediaFile.class);\r
+               List<IEntityBase> mfList = mfDAO.getByHouseId(fileName);\r
+               if (mfList != null && mfList.size() == 1)\r
+                       result = (MediaFile) mfList.get(0);\r
+               return result;\r
+       }\r
+\r
+       RemoteFile getTSMFile(String mcFileName) {\r
+               RemoteFile result = null;\r
+               Store tsmStore = getManager().getSystemStore(false);\r
+               StoreUri tsmStoreUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM);\r
+               try {\r
+                       result = tsmStoreUri.getRemoteFile(mcFileName);\r
+               } catch (Exception e) {\r
+                       logger.error(e);\r
+               } finally {\r
+                       tsmStoreUri.cleanUp();\r
+               }\r
+               return result;\r
+       }\r
+\r
+       private Set<String> loadIncludeList(String location) throws IOException {\r
+               Set<String> result = new LinkedHashSet<>();\r
+\r
+               Path path = Paths.get(location);\r
+               List<String> lines = FileUtils.readLines(path.toFile());\r
+\r
+               String lastDir = null;\r
+               for (String line : lines) {\r
+                       line = line.trim();\r
+                       if (line.startsWith("Directory of")) {\r
+                               lastDir = line;\r
+                               lastDir = lastDir.replace("Directory of", "");\r
+                               lastDir = lastDir.replace("X:", "");\r
+                               lastDir = lastDir.replace("\\", "/");\r
+                               lastDir = lastDir.trim();\r
+                               //                              if (!lastDir.endsWith(".STATUS"))\r
+                               //                                      System.out.println(">> " + lastDir);\r
+                       }\r
+\r
+                       if (lastDir != null && lastDir.endsWith(".STATUS"))\r
+                               continue;\r
+\r
+                       if (line.startsWith("2") && line.length() > 39) {\r
+                               String file = line.substring(39).trim();\r
+\r
+                               if (file.equals(".") || file.equals(".."))\r
+                                       continue;\r
+\r
+                               String len = line.substring(21, 39).trim();\r
+                               if (len.length() != 0) {\r
+                                       String fullpath = "/mnt/POLC/FINISHED_SHOWS" + lastDir + "/" + file;\r
+                                       //System.out.println("/mnt/POLC/FINISHED_SHOWS" + lastDir + "/" + file + " : " + len);\r
+                                       result.add(fullpath);\r
+                               }\r
+                       }\r
+\r
+               }\r
+\r
+               return result;\r
+       }\r
+\r
+}\r
index 60adc6611b6331c9c8255ed5d3a89faf5bd5ca88..0220f751eb92cb2a8f6dc2611dc2a94aec6d8901 100644 (file)
@@ -2,8 +2,6 @@ package user.jobengine.server.steps;
 \r
 import java.io.File;\r
 import java.io.IOException;\r
-import java.nio.file.Files;\r
-import java.nio.file.attribute.BasicFileAttributes;\r
 import java.sql.Timestamp;\r
 import java.util.Date;\r
 import java.util.List;\r
@@ -17,6 +15,7 @@ import org.apache.logging.log4j.message.ParameterizedMessage;
 \r
 import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
+import user.commons.configuration.SystemConfiguration;\r
 import user.commons.mediatool.Timecode;\r
 import user.commons.mediatool.Timecode.Type;\r
 import user.commons.remotestore.IProgressEventListener;\r
@@ -32,10 +31,13 @@ import user.jobengine.db.Store;
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
 import user.jobengine.server.JobEngineException;\r
+import user.jobengine.server.steps.shared.EscortFiles;\r
+import user.jobengine.server.steps.shared.ItemManagerExtensions;\r
 \r
 public class TSMBackupStep extends JobStep {\r
        private static final String MXFEXT = ".MXF";\r
        private static final Logger logger = LogManager.getLogger();\r
+       private static boolean RANDOMIZE_ARCHIVES = SystemConfiguration.getInstance().value("tsm.randomize-archives");\r
        private IItemManager manager;\r
        private File sourceMediaFile;\r
        private Store tsmStore;\r
@@ -49,37 +51,49 @@ public class TSMBackupStep extends JobStep {
 \r
                File sourceMediaFile = new File(archiveItem.getMediaFile());\r
                String sourceFileName = sourceMediaFile.getName();\r
+               long fileSize = sourceMediaFile.length();\r
+\r
+               try {\r
+                       Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
+                       String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), fileSize);\r
+                       logger.info(marker, details);\r
+                       getJobRuntime().setDescription(details);\r
+               } catch (Exception e) {\r
+                       String details = String.format("%s (%d bytes)", sourceFileName, fileSize);\r
+                       getJobRuntime().setDescription(details);\r
+               }\r
                Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL);\r
-               String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length());\r
+               String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), fileSize);\r
                getJobRuntime().setDescription(details);\r
                try {\r
 \r
                        setAndCheck(archiveItem, mediaCubeMedia, getEngine());\r
 \r
-                       //TODO mxf helyett az osszes kiterjesztest!!!!!\r
-                       //A dupla ellenorzes a napon beluli ismetlesek miatt kell\r
+                       // TODO mxf helyett az osszes kiterjesztest!!!!!\r
+                       // A dupla ellenorzes a napon beluli ismetlesek miatt kell\r
                        long existingMediaId = archiveItem.getExistingMediaId();\r
-                       if (sourceMediaFile.length() == 0 && existingMediaId == 0) {\r
-                               existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, ""));\r
+\r
+                       if (fileSize == 0 && existingMediaId == 0) {\r
+                               existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager,\r
+                                               sourceFileName.replace(MXFEXT, ""));\r
                                if (existingMediaId == 0)\r
                                        existingMediaId = -1;\r
                        }\r
 \r
                        if (existingMediaId == 0)\r
-                               existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, ""));\r
-\r
-                       boolean randomizeName = Boolean.parseBoolean(System.getProperty("jobengine.randomize.archives", "false"));\r
-\r
+                               existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager,\r
+                                               sourceFileName.replace(MXFEXT, ""));\r
                        String targetFileName;\r
-                       if (randomizeName) {\r
+                       if (RANDOMIZE_ARCHIVES) {\r
                                // a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA\r
-                               //veletlenszeru neveket adunk!\r
+                               // veletlenszeru neveket adunk!\r
                                targetFileName = String.format("%s-%s", RandomStringUtils.randomAlphanumeric(8), sourceFileName);\r
                        } else\r
                                targetFileName = sourceFileName;\r
 \r
                        if (existingMediaId == 0) {\r
-                               StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, sourceMediaFile.getParent().toString());\r
+                               StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL,\r
+                                               sourceMediaFile.getParent().toString());\r
 \r
                                final IJobRuntime runtime = getJobRuntime();\r
                                sourceUri.addProgressListener(new IProgressEventListener() {\r
@@ -99,18 +113,22 @@ public class TSMBackupStep extends JobStep {
                        }\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.", sourceFileName);\r
+                               logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.",\r
+                                               sourceFileName);\r
 \r
-                       //Fel kell szabadítani, hogy a kovetkezo archivalaskor is nekifusson\r
+                       // Fel kell szabadítani, hogy a kovetkezo archivalaskor is nekifusson\r
                        if (existingMediaId == -1) {\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
+                               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
                                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);\r
+                               saveMetadata(mediaCubeMedia, sourceMediaFile, targetFileName, existingMediaId, fileSize,\r
+                                               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
@@ -118,7 +136,8 @@ 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: {}", details, e.getMessage());\r
+                       Message m = new ParameterizedMessage("Az '{}' állomány archiválása sikertelen. A rendszer hibaüzenete: {}",\r
+                                       details, e.getMessage());\r
                        logger.error(marker, m);\r
                        if (!archiveItem.removeCatchedFile())\r
                                logger.error(marker,\r
@@ -129,12 +148,16 @@ public class TSMBackupStep extends JobStep {
                return null;\r
        }\r
 \r
-       private void saveMetadata(Media mediaCubeMedia, File sourceFile, String targetFileName, long existingMediaId) {\r
+       private void saveMetadata(Media mediaCubeMedia, File sourceFile, String targetFileName, long existingMediaId,\r
+                       long fileSize, boolean disableProxy) {\r
 \r
                if (existingMediaId == 0) {\r
-                       MediaFile mediaFile = manager.createMediaFile(targetFileName, fileType, tsmStore, mediaCubeMedia);\r
-                       mediaFile.setHouseId(sourceFile.getName());\r
-                       mediaFile.add();\r
+                       MediaFile mf = manager.createMediaFile(targetFileName, fileType, tsmStore, mediaCubeMedia);\r
+                       mf.setHouseId(sourceFile.getName());\r
+                       mf.setFileSize(fileSize);\r
+                       // 210617 proxy keszites tiltasa\r
+                       mf.setDisableProxy(disableProxy);\r
+                       mf.add();\r
                } else {\r
                        Media existingMedia = manager.getMedia(existingMediaId);\r
                        List<MediaFile> mediaFiles = existingMedia.getMediaFiles();\r
@@ -143,24 +166,31 @@ public class TSMBackupStep extends JobStep {
                                        mf.setPersister(manager);\r
                                        mf.setId(0);\r
                                        mf.setMedia(mediaCubeMedia);\r
+                                       // mivel itt masolat keszul, nem allitunk at semmit\r
+//                                     mf.setFileSize(fileSize);\r
+//                                     mf.setDisableProxy(disableProxy);\r
                                        mf.add();\r
                                }\r
                        }\r
                }\r
                mediaCubeMedia.setPersister(manager);\r
 \r
+               // 210614 megis maradjon az aktualis idopont\r
+               mediaCubeMedia.setArchived(new Timestamp(new Date().getTime()));\r
+\r
+               /*\r
                try {\r
                        BasicFileAttributes attr = Files.readAttributes(sourceFile.toPath(), BasicFileAttributes.class);\r
                        mediaCubeMedia.setArchived(new Timestamp(attr.creationTime().toMillis()));\r
                } catch (IOException e) {\r
                        logger.catching(e);\r
-                       mediaCubeMedia.setArchived(new Timestamp(new Date().getTime()));\r
                }\r
-\r
+                */\r
                mediaCubeMedia.modify();\r
        }\r
 \r
-       private void setAndCheck(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine) throws JobEngineException, IOException {\r
+       private void setAndCheck(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine)\r
+                       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
@@ -177,7 +207,8 @@ 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("System is not configured properly, missing 'mediaFile' value in 'archiveItem' input parameter.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, missing 'mediaFile' value in 'archiveItem' input parameter.");\r
                }\r
                if (!sourceMediaFile.exists()) {\r
                        logger.error(marker, "Az {} állomány nem létezik vagy nem érhető el.", sourceMediaFile.getName());\r
@@ -200,7 +231,8 @@ public class TSMBackupStep extends JobStep {
                }\r
                if (mediaCubeMedia == null) {\r
                        logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres.");\r
-                       throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
+                       throw new NullPointerException(\r
+                                       "System is not configured properly, 'mediaCubeMedia' input parameter missing.");\r
                }\r
 \r
        }\r
index 79a601ca36623c2a008e5fb0d0b2855e9b5b42ff..fd2223441ed56a61a5e5adb67e48fabbc153c43d 100644 (file)
@@ -10,6 +10,10 @@ import user.jobengine.db.IItemManager;
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
 \r
+/*\r
+import user.jobengine.server.steps.EscortFiles;\r
+*/\r
+\r
 public class TSMExtendedRetrieveStep extends TSMRestoreStep {\r
        private static String NEXIO_HOST = System.getProperty("nexio.host");\r
        //      private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host");\r
index 6b40e3b74c5ac2130db10e97415223e4ba20665a..26d8607b4eeea2ce23d10d9b696a1515017185c0 100644 (file)
@@ -28,6 +28,7 @@ import user.jobengine.db.MediaFile;
 import user.jobengine.db.Store;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.steps.shared.EscortFiles;\r
 \r
 public class TSMRestoreStep extends JobStep {\r
        private static final String DOT = ".";\r
@@ -40,7 +41,7 @@ public class TSMRestoreStep extends JobStep {
        private Marker marker;\r
 \r
        protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws IOException, Exception {\r
-               if (killDateDays > 0)\r
+               if (killDateDays != 0)\r
                        EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker);\r
        }\r
 \r
@@ -87,8 +88,10 @@ public class TSMRestoreStep extends JobStep {
                        });\r
                        RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
 \r
-                       String globalTargetPath = Paths.get(targetPath, targetFileName).getParent().toString().replace(Paths.get(localRetrievePath).toString(),\r
-                                       globalRetrievePath);\r
+                       String globalTargetPath = Paths.get(targetPath, targetFileName)\r
+                                       .getParent()\r
+                                       .toString()\r
+                                       .replace(Paths.get(localRetrievePath).toString(), 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 e59008d152f7a19162074fd8162df0cfb3c8242a..39cb7b30a649ac66f29d1ee9e4459a642bc3b308 100644 (file)
@@ -13,7 +13,8 @@ import user.jobengine.db.MediaFile;
 import user.jobengine.db.Store;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
-import user.jobengine.server.steps.MetadataTypeDetector.MetadataType;\r
+import user.jobengine.server.steps.shared.MetadataType;\r
+import user.jobengine.server.steps.shared.MetadataTypeDetector;\r
 \r
 public class UpdateGhostMediaDataStep extends JobStep {\r
        private static final Logger logger = LogManager.getLogger();\r
index 02b97884701a3a75bd2ba70db7ec0eb19290db94..5102e92c55174ebc5d15e9069cdc963a9de2a602 100644 (file)
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="Felhasználói archiválás" useSessionLog="false">\r
+<jobtemplate name="Rkurzív archiválás" useSessionLog="false">\r
        <declarations>\r
                <parameters>\r
                        <parameter name="sourcePath" type="java.lang.String" />\r
                        <parameter name="killDateDays" type="java.lang.Integer" />\r
                        <parameter name="limit" type="java.lang.Integer" />\r
+                       <parameter name="disableProxy" type="java.lang.Boolean" />\r
                </parameters>\r
        </declarations>\r
        <commands>\r
@@ -19,6 +20,9 @@
                                <input>\r
                                        <parameter name="limit" />\r
                                </input>\r
+                               <input>\r
+                                       <parameter name="disableProxy" />\r
+                               </input>\r
                        </inputs>\r
                </calljobstep>\r
        </commands>\r
index 2be289b3fa73d9de54cd551fbe52519823ecd7af..fa29cc3fa4bd263bc9df9e0d5b94161d5431a76f 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate multiInstance="true" useSessionLog="true">\r
+<jobtemplate multiInstance="true" useSessionLog="false">\r
        <declarations>\r
                <parameters>\r
                        <parameter name="param" type="java.lang.Integer" />\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/templates/create-lowres-ondemand - Copy.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/create-lowres-ondemand - Copy.xml
new file mode 100644 (file)
index 0000000..f792273
--- /dev/null
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Hiányzó PROXY videók pótlása" useSessionLog="false">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="mediaCubeMedia" type="user.jobengine.db.Media" />\r
+                       <parameter name="deleteSource" type="java.lang.Boolean"/>\r
+                       <parameter name="killDateDays" type="java.lang.Integer"/>\r
+                       <parameter name="successRecipient" type="java.lang.String" />\r
+                       <parameter name="localHiresPath" type="java.lang.String" />\r
+                       <parameter name="globalHiresPath" type="java.lang.String" />\r
+                       <parameter name="localLowresPath" type="java.lang.String" />\r
+                       <parameter name="transcoderAddress" type="java.lang.String" />\r
+                       <parameter name="transcoderTemplateName" type="java.lang.String" />\r
+                       <parameter name="localRetrievePath" type="java.lang.String" />\r
+                       <parameter name="globalRetrievePath" type="java.lang.String" />\r
+                       <parameter name="targetNamePattern" type="java.lang.String" />\r
+               </parameters>\r
+               <variables>\r
+                       <variable name="archiveItem" type="user.jobengine.server.steps.ArchiveItem" />\r
+               </variables>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep type="CreateArchiveItemStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="mediaCubeMedia" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="localHiresPath" />\r
+                               </input>\r
+                       </inputs>\r
+                       <outputs>\r
+                               <output>\r
+                                       <variable name="archiveItem" />\r
+                               </output>\r
+                       </outputs>\r
+               </calljobstep>\r
+               <calljobstep type="TSMRestoreStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="mediaCubeMedia" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="localHiresPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="targetNamePattern" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="successRecipient" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="killDateDays" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="localRetrievePath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="globalRetrievePath" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               <calljobstep type="MediaToolStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <variable name="archiveItem" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="mediaCubeMedia" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               <calljobstep type="TranscodeFFAStranStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <variable name="archiveItem" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="mediaCubeMedia" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="transcoderAddress" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="transcoderTemplateName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="globalHiresPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="localLowresPath" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="deleteSource" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               <calljobstep type="UpdateGhostMediaDataStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="mediaCubeMedia" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index f7922734a80c1aa3b7f8d8716a8e241082e6224e..51dcb6261ef7f3fcaeed771e1bd40988d28249ba 100644 (file)
 <?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="Hiányzó PROXY videók pótlása" useSessionLog="false">\r
+<jobtemplate multiInstance="true" useSessionLog="true">\r
        <declarations>\r
                <parameters>\r
+                       <!-- Media to transcode -->\r
                        <parameter name="mediaCubeMedia" type="user.jobengine.db.Media" />\r
-                       <parameter name="deleteSource" type="java.lang.Boolean"/>\r
-                       <parameter name="killDateDays" type="java.lang.Integer"/>\r
-                       <parameter name="successRecipient" type="java.lang.String" />\r
-                       <parameter name="localHiresPath" type="java.lang.String" />\r
-                       <parameter name="globalHiresPath" type="java.lang.String" />\r
-                       <parameter name="localLowresPath" type="java.lang.String" />\r
-                       <parameter name="transcoderAddress" type="java.lang.String" />\r
-                       <parameter name="transcoderTemplateName" type="java.lang.String" />\r
-                       <parameter name="localRetrievePath" type="java.lang.String" />\r
-                       <parameter name="globalRetrievePath" type="java.lang.String" />\r
-                       <parameter name="targetNamePattern" type="java.lang.String" />\r
+                       <!-- Slave server address for transcode -->\r
+                       <parameter name="remoteServer" type="java.lang.String" />\r
+                       <!-- Slave server template for transcode -->\r
+                       <parameter name="transcodeTemplate" type="java.lang.String" />\r
+                       <!-- Slave server job display name -->\r
+                       <parameter name="jobName" type="java.lang.String" />\r
+                       <!-- Slave server transcode job profile -->\r
+                       <parameter name="profileName" type="java.lang.String" />\r
+                       <!-- TEMP store for media retrieve -->\r
+                       <parameter name="tempStoreName" type="java.lang.String" />\r
+                       <!-- TEMP store protocol for media retrieve -->\r
+                       <parameter name="tempStoreProtocol" type="java.lang.String" />\r
                </parameters>\r
                <variables>\r
-                       <variable name="archiveItem" type="user.jobengine.server.steps.ArchiveItem" />\r
+                       <!-- Media file name -->\r
+                       <variable name="fileName" type="java.lang.String" />\r
+                       <!-- Media store uri -->\r
+                       <variable name="mediaStoreUri" type="user.commons.StoreUri" />\r
+                       <!-- TEMP store uri -->\r
+                       <variable name="tempStoreUri" type="user.commons.StoreUri" />\r
+                       <!-- Slave server remote job parameters -->\r
+                       <variable name="remoteJobParameters" type="com.ibm.nosql.json.api.BasicDBObject" />\r
+                       <!-- Slave server remote job parameters -->\r
+                       <variable name="proxyRelativePath" type="java.lang.String" />\r
                </variables>\r
        </declarations>\r
        <commands>\r
-               <calljobstep type="CreateArchiveItemStep.java" weight="1">\r
+               <calljobstep type="PrepareMediaRestoreStep.java" weight="1" >\r
                        <inputs>\r
                                <input>\r
                                        <parameter name="mediaCubeMedia" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="localHiresPath" />\r
+                                       <parameter name="tempStoreName" />\r
+                               </input>\r
+                               <input>\r
+                                       <parameter name="tempStoreProtocol" />\r
                                </input>\r
                        </inputs>\r
                        <outputs>\r
                                <output>\r
-                                       <variable name="archiveItem" />\r
+                                       <variable name="mediaStoreUri" />\r
+                               </output>\r
+                               <output>\r
+                                       <variable name="tempStoreUri" />\r
+                               </output>\r
+                               <output>\r
+                                       <variable name="fileName" />\r
                                </output>\r
                        </outputs>\r
-               </calljobstep>\r
-               <calljobstep type="TSMRestoreStep.java" weight="1">\r
+               </calljobstep>  \r
+               <calljobstep type="TransferStep.java" weight="5" >\r
                        <inputs>\r
                                <input>\r
-                                       <parameter name="mediaCubeMedia" />\r
-                               </input>\r
-                               <input>\r
-                                       <parameter name="localHiresPath" />\r
-                               </input>\r
-                               <input>\r
-                                       <parameter name="targetNamePattern" />\r
+                                       <variable name="mediaStoreUri" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="successRecipient" />\r
+                                       <variable name="fileName" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="killDateDays" />\r
+                                       <variable name="tempStoreUri" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="localRetrievePath" />\r
-                               </input>\r
-                               <input>\r
-                                       <parameter name="globalRetrievePath" />\r
+                                       <variable name="fileName" />\r
                                </input>\r
                        </inputs>\r
-               </calljobstep>\r
-               <calljobstep type="MediaToolStep.java" weight="1">\r
+               </calljobstep>  \r
+               <calljobstep type="PrepareRemoteTranscodeStep.java" weight="1" >\r
                        <inputs>\r
                                <input>\r
-                                       <variable name="archiveItem" />\r
+                                       <parameter name="profileName" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="mediaCubeMedia" />\r
+                                       <variable name="fileName" />\r
                                </input>\r
                        </inputs>\r
-               </calljobstep>\r
-               <calljobstep type="TranscodeFFAStranStep.java" weight="1">\r
+                       <outputs>\r
+                               <output>\r
+                                       <variable name="remoteJobParameters" />\r
+                               </output>\r
+                               <output>\r
+                                       <variable name="proxyRelativePath" />\r
+                               </output>\r
+                       </outputs>\r
+               </calljobstep>  \r
+               <calljobstep type="RemoteJobStep.java" weight="10" >\r
                        <inputs>\r
                                <input>\r
-                                       <variable name="archiveItem" />\r
+                                       <parameter name="remoteServer" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="mediaCubeMedia" />\r
+                                       <parameter name="transcodeTemplate" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="transcoderAddress" />\r
+                                       <parameter name="jobName" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="transcoderTemplateName" />\r
-                               </input>\r
-                               <input>\r
-                                       <parameter name="globalHiresPath" />\r
+                                       <variable name="remoteJobParameters" />\r
                                </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               <calljobstep type="DeleteFile.java" weight="1" >\r
+                       <inputs>\r
                                <input>\r
-                                       <parameter name="localLowresPath" />\r
+                                       <variable name="fileName" />\r
                                </input>\r
                                <input>\r
-                                       <parameter name="deleteSource" />\r
+                                       <variable name="tempStoreUri" />\r
                                </input>\r
                        </inputs>\r
                </calljobstep>\r
-               <calljobstep type="UpdateGhostMediaDataStep.java" weight="1">\r
+               <calljobstep type="SaveMediaProxy.java" weight="10" >\r
                        <inputs>\r
                                <input>\r
                                        <parameter name="mediaCubeMedia" />\r
                                </input>\r
+                               <input>\r
+                                       <variable name="proxyRelativePath" />\r
+                               </input>\r
                        </inputs>\r
                </calljobstep>\r
        </commands>\r
index 365fe19c81f647c792cc11ebd5b839e6c1251ded..f3b653c97d604a178a0373571bcd890e0ab8abdc 100644 (file)
@@ -3,6 +3,7 @@
        <declarations>\r
                <parameters>\r
                        <parameter name="sourcePath" type="java.lang.String"/>\r
+                       <parameter name="skipArchiveCheck" type="java.lang.Boolean"/>\r
                </parameters>\r
        </declarations>\r
        <commands>\r
@@ -11,6 +12,9 @@
                                <input>\r
                                        <parameter name="sourcePath" />\r
                                </input>\r
+                               <input>\r
+                                       <parameter name="skipArchiveCheck" />\r
+                               </input>\r
                        </inputs>\r
                </calljobstep>\r
        </commands>\r
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/templates/integration-test.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/integration-test.xml
new file mode 100644 (file)
index 0000000..6593e5d
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate>\r
+       <commands>\r
+               <calljobstep remote="true" type="IntegrationTestStep.java" weight="1" />\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index ce4c77b7f048ca0ba1b7f8c664f022cb97f2a850..b5ea4ae1e84144e164bcce8451ef955f18d3e957 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate multiInstance="true" useSessionLog="true">\r
+<jobtemplate multiInstance="false" useSessionLog="false">\r
        <declarations>\r
                <parameters>\r
                        <!-- Slave server address for transcode -->\r
@@ -26,6 +26,8 @@
                        <variable name="tempStoreUri" type="user.commons.StoreUri" />\r
                        <!-- Slave server remote job parameters -->\r
                        <variable name="remoteJobParameters" type="com.ibm.nosql.json.api.BasicDBObject" />\r
+                       <!-- Slave server remote job parameters -->\r
+                       <variable name="proxyRelativePath" type="java.lang.String" />\r
                </variables>\r
        </declarations>\r
        <commands>\r
@@ -76,7 +78,7 @@
                                </input>\r
                        </inputs>\r
                </calljobstep>  \r
-               <calljobstep type="PrepareRemoteTranscodeJobParametersStep.java" weight="1" >\r
+               <calljobstep type="PrepareRemoteTranscodeStep.java" weight="1" >\r
                        <inputs>\r
                                <input>\r
                                        <parameter name="profileName" />\r
@@ -89,6 +91,9 @@
                                <output>\r
                                        <variable name="remoteJobParameters" />\r
                                </output>\r
+                               <output>\r
+                                       <variable name="proxyRelativePath" />\r
+                               </output>\r
                        </outputs>\r
                </calljobstep>  \r
                <calljobstep type="RemoteJobStep.java" weight="10" >\r
                                </input>\r
                        </inputs>\r
                </calljobstep>\r
+               <calljobstep type="DeleteFile.java" weight="1" >\r
+                       <inputs>\r
+                               <input>\r
+                                       <variable name="fileName" />\r
+                               </input>\r
+                               <input>\r
+                                       <variable name="tempStoreUri" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+               <calljobstep type="SaveMediaProxy.java" weight="10" >\r
+                       <inputs>\r
+                               <input>\r
+                                       <variable name="media" />\r
+                               </input>\r
+                               <input>\r
+                                       <variable name="proxyRelativePath" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
        </commands>\r
 </jobtemplate>
\ No newline at end of file
diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/templates/safe-delete-recursive.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/safe-delete-recursive.xml
new file mode 100644 (file)
index 0000000..bfa8e37
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="Rekurzív törlés" useSessionLog="false">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="sourcePath" type="java.lang.String" />\r
+               </parameters>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep id="step1" type="SafeDeleteRecursive.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="sourcePath" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
diff --git a/server/-product/production/MEDIAVIVANTIS/restart-mediacube.sh b/server/-product/production/MEDIAVIVANTIS/restart-mediacube.sh
new file mode 100644 (file)
index 0000000..b4080f7
--- /dev/null
@@ -0,0 +1,4 @@
+./stop-mediacube.sh
+./start-mediacube.sh
+
+
index a50dcc2cab94d41516dc529168b60b10988864f9..220883b99703200ef294d533d917fd785ccbc9c4 100644 (file)
@@ -17,6 +17,10 @@ datasource:
     url: jdbc:db2://10.11.1.89:51500/tsmdb1\r
     user: tsminst1\r
     password: tsminst1\r
+  tsm: \r
+    url: jdbc:db2://10.11.1.90:52500/tsmdb1\r
+    user: tsminst1\r
+    password: passwordpassword\r
   planair: \r
     url: jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;\r
     user: MAM\r
diff --git a/server/-product/production/MEDIAVIVANTIS/start-mediacube.sh b/server/-product/production/MEDIAVIVANTIS/start-mediacube.sh
new file mode 100644 (file)
index 0000000..34db87e
--- /dev/null
@@ -0,0 +1,28 @@
+cd /opt/mediacube
+rm -fr tmp/*
+rm -fr configuration/org.eclipse.osgi
+export DSMI_CONFIG=/opt/mediacube/settings/dsm.opt
+export DSMI_LOG=/opt/mediacube/log
+export DSMI_DIR=/opt/tivoli/tsm/server/bin/dbbkapi
+export DSM_DIR=/opt/tivoli/tsm/server/bin/dbbkapi
+export LD_LIBRARY_PATH=/opt/tivoli/tsm/server/bin/dbbkapi:/opt/mediacube
+export LIBPATH=/opt/tivoli/tsm/server/bin/dbbkapi
+export SHLIB_PATH=/opt/tivoli/tsm/server/bin/dbbkapi
+#export TZ=NFT-1DFT,M3.5.0,M10.5.0
+export PATH=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/bin:$PATH
+java \
+-DPRODMEDIACUBE \
+-Dclean \
+-Dorg.eclipse.epp.logging.aeri.skipReports=true \
+-Declipse.ignoreApp=true \
+-Dosgi.noShutdown=true \
+-Dlog4j.configurationFile=settings/log4j2.xml \
+-Djetty.home=settings \
+-Djetty.etc.config.urls=jetty.xml \
+-Dgosh.home=configuration \
+-Djava.io.tmpdir=tmp \
+-Dfile.encoding=UTF-8 \
+-jar plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar \
+-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 \
+-Xms512m \
+-Xmx4096m &
diff --git a/server/-product/production/MEDIAVIVANTIS/stop-mediacube.sh b/server/-product/production/MEDIAVIVANTIS/stop-mediacube.sh
new file mode 100644 (file)
index 0000000..f9e54a4
--- /dev/null
@@ -0,0 +1,3 @@
+pkill -f PRODMEDIACUBE
+#wget -qO- http://localhost:9080/services/rest/jobengine/halt
+