git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Thu, 12 Oct 2017 15:04:44 +0000 (15:04 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Thu, 12 Oct 2017 15:04:44 +0000 (15:04 +0000)
client/Maestro/Configuration/ConfigurationInfo.cs
client/Maestro/Maestro.csproj
client/Maestro/Resources/configuration-control.json [moved from client/Maestro/Resources/configuration-nexio.json with 61% similarity]
client/Maestro/Resources/configuration-ingest.json
client/Maestro/Resources/configuration-playout.json
client/Maestro/Resources/configuration-unc.json
client/Maestro/Targets/UNCTargetProcessor.cs
server/user.commons.log4j2/src/user/commons/log4j2/appender/HTMLMailAppender.java
server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java

index a33285201c60ce910142e6b66b620fd6d24d86a4..a46fb7a6a2e98d7bdb0947bad092c056c277e6e0 100644 (file)
@@ -48,7 +48,13 @@ namespace Maestro.Configuration {
         public bool SaveSegments { get; set; }\r
         public bool CreateSubFolder { get; set; }\r
         public string Tag { get; set; }\r
-        public bool UseMetadata {get; set;}\r
+        public bool CreateMetadata {get; set;}\r
+        public bool SendEmailOnError { get; set; }\r
+        public string ErrorEmailRecipient { get; set; }\r
+        public string ErrorEmailPattern { get; set; }\r
+        public bool SendEmailOnSuccess { get; set; }\r
+        public string SuccessEmailRecipient { get; set; }\r
+        public string SuccessEmailPattern { get; set; }\r
     }\r
 \r
     public class Connection {\r
index b2c7e53c1d2c15c2842a392c4ae9ae120c0cd294..6168d62debd819ecbdfe6d64c2b1d3d6cfb01c52 100644 (file)
     <None Include="Resources\configuration-ingest.json">\r
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
     </None>\r
-    <None Include="Resources\configuration-nexio.json">\r
+    <None Include="Resources\configuration-control.json">\r
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r
     </None>\r
   </ItemGroup>\r
similarity index 61%
rename from client/Maestro/Resources/configuration-nexio.json
rename to client/Maestro/Resources/configuration-control.json
index d967aa64cfbc7241d2e6176f4d4dda35222c39df..0c74a6545a6f83118bd704b322181e70fe3cb7d0 100644 (file)
@@ -1,13 +1,10 @@
 {\r
-  "title": "Adáslebonyolítás",\r
+  "title": "Lebonyolítás",\r
   "active": true,\r
   "startInTray": false,\r
-  "enableNameOverride": false,\r
+  "enableCustomMetadataId": true,\r
   "filter": "avi",\r
   "player": {\r
-    "enabled": true,\r
-    "autoStart": false,\r
-    "segmentEditor": true\r
   },\r
   "source": {\r
     "$type": "NEXIOSource",\r
@@ -15,7 +12,7 @@
       "address": "ws://10.10.1.28/services/nexio"\r
     },\r
     "remote": {\r
-      "address": "ftp://10.10.1.55:2098",\r
+      "address": "ftp://10.10.1.56:2098/MXF",\r
       "userName": "administrator",\r
       "password": "system"\r
     }\r
@@ -25,8 +22,6 @@
       "$type": "OctopusMetadata",\r
       "server": {\r
         "address": "http://10.10.1.28/services/rest/octopus",\r
-        "userName": "dani",\r
-        "password": "dani",\r
         "timeout": 1000\r
       }\r
     },\r
         "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
         "userName": "MAM",\r
         "password": "Echotv.hu",\r
-        "timeout": 5\r
+        "timeout": 1000\r
       }\r
     },\r
     {\r
       "$type": "MediaCubeMetadata",\r
       "server": {\r
         "address": "http://10.10.1.28/services/rest/jobengine",\r
-        "userName": "dani",\r
-        "password": "dani"\r
+        "timeout": 1000\r
       }\r
     }\r
   ],\r
   "targets": [\r
     {\r
-      "label": "Adásba",\r
+      "label": "Adásellenőrzés",\r
       "processor": "FXPTargetProcessor",\r
       "outputFormat": "%ID%",\r
+      "tag": "Adáskész",\r
       "remote": {\r
-        "address": "ftp://10.10.1.100:21/READY",\r
+        "address": "ftp://10.10.1.100:21/PLAYOUT_CHECK",\r
         "userName": "mediacube",\r
-        "password": "Broadca5T"\r
+        "password":  "Broadca5T"\r
+      }\r
+    },\r
+    {\r
+      "label": "Archiválás",\r
+      "processor": "UNCTargetProcessor",\r
+      "outputFormat": "%ID%",\r
+      "tag": "Archiválás",\r
+      "createMetadata": true,\r
+      "remote": {\r
+        "address": "file://10.10.1.100/BRAAVOS/ARCHIVE"\r
       }\r
     }\r
   ]\r
