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
}\r
\r
private void RestoreMedia_FormClosing(object sender, FormClosingEventArgs e) {\r
- if (api != null)\r
- api.Close();\r
}\r
}\r
}\r
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
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
Finished = true;\r
}\r
\r
- public MediaCubeWSMessage(JObject data) : base(null) {\r
+ public MediaCubeWSMessage(JContainer data) : base(null) {\r
Data = data;\r
}\r
\r
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
}\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
}\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
\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
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
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,
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 {
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
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
}\r
\r
}\r
-\r
}\r
-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
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());
}
}
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()));
}
}
}
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)) {
}
- @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))
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() {