#120 JSON küldése a visszajelző email törzsében
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 18 Jan 2019 13:15:59 +0000 (13:15 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 18 Jan 2019 13:15:59 +0000 (13:15 +0000)
git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31388

client/Maestro/Configuration/configuration - Copy.json
client/Maestro/Configuration/configuration.json
client/Maestro/MaestroForm.Target.cs
client/MaestroShared/Commons/PatternNameMaker.cs
client/MaestroShared/Targets/UNCTargetProcessor.cs
client/MediaCubeClient/MediaCubeApi.cs
server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java
server/user.jobengine.executors/src/user/jobengine/server/steps/BatchRetrieveForkStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TSMRestoreStep.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java

index ad4c3fb1e86f7f410b75858e72b9748edf0ca0dc..000156f883cd32a315662c3995b425fc4811189e 100644 (file)
@@ -1,6 +1,6 @@
 {\r
   "title": "Development",\r
-  "active": true,\r
+  "active": false,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
   "filter": "avi",\r
index cf268ea61d9ea23b725bdda800b75e713eea560a..b26d006572bad1b5ce953e854571dd82ab607fd8 100644 (file)
       "version": 0,\r
       "redefineSegments": true\r
     },\r
-    {\r
-      "$type": "MediaCubeMetadata",\r
-      "server": {\r
-        "address": "http://10.10.1.27/services/rest/jobengine",\r
-        "userName": "mediacube",\r
-        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
-        "timeout": 1000\r
-      },\r
-      "wsserver": {\r
-        "address": "ws://10.10.1.29:88/services/wsapi",\r
-        "timeout": 1000\r
-      },\r
-      "jobTemplate": "retrieve-material.xml",\r
-      "archiveFolder": "file://10.10.1.105/TESZT/TC/ARCHIVE",\r
-      "restoreFolder": "file://10.10.1.105/BRAAVOS/ARCHIVE_RESTORE",\r
-      "restoreNamePattern": "%s_%GUID%",\r
-      "serverRestoreFolder": "/mnt/ISILON/ARCHIVE_RESTORE",\r
-      "killDateDays": 1\r
-    }\r
+{\r
+  "$type": "MediaCubeMetadata",\r
+  "server": {\r
+    "address": "http://localhost:8888/services/rest/jobengine",\r
+    "userName": "mediacube",\r
+    "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+    "timeout": 1000\r
+  },\r
+  "wsserver": {\r
+    "address": "ws://10.10.1.27/services/wsapi",\r
+    "timeout": 1000\r
+  },\r
+  "jobTemplate": "retrieve-material.xml",\r
+  "archiveFolder": "file://10.10.1.105/TESZT/TC/ARCHIVE",\r
+  "restoreFolder": "file://10.10.1.105/BRAAVOS/ARCHIVE_RESTORE",\r
+  "restoreNamePattern": "%s_%GUID%",\r
+  "serverRestoreFolder": "/mnt/ISILON/ARCHIVE_RESTORE",\r
+  "killDateDays": 1\r
+}\r
   ],\r
   "targets": [\r
     {\r
         "timeout": 1000\r
       }\r
     },\r
