git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Thu, 26 Nov 2020 22:29:11 +0000 (22:29 +0000)
committervasary.daniel <TFS\vasary.daniel>
Thu, 26 Nov 2020 22:29:11 +0000 (22:29 +0000)
client/Maestro/RestoreMedia.cs
client/MediaCubeClient/MediaCubeStrings.cs
client/MediaCubeClient/MediaCubeWSApi.cs
server/user.commons.log4j2/src/user/commons/log4j2/appender/SmtpManager.java
server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java
server/user.jobengine.osgi.server/resources/i3-label_hu.properties
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java

index 18115a13be55af0ffa09ec701fd73b717af59751..af3ccfac99875d60c12cc1370a0e6b968dbe357d 100644 (file)
@@ -35,13 +35,19 @@ namespace Maestro {
                 return;\r
             }\r
             messageBus.Subscribe<MediaCubeWSMessage>(m => {\r
+                if (!(m.Data is JObject)) {\r
+                    throw new Exception("Unexpected data type: " + m.Data.GetType());\r
+                }\r
+\r
                 BeginInvoke((Action)(() => {\r
                     if (m.Finished) {\r
                         if (m.Content?.Length > 0)\r
                             systemBus.Send(m);\r
                         Close();\r
-                    } else\r
-                        progressBar.Value = m.Data.As<int>("progress");\r
+                    } else {\r
+                        var innerData = m.Data as JObject;\r
+                        progressBar.Value = innerData.As<int>("progress");\r
+                    }\r
                 }));\r
             });\r
             api = new MediaCubeWSApi(mediaCubeMetadata.WSServer, messageBus);\r
@@ -58,8 +64,6 @@ namespace Maestro {
         }\r
 \r
         private void RestoreMedia_FormClosing(object sender, FormClosingEventArgs e) {\r
-            if (api != null)\r
-                api.Close();\r
         }\r
     }\r
 }\r
index 84d28223d7248f3d02686b299acc108362a4f206..c888ba2fea3a37e9e2df5e2f677668ad7c9448bb 100644 (file)
@@ -4,9 +4,12 @@
         public static readonly string NAME = "name";\r
         public static readonly string LIST = "list";\r
         public static readonly string STARTJOB = "startjob";\r
+        public static readonly string QUERYMEDIANAMES = "querymedianames";\r
         public static readonly string ERROR = "error";\r
         public static readonly string STATUS = "status";\r
         public static readonly string TEMPLATE = "template";\r
         public static readonly string PARAMETERS = "parameters";\r
+        public static readonly string QUERY = "query";\r
+        public static readonly string VERSION = "version";\r
     }\r
 }\r
index 7e023a13fbeb6d770acd924897b0eb291898d307..32f8abad90ae98f6bc53ab81b79f40ed61258ef9 100644 (file)
@@ -5,12 +5,14 @@ using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;\r
 using NLog;\r
 using System;\r
