git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 6 May 2020 13:21:31 +0000 (13:21 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 6 May 2020 13:21:31 +0000 (13:21 +0000)
25 files changed:
client/DxPlay/DxPlayer.cs
client/DxPlay/PlayerForm.cs
client/DxPlay/PlayerGraph.cs
client/DxPlay/Properties/AssemblyInfo.cs
server/-configuration/mediacube.json
server/-configuration/run-mediacube-server-user.launch
server/-configuration/scheduledjobs.json
server/user.jobengine.executors/config/config.xml
server/user.jobengine.executors/jobtemplates/cancelable.xml
server/user.jobengine.executors/jobtemplates/worker-keepalive.xml [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/UpdateGhostMediaData.java
server/user.jobengine.executors/src/user/jobengine/server/steps/WorkerKeepAliveStep.java [new file with mode: 0644]
server/user.jobengine.osgi.server/OSGI-INF/componentBinder.xml
server/user.jobengine.osgi.server/WEB-INF/web.xml
server/user.jobengine.osgi.server/resources/i3-label_hu.properties
server/user.jobengine.osgi.server/src/user/jobengine/server/IJobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/ast/CallJobStepCommand.java
server/user.jobengine.osgi.server/src/user/jobengine/server/ast/Encoder.java
server/user.jobengine.osgi.server/src/user/jobengine/server/ast/JobTemplate.java
server/user.jobengine.osgi.server/src/user/jobengine/server/instructions/CallJobStepInstruction.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/MenuModel.java
server/user.jobengine.osgi.services/WEB-INF/web.xml
server/user.jobengine.osgi.services/src/user/jobengine/osgi/mediacube/ClusterService.java [new file with mode: 0644]
server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/RESTApplications.java

index f447898f7824e38a4468d55fd48ec08b76e3baba..0d949141d2eef770e296b4c5c2b9edeaab840e24 100644 (file)
@@ -130,13 +130,6 @@ namespace DxPlay {
         private void SetupGraph() {\r
             graph = new PlayerGraph(MediaDescription.FileName, playerWindow.Handle);\r
 \r
-            //TODO hogy lesz igy framrate?\r
-            //if (graph.SampleGrabber == null)\r
-            //    return;\r
-\r
-            if (graph.SampleGrabber == null)\r
-                throw new Exception("Audio only file is not supported.");\r
-\r
             AMMediaType media = new AMMediaType();\r
             graph.SampleGrabber.GetConnectedMediaType(media);\r
             logger.Debug("SaveSizeInfo");\r
@@ -166,6 +159,8 @@ namespace DxPlay {
                 Thread.Sleep(10);\r
 \r
                 if (SeekTo > -1) {\r
+                    logger.Info("Seek request");\r
+\r
                     RealSeek(SeekTo);\r
                     Thread.Sleep(100);\r
                     SeekTo = -1;\r
@@ -235,15 +230,25 @@ namespace DxPlay {
             long requestedPosition = (long)Math.Ceiling(value * frameLength);\r
             int hr = graph.MediaSeeking.SetPositions(requestedPosition, AMSeekingSeekingFlags.AbsolutePositioning, null, AMSeekingSeekingFlags.NoPositioning);\r
             DsError.ThrowExceptionForHR(hr);\r
+            //logger.Debug("Done graph.MediaSeeking.SetPositions");\r
+            Thread.Sleep(10);\r
 \r
             long currentPosition;\r
+            //logger.Info("Getting graph.MediaSeeking.GetCurrentPosition");\r
+\r
             hr = graph.MediaSeeking.GetCurrentPosition(out currentPosition);\r
             DsError.ThrowExceptionForHR(hr);\r
+            //logger.Debug("Done graph.MediaSeeking.GetCurrentPosition");\r
+\r
             bool corrected = false;\r
+\r
+            //logger.Debug("Chexking reached frames");\r
             int reachedFrames = (int)Math.Abs((double)currentPosition / avgTimePerFrame);\r
             if (reachedFrames != value) {\r
+                //logger.Debug("Reached frames not matching");\r
                 //NTSC-n nem megy a seek a kerekítési hibák miatt, mindíg ua. a frame jön ki     \r
                 requestedPosition += (int)frameLength / 2;\r
+                //logger.Debug("Iterating graph.MediaSeeking.SetPositions");\r
                 hr = graph.MediaSeeking.SetPositions(requestedPosition, AMSeekingSeekingFlags.AbsolutePositioning, null, AMSeekingSeekingFlags.NoPositioning);\r
                 DsError.ThrowExceptionForHR(hr);\r
                 corrected = true;\r
index 8ef8fd071b32bdcb2456535be09491fcedc7dd7e..fa9be0e01f72eaa026e5175587e8662a2f33f9eb 100644 (file)
@@ -165,7 +165,7 @@ namespace DxPlay {
                     playerControls.EndTC.Text = m_mediaDescription.Duration.ToString();\r
                 }\r
             } catch (Exception ce) {\r
-                MessageBox.Show("Az állomány nem tölthetõ be: " + ce.Message, "Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+                MessageBox.Show("Az állomány nem tölthetõ be. A rendszer üzenete: " + ce.Message, "Open Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
                 CloseForm();\r
             }\r
         }\r
index 3cfa8619b1098878e648b489a7ae22be21cca46e..4c2391a28f6276473a276508ec776885f1afe34a 100644 (file)
@@ -65,6 +65,7 @@ namespace DxPlay {
 \r
             } catch (Exception e) {\r
                 logger.Error(e.Message);\r
+                throw e;\r
             }\r
         }\r
 \r
@@ -151,7 +152,7 @@ namespace DxPlay {
             IBaseFilter videoDecoder = LoadVideoDecoder(graphBuilder);\r
 \r
             if (videoDecoder == null)\r
-                throw new Exception("No video decoder!");\r
+                throw new Exception("Can not load video decoder!");\r
 \r
             logger.Debug("Connect LAVSplitter -> LAVVideo");\r
             FilterGraphTools.ConnectFilters(graphBuilder, splitter, "Video", videoDecoder, "Input", true);\r
@@ -162,7 +163,7 @@ namespace DxPlay {
             logger.Debug("Add LAVSplitter to graph");\r
             IBaseFilter splitter = LoadSplitter(graphBuilder);\r
             if (splitter == null)\r
-                throw new Exception("No splitter!");\r
+                throw new Exception("Can not load splitter!");\r
             logger.Debug("Connect SourceFilter -> LAVSplitter");\r
             FilterGraphTools.ConnectFilters(graphBuilder, sourceFilter, "Output", splitter, "Input", true);\r
             return splitter;\r
index bc238e26125de63465de03360d0c71792a0347b4..067dc019f21d835cfa7d4e1de4abfa7690479d6b 100644 (file)
@@ -26,7 +26,7 @@ using System.Runtime.CompilerServices;
 // You can specify all the values or you can default the Revision and Build Numbers \r
 // by using the '*' as shown below:\r
 \r
-[assembly: AssemblyVersion("2.0.8.9")]\r
+[assembly: AssemblyVersion("2.0.9.0")]\r
 \r
 //\r
 // In order to sign your assembly you must specify a key to use. Refer to the \r
@@ -56,5 +56,5 @@ using System.Runtime.CompilerServices;
 [assembly: AssemblyDelaySign(false)]\r
 [assembly: AssemblyKeyFile("")]\r
 [assembly: AssemblyKeyName("")]\r
-[assembly: AssemblyFileVersion("2.0.8.9")]\r
+[assembly: AssemblyFileVersion("2.0.9.0")]\r
 \r
index 5e36e7f50a5c5604ac3d71d99b3ca054c4db5ebb..eecb410e2239a1fa5031f236aaa5a8508c34fa20 100644 (file)
@@ -74,6 +74,8 @@
                }\r
        ],\r
        "authentication": {\r
+               "defaultUser": "root",\r
+               "defaultPassword": "password", \r
                "authEnabled": true,\r
                "adHost": "intra.mediavivantis.hu",\r
                "adNonSecurePort": 3268,\r
index 670a5937b176da9d5a41ace7cd49730286a079bf..263f1dc8e51c2547f461f2b1ec321b1867f5317b 100644 (file)
@@ -19,7 +19,7 @@
 <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&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-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&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/&#13;&#10;-Djobengine.transcoder.template=MP4&#13;&#10;-Djobengine.transcoder.version=1&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;&#13;&#10;-Djobengine.planair.db.user=MAM&#13;&#10;-Djobengine.planair.db.password=VDani&#13;&#10;-Dnexio.host=192.168.0.12&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=false&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns181026&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders181026&#13;&#10;-Djobengine.octopus.stories.name=stories181026&#13;&#10;-Djobengine.maestro.config=&quot;${workspace_loc}/-configuration/maestro.json&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Dgui.statistics.disable=true&#13;&#10;-Dgui.help.disable=true&#13;&#10;-Dgui.editor.disable=true&#13;&#10;-Djobengine.mediafinder.external=false&#13;&#10;-Djobengine.mediacube.service.proxyroot=&quot;/opt&quot;&#13;&#10;-Djobengine.scheduledexecution.disabled=true&#13;&#10;-Djobengine.randomize.archives=false"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory&#13;&#10;-Dorg.eclipse.epp.logging.aeri.skipReports=true &#13;&#10;-Declipse.ignoreApp=true &#13;&#10;-Dosgi.noShutdown=true&#13;&#10;-Djobengine.jobsteps.root=&quot;${workspace_loc}/user.jobengine.executors/config&quot;&#13;&#10;-Djobengine.jobtemplates.root=&quot;${workspace_loc}/user.jobengine.executors/jobtemplates&quot;&#13;&#10;-Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.db.user=db2admin&#13;&#10;-Djobengine.db.password=password&#13;&#10;-Djobengine.loglevel=INFO&#13;&#10;-Dlog4j.configurationFile=&quot;${workspace_loc}/-configuration/log4j2.xml&quot;&#13;&#10;-Djobengine.jobsteps.alternate.root=&quot;${workspace_loc}/user.jobengine.executors/bin/&quot;&#13;&#10;-Djetty.home=&quot;${workspace_loc:}/-configuration/jetty&quot;&#13;&#10;-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&#13;&#10;-Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty&#13;&#10;-Djava.io.tmpdir=c:\temp\jetty&#13;&#10;-Djobengine.octopus.api.address=http://10.10.1.11/api/v1&#13;&#10;-Djobengine.octopus.api.user=mam&#13;&#10;-Djobengine.octopus.api.password=napocska&#13;&#10;-Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;&#13;&#10;-Djobengine.nosql.db.user=db2admin&#13;&#10;-Djobengine.nosql.db.password=password&#13;&#10;-Djobengine.nosql.db.schema=test&#13;&#10;-Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl&#13;&#10;-Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium&#13;&#10;-Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/&#13;&#10;-Djobengine.transcoder.template=MP4&#13;&#10;-Djobengine.transcoder.version=1&#13;&#10;-Djobengine.jobscheduling.config=&quot;${workspace_loc}/-configuration/scheduledjobs.json&quot;&#13;&#10;-Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB;&#13;&#10;-Djobengine.nexio.db.user=sa&#13;&#10;-Djobengine.nexio.db.password=resolve&#13;&#10;-Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;&#13;&#10;-Djobengine.planair.db.user=MAM&#13;&#10;-Djobengine.planair.db.password=VDani&#13;&#10;-Dnexio.host=192.168.0.12&#13;&#10;-Djobengine.nexio.name=testnexioclips&#13;&#10;-Dnexio.useMOSGateway=false&#13;&#10;-Dnexio.disable=true&#13;&#10;-Djobengine.octopus.rundowns.name=rundowns181026&#13;&#10;-Djobengine.octopus.storyfolders.name=storyfolders181026&#13;&#10;-Djobengine.octopus.stories.name=stories181026&#13;&#10;-Djobengine.maestro.config=&quot;${workspace_loc}/-configuration/maestro.json&quot;&#13;&#10;-Djobengine.mediacube.config=&quot;${workspace_loc}/-configuration/mediacube.json&quot;&#13;&#10;-Dgui.statistics.disable=true&#13;&#10;-Dgui.help.disable=true&#13;&#10;-Dgui.editor.disable=true&#13;&#10;-Djobengine.mediafinder.external=false&#13;&#10;-Djobengine.mediacube.service.proxyroot=&quot;/opt&quot;&#13;&#10;-Djobengine.scheduledexecution.disabled=false&#13;&#10;-Djobengine.randomize.archives=false"/>\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.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.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-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.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@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.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.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,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.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.omnifaces@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
index 62c016ff9d8e109ac43947341f061d4c32dbb550..0f881970d380d84a656c9e8f47b5be3d38dc1d5d 100644 (file)
@@ -1,5 +1,14 @@
 {"joblist":[\r
        {\r
+      "active": true,\r
+      "executeimmediate": false,\r
+      "cronexpression": "0/10 * * * * ? *",\r
+      "template": "worker-keepalive.xml",\r
+      "parameters": [ \r
+       {"name": "masterAddress", "value": "localhost", "type": "java.lang.String"}\r
+      ]\r
+       },      \r
+       {\r
       "template": "cancelable.xml"\r
        },      \r
        {\r
index 039626a1e6e31b38318228b0467cd7c35f9cd2f5..9e925cb0cfdf7d10022299cd021f8d25271fb1b0 100644 (file)
@@ -19,6 +19,7 @@
        <executor className="user.jobengine.server.steps.DuplicateRemoverStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.FakeNoParamsStep" maxConcurrent="20"/>\r
        <executor className="user.jobengine.server.steps.FakeStep" maxConcurrent="20"/>\r
+       <executor className="user.jobengine.server.steps.FileCopyStep" maxConcurrent="10"/>\r
        <executor className="user.jobengine.server.steps.GenerateMorpheusMetadataStep" maxConcurrent="10"/>\r
        <executor className="user.jobengine.server.steps.HSMMigrateStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.ImportMORPHEUSMissingMaterialsStep" maxConcurrent="1"/>\r
@@ -40,5 +41,5 @@
        <executor className="user.jobengine.server.steps.UploadRecordingToNexioStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.MediaToolStep" maxConcurrent="1"/>\r
        <executor className="user.jobengine.server.steps.UpdateGhostMediaData" maxConcurrent="1"/>\r
-       <executor className="user.jobengine.server.steps.FileCopyStep" maxConcurrent="10"/>\r
+       <executor className="user.jobengine.server.steps.WorkerKeepAliveStep" maxConcurrent="1"/>\r
 </executors>
\ No newline at end of file
index 899a3c104a8abba952f85bb5bb3ac0b5becf4bdc..689be15168afc9a48d466b7491b3f8ab5c6b6563 100644 (file)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <jobtemplate multiInstance="true">\r
        <commands>\r
-               <calljobstep id="step1" type="user.jobengine.server.steps.CancelableStep" weight="1" />\r
+               <calljobstep remote="true" id="step1" type="user.jobengine.server.steps.CancelableStep" weight="1">\r
+               </calljobstep>\r
        </commands>\r
 </jobtemplate>
\ No newline at end of file
diff --git a/server/user.jobengine.executors/jobtemplates/worker-keepalive.xml b/server/user.jobengine.executors/jobtemplates/worker-keepalive.xml
new file mode 100644 (file)
index 0000000..c055aaa
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate>\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="masterAddress" type="java.lang.String"/>\r
+               </parameters>\r
+       </declarations>\r
+\r
+       <commands>\r
+               <calljobstep remote="true" id="step1" type="user.jobengine.server.steps.WorkerKeepAliveStep" weight="1" >\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="masterAddress" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index 1507e4c15a9a9a96e9dd0043e251c8c844a47b72..e6bd141437ccbc217dbb2cf1ab23e920ca334cb3 100644 (file)
@@ -6,6 +6,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;\r
 import org.apache.logging.log4j.Marker;\r
 \r
+import user.commons.remotestore.RemoteStoreProtocol;\r
 import user.jobengine.db.IItemManager;\r
 import user.jobengine.db.Media;\r
 import user.jobengine.db.MediaFile;\r
@@ -26,12 +27,16 @@ public class UpdateGhostMediaData extends JobStep {
                //Refresh from db\r
                List<MediaFile> mediaFiles = manager.getMedia(mediaCubeMedia.getId()).getMediaFiles();\r
                if (mediaFiles != null && mediaFiles.size() == 2) {\r
-                       Store highresStore = manager.getSystemStore(false);\r
+                       MediaFile lowres = null;\r
+                       MediaFile highres = null;\r
+\r
+                       for (MediaFile mf : mediaFiles) {\r
+                               if (mf.getStore().getSourceStoreUri(RemoteStoreProtocol.HTTP) != null)\r
+                                       lowres = mf;\r
+                               else\r
+                                       highres = mf;\r
+                       }\r
 \r
-                       //TODO atvezetni a lowres store lekerdezest az alternate-re\r
-                       Store lowresStore = manager.getSystemStore(true);\r
-                       MediaFile lowres = get(lowresStore, mediaFiles);\r
-                       MediaFile highres = get(highresStore, mediaFiles);\r
                        if (highres == null) {\r
                                logger.info(marker, "Nincs highres mediaId: {}", mediaCubeMedia.getId());\r
                                return null;\r
@@ -40,6 +45,7 @@ public class UpdateGhostMediaData extends JobStep {
                                logger.info(marker, "Nincs lowres mediaId: {}", mediaCubeMedia.getId());\r
                                return null;\r
                        }\r
+\r
                        String id = MetadataTypeDetector.truncateExtension(highres.getRelativePath());\r
                        id = MetadataTypeDetector.truncateVersion(id);\r
                        boolean detect = MetadataTypeDetector.GuessMetadataType(id) == MetadataType.OctopusPlaceholder\r
@@ -49,13 +55,18 @@ public class UpdateGhostMediaData extends JobStep {
                                return null;\r
                        }\r
 \r
+                       Store highresStore = manager.getSystemStore(false);\r
+                       final long sourceMediaId = lowres.getId();\r
+                       final long highresMediaFileId = highres.getId();\r
+                       final String highresRealtivePath = highres.getRelativePath();\r
+\r
                        manager.executeQuery("SELECT mediaid FROM mediafile WHERE relativepath=? and storeid=? and id!=?", rs -> {\r
                                long mediaId = rs.getLong(1);\r
                                Media media = manager.getMedia(mediaId);\r
                                if (media.getMediaFilesCount() == 1) {\r
-                                       logger.info(marker, "Hiányzó szellem lowres hozzáadása mediaId: {}", media.getId());\r
+                                       logger.info(marker, "Hiányzó szellem lowres hozzáadása {} alapján", media.getId());\r
 \r
-                                       MediaFile mf = (MediaFile) manager.get(MediaFile.class, lowres.getId());\r
+                                       MediaFile mf = (MediaFile) manager.get(MediaFile.class, sourceMediaId);\r
                                        mf.setMedia(media);\r
                                        mf.setId(0);\r
                                        manager.add(mf);\r
@@ -64,9 +75,9 @@ public class UpdateGhostMediaData extends JobStep {
                                }\r
                                return true;\r
                        }, st -> {\r
-                               st.setString(1, highres.getRelativePath());\r
+                               st.setString(1, highresRealtivePath);\r
                                st.setLong(2, highresStore.getId());\r
-                               st.setLong(3, highres.getId());\r
+                               st.setLong(3, highresMediaFileId);\r
                        });\r
 \r
                }\r
@@ -74,12 +85,4 @@ public class UpdateGhostMediaData extends JobStep {
                return null;\r
        }\r
 \r
-       private MediaFile get(Store store, List<MediaFile> mediaFiles) {\r
-               for (MediaFile mf : mediaFiles) {\r
-                       if (mf.getStoreId() == store.getId())\r
-                               return mf;\r
-               }\r
-               return null;\r
-       }\r
-\r
 }\r
diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/WorkerKeepAliveStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/WorkerKeepAliveStep.java
new file mode 100644 (file)
index 0000000..d181ac3
--- /dev/null
@@ -0,0 +1,40 @@
+package user.jobengine.server.steps;\r
+\r
+import javax.ws.rs.core.Response;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.jboss.resteasy.client.jaxrs.ResteasyClient;\r
+import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;\r
+import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;\r
+\r
+public class WorkerKeepAliveStep extends JobStep {\r
+\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(String masterAddress) throws Exception {\r
+               logger.info("Keep alive response: {}", ping(masterAddress));\r
+               return null;\r
+       }\r
+\r
+       private int ping(String masterAddress) {\r
+               int result = 404;\r
+               ResteasyClient client = new ResteasyClientBuilder().build();\r
+               ResteasyWebTarget target = client.target("http://" + masterAddress + ":8888").path("/services/rest/cluster/keepalive").queryParam("responseRoot",\r
+                               "teszt");\r
+               Response response = null;\r
+               try {\r
+                       response = target.request().get();\r
+                       result = response.getStatus();\r
+               } catch (Exception e) {\r
+                       logger.error(e.getMessage());\r
+               } finally {\r
+                       logger.info("Keep alive response: {}", response.getStatus());\r
+                       if (response != null)\r
+                               response.close();\r
+               }\r
+               return result;\r
+       }\r
+\r
+}\r
index 6c60ba5ad87d7d5d86c0d48701f0dca5d272d1cd..a8f596c940098ed66f954019c099185ab4b91f45 100644 (file)
@@ -3,5 +3,4 @@
    <implementation class="user.jobengine.osgi.server.ComponentBinder"/>\r
    <reference cardinality="1..1" interface="user.commons.nexio.INexioAPI" name="INexioAPI" policy="static" bind="bindNexioService" unbind="unbindNexioService"/>\r
    <reference bind="bindMetadataProviderFactory" cardinality="0..1" interface="user.mediacube.metadata.interfaces.IMetadataProviderFactory" policy="static"/>\r
-\r
 </scr:component>\r
index 177b6de933f588106e1b3013e404afffb00f6baf..6caf8c811681401c5f16dbcd9b21c7a3dfcfd0d0 100644 (file)
@@ -70,7 +70,6 @@
                <welcome-file>index.zhtml</welcome-file>\r
        </welcome-file-list>\r
 <!-- Enable http to https redirect \r
--->    \r
        <security-constraint>\r
                <web-resource-collection>\r
                        <web-resource-name>Everything on the app</web-resource-name>\r
@@ -80,4 +79,5 @@
                        <transport-guarantee>CONFIDENTIAL</transport-guarantee>\r
                </user-data-constraint>\r
        </security-constraint>\r
+-->    \r
 </web-app>\r
index 1365bff0789c1c508a430deb2a0137df1b1e54da..eb54b61de8e0fb7940450d0dd3276b5428ef3d54 100644 (file)
@@ -1,4 +1,4 @@
-version=2.5.1\r
+version=2.5.2\r
 footer=2016-2020 © Copyright User Rendszerház Kft.\r
 \r
 login_info=Információ\r
index 1fd6bea71dd950752c3685ae4ba5d6487873aab3..b9dd419da55715c8e8625c675ef1e5731bf67923 100644 (file)
@@ -71,6 +71,8 @@ public interface IJobEngine {
 
        boolean isScheduledExecutionDisabled();
 
+       void keepAliveWorker(String remoteAddr);
+
        void loadExecutors();
 
        void loadProgram(String fileName) throws Exception;
index dafd1f8d741954d64eac40b68157670462d5ca2f..412d83429af5ec412869098ff5c8b514ea7751a7 100644 (file)
@@ -5,6 +5,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.sql.Timestamp;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -178,6 +179,7 @@ public class JobEngine implements IJobEngine {
        private SchedulerService schedulerService = null;
 
        private List<IJobChangedListener> jobChangedListenerList = new CopyOnWriteArrayList<>();
+       private Map<String, LocalDate> remoteWorkers;
 
        /**
         * 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.
@@ -201,6 +203,8 @@ public class JobEngine implements IJobEngine {
                if (instance != null)
                        throw new RuntimeException("Multiple JobEngine instances are not supported!");
                instance = this;
+
+               remoteWorkers = new ConcurrentHashMap<>();
                //logger.info("JobEngine created");
        }
 
@@ -241,18 +245,6 @@ public class JobEngine implements IJobEngine {
                        logger.catching(e);
                        suspendWaitExecutorJob(e, jobRuntime);
                }
-               //              logger.info("addToExecutorQueue: " + typeName);
-               //              if (typeName != null && String.class.equals(typeName.getClass())) {
-               //                      for (IJobStepExecutor executor : executors.values()) {
-               //                              Class<? extends IJobStep> clazz = executor.getStepClass();
-               //                              if (clazz != null && clazz.getName().equals(typeName)) {
-               //                                      executor.submit(jobRuntime);
-               //                                      break;
-               //                              }
-               //                      }
-               //              } else {
-               //                      logger.error("Executor type name is not correcty defined.");
-               //              }
        }
 
        @Override
@@ -503,6 +495,11 @@ public class JobEngine implements IJobEngine {
                statusMachine.processAction(JobAction.FINISH, jobRuntime);
        }
 
+       @Override
+       public void keepAliveWorker(String remoteAddr) {
+               remoteWorkers.put(remoteAddr, LocalDate.now());
+       }
+
        @Override
        public void loadExecutors() {
                // TODO
index ed88ad501b5a75dfd4f200925138e148790a8fe5..76908a52f2639ccc7c3c7b74d537593aaa79c1a3 100644 (file)
@@ -6,6 +6,7 @@ public class CallJobStepCommand extends Command {
        private ParameterSequence outputParameterSequence = null;\r
        private CommandSequence commandSequence = null;\r
        private String type = null;\r
+       private boolean isRemote;\r
 \r
        public CallJobStepCommand() {\r
        }\r
@@ -36,6 +37,10 @@ public class CallJobStepCommand extends Command {
                return weight;\r
        }\r
 \r
+       public boolean isRemote() {\r
+               return isRemote;\r
+       }\r
+\r
        public void setCommandSequence(CommandSequence commandSequence) {\r
                this.commandSequence = commandSequence;\r
        }\r
@@ -48,6 +53,10 @@ public class CallJobStepCommand extends Command {
                this.outputParameterSequence = outputParameterSequence;\r
        }\r
 \r
+       public void setRemote(boolean isRemote) {\r
+               this.isRemote = isRemote;\r
+       }\r
+\r
        public void setType(String type) {\r
                this.type = type;\r
        }\r
index f09a0bbca29aa020c2ab62e5440877aae4005d7d..2845bb77e2c5549e6da2088792b0420884104601 100644 (file)
@@ -46,7 +46,7 @@ public class Encoder implements Visitor {
                }\r
 \r
                p.addInstruction(new PushToStackInstruction(command.getType()));\r
-               p.addInstruction(new CallJobStepInstruction(command.getWeight()));\r
+               p.addInstruction(new CallJobStepInstruction(command.getWeight(), command.isRemote()));\r
 \r
                if (outputs != null) {\r
                        for (@SuppressWarnings("unused")\r
index 885f2f6733583d39a2cada94a28d767959e23107..d1f85504377cc2d0b6bf2681166ddd9d1eba3f74 100644 (file)
@@ -82,6 +82,7 @@ public class JobTemplate extends AST {
                this.service = service;\r
        }\r
 \r
+       //TODO foreach ellenorzes\r
        public List<String> validate() throws Exception {\r
                Map<String, String> parameters = new HashMap<>();\r
                Map<String, String> variables = new HashMap<>();\r
index 1b974a3f22281861de44ac707c25f851945eaa8b..f08b1acc2ea30a1b85645712a1c2eb6b855df952 100644 (file)
@@ -4,11 +4,13 @@ import user.jobengine.server.IJobEngine;
 import user.jobengine.server.IJobRuntime;
 
 public class CallJobStepInstruction extends Instruction {
+       private boolean isRemote;
 
        public CallJobStepInstruction() {
        }
 
-       public CallJobStepInstruction(int weight) {
+       public CallJobStepInstruction(int weight, boolean isRemote) {
+               this.isRemote = isRemote;
                setWeight(weight);
        }
 
@@ -17,4 +19,12 @@ public class CallJobStepInstruction extends Instruction {
                super.execute(jobEngine, jobRuntime);
                jobEngine.executeCallJobStepInstruction(jobRuntime);
        }
+
+       public boolean isRemote() {
+               return isRemote;
+       }
+
+       public void setRemote(boolean isRemote) {
+               this.isRemote = isRemote;
+       }
 }
index 5f3f2457709bc676c86125af7c14a019875f1602..38960e87e3f16420590c92e202e939ae5d6cf09e 100644 (file)
@@ -66,7 +66,8 @@ public class MenuModel extends BaseModel {
 \r
        public boolean isMaestroAvailable() {\r
                return ComponentBinder.getMetadataProviderFactory() != null\r
-                               && ComponentBinder.getMetadataProviderFactory().getProvider(MetadataProviderType.PLANAIR) != null;\r
+                               && ComponentBinder.getMetadataProviderFactory().getProvider(MetadataProviderType.PLANAIR) != null\r
+                               && System.getProperty("jobengine.maestro.config", "").length() > 0;\r
 \r
        }\r
 \r
index 629b2ac1303a992ee9f769ca28722afcaf361f21..fac36c853a04b4590354222a46772443d4557d55 100644 (file)
@@ -62,7 +62,6 @@
        </servlet-mapping>\r
 \r
 <!-- \r
- -->\r
        <security-constraint>\r
                <web-resource-collection>\r
                        <web-resource-name>Everything on the app</web-resource-name>\r
@@ -72,5 +71,6 @@
                        <transport-guarantee>CONFIDENTIAL</transport-guarantee>\r
                </user-data-constraint>\r
        </security-constraint>\r
+ -->\r
 \r
 </web-app>\r
diff --git a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/mediacube/ClusterService.java b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/mediacube/ClusterService.java
new file mode 100644 (file)
index 0000000..3eb430b
--- /dev/null
@@ -0,0 +1,42 @@
+package user.jobengine.osgi.mediacube;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.ws.rs.GET;\r
+import javax.ws.rs.Path;\r
+import javax.ws.rs.QueryParam;\r
+import javax.ws.rs.core.Context;\r
+import javax.ws.rs.core.Response;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.jobengine.db.IItemManager;\r
+import user.jobengine.osgi.rest.ComponentBinder;\r
+import user.jobengine.server.IJobEngine;\r
+\r
+@Path("/cluster")\r
+public class ClusterService {\r
+\r
+       private static final Logger logger = LogManager.getLogger();\r
+       private IItemManager itemManager = ComponentBinder.getItemManager();\r
+       private IJobEngine jobEngine = ComponentBinder.getJobengine();\r
+\r
+       public ClusterService() {\r
+               logger.info("Created");\r
+       }\r
+\r
+       @GET\r
+       @Path("/keepalive")\r
+       public Response keepAlive(@Context HttpServletRequest request, @QueryParam("responseRoot") String responseRoot) {\r
+               Response result = null;\r
+               try {\r
+                       logger.info("Keepalive {}, {}, {}", request.getRemoteAddr(), request.getRemoteHost(), request.getRemotePort());\r
+\r
+                       jobEngine.keepAliveWorker(request.getRemoteAddr());\r
+                       result = Response.ok().build();\r
+               } catch (Exception e) {\r
+                       result = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();\r
+               }\r
+               return result;\r
+       }\r
+}\r
index 8ec8060ae4864481751f7f7099ec9b7c25c5d75e..dcaf16e666ef6449ee2982452bdf682d2971c69f 100644 (file)
@@ -9,6 +9,7 @@ import javax.ws.rs.core.Application;
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
 \r
+import user.jobengine.osgi.mediacube.ClusterService;\r
 import user.jobengine.osgi.mediacube.MediaCubeService;\r
 import user.jobengine.osgi.rest.octopus.OctopusRESTService;\r
 \r
@@ -24,6 +25,7 @@ public class RESTApplications extends Application {
 \r
        @Override\r
        public Set<Class<?>> getClasses() {\r
-               return new HashSet<>(Arrays.asList(OctopusRESTService.class, MediaCubeService.class, JacksonJsonProvider.class, TextMessageBodyReaderWriter.class));\r
+               return new HashSet<>(Arrays.asList(OctopusRESTService.class, MediaCubeService.class, ClusterService.class, JacksonJsonProvider.class,\r
+                               TextMessageBodyReaderWriter.class));\r
        }\r
 }\r