index 07acce92a9c097d5f202cdb61f35cf661313a3c3..cb371883e8391eee97c146ff8ae845711689c2bc 100644 (file)
@@ -2,7 +2,7 @@
   "title": "Betöltés",\r
   "active": true,\r
   "startInTray": false,\r
-  "enableCustomMetadataId": false,\r
+  "enableCustomMetadataId": true,\r
   "player": {\r
     "enabled": true,\r
     "autoStart": false,\r
@@ -20,8 +20,6 @@
       "$type": "OctopusMetadata",\r
       "server": {\r
         "address": "http://10.10.1.28/services/rest/octopus/",\r
-        "userName": "user",\r
-        "password": "password",\r
         "timeout": 1000\r
       }\r
     },\r
         "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
         "userName": "MAM",\r
         "password": "Echotv.hu",\r
-        "timeout": 5\r
+        "timeout": 1000\r
       }\r
     },\r
     {\r
       "$type": "MediaCubeMetadata",\r
       "server": {\r
         "address": "http://10.10.1.28/services/rest/jobengine/",\r
-        "userName": "user",\r
-        "password": "password",\r
         "timeout": 1000\r
       }\r
     }\r
@@ -55,8 +51,7 @@
       "useMetadata": false,\r
       "remote": {\r
         "address": "file://10.10.1.100/BRAAVOS/OCTOPUS",\r
-        "userName": "mediacube",\r
-        "password": "Broadca5T"\r
+        "timeout": 1000\r
       }\r
     },\r
     {\r
       "processor": "UNCTargetProcessor",\r
       "outputFormat": "%ID%",\r
       "tag": "Betöltés",\r
-      "saveSegments": false,\r
       "killDateDays": 7,\r
-      "createSubFolder": false,\r
-      "useMetadata": false,\r
       "remote": {\r
         "address": "file://10.10.1.100/BRAAVOS/PLAYOUT_CHECK",\r
-        "userName": "mediacube",\r
-        "password": "Broadca5T"\r
+        "timeout": 1000\r
+      }\r
+    },\r
+    {\r
+      "label": "Archiválás",\r
+      "processor": "UNCTargetProcessor",\r
+      "outputFormat": "%ID%",\r
+      "tag": "Archiválás",\r
+      "useMetadata": true,\r
+      "remote": {\r
+        "address": "file://10.10.1.100/BRAAVOS/ARCHIVE",\r
+        "timeout": 1000\r
       }\r
     }\r
   ]\r