+using System.Collections.Generic;\r
+using System.Threading;\r
 using WebSocketSharp;\r
 \r
 namespace MediaCubeClient {\r
     public class MediaCubeWSMessage : MaestroMessage {\r
         public bool Finished { get; }\r
-        public JObject Data { get; }\r
+        public JContainer Data { get; }\r
 \r
         public MediaCubeWSMessage() : base(null) {\r
             Finished = true;\r
@@ -20,7 +22,7 @@ namespace MediaCubeClient {
             Finished = true;\r
         }\r
 \r
-        public MediaCubeWSMessage(JObject data) : base(null) {\r
+        public MediaCubeWSMessage(JContainer data) : base(null) {\r
             Data = data;\r
         }\r
 \r
@@ -30,13 +32,12 @@ namespace MediaCubeClient {
         private const string DATEFORMAT = "yyyy'-'MM'-'dd'T'HH':'mm':'ssK";\r
         private static NLog.Logger logger = LogManager.GetCurrentClassLogger();\r
         private JsonSerializerSettings serializerSettings;\r
+        private readonly Connection connection;\r
         private IMessageBus messageBus;\r
         private WebSocket ws;\r
 \r
         public MediaCubeWSApi(Connection connection, IMessageBus messageBus) {\r
-            ws = new WebSocket(connection.Address.ToString()) {\r
-                WaitTime = TimeSpan.FromMilliseconds(connection.Timeout)\r
-            };\r
+            this.connection = connection;\r
             this.messageBus = messageBus;\r
             serializerSettings = new JsonSerializerSettings {\r
                 TypeNameHandling = TypeNameHandling.Objects,\r
@@ -61,6 +62,11 @@ namespace MediaCubeClient {
                 }\r
         */\r
         public void SubmitJob(string template, string name, JObject parameters) {\r
+\r
+            ws = new WebSocket(connection.Address.ToString()) {\r
+                WaitTime = TimeSpan.FromMilliseconds(connection.Timeout)\r
+            };\r
+\r
             ws.SslConfiguration.ServerCertificateValidationCallback = (s, c, ch, e) => {\r
                 return true;\r
             };\r
@@ -73,7 +79,7 @@ namespace MediaCubeClient {
                 }\r
                 if ("FINISHED".Equals(jo.As<string>(MediaCubeStrings.STATUS))) {\r
                     ws.Close();\r
-                        messageBus?.Send(new MediaCubeWSMessage());\r
+                    messageBus?.Send(new MediaCubeWSMessage());\r
                     return;\r
                 }\r
                 messageBus?.Send(new MediaCubeWSMessage(jo));\r
@@ -85,11 +91,6 @@ namespace MediaCubeClient {
 \r
             try {\r
                 ws.Connect();\r
-            } catch {\r
-                ws.Close();\r
-                messageBus?.Send(new MediaCubeWSMessage("Sikertelen kapcsolódás a MediaCube szolgáltatáshoz."));\r
-            }\r
-            try {\r
                 JObject data = new JObject();\r
                 data.Add(MediaCubeStrings.NAME, JToken.FromObject(name));\r
                 data.Add(MediaCubeStrings.ACTION, JToken.FromObject(MediaCubeStrings.STARTJOB));\r
@@ -97,16 +98,53 @@ namespace MediaCubeClient {
                 data.Add(MediaCubeStrings.PARAMETERS, JToken.FromObject(parameters));\r
                 ws.Send(data.Serialize());\r
             } catch (Exception e) {\r
-                ws.Close();\r
-                messageBus?.Send(new MediaCubeWSMessage("Sikertelen MediaCube folyamatindítás."));\r
+                messageBus?.Send(new MediaCubeWSMessage("Hiba a MediaCube szolgáltatás használata során. Rendszerüzenet: " + e.Message));\r
             }\r
         }\r
 \r
+        public List<string> QueryMediaNames(string query, string version) {\r
+            List<string> result = null;\r
+\r
+            ws = new WebSocket(connection.Address.ToString()) {\r
+                WaitTime = TimeSpan.FromMilliseconds(connection.Timeout)\r
+            };\r
+\r
+            ws.SslConfiguration.ServerCertificateValidationCallback = (s, c, ch, e) => {\r
+                return true;\r
+            };\r
+\r
+            var barrier = new Barrier(2);\r
+\r
+            ws.OnMessage += (s, e) => {\r
+                ws.Close();\r
+                JArray jo = JArray.Parse(e.Data);\r
+                result = jo.ToObject<List<string>>();\r
+                messageBus?.Send(new MediaCubeWSMessage(jo));\r
+                barrier.SignalAndWait();\r
+            };\r
+            ws.OnError += (s, e) => {\r
+                ws.Close();\r
+                messageBus?.Send(new MediaCubeWSMessage("Hiba a MediaCube szolgáltatás használata során. Rendszerüzenet: " + e.Message));\r
+            };\r
+\r
+            try {\r
+                ws.Connect();\r
+                JObject data = new JObject();\r
+                data.Add(MediaCubeStrings.ACTION, JToken.FromObject(MediaCubeStrings.QUERYMEDIANAMES));\r
+                data.Add(MediaCubeStrings.QUERY, JToken.FromObject(query));\r
+                data.Add(MediaCubeStrings.VERSION, JToken.FromObject(version));\r
+                ws.Send(data.Serialize());\r
+                barrier.SignalAndWait();\r
+            } catch (Exception e) {\r
+                messageBus?.Send(new MediaCubeWSMessage($"Sikertelen MediaCube folyamatindítás. A rendszer üzenete: {e.Message}"));\r
+            } \r
+            return result;\r
+        }\r
+\r
         public void Close() {\r
             if (ws != null)\r
                 ws.Close();\r
         }\r
-\r
     }\r
 \r
 }\r
index ac471ac3f2daeff1b3ee79867c98966f617c232a..b6558d138de53ff13ee3b6c49f6ce760628f2dd9 100644 (file)
@@ -157,9 +157,13 @@ public class SmtpManager extends AbstractManager {
        private static Map<String, List<LogEvent>> sessionEvents = new ConcurrentHashMap<>();
 
        private static MimeMessage createMimeMessage(final FactoryData data, final Session session, final LogEvent appendEvent) throws MessagingException {
-               return new MimeMessageBuilder(session).setFrom(data.from).setReplyTo(data.replyto).setRecipients(Message.RecipientType.TO, data.to)
-                               .setRecipients(Message.RecipientType.CC, data.cc).setRecipients(Message.RecipientType.BCC, data.bcc)
-                               .setSubject(data.subject.toSerializable(appendEvent)).build();
+               return new MimeMessageBuilder(session).setFrom(data.from)
+                               .setReplyTo(data.replyto)
+                               .setRecipients(Message.RecipientType.TO, data.to)
+                               .setRecipients(Message.RecipientType.CC, data.cc)
+                               .setRecipients(Message.RecipientType.BCC, data.bcc)
+                               .setSubject(data.subject.toSerializable(appendEvent))
+                               .build();
        }
 
        public static SmtpManager getSmtpManager(final Configuration config, final String to, final String cc, final String bcc, final String from,
@@ -414,7 +418,8 @@ public class SmtpManager extends AbstractManager {
 
        private void undoSessionEvents(final MediaCubeMarker mcm) {
                String sessionID = mcm.getSessionID();
-               sessionEvents.remove(sessionID);
+               if (sessionID != null && sessionEvents.containsKey(sessionID))
+                       sessionEvents.remove(sessionID);
        }
 
        protected void writeBuffer(List<LogEvent> events, final Layout<?> layout, final OutputStream out) throws IOException {
index 0f21e2ef812cc0d78bcf6564e824c456f29b3c49..16b412b500a6453b77fa72f593652254755bc892 100644 (file)
@@ -1,15 +1,17 @@
 package user.jobengine.server.steps;\r
 \r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
 import java.nio.file.Paths;\r
 import java.util.Arrays;\r
 import java.util.List;\r
+import java.util.stream.Collectors;\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.MarkerManager;\r
 \r
-import user.commons.MediaCubeMarker;\r
 import user.commons.RemoteFile;\r
 import user.commons.StoreUri;\r
 import user.commons.mediatool.MediaInfo;\r
@@ -24,23 +26,48 @@ public class CancelableStep extends JobStep {
        private static final Logger logger = LogManager.getLogger();\r
        int count = 10;\r
 \r
+       void archiveTest() {\r
+               String fn = null;\r
+               try {\r
+                       List<Path> files = Files.list(Paths.get("/mnt/PROMISE/ARCHIVE")).collect(Collectors.toList());\r
+                       for (Path f : files) {\r
+                               String filename = f.getFileName().toString().toLowerCase();\r
+                               if (filename.endsWith(".mov") || filename.endsWith(".mxf")) {\r
+                                       MediaInfo mi = new MediaInfo(f);\r
+                                       mi.process();\r
+                                       logger.info(MarkerManager.getMarker("MOVTEST"), "{} : hossz {}, audio {}", fn, mi.getFrames(), mi.getAudioStreams());\r
+                               }\r
+                       }\r
+               } catch (Exception e) {\r
+                       logger.info(MarkerManager.getMarker("MOVTEST"), "{} : feldolgozása sikertelen. {}", fn, e.getMessage());\r
+               }\r
+\r
+       }\r
+\r
        @StepEntry\r
        public Object[] execute(int z) throws Exception {\r
                try {\r
+                       archiveTest();\r
                        //                      retrieveTest();\r
                        //                      ftpTest();\r
-                       ((MediaCubeMarker) getJobRuntime().getFinishMarker()).setTo("hering.tamas70@gmail.com");\r
-\r
-                       for (int i = 0; i < count; i++) {\r
-                               if (getJobRuntime().isWaitingCancel())\r
-                                       break;\r
-                               Thread.sleep(100);\r
-                               int progress = (i + 1) * 100 / count;\r
-                               setProgress(progress);\r
-                               logger.info(getSessionMarker(), "Current {}", i);\r
-                       }\r
-\r
-                       logger.info(getSessionMarker(), "Finished");\r
+                       //                      ((MediaCubeMarker) getJobRuntime().getFinishMarker()).setTo("hering.tamas70@gmail.com");\r
+                       //\r
+                       //                      for (int i = 0; i < count; i++) {\r
+                       //                              if (getJobRuntime().isWaitingCancel())\r
+                       //                                      break;\r
+                       //                              Thread.sleep(100);\r
+                       //                              int progress = (i + 1) * 100 / count;\r
+                       //                              setProgress(progress);\r
+                       //                              logger.info(getSessionMarker(), "Current {}", i);\r
+                       //\r
+                       //                              if (i == 1) {\r
+                       //                                      logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
+                       //                                      cancel();\r
+                       //\r
+                       //                              }\r
+                       //                      }\r
+                       //\r
+                       //                      logger.info(getSessionMarker(), "Finished");\r
                } catch (Exception e) {\r
                        e.printStackTrace();\r
                        throw e;\r
@@ -114,5 +141,4 @@ public class CancelableStep extends JobStep {
                }\r
 \r
        }\r
-\r
 }\r
index e478d064b465d2bc1142b8e21f29f0501c0e31fa..fd583a0956bc5facfe2571157cbc1953d20778ff 100644 (file)
@@ -1,4 +1,4 @@
-version=2.6.5.1\r
+version=2.6.5.2\r
 footer=2016-2020 © Copyright User Rendszerház Kft.\r
 \r
 login_info=Információ\r
index fdb4033564adf0e0b38855e6c05f4e76d2b97dfb..3d687d27c09ba6cc347cb3e17b371dc4da27b03f 100644 (file)
@@ -334,8 +334,10 @@ public class JobEngine implements IJobEngine {
                if (!jobRuntime.isService() && jobRuntime.getParentJobId() == 0) {
                        if (JobStatus.FINISHED.equals(jobRuntime.getStatus()))
                                logger.info(jobRuntime.getFinishMarker(), "A '{}' folyamat futása sikeresen véget ért.", jobRuntime.getName());
-                       else
+                       if (JobStatus.SUSPENDED.equals(jobRuntime.getStatus()))
                                logger.error(jobRuntime.getFinishMarker(), "A '{}' folyamat futása megszakadt.", jobRuntime.getName());
+                       if (JobStatus.CANCELED.equals(jobRuntime.getStatus()))
+                               logger.info(jobRuntime.getFinishMarker(), "A '{}' folyamat futása megszakítás miatt véget ért.", jobRuntime.getName());
                }
        }
 
@@ -584,8 +586,8 @@ public class JobEngine implements IJobEngine {
                        for (Job job : runningJobs) {
                                Job runningJob = getJob(job.getId());
                                if (runningJob != null && runningJob.getStatus() != JobStatus.SUSPENDED)
-                                       throw new JobEngineException(
-                                                       String.format("Can not submit job. Job with %s.%s already running", template.getFileName(), template.getName()));
+                                       throw new JobEngineException(String.format("Can not submit job. Job with %s.%s already running", template.getFileName(),
+                                                       template.getName()));
                        }
                }
        }
@@ -849,6 +851,18 @@ public class JobEngine implements IJobEngine {
                runQueue.remove(jobRuntime);
        }
 
+       @Override
+       public void removeGarbage() {
+               List<Long> removeId = new ArrayList<>();
+               for (Long id : submittedJobs.keySet()) {
+                       IJobRuntime runtime = submittedJobs.get(id);
+                       if (runtime != null && (JobStatus.SUSPENDED.equals(runtime.getStatus()) || JobStatus.CANCELED.equals(runtime.getStatus())))
+                               removeId.add(id);
+               }
+               for (Long id : removeId)
+                       submittedJobs.remove(id);
+       }
+
        @Override
        public void removeJob(long id) {
                if (submittedJobs.containsKey(id)) {
@@ -877,18 +891,6 @@ public class JobEngine implements IJobEngine {
 
        }
 
-       @Override
-       public void removeGarbage() {
-               List<Long> removeId = new ArrayList<>();
-               for (Long id : submittedJobs.keySet()) {
-                       IJobRuntime runtime = submittedJobs.get(id);
-                       if (runtime != null && (JobStatus.SUSPENDED.equals(runtime.getStatus()) || JobStatus.CANCELED.equals(runtime.getStatus())))
-                               removeId.add(id);
-               }
-               for (Long id : removeId)
-                       submittedJobs.remove(id);
-       }
-
        @Override
        public ClusteredJob requestJob(String className) throws Exception {
                if (!executors.containsKey(className))
index 7f5e385c611bbe439eefa7f467be540e2c753f83..8f32f175148a9a2d75fec5640bf09600927c84ed 100644 (file)
@@ -130,9 +130,12 @@ public class JobStepExecutor implements IJobStepExecutor {
                        Object[] outputs = step.run(jobEngine, jobRuntime, inputs);
 
                        //TODO itt lekezelni a remote notification-t
-                       if (!jobRuntime.isWaitingCancel()) {
-                               jobEngine.sendMessage(new JobStepCompletedMessage(jobRuntime.getId(), outputs));
-                       }
+
+                       //TODO ha ez van, akkor a WAITING_CANCEL allpotban marad, ha nincs, akkor meg neha visszakerul a run queue-ba
+                       //                      if (!jobRuntime.isWaitingCancel()) {
+                       //                      jobEngine.sendMessage(new JobStepCompletedMessage(jobRuntime.getId(), outputs));
+                       //                      }
+                       jobEngine.sendMessage(new JobStepCompletedMessage(jobRuntime.getId(), outputs));
                }
 
                public void shutdown() {