git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31350
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=10.10.1.55 -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns -Djobengine.octopus.storyfolders.name=storyfolders -Djobengine.octopus.stories.name=stories -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=192.168.10.101 -Djobengine.nexio.name=testnexioclips -Dnexio.disable=false -Djobengine.octopus.rundowns.name=rundowns -Djobengine.octopus.storyfolders.name=storyfolders -Djobengine.octopus.stories.name=stories -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
<booleanAttribute key="show_selected_only" value="false"/>\r
<stringAttribute key="target_bundles" value="cglib@default:default,com.auth0.java-jwt@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.google.guava@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,com.sun.el.javax.el@default:default,commons-logging@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.inject@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.servlet.jsp-api@default:default,javax.validation.api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.jasper.glassfish@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jsp@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate multiInstance="true">\r
+<jobtemplate multiInstance="true" name="Fake">\r
<declarations>\r
<parameters>\r
<parameter name="itemID" type="java.lang.Long"/>\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
-import user.commons.MediaCubeMarker;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
Object[] result = { itemID + 1 };\r
\r
- ((MediaCubeMarker) jobRuntime.getMarker()).setTo("vasary@elgekko.net");\r
+ //((MediaCubeMarker) jobRuntime.getMarker()).setTo("vasary@elgekko.net");\r
\r
//logger.info(jobRuntime.getMarker(), "<a href='UNC://\\10.10.1.100\\BRAAVOS\\ARCHIVE' target='blank'>usefullink</a>");\r
logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
\r
// if (i == 2)\r
// throw new Exception("TESZT");\r
- //logger.info("Progress {}", jobRuntime.getProgress());\r
+ logger.info("Progress {}", jobRuntime.getProgress());\r
}\r
} catch (Exception e) {\r
logger.error(jobRuntime.getMarker(), e.getMessage());\r
}\r
}\r
} catch (Exception e) {\r
- logger.catching(e);\r
+ //logger.catching(e);\r
+ logger.error(e.getMessage());\r
forceRestart();\r
}\r
}\r
import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;
private SchedulerService schedulerService = null;
- private ArrayList<IJobChangedListener> jobChangedListenerList = new ArrayList<IJobChangedListener>();
+ private List<IJobChangedListener> jobChangedListenerList = new CopyOnWriteArrayList<>();
/**
* A MAM motor példányosítása. Ennek során létrejönnek a várakozási sorok, az ütemező szál, az üzenet kezelő szál.
result = new JobRuntime(this, program);
result.setPersister(itemManager);
result.setTemplate(template);
- result.setName(name);
+ result.setName(name == null ? program.getTemplate().getName() : name);
result.setParameters(parameters);
result.setService(program.getTemplate().isService());
submit(result);
\r
@Command\r
public void restartNexio() {\r
+ INexioAPI nexioAPI = ComponentBinder.getNexioAPI();\r
+ NexioDispatcher dispatcher = nexioAPI.getDispatcher();\r
+ if (dispatcher.isRestartInProgress()) {\r
+ Messagebox.show("A NEXIO szinkronizálás újraindítása folyamatban van.");\r
+ return;\r
+ }\r
+\r
EventListener<Event> confirmedEvent = evt -> {\r
if (evt.getName().equals("onCancel"))\r
return;\r
try {\r
- INexioAPI nexioAPI = ComponentBinder.getNexioAPI();\r
- NexioDispatcher dispatcher = nexioAPI.getDispatcher();\r
dispatcher.restart();\r
} catch (Exception e) {\r
Messagebox.show(e.getMessage());\r
user.jobengine.server
Export-Package: user.jobengine.osgi.rest,
user.jobengine.osgi.rest.octopus,
+ user.jobengine.osgi.ws.mediacube,
user.jobengine.osgi.ws.nexio
Require-Bundle: org.jboss.resteasy.jaxrs;bundle-version="3.0.11"
<url-pattern>/nexio/*</url-pattern>\r
</servlet-mapping>\r
\r
+ <servlet>\r
+ <servlet-name>WS-MEDIACUBEAPI</servlet-name>\r
+ <servlet-class>user.jobengine.osgi.ws.mediacube.MediaCubeAPIWSServlet</servlet-class>\r
+ <load-on-startup>1</load-on-startup>\r
+ </servlet>\r
+ <servlet-mapping>\r
+ <servlet-name>WS-MEDIACUBEAPI</servlet-name>\r
+ <url-pattern>/wsapi/*</url-pattern>\r
+ </servlet-mapping>\r
+\r
<!-- <security-constraint> -->\r
<!-- <web-resource-collection> -->\r
<!-- <web-resource-name>Everything</web-resource-name> -->\r
--- /dev/null
+package user.jobengine.osgi.ws.mediacube;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
+import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
+
+@SuppressWarnings("serial")
+public class MediaCubeAPIWSServlet extends WebSocketServlet {
+ private static final Logger logger = LogManager.getLogger();
+
+ public MediaCubeAPIWSServlet() {
+ logger.info("Created");
+ }
+
+ @Override
+ public void configure(WebSocketServletFactory factory) {
+ factory.register(MediaCubeAPIWSSocket.class);
+ }
+}
--- /dev/null
+package user.jobengine.osgi.ws.mediacube;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.eclipse.jetty.websocket.api.Session;
+import org.eclipse.jetty.websocket.api.WebSocketAdapter;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ibm.nosql.json.JSONUtil;
+import com.ibm.nosql.json.api.BasicDBObject;
+
+import user.commons.JobStatus;
+import user.jobengine.db.ItemManagerData.SignalType;
+import user.jobengine.osgi.rest.ComponentBinder;
+import user.jobengine.osgi.rest.ServiceObjectMapper;
+import user.jobengine.server.IJobChangedListener;
+import user.jobengine.server.IJobEngine;
+import user.jobengine.server.IJobRuntime;
+
+public class MediaCubeAPIWSSocket extends WebSocketAdapter {
+ private static final Logger logger = LogManager.getLogger();
+ public static final String DATA = "data";
+ public static final String LIST = "list";
+ public static final String STARTJOB = "startjob";
+ public static final String ACTION = "action";
+ public static final String ERROR = "error";
+ private static final String NO_ACTION_SPECIFIED = "Missing action type.";
+ private static final String TEMPLATE = "template";
+ private static final String PARAMETERS = "parameters";
+ private static final String NO_TEMPLATE_SPECIFIED = "Missing template name.";
+ private static final String NO_PARAMETERS_SPECIFIED = "Missing job parameters.";
+ private static ObjectMapper mapper;
+ private static Map<Long, IJobChangedListener> jobChangedListeners = new ConcurrentHashMap<>();
+
+ public MediaCubeAPIWSSocket() {
+ mapper = ServiceObjectMapper.createMapper();
+ logger.info("EventSocket created");
+ }
+
+ public void asyncSendResponse(Object response) {
+ try {
+ String data = mapper.writeValueAsString(response);
+ logger.info("Sending " + data);
+ Session session = getSession();
+ if (session != null)
+ session.getRemote().sendStringByFuture(data);
+ } catch (Exception e) {
+ logger.catching(e);
+ }
+ }
+
+ @Override
+ public void onWebSocketClose(int statusCode, String reason) {
+ super.onWebSocketClose(statusCode, reason);
+ logger.info("Socket Closed: [{}]", reason);
+ }
+
+ @Override
+ public void onWebSocketConnect(Session sess) {
+ super.onWebSocketConnect(sess);
+ logger.info("Socket Connected: " + sess);
+ }
+
+ @Override
+ public void onWebSocketError(Throwable cause) {
+ super.onWebSocketError(cause);
+ logger.info("Error: [{}]", String.valueOf(cause.getMessage()));
+ }
+
+ @Override
+ public void onWebSocketText(String message) {
+ super.onWebSocketText(message);
+ try {
+
+ BasicDBObject data = (BasicDBObject) JSONUtil.jsonToDbObject(message);
+ if (!data.containsKey(ACTION))
+ throw new Exception(NO_ACTION_SPECIFIED);
+ String action = data.getString(ACTION);
+ switch (action) {
+ case STARTJOB:
+ startJob(data, getSession());
+ break;
+ default:
+ throw new Exception("Unhandled action : " + action);
+ }
+ } catch (Exception e) {
+ logger.catching(e);
+ asyncSendResponse(new BasicDBObject(ERROR, e.getMessage()));
+ }
+ }
+
+ private void removeJobChangedEventListener(long id) {
+ IJobChangedListener jobChangedListener = jobChangedListeners.remove(id);
+ if (jobChangedListener == null)
+ return;
+ logger.info("Removing job {}", id);
+ IJobEngine jobengine = ComponentBinder.getJobengine();
+ jobengine.removeJobChangedEventListener(jobChangedListener);
+ Session session = getSession();
+ if (session != null)
+ session.close();
+ }
+
+ private void startJob(BasicDBObject data, Session session) throws Exception {
+ if (!data.containsKey(TEMPLATE))
+ throw new Exception(NO_TEMPLATE_SPECIFIED);
+ String template = data.getString(TEMPLATE);
+ if (!data.containsKey(PARAMETERS))
+ throw new Exception(NO_PARAMETERS_SPECIFIED);
+ BasicDBObject parameters = (BasicDBObject) data.get(PARAMETERS);
+ IJobEngine jobengine = ComponentBinder.getJobengine();
+ IJobRuntime runtime = jobengine.submit(template, null, parameters);
+ IJobChangedListener jobChangedListener = event -> {
+ try {
+ IJobRuntime job = event.getJob();
+ if (job.getId() != runtime.getId())
+ return;
+ BasicDBObject response = new BasicDBObject("jobID", job.getId()).append("status", job.getStatus()).append("signal", event.getSignalType())
+ .append("progress", job.getProgress());
+ asyncSendResponse(response);
+ if (SignalType.DELETE.equals(event.getSignalType()) || JobStatus.SUSPENDED.equals(job.getStatus())) {
+ removeJobChangedEventListener(runtime.getId());
+ }
+ } catch (Exception e) {
+ removeJobChangedEventListener(runtime.getId());
+ logger.catching(e);
+ }
+ };
+ jobengine.addJobChangedEventListener(jobChangedListener);
+ jobChangedListeners.put(runtime.getId(), jobChangedListener);
+ }
+}
package user.jobengine.osgi.ws.nexio;
+import java.io.IOException;
import java.util.List;
import org.apache.logging.log4j.LogManager;
public static final String DATA = "data";
public static final String LIST = "list";
public static final String ACTION = "action";
- private static final String NO_ACTION_SPECIFIED = "No action specified";
+ public static final String ERROR = "error";
+ private static final String NO_ACTION_SPECIFIED = "Missing action type.";
private static ObjectMapper mapper;
+ public static void asyncSendResponse(Session session, Object response) throws JsonProcessingException {
+ String data = mapper.writeValueAsString(response);
+ session.getRemote().sendStringByFuture(data);
+ }
+
public NexioWSSocket() {
mapper = ServiceObjectMapper.createMapper();
logger.info("EventSocket created");
}
+ private void listNexio(BasicDBObject response) throws Exception {
+ INexioAPI nexioAPI = ComponentBinder.getNexioAPI();
+ if (nexioAPI == null)
+ throw new Exception("Nexio service is unreachable");
+ List<DBObject> clips = nexioAPI.getItems(null, true);
+ response.append(DATA, clips);
+ }
+
+ @Override
+ public void onWebSocketClose(int statusCode, String reason) {
+ super.onWebSocketClose(statusCode, reason);
+ //NexioAPIServlet.getInstance().removeSession(getSession());
+ logger.info("Socket Closed: [{}]", reason);
+ }
+
@Override
public void onWebSocketConnect(Session sess) {
super.onWebSocketConnect(sess);
logger.info("Socket Connected: " + sess);
}
+ @Override
+ public void onWebSocketError(Throwable cause) {
+ super.onWebSocketError(cause);
+ logger.info("Error: [{}]", String.valueOf(cause.getMessage()));
+ }
+
@Override
public void onWebSocketText(String message) {
super.onWebSocketText(message);
//logger.info("Received: " + message);
try {
- INexioAPI nexioAPI = ComponentBinder.getNexioAPI();
- if (nexioAPI == null)
- throw new Exception("Nexio service is unreachable");
BasicDBObject data = (BasicDBObject) JSONUtil.jsonToDbObject(message);
- if (!data.containsKey(ACTION)) {
- getSession().getRemote().sendString(new BasicDBObject("error", NO_ACTION_SPECIFIED).toString());
+ if (!data.containsKey(ACTION))
throw new Exception(NO_ACTION_SPECIFIED);
- }
-
- //TODO check action etc.
String action = data.getString(ACTION);
BasicDBObject response = new BasicDBObject(ACTION, action);
switch (action) {
case LIST:
- List<DBObject> clips = nexioAPI.getItems(null, true);
- response.append(DATA, clips);
- asyncSendResponse(getSession(), response);
+ listNexio(response);
break;
+ default:
+ throw new Exception("Unhandled action : " + action);
+
}
+ asyncSendResponse(getSession(), response);
} catch (Exception e) {
- logger.error(e);
+ logger.catching(e);
+ try {
+ getSession().getRemote().sendString(new BasicDBObject(ERROR, e.getMessage()).toString());
+ } catch (IOException e1) {
+ }
}
}
-
- public static void asyncSendResponse(Session session, Object response) throws JsonProcessingException {
- String data = mapper.writeValueAsString(response);
- session.getRemote().sendStringByFuture(data);
- }
-
- @Override
- public void onWebSocketClose(int statusCode, String reason) {
- super.onWebSocketClose(statusCode, reason);
- //NexioAPIServlet.getInstance().removeSession(getSession());
- logger.info("Socket Closed: [{}]", reason);
- }
-
- @Override
- public void onWebSocketError(Throwable cause) {
- super.onWebSocketError(cause);
- logger.info("Error: [{}]", String.valueOf(cause.getMessage()));
- }
}