index e59187a54b6b600e2bb353db8b21b4710f066145..f6a3ca39fb1811001cefb1747ea5e6d65f127aff 100644 (file)
@@ -1,5 +1,5 @@
 {\r
-  "title": "Adásanyagok",\r
+  "title": "Ellenőrzés",\r
   "active": true,\r
   "startInTray": false,\r
   "enableCustomMetadataId": true,\r
@@ -28,7 +28,7 @@
         "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
         "userName": "MAM",\r
         "password": "Echotv.hu",\r
-        "timeout": 0\r
+        "timeout": 1000\r
       }\r
     },\r
     {\r
       "outputFormat": "%ID%",\r
       "saveSegments": true,\r
       "tag": "Adáskész",\r
-      "createSubFolder": false,\r
-      "useMetadata": false,\r
       "remote": {\r
         "address": "file://10.10.1.100/BRAAVOS/PLAYOUT"\r
       }\r
     },\r
     {\r
-      "label": "Újravágásra",\r
+      "label": "Újravágás",\r
       "processor": "UNCTargetProcessor",\r
       "outputFormat": "%ID%",\r
-      "tag": "Újravágásra",\r
+      "tag": "Újravágás",\r
       "remote": {\r
         "address": "file://10.10.1.100/BRAAVOS/PLAYOUT_NLE"\r
+      },\r
+      "sendSEmailOnSuccess" : true, \r
+      "successEmailRecipient": "vasary@elgekko.net",\r
+      "successEmailPattern": "A %TARGETNAME% újravágása szükséges."\r
+    },\r
+    {\r
+      "label": "Archiválás",\r
+      "processor": "UNCTargetProcessor",\r
+      "outputFormat": "%ID%",\r
+      "tag": "Archiválás",\r
+      "createMetadata": true,\r
+      "remote": {\r
+        "address": "file://10.10.1.100/BRAAVOS/ARCHIVE",\r
+        "timeout": 1000\r
       }\r
     }\r
-\r
   ]\r
 }\r
index 1a1505e2b117893fad038e10578c61e7d410e863..0f9d590e5be716ccb76625cd66a2d6558c96c06c 100644 (file)
@@ -68,7 +68,7 @@
       "killDateDays": 0,\r
       "tag": "Adáskész",\r
       "createSubFolder": false,\r