-    {\r
-      "label": "Teszt",\r
-      "processor": "FTPTargetProcessor",\r
-      "outputFormat": "%ID%-%SOURCENAME%",\r
-      "tag": "Betöltés",\r
-      "killDateDays": 7,\r
-      "saveArchiveMetadata": true,\r
-      "remote": {\r
-        "address": "ftp://10.10.1.105/TESZT/CHECK",\r
-        "userName": "mediacube",\r
-        "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
-        "timeout": 1000\r
-      }\r
-    },\r
+  {\r
+    "label": "Teszt",\r
+    "processor": "FTPTargetProcessor",\r
+    "outputFormat": "%ID%-%SOURCENAME%",\r
+    "tag": "Betöltés",\r
+    "killDateDays": 7,\r
+    "saveArchiveMetadata": false,\r
+    "sendEmailOnSuccess": true,\r
+    "successEmailPattern": "A %ID% - %ITEMTITLE% anyag felkerült a szerverre.\r\nJSON: %JSON%",\r
+    "successEmailRecipient": "vasary@elgekko.net",\r
+    "remote": {\r
+      "address": "ftp://10.10.1.105/TESZT/CHECK",\r
+      "userName": "mediacube",\r
+      "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+      "timeout": 1000\r
+    }\r
+  },\r
     {\r
       "label": "Napi megtekintőbe",\r
       "processor": "FTPTargetProcessor",\r
index 7641a9eab575885cb7461bd73f92881dcd9c40a0..b2df67a9ce309a9a5036566ef1f8ed8bd4daa207 100644 (file)
@@ -187,21 +187,26 @@ namespace Maestro {
             result.MetadataText = SelectedMetadata?.MetadataText;\r
             result.InputFileName = sourceItem.Name;\r
             result.MovieSegments = MovieSegments?.ToList();\r
-            result.ArchiveMetadata = ArchiveMetadata.DeepClone(ArchiveMetadata);\r
             result.VariantID = selectedMetadata == null ? 0 : selectedMetadata.VariantID;\r
             result.MetadataKind = selectedMetadata == null ? MetadataType.None : selectedMetadata.Kind;\r
             result.UserName = TrayApplicationContext.UserName;\r
             result.MessageBus = MessageBus;\r
             result.CreateDate = createDate;\r
+            //TODO kell duplan?\r
             result.Frames = sourceItem.Frames;\r
             result.TargetOrder = Configuration.Targets.ToList().IndexOf(target);\r
-            result.ArchiveMetadata.userName = result.UserName;\r
             result.SelectedSegments = SelectedMetadata?.Selected;\r
-            if (SelectedMetadata.Kind == MetadataType.MediaCube && result.ArchiveMetadata != null) {\r
-                result.ArchiveMetadata.itemHouseId = PatternNameMaker.Get(result.ArchiveMetadata.itemHouseId, result.ID, result.InputFileName, null, null, result.MetadataText);\r
-                result.ArchiveMetadata.itemTitle = PatternNameMaker.Get(result.ArchiveMetadata.itemTitle, result.ID, result.InputFileName, null, null, result.MetadataText);\r
-                result.ArchiveMetadata.mediaHouseId = PatternNameMaker.Get(result.ArchiveMetadata.mediaHouseId, result.ID, result.InputFileName, null, null, result.MetadataText);\r
-                result.ArchiveMetadata.mediaTitle = PatternNameMaker.Get(result.ArchiveMetadata.mediaTitle, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+\r
+            if (ArchiveMetadata != null) {\r
+                result.ArchiveMetadata = ArchiveMetadata.DeepClone(ArchiveMetadata);\r
+                result.ArchiveMetadata.duration = sourceItem.Frames;\r
+                result.ArchiveMetadata.userName = result.UserName;\r
+                if (SelectedMetadata.Kind == MetadataType.MediaCube) {\r
+                    result.ArchiveMetadata.itemHouseId = PatternNameMaker.Get(result.ArchiveMetadata.itemHouseId, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+                    result.ArchiveMetadata.itemTitle = PatternNameMaker.Get(result.ArchiveMetadata.itemTitle, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+                    result.ArchiveMetadata.mediaHouseId = PatternNameMaker.Get(result.ArchiveMetadata.mediaHouseId, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+                    result.ArchiveMetadata.mediaTitle = PatternNameMaker.Get(result.ArchiveMetadata.mediaTitle, result.ID, result.InputFileName, null, null, result.MetadataText);\r
+                }\r
             }\r
             return result;\r
         }\r
index 6cdeaa358444faf8cf6ca70857262f2d7bc74242..60dbd5a6ec294824b084f3fa5b62fa83fb04870e 100644 (file)
@@ -12,6 +12,9 @@ namespace MaestroShared.Commons {
         private const string PATTERN_USERNAME = "%USERNAME%";\r
         private const string PATTERN_COMPUTERNAME = "%COMPUTERNAME%";\r
         private const string PATTERN_ID = "%ID%";\r
+        private const string PATTERN_JSON = "%JSON%";\r
+        private const string PATTERN_ITEMTITLE = "%ITEMTITLE%";\r
+        private const string PATTERN_MEDIATITLE = "%MEDIATITLE%";\r
         private const string PATTERN_IDROOT = "%IDROOT%";\r
         private const string PATTERN_GUID = "%GUID%";\r
         private const string PATTERN_SOURCENAME = "%SOURCENAME%";\r
@@ -41,15 +44,22 @@ namespace MaestroShared.Commons {
             return result;\r
         }\r
 \r
-        static public string Get(string pattern, string id, string inputName, string outputName, string userName, string text, DateTime? storedDateTime = null) {\r
+        static public string Get(string pattern, string id, string inputName, string outputName, string userName, string text, DateTime? storedDateTime = null, string json = null, string itemTitle = null, string mediaTitle = null) {\r
             string idRoot = id != null && id.Contains(UNDERSCORE) ? id.Split(UNDERSCORE[0])[0] : id;\r
             DateTime dt = storedDateTime == null ? DateTime.Now : (DateTime)storedDateTime;\r
+            var trimmedJSON = json;\r
+            if (json != null) {\r
+                trimmedJSON = json.Replace("\r", "").Replace("\n", "");\r
+            }\r
             string result = pattern\r
                 .Replace(PATTERN_ID, id)\r
                 .Replace(PATTERN_IDROOT, idRoot)\r
                 .Replace(PATTERN_GUID, ((ShortGuid)Guid.NewGuid()).ToString())\r
                 .Replace(PATTERN_TIMESTAMP, dt.ToString(DATETIME_FORMAT, CultureInfo.InvariantCulture))\r
-                .Replace(PATTERN_DATESTAMP, dt.ToString(DATE_FORMAT_NODOTS, CultureInfo.InvariantCulture));\r
+                .Replace(PATTERN_DATESTAMP, dt.ToString(DATE_FORMAT_NODOTS, CultureInfo.InvariantCulture))\r
+                .Replace(PATTERN_JSON, trimmedJSON)\r
+                .Replace(PATTERN_ITEMTITLE, itemTitle)\r
+                .Replace(PATTERN_MEDIATITLE, mediaTitle);\r
 \r
             if (!String.IsNullOrEmpty(inputName)) {\r
                 result = result.Replace(PATTERN_SOURCENAME, Normalize(Path.GetFileNameWithoutExtension(inputName)));\r
index bf3d651061ebc46ab19e69b1d9efca1b243d3764..dfe3609e346cb15041047d25087b737bb9e5f8a6 100644 (file)
@@ -374,7 +374,6 @@ namespace MaestroShared.Targets {
             EnsureDirectoryExistence(statusWorkDir);\r
             string fileName = String.Format(METADATA_FILE, OutputName);\r
             //logger.Debug("Creating METADATA file {0}", fileName);\r
-            Parameters.ArchiveMetadata.duration = Parameters.Frames;\r
             byte[] content = Encoding.UTF8.GetBytes(Parameters.ArchiveMetadata.ToString());\r
             string ouputPath = GetOutputFilePath(statusWorkDir, fileName);\r
             UploadContent(ouputPath, content);\r
@@ -420,7 +419,7 @@ namespace MaestroShared.Targets {
         }\r
 \r
         protected string GetDynamicText(string pattern) {\r
-            return PatternNameMaker.Get(pattern, ID, InputName, Output, Parameters.UserName, Parameters.MetadataText, Parameters.CreateDate);\r
+            return PatternNameMaker.Get(pattern, ID, InputName, Output, Parameters.UserName, Parameters.MetadataText, Parameters.CreateDate, Parameters.ArchiveMetadata?.ToString(), Parameters.ArchiveMetadata?.itemTitle, Parameters.ArchiveMetadata?.mediaTitle);\r
         }\r
 \r
         private string CreateOutputFileName() {\r
index 92b005ec549ac15b7802df86f17fea5dccf3b551..f2614a45de4ede260c5130cc13f73d51f06c4302 100644 (file)
@@ -69,7 +69,7 @@ namespace MediaCubeClient {
                 return null;\r
             }\r
 \r
-            if (!response.Content.IsEmpty()) {\r
+            if (!response.Content.IsEmpty() && response.Content != "[]") {\r
                 JObject media = JObject.Parse(response.Content);\r
                 if (media != null)\r
                     return media.Deserialize<Media>();\r
index 9d66e9655196601e8c2bbd26b81fc3d9b5d60651..85c2b8e2bc0f4e29e7cb42f8860ce9f9b0e4c8a1 100644 (file)
@@ -110,6 +110,8 @@ public class Support {
 \r
        private File check_rd_nonzero_fellow(String mediaid, List<File> allFiles) {\r
                for (File mediaFile : allFiles) {\r
+                       if (!mediaFile.getName().contains("-"))\r
+                               continue;\r
                        String houseid = mediaFile.getName().substring(0, mediaFile.getName().lastIndexOf("-"));\r
                        if (houseid.equals(mediaid) && mediaFile.length() > 0)\r
                                return mediaFile;\r
index b605404f56fd3d15b2a7968141e9a70906af5b22..547d019bd9181449968b1d7de77fb11f3c69b933 100644 (file)
@@ -26,8 +26,13 @@ public class BatchRetrieveForkStep extends JobStep {
        public Object[] execute(List<Media> basket, String houseId, String recipient, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime)\r
                        throws Exception {\r
                marker = (MediaCubeMarker) jobRuntime.getMarker();\r
+\r
+               //session szinten csak a finishMarker cimzettje az erdekes, es ezt a cimet pluszban hasznalja a konfigban megadott cimmel\r
+               //a finishMarker orokli a cim bellitast a sessionMarkertol\r
                marker.setTo(recipient);\r
 \r
+               ((MediaCubeMarker) jobRuntime.getFinishMarker()).setTo(recipient);\r
+\r
                if (basket == null || basket.size() == 0)\r
                        return null;\r
                setProgress(10);\r
index d39c6ca1f7a154312b34d3985384d9bed2115e9c..75feddedd45bda1d8c61d45e269743678686dd80 100644 (file)
@@ -4,6 +4,7 @@ import java.io.OutputStream;
 import java.net.InetAddress;\r
 import java.net.URI;\r
 import java.util.ArrayList;\r
+import java.util.Arrays;\r
 import java.util.Calendar;\r
 import java.util.Date;\r
 import java.util.List;\r
@@ -101,27 +102,28 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
 \r
                //A mar letezo mozikat nem archivaljuk le ujra, csak a metaadatot\r
                long existingMediaId = 0;\r
+               boolean transferDone = false;\r
                if (transferredFileNames.contains(origFileName)) {\r
                        logger.info(systemMarker, "A '{}' file archiválásra felkészítése egy másik story kapcsán már megtörtént, ezért csak metaadat archiválás szükséges.",\r
                                        origFileName);\r
                        if (!demo)\r
-                               transferChunk(videoFileName);\r
+                               transferDone = transferChunk(videoFileName);\r
                } else {\r
                        existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, origFileName);\r
                        if (existingMediaId == 0) {\r
                                transferredFileNames.add(origFileName);\r
                                if (!demo)\r
-                                       transferFile(origFileName + MXFEXT, videoFileName);\r
+                                       transferDone = transferFile(origFileName + MXFEXT, videoFileName);\r
                                logger.info(systemMarker, "A '{}' file archiválásra felkészítése sikeres volt.", origFileName);\r
                        } else {\r
 \r
                                logger.info(systemMarker, "A '{}' file archiválása már megtörtént, ezért csak metaadat archiválás szükséges.", origFileName);\r
                                if (!demo)\r
-                                       transferChunk(videoFileName);\r
+                                       transferDone = transferChunk(videoFileName);\r
                        }\r
                }\r
 \r
-               if (!demo) {\r
+               if (!demo && transferDone) {\r
                        BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive, existingMediaId);\r
                        transferMetadata(videoFileName, metadata);\r
                        createSourceKillDateFile(rundownArchive, origFileName);\r
@@ -408,14 +410,22 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
 \r
        }\r
 \r
-       private void transferChunk(String fileName) throws Exception {\r
+       private boolean transferChunk(String fileName) throws Exception {\r
                logger.info("Transfer chunk {}", fileName);\r
                OutputStream outStream = null;\r
                try {\r
                        targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
+\r
+                       //ha ugyan abban a tukorben szerepel meg 1x a mozi, akkor a chunk felulirja a tenyleges file-t, es az sosem archivalodik\r
+                       String[] names = targetFtp.listNames();\r
+                       if (names != null) {\r
+                               if (Arrays.asList(names).contains(fileName))\r
+                                       return false;\r
+                       }\r
+\r
                        outStream = targetFtp.storeFileStream(fileName);\r
                        if (outStream == null) {\r
-                               throw new NullPointerException("Can not open: " + fileName + MXFEXT + " Reply:" + targetFtp.getReplyString());\r
+                               throw new NullPointerException("Can not open: " + fileName + " Reply:" + targetFtp.getReplyString());\r
                        }\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
@@ -425,9 +435,11 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
                                outStream.close();\r
                        targetUri.cleanUp();\r
                }\r
+               return true;\r
        }\r
 \r
-       private void transferFile(String sourceFileName, String targetFileName) throws Exception {\r
+       private boolean transferFile(String sourceFileName, String targetFileName) throws Exception {\r
+               boolean result = true;\r
                int reply = 0;\r
                logger.info("Transfer clip {}", sourceFileName);\r
                try {\r
@@ -467,12 +479,13 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep {
                        }\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
-                       throw e;\r
+                       result = false;\r
                } finally {\r
                        sourceUri.cleanUp();\r
                        targetUri.cleanUp();\r
                }\r
 \r
+               return result;\r
        }\r
 \r
        private void transferMetadata(String fileName, BasicDBObject metadata) throws Exception {\r
index 00582eeedebf3f9803d6f979a48e3485607e9ddf..446f9653e4c08d39a363366021b7b68bdfe891b3 100644 (file)
@@ -11,7 +11,6 @@ import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.message.Message;\r
 \r
 import user.commons.LogUtils;\r
-import user.commons.MediaCubeMarker;\r
 import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
 import user.commons.remotestore.IProgressEventListener;\r
@@ -79,12 +78,9 @@ public class TSMRestoreStep extends JobStep {
                        String globalTargetPath = Paths.get(targetPath, targetFileName).getParent().toString().replace(Paths.get(localRetrievePath).toString(),\r
                                        globalRetrievePath);\r
 \r
-                       Message msg = LogUtils.format(\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
                                        sourceFileName, targetFileName, globalTargetPath);\r
-                       if (StringUtils.isNotBlank(successRecipient))\r
-                               logger.info(new MediaCubeMarker(successRecipient), msg);\r
-                       logger.info(marker, msg);\r
                        afterRestore(targetUri, targetPath, killDateDays, targetFileName);\r
 \r
                } catch (Exception e) {\r
index 13072a48ddcac31f650c4d36acb8ed22766a2cbb..5d47c4aaf7e9c7deb5bd5d4bbdba106e2abb4c1b 100644 (file)
@@ -51,6 +51,7 @@ public class JobRuntime extends Job implements IJobRuntime {
        private int runtimeWeight;
        private List<JobRuntime> children;
        private MediaCubeMarker sessionMarker;
+       private MediaCubeMarker finishMarker;
        private boolean isService;
        private Semaphore forkSempahore;
        private IJobChangedListener jobChangedListener;
@@ -277,7 +278,9 @@ public class JobRuntime extends Job implements IJobRuntime {
 
        @Override
        public Marker getFinishMarker() {
-               return new MediaCubeFinishMarker((MediaCubeMarker) getMarker());
+               if (finishMarker == null)
+                       finishMarker = new MediaCubeFinishMarker((MediaCubeMarker) getMarker());
+               return finishMarker;
        }
 
        @Override