#112 Szegmentálás és elfogadás különválasztása a folyamatban
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 7 Dec 2018 13:45:21 +0000 (13:45 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 7 Dec 2018 13:45:21 +0000 (13:45 +0000)
#114 SKIPPED és REJECTED folyamat állapotok hibát eredményeznek WorkFlowAction mentéskor
#113 SKIPPED állapot kezelése az akciók számosságának kijelzésénél

git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31363

client/Maestro/Configuration/configuration.json
client/Maestro/MaestroForm.Designer.cs
client/Maestro/MaestroForm.Metadata.cs
client/Maestro/MaestroForm.cs
client/Maestro/MaestroForm.resx
client/MaestroShared/Commons/StringExtensions.cs [new file with mode: 0644]
client/MaestroShared/MaestroShared.csproj
client/MaestroShared/Targets/FTPTargetProcessor.cs
client/MaestroShared/Targets/FXPTargetProcessor.cs
client/MaestroShared/Targets/UNCTargetProcessor.cs
client/MediaCubeClient/MediaCubeApi.cs

index d434e226e8ee0d53c529fafdcf0ed2b473331f72..9688cf26012c77940f81746a66aa0d8020c1e843 100644 (file)
@@ -13,7 +13,7 @@
     "$type": "UNCSource",\r
     "filter": "avi,wav,mxf",\r
     "local": {\r
-      "address": "file://10.10.1.105/BRAAVOS/TESZT/TC",\r
+      "address": "file://c:/_video",\r
       "userName": "mediacube",\r
       "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
       "timeout": 1000\r
   "targets": [\r
     {\r
       "label": "Adáskész",\r
-      "processor": "FXPTargetProcessor",\r
+      "processor": "FTPTargetProcessor",\r
       "outputFormat": "%ID%",\r
       "killDateDays": 5,\r
-      "saveSegments": false,\r
+      "saveSegments": true,\r
       "tag": "Adáskész",\r
       "disableFileVersioning": true,\r
       "enableOverride": false,\r
@@ -89,7 +89,7 @@
       "outputFormat": "%ID%-%SOURCENAME%",\r
       "tag": "Betöltés",\r
       "killDateDays": 7,\r
-      "saveArchiveMetadata": false,\r
+      "saveArchiveMetadata": true,\r
       "remote": {\r
         "address": "ftp://10.10.1.105/TESZT/CHECK",\r
         "userName": "mediacube",\r
index dc76d91f0e5d2815a09b255c3576eb1c5a2bba99..e5c7a7379cc222e85120189860aa6153f8ef03d0 100644 (file)
@@ -110,9 +110,12 @@ namespace Maestro {
             this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\r
             this.lError = new System.Windows.Forms.ToolStripLabel();\r
             this.lErrorCount = new System.Windows.Forms.ToolStripLabel();\r
-            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
+            this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();\r
             this.lRevoked = new System.Windows.Forms.ToolStripLabel();\r
             this.lRevokedCount = new System.Windows.Forms.ToolStripLabel();\r
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
+            this.lSkipped = new System.Windows.Forms.ToolStripLabel();\r
+            this.lSkippedCount = new System.Windows.Forms.ToolStripLabel();\r
             this.systemMessageBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
             this.metadataInfoBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
             this.groupSource.SuspendLayout();\r
@@ -972,9 +975,12 @@ namespace Maestro {
             this.toolStripSeparator4,\r
             this.lError,\r
             this.lErrorCount,\r
-            this.toolStripSeparator1,\r
+            this.toolStripSeparator7,\r
             this.lRevoked,\r
-            this.lRevokedCount});\r
+            this.lRevokedCount,\r
+            this.toolStripSeparator1,\r
+            this.lSkipped,\r
+            this.lSkippedCount});\r
             this.toolStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow;\r
             this.toolStrip1.Location = new System.Drawing.Point(10, 153);\r
             this.toolStrip1.Name = "toolStrip1";\r
@@ -1089,10 +1095,10 @@ namespace Maestro {
             this.lErrorCount.Text = "0";\r
             this.lErrorCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
             // \r
-            // toolStripSeparator1\r
+            // toolStripSeparator7\r
             // \r
-            this.toolStripSeparator1.Name = "toolStripSeparator1";\r
-            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\r
+            this.toolStripSeparator7.Name = "toolStripSeparator7";\r
+            this.toolStripSeparator7.Size = new System.Drawing.Size(6, 25);\r
             // \r
             // lRevoked\r
             // \r
@@ -1109,6 +1115,26 @@ namespace Maestro {
             this.lRevokedCount.Text = "0";\r
             this.lRevokedCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
             // \r
+            // toolStripSeparator1\r
+            // \r
+            this.toolStripSeparator1.Name = "toolStripSeparator1";\r
+            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\r
+            // \r
+            // lSkipped\r
+            // \r
+            this.lSkipped.Name = "lSkipped";\r
+            this.lSkipped.Size = new System.Drawing.Size(58, 22);\r
+            this.lSkipped.Text = "Kihagyva:";\r
+            this.lSkipped.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
+            // \r
+            // lSkippedCount\r
+            // \r
+            this.lSkippedCount.AutoSize = false;\r
+            this.lSkippedCount.Name = "lSkippedCount";\r
+            this.lSkippedCount.Size = new System.Drawing.Size(30, 22);\r
+            this.lSkippedCount.Text = "0";\r
+            this.lSkippedCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
+            // \r
             // systemMessageBindingSource\r
             // \r
             this.systemMessageBindingSource.DataSource = typeof(Maestro.SystemMessage);\r
@@ -1247,8 +1273,8 @@ namespace Maestro {
         private ToolStripLabel lError;\r
         private ToolStripLabel lErrorCount;\r
         private ToolStripSeparator toolStripSeparator1;\r
-        private ToolStripLabel lRevoked;\r
-        private ToolStripLabel lRevokedCount;\r
+        private ToolStripLabel lSkipped;\r
+        private ToolStripLabel lSkippedCount;\r
         private DataGridViewTextBoxColumn columnInputName;\r
         private DataGridViewTextBoxColumn columnLabel;\r
         private Commons.DataGridViewProgressColumn columnProgress;\r
@@ -1262,6 +1288,9 @@ namespace Maestro {
         private DataGridViewTextBoxColumn columnMessage;\r
         private ToolStripLabel lSelectionCounts;\r
         private ToolStripButton btnRedefineSegments;\r
+        private ToolStripSeparator toolStripSeparator7;\r
+        private ToolStripLabel lRevoked;\r
+        private ToolStripLabel lRevokedCount;\r
     }\r
 }\r
 \r
index 609120f8a19c406e0a1281cb27c825512ce0fd64..51bee82698ef04179dfecd4737402aecd5ca133a 100644 (file)
@@ -58,12 +58,15 @@ namespace Maestro {
         }\r
 \r
         private void OnTargetUpdateTrafficMessage(TargetUpdateTrafficMessage message) {\r
-            if (message.Ready == false)\r
+            if (message.Ready == false) {\r
                 //Target futas elejen elmentjuk a szegmenseket\r
+                logger.Info("Saving segments for {0}", message.VariantID);\r
                 trafficIDSelector.trafficAPI.SaveSegments(message.VariantID, message.MetadataType, message.Segments);\r
-            else\r
+            } else {\r
                 //Target futas vegen OK\r
+                logger.Info("Approving {0}", message.VariantID);\r
                 trafficIDSelector.trafficAPI.Approve(message.VariantID, true, message.MetadataType);\r
+            }\r
         }\r
 \r
         private void InitializeTrafficSelector() {\r
@@ -450,10 +453,10 @@ namespace Maestro {
             }\r
 \r
             DefineSegments(new FileInfo(SelectedMetadata.RedefineSegmentsFile));\r
-\r
-            //save!\r
-\r
-\r
+            /*\r
+            trafficIDSelector.trafficAPI.SaveSegments(SelectedMetadata.VariantID, SelectedMetadata.Kind, movieSegments.ToList());\r
+            trafficIDSelector.trafficAPI.Approve(SelectedMetadata.VariantID, true, SelectedMetadata.Kind);\r
+            */\r
         }\r
 \r
         private static string GetMetadataTypeTooltip(MetadataType? metadataType) {\r
index 160eabacd3260471ca2becdea4c0d2020ec4f8a9..0377c08c730e0b3cec48ca0db61ed837bf6636e4 100644 (file)
@@ -150,6 +150,7 @@ namespace Maestro {
             lAllCount.Text = jobs.Count.ToString();\r
             var error = 0;\r
             var revoked = 0;\r
+            var skipped = 0;\r
             var done = 0;\r
             foreach (ITargetProcessor j in jobs) {\r
                 if (TargetProcessor.REVOKED.Equals(j.Status)) {\r
@@ -164,11 +165,15 @@ namespace Maestro {
                     done++;\r
                     continue;\r
                 }\r
+                if (TargetProcessor.SKIPPED.Equals(j.Status)) {\r
+                    skipped++;\r
+                    continue;\r
+                }\r
             }\r
             lErrorCount.Text = error.ToString();\r
             lRevokedCount.Text = revoked.ToString();\r
+            lSkippedCount.Text = skipped.ToString();\r
             lDoneCount.Text = done.ToString();\r
-\r
         }\r
 \r
         private void ProcessorWorker_DoWork(object sender, DoWorkEventArgs e) {\r
@@ -185,6 +190,8 @@ namespace Maestro {
                     });\r
                     if (TargetProcessor.REVOKED.Equals(job.Status))\r
                         continue;\r
+                    if (TargetProcessor.SKIPPED.Equals(job.Status))\r
+                        continue;\r
                     (this).SafeCall(() => {\r
                         lRunningCount.Text = "1";\r
                     });\r
index 901e11c9f82d0319baa02d7618814278055ea8a3..b5bf3046c32e0681a995f3059d9bd17c089cbc01 100644 (file)
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS\r
-        CAAAAk1TRnQBSQFMAgEBAgEAAXABAgFwAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
+        CAAAAk1TRnQBSQFMAgEBAgEAAYABAgGAAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
         AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r
         AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r
         AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r
diff --git a/client/MaestroShared/Commons/StringExtensions.cs b/client/MaestroShared/Commons/StringExtensions.cs
new file mode 100644 (file)
index 0000000..ce1b85e
--- /dev/null
@@ -0,0 +1,9 @@
+namespace MaestroShared.Commons {\r
+    public static class StringExtensions {\r
+\r
+        public static bool IsEmpty(this string data) {\r
+            return string.IsNullOrWhiteSpace(data);\r
+        }\r
+\r
+    }\r
+}\r
index 2ce64179fa86a206c4ebbc64819969ff7c0e3b70..221991be9775532e929f7c9066aab37a104302b1 100644 (file)
@@ -88,6 +88,7 @@
     <Compile Include="Commons\NexioXML.cs" />\r
     <Compile Include="Commons\ObjectExtensions.cs" />\r
     <Compile Include="Commons\PatternNameMaker.cs" />\r
+    <Compile Include="Commons\StringExtensions.cs" />\r
     <Compile Include="Commons\Win32File.cs" />\r
     <Compile Include="Configuration\ConfigurationInfo.cs" />\r
     <Compile Include="Configuration\KeysColorConverter.cs" />\r
index 835e2cac4397db59bb9a711e822d97c4a66a5406..a535c95d13368c7142c819d9eb65e7a99ec2b71b 100644 (file)
@@ -24,6 +24,7 @@ namespace MaestroShared.Targets {
             if (address == null) {\r
                 Message = "Nem található a 'source.local.address' beállítás.";\r
                 Status = REVOKED;\r
+                workFlowAction.description = Message;\r
                 return;\r
             }\r
             inputFile = null;\r
@@ -150,13 +151,15 @@ namespace MaestroShared.Targets {
         }\r
 \r
         protected FtpClient CreateClient(Connection connection) {\r
-\r
             Uri address = connection.Address;\r
             string addr = address.Host;\r
+            IPAddress.TryParse(addr, out IPAddress ipaddress);\r
+            if (ipaddress == null) {\r
+                IPHostEntry hostEntry = Dns.GetHostEntry(addr);\r
+                if (hostEntry != null && hostEntry.AddressList.Length > 0)\r
+                    addr = hostEntry.AddressList[0].ToString();\r
+            }\r
 \r
-            IPHostEntry hostEntry = Dns.GetHostEntry(addr);\r
-            if (hostEntry != null && hostEntry.AddressList.Length > 0)\r
-                addr = hostEntry.AddressList[0].ToString();\r
             logger.Info("Remote address is {0}", addr);\r
             FtpClient result = new FtpClient() {\r
                 Host = addr,\r
index 2ad9649e23dfe87a27286ebf885db8315ce5ec24..e8d68f51c48196370e79e4415463aaffd6307c17 100644 (file)
@@ -35,6 +35,7 @@ namespace MaestroShared.Targets {
             if (address == null) {\r
                 Message = "Nem található a 'source.remote.address' beállítás.";\r
                 Status = REVOKED;\r
+                workFlowAction.description = Message;\r
                 return;\r
             }\r
 \r
index d3312c9652dcc7b191fc8ede50f414ff62d10397..a17b40937373d17c6e41ea378863e74f93521317 100644 (file)
@@ -72,6 +72,11 @@ namespace MaestroShared.Targets {
             workFlowAction.started = Started;\r
         }\r
 \r
+        protected virtual void BeforeUpload() {\r
+            if (Parameters.TargetConfig.SaveSegments && Parameters.MovieSegments != null)\r
+                TrafficSaveSegments();\r
+        }\r
+\r
         public override bool Execute() {\r
             logger.Info(PROCESSING, InputName);\r
             bool result = false;\r
@@ -86,18 +91,20 @@ namespace MaestroShared.Targets {
                 Status = INPROGRESS;\r
                 //DateTime started = DateTime.Now;\r
                 string currentFile = GetOutputFilePath(workingDir, OutputName);\r
+                //csak akkor csinalunk barmit is, ha a feluliras logika engedi\r
                 if (DeleteExisting(currentFile)) {\r
+                    BeforeUpload();\r
                     UploadFile();\r
                     ValidateTransfer();\r
                     //logger.Info("Spend (s):" + (DateTime.Now - started).TotalSeconds);\r
+                    if (Parameters.TargetConfig.DeleteAfterCopy)\r
+                        DeleteAfterCopy();\r
+                    ExecuteCompleted();\r
+\r
                     Status = READY;\r
                     Message = SUCCESS;\r
+                    workFlowAction.successful = true;\r
                 }\r
-                if (Parameters.TargetConfig.DeleteAfterCopy)\r
-                    DeleteAfterCopy();\r
-\r
-                ExecuteCompleted();\r
-                workFlowAction.successful = true;\r
             } catch (Exception e) {\r
                 Status = ERROR;\r
                 Message = e.Message;\r
@@ -136,12 +143,14 @@ namespace MaestroShared.Targets {
                         if (Parameters.ArchiveMetadata.ok) {\r
                             Message = "A célállomány már létezik és el van fogadva, felülírása nem lehetséges.";\r
                             Status = SKIPPED;\r
+                            workFlowAction.description = Message;\r
                             return false;\r
                         } else\r
                             DeleteFile(currentFile);\r
                     } else {\r
                         Message = "A célállomány létezik, felülírása a konfiuráció alapján nem lehetséges.";\r
                         Status = SKIPPED;\r
+                        workFlowAction.description = Message;\r
                         return false;\r
                     }\r
                 }\r
@@ -158,6 +167,7 @@ namespace MaestroShared.Targets {
             else\r
                 message = Parameters.TargetConfig.NexioFileExistsMessage;\r
             MessageBox.Show(String.Format($"Az '{OutputName}' állomány már létezik. {message}"));\r
+            workFlowAction.description = message;\r
             logger.Trace(Strings.EXIT);\r
         }\r
 \r
@@ -192,17 +202,27 @@ namespace MaestroShared.Targets {
             if (Parameters.TargetConfig.SaveMorpheusMetadata && Parameters.ArchiveMetadata != null && Parameters.MovieSegments != null && Parameters.MovieSegments.Count > 0)\r
                 UploadMorpheusMetadata();\r
             if (Parameters.TargetConfig.SaveSegments && Parameters.MovieSegments != null)\r
-                UpdateTrafficInformation();\r
+                TrafficApprove();\r
             if (Parameters.TargetConfig.SendEmailOnSuccess && !String.IsNullOrEmpty(Parameters.TargetConfig.SuccessEmailRecipient) && !String.IsNullOrEmpty(Parameters.TargetConfig.SuccessEmailPattern))\r
                 SendEmail(Parameters.TargetConfig.SuccessEmailRecipient, Parameters.TargetConfig.SuccessEmailPattern);\r
             logger.Trace(Strings.EXIT);\r
         }\r
 \r
-        private void UpdateTrafficInformation() {\r
+        private void TrafficApprove() {\r
             logger.Trace(Strings.ENTRY);\r
             TargetUpdateTrafficMessage message = new TargetUpdateTrafficMessage {\r
                 VariantID = Parameters.VariantID,\r
                 Ready = true,\r
+                MetadataType = Parameters.MetadataKind\r
+            };\r
+            Parameters.MessageBus.Send(message);\r
+            logger.Trace(Strings.EXIT);\r
+        }\r
+\r
+        private void TrafficSaveSegments() {\r
+            logger.Trace(Strings.ENTRY);\r
+            TargetUpdateTrafficMessage message = new TargetUpdateTrafficMessage {\r
+                VariantID = Parameters.VariantID,\r
                 MetadataType = Parameters.MetadataKind,\r
                 Segments = Parameters.MovieSegments\r
             };\r
@@ -287,7 +307,6 @@ namespace MaestroShared.Targets {
         private void SendWorkFlowAction() {\r
             logger.Trace(Strings.ENTRY);\r
             try {\r
-\r
                 Parameters?.MediaCubeApi?.Create<WorkflowAction>(workFlowAction);\r
             } catch (Exception e) {\r
                 logger.Error(e);\r
index 952532ed30c3fc5ac5c47d06359f2f4d9c718ad8..92b005ec549ac15b7802df86f17fea5dccf3b551 100644 (file)
@@ -1,4 +1,5 @@
 using LinkDotNet.MessageHandling.Contracts;\r
+using MaestroShared.Commons;\r
 using MaestroShared.Interfaces;\r
 using MaestroShared.MessageBus;\r
 using MaestroShared.Model;\r
@@ -62,14 +63,17 @@ namespace MediaCubeClient {
             var request = new RestRequest("media", Method.GET);\r
             request.AddQueryParameter("mediaHouseId", mediaHouseId);\r
             var response = client.Execute(request);\r
-            if (response.StatusCode != HttpStatusCode.OK || response.Content.Length < 1) {\r
+            if (response.StatusCode != HttpStatusCode.OK &&\r
+                !response.ErrorMessage.IsEmpty()) {\r
                 messageBus.Send(new MediaCubeMessage("Hiba a lekérdezésben. A rendszer üzenete: " + response.ErrorMessage));\r
                 return null;\r
             }\r
-            JObject media = JObject.Parse(response.Content);\r
-            if (media != null)\r
-                return media.Deserialize<Media>();\r
 \r
+            if (!response.Content.IsEmpty()) {\r
+                JObject media = JObject.Parse(response.Content);\r
+                if (media != null)\r
+                    return media.Deserialize<Media>();\r
+            }\r
             return null;\r
         }\r
 \r