-      "useMetadata": false,\r
+      "createMetadata": false,\r
       "remote": {\r
         "address": "file://10.10.1.100/BRAAVOS/PLAYOUT/IceGateway",\r
         "userName": "mediacube",\r
index 4bdbfd2b8f9bbaa8ff337b7746b079273091bbda..dd24ca2c56bc8aa9a915ea9f206951583b66c388 100644 (file)
@@ -63,6 +63,8 @@ namespace Maestro.Targets {
                 Message = e.Message;\r
                 workFlowAction.description = Message;\r
                 logger.Error(e);\r
+                if (parameters.TargetConfig.SendEmailOnError && !String.IsNullOrEmpty(parameters.TargetConfig.ErrorEmailRecipient) && !String.IsNullOrEmpty(parameters.TargetConfig.ErrorEmailPattern))\r
+                    SendEmail(parameters.TargetConfig.ErrorEmailRecipient, parameters.TargetConfig.ErrorEmailPattern);\r
             }\r
             finally {\r
                 AfterExecute();\r
@@ -79,12 +81,24 @@ namespace Maestro.Targets {
             workFlowAction.successful = true;\r
             if (parameters.TargetConfig.KillDateDays > 0)\r
                 UploadKillDateFile();\r
-            if (parameters.TargetConfig.UseMetadata && parameters.ArchiveMetadata != null)\r
+            if (parameters.TargetConfig.CreateMetadata && parameters.ArchiveMetadata != null)\r
                 CreateMetadata();\r
             if (parameters.TargetConfig.SaveSegments && parameters.Segments != null) {\r
                 SaveSegments();\r
                 parameters.Client.BroadcastOKForAir(parameters.VariantID);\r
-            } \r
+            }\r
+            if (parameters.TargetConfig.SendEmailOnSuccess && !String.IsNullOrEmpty(parameters.TargetConfig.SuccessEmailRecipient) && !String.IsNullOrEmpty(parameters.TargetConfig.SuccessEmailPattern))\r
+                SendEmail(parameters.TargetConfig.SuccessEmailRecipient, parameters.TargetConfig.SuccessEmailPattern);\r
+        }\r
+\r
+        private void SendEmail(string to, string messagePattern) {\r
+            try {\r
+                string message = messagePattern.Replace("%TARGETNAME%", Output);\r
+                parameters.MediaCubeApi.Notify(to, messagePattern);\r
+            }\r
+            catch (Exception e) {\r
+                MessageBox.Show(parent, e.Message);\r
+            }\r
         }\r
 \r
         private void SaveSegments() {\r
@@ -159,8 +173,8 @@ namespace Maestro.Targets {
         }\r
 \r
         private CopyProgressResult CopyProgressHandler(long total, long transferred, long streamSize, long StreamByteTrans, uint dwStreamNumber, CopyProgressCallbackReason reason, IntPtr hSourceFile, IntPtr hDestinationFile, IntPtr lpData) {\r
-            if (transferred > 0)    \r
-                Progress = (int)((double) transferred * 100 / total );\r
+            if (transferred > 0)\r
+                Progress = (int)((double)transferred * 100 / total);\r
             return CopyProgressResult.PROGRESS_CONTINUE;\r
         }\r
 \r
index e40d45116cafb12d619beff25eeab834197958b2..7df714d4b8f28f2befc43ca527ba71daa63bdabb 100644 (file)
@@ -1,6 +1,8 @@
 package user.commons.log4j2.appender;
 
 import java.io.Serializable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.Core;
@@ -22,37 +24,22 @@ import org.apache.logging.log4j.core.layout.HtmlLayout;
 import org.apache.logging.log4j.core.util.Booleans;
 
 /**
- * Send an e-mail when a specific logging event occurs, typically on errors or
- * fatal errors.
+ * Send an e-mail when a specific logging event occurs, typically on errors or fatal errors.
  *
  * <p>
- * The number of logging events delivered in this e-mail depend on the value of
- * <b>BufferSize</b> option. The <code>SmtpAppender</code> keeps only the last
- * <code>BufferSize</code> logging events in its cyclic buffer. This keeps
- * memory requirements at a reasonable level while still delivering useful
- * application context.
+ * The number of logging events delivered in this e-mail depend on the value of <b>BufferSize</b> option. The <code>SmtpAppender</code> keeps only the last
+ * <code>BufferSize</code> logging events in its cyclic buffer. This keeps memory requirements at a reasonable level while still delivering useful application
+ * context.
  *
- * By default, an email message will formatted as HTML. This can be modified by
- * setting a layout for the appender.
+ * By default, an email message will formatted as HTML. This can be modified by setting a layout for the appender.
  *
- * By default, an email message will be sent when an ERROR or higher severity
- * message is appended. This can be modified by setting a filter for the
- * appender.
+ * By default, an email message will be sent when an ERROR or higher severity message is appended. This can be modified by setting a filter for the appender.
  */
 @Plugin(name = "HTMLMailAppender", category = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE, printObject = true)
 public final class HTMLMailAppender extends AbstractAppender {
 
        private static final int DEFAULT_BUFFER_SIZE = 512;
 
-       /** The SMTP Manager */
-       private final SmtpManager manager;
-
-       private HTMLMailAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout,
-                       final SmtpManager manager, final boolean ignoreExceptions) {
-               super(name, filter, layout, ignoreExceptions);
-               this.manager = manager;
-       }
-
        /**
         * Create a SmtpAppender.
         *
@@ -68,8 +55,10 @@ public final class HTMLMailAppender extends AbstractAppender {
         *            The email address of the sender.
         * @param replyTo
         *            The comma-separated list of reply-to email addresses.
-        * @param subject The subject of the email message.
-        * @param smtpProtocol The SMTP transport protocol (such as "smtps", defaults to "smtp").
+        * @param subject
+        *            The subject of the email message.
+        * @param smtpProtocol
+        *            The SMTP transport protocol (such as "smtps", defaults to "smtp").
         * @param smtpHost
         *            The SMTP hostname to send to.
         * @param smtpPortStr
@@ -81,30 +70,23 @@ public final class HTMLMailAppender extends AbstractAppender {
         * @param smtpDebug
         *            Enable mail session debuging on STDOUT.
         * @param bufferSizeStr
-        *            How many log events should be buffered for inclusion in the
-        *            message?
+        *            How many log events should be buffered for inclusion in the message?
         * @param layout
         *            The layout to use (defaults to HtmlLayout).
         * @param filter
-        *            The Filter or null (defaults to ThresholdFilter, level of
-        *            ERROR).
-        * @param ignore If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise
-        *               they are propagated to the caller.
+        *            The Filter or null (defaults to ThresholdFilter, level of ERROR).
+        * @param ignore
+        *            If {@code "true"} (default) exceptions encountered when appending events are logged; otherwise they are propagated to the caller.
         * @return The SmtpAppender.
         */
        @PluginFactory
-       public static HTMLMailAppender createAppender(@PluginConfiguration final Configuration config,
-                       @PluginAttribute("name") @Required final String name, @PluginAttribute("to") final String to,
-                       @PluginAttribute("cc") final String cc, @PluginAttribute("bcc") final String bcc,
-                       @PluginAttribute("from") final String from, @PluginAttribute("replyTo") final String replyTo,
-                       @PluginAttribute("subject") final String subject,
-                       @PluginAttribute("smtpProtocol") final String smtpProtocol,
-                       @PluginAttribute("smtpHost") final String smtpHost,
+       public static HTMLMailAppender createAppender(@PluginConfiguration final Configuration config, @PluginAttribute("name") @Required final String name,
+                       @PluginAttribute("to") final String to, @PluginAttribute("cc") final String cc, @PluginAttribute("bcc") final String bcc,
+                       @PluginAttribute("from") final String from, @PluginAttribute("replyTo") final String replyTo, @PluginAttribute("subject") final String subject,
+                       @PluginAttribute("smtpProtocol") final String smtpProtocol, @PluginAttribute("smtpHost") final String smtpHost,
                        @PluginAttribute(value = "smtpPort", defaultString = "0") @ValidPort final String smtpPortStr,
-                       @PluginAttribute("smtpUsername") final String smtpUsername,
-                       @PluginAttribute(value = "smtpPassword", sensitive = true) final String smtpPassword,
-                       @PluginAttribute("smtpDebug") final String smtpDebug,
-                       @PluginAttribute("bufferSize") final String bufferSizeStr,
+                       @PluginAttribute("smtpUsername") final String smtpUsername, @PluginAttribute(value = "smtpPassword", sensitive = true) final String smtpPassword,
+                       @PluginAttribute("smtpDebug") final String smtpDebug, @PluginAttribute("bufferSize") final String bufferSizeStr,
                        @PluginElement("Layout") Layout<? extends Serializable> layout, @PluginElement("Filter") Filter filter,
                        @PluginAttribute("ignoreExceptions") final String ignore) {
                if (name == null) {
@@ -125,9 +107,8 @@ public final class HTMLMailAppender extends AbstractAppender {
                }
                final Configuration configuration = config != null ? config : new DefaultConfiguration();
 
-               final SmtpManager manager = SmtpManager.getSmtpManager(configuration, to, cc, bcc, from, replyTo, subject,
-                               smtpProtocol, smtpHost, smtpPort, smtpUsername, smtpPassword, isSmtpDebug, filter.toString(),
-                               bufferSize);
+               final SmtpManager manager = SmtpManager.getSmtpManager(configuration, to, cc, bcc, from, replyTo, subject, smtpProtocol, smtpHost, smtpPort,
+                               smtpUsername, smtpPassword, isSmtpDebug, filter.toString(), bufferSize);
                if (manager == null) {
                        return null;
                }
@@ -135,9 +116,37 @@ public final class HTMLMailAppender extends AbstractAppender {
                return new HTMLMailAppender(name, filter, layout, manager, ignoreExceptions);
        }
 
+       /** The SMTP Manager */
+       private final SmtpManager manager;
+
+       private final ExecutorService executor = Executors.newFixedThreadPool(1);
+
+       private HTMLMailAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout, final SmtpManager manager,
+                       final boolean ignoreExceptions) {
+               super(name, filter, layout, ignoreExceptions);
+               this.manager = manager;
+       }
+
+       /**
+        * Perform SmtpAppender specific appending actions, mainly adding the event to a cyclic buffer and checking if the event triggers an e-mail to be sent.
+        *
+        * @param event
+        *            The Log event.
+        */
+       @Override
+       public void append(final LogEvent event) {
+
+               executor.submit(() -> {
+                       manager.sendEvents(getLayout(), event);
+               });
+
+       }
+
        /**
         * Capture all events in CyclicBuffer.
-        * @param event The Log event.
+        *
+        * @param event
+        *            The Log event.
         * @return true if the event should be filtered.
         */
        @Override
@@ -148,15 +157,4 @@ public final class HTMLMailAppender extends AbstractAppender {
                }
                return filtered;
        }
-
-       /**
-        * Perform SmtpAppender specific appending actions, mainly adding the event
-        * to a cyclic buffer and checking if the event triggers an e-mail to be
-        * sent.
-        * @param event The Log event.
-        */
-       @Override
-       public void append(final LogEvent event) {
-               manager.sendEvents(getLayout(), event);
-       }
 }
index 503e5e2c6e6b1ea9a0d8673d3e88f0c4de4592e8..f276ab33680d7a96e3efdebedddc23226ada1555 100644 (file)
@@ -21,8 +21,6 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Date;
 import java.util.Properties;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 
 import javax.activation.DataSource;
 import javax.mail.Authenticator;
@@ -31,9 +29,11 @@ import javax.mail.MessagingException;
 import javax.mail.PasswordAuthentication;
 import javax.mail.Session;
 import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
 import javax.mail.internet.InternetHeaders;
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMessage.RecipientType;
 import javax.mail.internet.MimeMultipart;
 import javax.mail.internet.MimeUtility;
 import javax.mail.util.ByteArrayDataSource;
@@ -214,8 +214,6 @@ public class SmtpManager extends AbstractManager {
 
        private final FactoryData data;
 
-       private final ExecutorService executor = Executors.newFixedThreadPool(5);
-
        protected SmtpManager(final String name, final Session session, final MimeMessage message, final FactoryData data) {
                super(null, name);
                this.session = session;
@@ -297,7 +295,7 @@ public class SmtpManager extends AbstractManager {
                try {
                        if (appendEvent.getMarker() instanceof MediaCubeMarker) {
                                MediaCubeMarker mcm = (MediaCubeMarker) appendEvent.getMarker();
-                               //message.setRecipient(RecipientType.TO, new InternetAddress(mcm.getTo()));
+                               message.setRecipient(RecipientType.TO, new InternetAddress(mcm.getTo()));
                        }
 
                        final LogEvent[] priorEvents = buffer.removeAll();
@@ -311,14 +309,7 @@ public class SmtpManager extends AbstractManager {
 
                        final InternetHeaders headers = getHeaders(contentType, encoding);
                        final MimeMultipart mp = getMimeMultipart(encodedBytes, headers);
-
-                       executor.submit(() -> {
-                               try {
-                                       sendMultipartMessage(message, mp);
-                               } catch (MessagingException e) {
-                                       System.out.println(e.getMessage());
-                               }
-                       });
+                       sendMultipartMessage(message, mp);
                } catch (final MessagingException | IOException | RuntimeException e) {
                        logError("Caught exception while sending e-mail notification.", e);
                        throw new LoggingException("Error occurred while sending email", e);