+++ /dev/null
-{\r
- "title": "Grafikai feltöltő",\r
- "active": true,\r
- "startInTray": false,\r
- "enableCustomMetadataId": true,\r
- "player": {\r
- "enabled": true,\r
- "autoStart": false,\r
- "segmentEditor": false\r
- },\r
- "source": {\r
- "$type": "UNCSource",\r
- "filter": "png,tga,mov,mxf",\r
- "local": {\r
- "address": "file://C:/x/",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- }\r
- },\r
- "metadatas": [\r
- {\r
- "$type": "OctopusMetadata",\r
- "server": {\r
- "address": "http://10.10.1.27/services/rest/octopus/",\r
- "timeout": 1000\r
- }\r
- },\r
- {\r
- "$type": "TrafficMetadata",\r
- "server": {\r
- "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
- "userName": "MAM",\r
- "password": "7RKZYBzumKjL40SJwuwiFCvX57xuCN8zay6OttUm2wbrgImyYZBHyZTUUYrXX31Ge2Uwew07HYsqh2uzdJeDBDwcVntxaHg3nIpv9Dyq/odVoiC4tUF/K+lgvKWANcrZ",\r
- "timeout": 1000\r
- }\r
- },\r
- {\r
- "$type": "MediaCubeMetadata",\r
- "metadataTitleFormat": "%SOURCENAME%",\r
- "metadataIDFormat": "%SOURCESTARTID%",\r
- "server": {\r
- "address": "http://10.10.1.27/services/rest/jobengine/",\r
- "timeout": 1000\r
- }\r
- }\r
- ],\r
- "targets": [\r
- {\r
- "label": "Octopus mappába küldés",\r
- "processor": "FTPTargetProcessor",\r
- "outputFormat": "%SOURCENAME%",\r
- "tag": "Betöltés",\r
- "subFolderFormat": "%IDROOT%-%TEXT%/GRAFIKA-%TIMESTAMP%",\r
- "killDateDays": 15,\r
- "saveArchiveMetadata": false,\r
- "remote": {\r
- "address": "ftp://10.10.1.100/OCTOPUS",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- }\r
- },\r
- {\r
- "label": "Traffic mappába küldés",\r
- "processor": "FTPTargetProcessor",\r
- "outputFormat": "%SOURCENAME%",\r
- "tag": "Betöltés",\r
- "subFolderFormat": "%IDROOT%-%TEXT%/GRAFIKA-%TIMESTAMP%",\r
- "killDateDays": 30,\r
- "saveArchiveMetadata": false,\r
- "remote": {\r
- "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- }\r
- }\r
- ]\r
-}\r
<None Include="Configuration\-configuration-transcoder.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
- <None Include="Configuration\configuration-grafika1.json">\r
- <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
- </None>\r
<None Include="Configuration\configuration-grafika.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
force |= target.SaveArchiveMetadata || target.SaveMorpheusMetadata || target.NexioServer;\r
if (force && (ArchiveMetadata == null || !ArchiveMetadata.IsFilled)) {\r
ArchiveMetadata = GetArchiveMetadata();\r
+ SelectedMetadata.MetadataText = ArchiveMetadata.itemTitle;\r
UpdateEditArchiveMetadataStatus();\r
if (ArchiveMetadata == null) {\r
MessageBox.Show(String.Format("A {0} folyamat nem futtatható kísérő adatok nélkül.", target.Label));\r
// You can specify all the values or you can default the Build and Revision Numbers\r
// by using the '*' as shown below:\r
// [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("2.0.7.4")]\r
-[assembly: AssemblyFileVersion("2.0.7.4")]\r
+[assembly: AssemblyVersion("2.0.7.5")]\r
+[assembly: AssemblyFileVersion("2.0.7.5")]\r
<launcherArgs>\r
<programArgs>-consoleLog -console 5555\r
</programArgs>\r
- <vmArgs>-Xms512m\r
--Xmx1024m\r
--Dfile.encoding=UTF-8\r
--agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888\r
--Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory\r
-\r
-#System\r
--Djetty.home=/opt/mediacube/configuration/jetty\r
--Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml\r
--Djobengine.jobsteps.root=/opt/mediacube/configuration/executors\r
--Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates\r
--Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json\r
--Dmediacube.auth.location=/opt/mediacube/configuration/mediacube-auth.properties\r
-\r
--Dorg.eclipse.epp.logging.aeri.skipReports=true \r
--Declipse.ignoreApp=true \r
--Dosgi.noShutdown=true\r
--Djobengine.loglevel=INFO\r
--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\r
+ <vmArgs>-Xms512m
+-Xmx1024m
+-Dfile.encoding=UTF-8
+-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888
+-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory
+
+#System
+-Djetty.home=/opt/mediacube/configuration/jetty
+-Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml
+-Djobengine.jobsteps.root=/opt/mediacube/configuration/executors
+-Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates
+-Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json
+-Dmediacube.auth.location=/opt/mediacube/configuration/mediacube-auth.properties
+
+-Dorg.eclipse.epp.logging.aeri.skipReports=true
+-Declipse.ignoreApp=true
+-Dosgi.noShutdown=true
+-Djobengine.loglevel=INFO
+-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
-Djava.io.tmpdir=/opt/mediacube/tmp\r
</vmArgs>\r
<vmArgsLin>#Database
<plugin id="org.objectweb.asm"/>\r
<plugin id="org.objectweb.asm.commons"/>\r
<plugin id="org.objectweb.asm.tree"/>\r
- <plugin id="org.reflections"/>\r
<plugin id="slf4j.api"/>\r
<plugin id="slf4j.simple" fragment="true"/>\r
<plugin id="user.commons.log4j2" fragment="true"/>\r
<include>log4j2.xml</include>\r
</includes>\r
</resource>\r
+ <resource>\r
+ <directory>${basedir}/../-configuration</directory>\r
+ <includes>\r
+ <include>mediacube-auth.properties</include>\r
+ </includes>\r
+ </resource>\r
</resources>\r
</configuration>\r
</execution>\r
<includes>\r
<include>start-mediacube.sh</include>\r
<include>stop-mediacube.sh</include>\r
- <include>mediacube-auth.properties</include>\r
</includes>\r
</resource>\r
</resources>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate name="MORPHEUS 'missing materials' importálása">\r
+ <commands>\r
+ <calljobstep type="user.jobengine.server.steps.ImportStatisticsStep" weight="1">\r
+ </calljobstep>\r
+ </commands>\r
+</jobtemplate>
\ No newline at end of file
\r
public class TranscodeStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
+ private static final String RCC_HOST = "jobengine.rcc.host";\r
+ private static final String RCC_LOWRES_PROFILE = "jobengine.rcc.defaultlowresprofile";\r
\r
@StepEntry\r
- public Object[] execute(RemoteFile file, String transcoderProfile, IJobEngine jobEngine, IJobRuntime jobRuntime)\r
- throws Exception {\r
+ public Object[] execute(RemoteFile file, String transcoderProfile, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
if (file == null)\r
throw new JobEngineException("RemoteFile is null");\r
\r
- String transcoderHost = System.getProperty(IJobEngine.RCC_HOST);\r
+ String transcoderHost = System.getProperty(RCC_HOST);\r
RCCClient client = new RCCClient(transcoderHost);\r
String guid = client.getProfileId(transcoderProfile);\r
if (guid == null) {\r
logger.info("Transcoder profile not exists: " + transcoderProfile + ", using default");\r
- String profile = System.getProperty(IJobEngine.RCC_LOWRES_PROFILE);\r
+ String profile = System.getProperty(RCC_LOWRES_PROFILE);\r
logger.info("Profile : " + profile);\r
profile = StringUtils.strip(profile, "\"");\r
if (profile == null)\r
- throw new JobEngineException(\r
- "System default lowres profile is not configured (missing argument jobengine.rcc.defaultlowresprofile)");\r
+ throw new JobEngineException("System default lowres profile is not configured (missing argument jobengine.rcc.defaultlowresprofile)");\r
guid = client.getProfileId(profile);\r
if (guid == null)\r
throw new JobEngineException("Default profile not exists on remote host: " + "\"" + profile + "\"");\r
lores.setRelativePath(name);\r
mediaFiles.add(lores);\r
} else {\r
- String message = String.format("Job status is %s. Error details: %s", job.getStatus(),\r
- job.getErrorMessage());\r
+ String message = String.format("Job status is %s. Error details: %s", job.getStatus(), job.getErrorMessage());\r
throw new JobEngineException(message);\r
}\r
break;\r
import java.net.URI;\r
import java.text.ParseException;\r
import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
import java.util.Calendar;\r
import java.util.Date;\r
import java.util.List;\r
\r
private void copyFile(FileArchive fileArchive, RundownArchive rundownArchive, StoryArchive storyArchive) throws Exception {\r
String origFileName = fileArchive.getFileName();\r
- String videoFileName = origFileName + MXFEXT;\r
-\r
- transferFile(videoFileName, videoFileName);\r
+ String videoFileName = transferFile(origFileName);\r
BasicDBObject metadata = createMetadata(rundownArchive, storyArchive, fileArchive);\r
transferMetadata(videoFileName, metadata);\r
createSourceKillDateFile(rundownArchive, origFileName);\r
return CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart).getTime();\r
}\r
\r
+ private String getTargetFileName(String sourceFileName, String[] names) {\r
+ List<String> remoteNames = new ArrayList<>();\r
+ for (String name : names) {\r
+ if (name != null)\r
+ remoteNames.add(name.toLowerCase());\r
+ }\r
+ String result = sourceFileName + MXFEXT;\r
+ int version = 1;\r
+ while (remoteNames.contains(result.toLowerCase())) {\r
+ result = String.format("%s-%d%s", sourceFileName, version, MXFEXT);\r
+ }\r
+ return result;\r
+ }\r
+\r
private RundownArchive processClip(BasicDBObject clip) {\r
RundownArchive result = null;\r
String clipName = NoSQLUtils.asString(clip, LONGNAMEID);\r
\r
}\r
\r
- private void transferFile(String sourceFileName, String targetFileName) throws Exception {\r
+ private String transferFile(String sourceFileName) throws Exception {\r
+ String result = null;\r
int reply = 0;\r
logger.info("Transfer clip {}", sourceFileName);\r
try {\r
sourceFtp = ((FtpDirectoryLister) sourceUri.getLister()).connect();\r
targetFtp = ((FtpDirectoryLister) targetUri.getLister()).connect();\r
+\r
if (!targetFtp.enterRemotePassiveMode())\r
throw new Exception("!PASV");\r
\r
+ result = getTargetFileName(sourceFileName, targetFtp.listNames());\r
+\r
reply = sourceFtp.port(InetAddress.getByName(targetFtp.getPassiveHost()), targetFtp.getPassivePort());\r
if (!FTPReply.isPositiveCompletion(reply))\r
throw new Exception("PORT parancs válasza: " + sourceFtp.getReplyString());\r
if (!targetFtp.setFileType(FTP.BINARY_FILE_TYPE))\r
throw new Exception("!TARGET TYPE");\r
\r
- reply = targetFtp.stor(targetFileName);\r
+ reply = targetFtp.stor(result);\r
if (!FTPReply.isPositivePreliminary(reply))\r
throw new Exception("STOR parancs válasza: " + sourceFtp.getReplyString());\r
\r
targetUri.cleanUp();\r
}\r
\r
+ return result;\r
}\r
\r
private void transferMetadata(String fileName, BasicDBObject metadata) throws Exception {\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
-import user.commons.JobStatus;\r
import user.commons.ListUtils;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
CountDownLatch latch = new CountDownLatch(count);\r
\r
private void childStatusChanged(JobStatusChangedEvent event) {\r
- if (JobStatus.SUSPENDED.equals(event.getStatus()) || JobStatus.FINISHED.equals(event.getStatus()))\r
+ switch (event.getStatus()) {\r
+ case CANCELED:\r
+ case FINISHED:\r
+ case RUNABLE:\r
+ case SUSPENDED:\r
latch.countDown();\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ // if (JobStatus.SUSPENDED.equals(event.getStatus()) || JobStatus.FINISHED.equals(event.getStatus()))\r
}\r
\r
@StepEntry\r
// if (i == 8)\r
// throw new Exception("stop");\r
// }\r
+\r
+ //Thread.sleep(100000);\r
for (int i = 0; i < count; i++) {\r
jobEngine.submit(jobRuntime, e -> childStatusChanged(e), CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class ImportStatisticsStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+\r
+ return null;\r
+ }\r
+\r
+}\r
private static final String LINEFEED = "\r\n";\r
private static final String SIMPLE_LINEFEED = "\n";\r
private static final String SAVING_STORY_ID = "Saving story {}";\r
- private static final String FIELDS_STORIES = "id,name,modified,type,format,mosObjects,script,customColumns,CustomColumn.label,CustomColumn.value,reporters,User.longName,User.userName";\r
+ private static final String FIELDS_STORIES = "id,name,modified,type,format,mosObjects,script,scheduleFrom,scheduleTo,customColumns,CustomColumn.label,CustomColumn.value,reporters,User.longName,User.userName";\r
private static final String FIELDS_RUNDOWN = "id,name,modified,scheduledStart,channel,Channel.name,rundownType,RundownType.name";\r
private static final String FIELDS_RUNDOWN_STORYIDS = "id,slugs,Slug.storyId,Slug.position";\r
private static final String FIELDS_STORYFOLDER = "id,name,modified";\r
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?>\r
<?init class="user.jobengine.zk.util.AdminAuthInitiator"?>\r
<zk xmlns:w="http://www.zkoss.org/2005/zk/client" xmlns:ca="client/attribute">\r
-<style>\r
-.z-progressmeter {\r
- height: 16px;\r
- border: 1px solid #cfcfcf;\r
- background: #fff 0 0 repeat-x;\r
- text-align: left;\r
- overflow: hidden;\r
-// background-image: url(/zkau/web/1bf94a1d/zul/img/misc/prgmeter-anim.gif);\r
-}\r
-</style>\r
+ <style>\r
+ .z-progressmeter { height: 16px; border: 1px solid #cfcfcf; background: #fff 0 0 repeat-x; text-align: left; overflow: hidden; // background-image:\r
+ url(/zkau/web/1bf94a1d/zul/img/misc/prgmeter-anim.gif); }\r
+ </style>\r
<!-- csak igy jo a list sebessege -->\r
<custom-attributes org.zkoss.zul.listbox.rod="true" />\r
<custom-attributes org.zkoss.zul.listbox.initRodSize="50" />\r
<custom-attributes org.zkoss.zul.listbox.preloadSize="50" />\r
- \r
- <div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobListModel')" >\r
- <timer id="timer" delay="100" repeats="true" onTimer="@command('uiTick')" />\r
+\r
+ <div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobListModel')">\r
+ <timer id="timer" delay="500" repeats="true" onTimer="@command('uiTick')" />\r
\r
<space bar="false" />\r
- \r
+\r
<div align="left" width="100%">\r
<space bar="false" />\r
<spinner constraint="no empty,min 1 max 10" value="@bind(jlm.newPriority)" width="60px" disabled="@load(jlm.updatePriorityDisabled)" />\r
<div height="100%" width="100%" style="background: #e3e3e3" align="left">\r
<groupbox height="94%" closable="false">\r
<caption sclass="boldfont" label="Aktív folyamatok" />\r
- <listbox id="lbJobList" sizedByContent="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top" mold="paging" autopaging="true" vflex="true" checkmark="true" \r
- onSelect="@command('selectJob')" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" \r
- emptyMessage="Nincs futó folyamat.">\r
- <listhead sizable="true">\r
- <listheader label="Id" hflex="min" align="left" sort="auto"/>\r
- <listheader label="Indítás" hflex="min" align="left" sort="auto"/>\r
- <listheader label="Kész" hflex="min" align="left" sort="auto"/>\r
- <listheader label="Név" hflex="min" align="left" sort="auto"/>\r
- <listheader label="Prioritás" hflex="min" align="left" sort="auto"/>\r
- <listheader label="Állapot" hflex="min" align="left" sort="auto"/>\r
- <listheader label="Készültség" width="100px" align="left" sort="auto"/>\r
- <listheader label="Üzenet" align="max" sort="auto"/>\r
- </listhead>\r
- \r
- <template name="model">\r
- <listitem>\r
- <listcell label="@load(each.id)"/>\r
- <listcell label="@load(each.submitted)"/>\r
- <listcell label="@load(each.finished)"/>\r
- <listcell label="@load(each.name)"/>\r
- <listcell label="@load(each.priority)"/>\r
- <listcell label="@load(each.status)"/>\r
- <listcell>\r
- <progressmeter ca:data-animationspeed="-1" value="@load(each.progress)" width="100%" />\r
- </listcell>\r
- <listcell label="@load(each.description)"/>\r
- </listitem>\r
- </template>\r
- </listbox>\r
+<!-- <borderlayout> -->\r
+<!-- <center> -->\r
+ <listbox id="lbJobList" sizedByContent="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top" mold="paging"\r
+ autopaging="true" vflex="true" checkmark="true" style="border: none; background: #e3e3e3 !important;"\r
+ oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" emptyMessage="Nincs futó folyamat." selectedItems="@bind(jlm.selectedJobs)">\r
+ <listhead>\r
+ <listheader label="Id" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Indítás" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Kész" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Név" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Prioritás" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Állapot" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Készültség" width="100px" align="left" sort="auto" />\r
+ <listheader label="Üzenet" hflex="max" align="left" sort="auto" />\r
+ <listheader label="Paraméterek" hflex="min" align="left" sort="auto" />\r
+ </listhead>\r
+\r
+ <template name="model">\r
+ <listitem>\r
+ <listcell label="@load(each.id)" />\r
+ <listcell label="@load(each.submitted)" />\r
+ <listcell label="@load(each.finished)" />\r
+ <listcell label="@load(each.name)" />\r
+ <listcell label="@load(each.priority)" />\r
+ <listcell label="@load(each.status)" />\r
+ <listcell>\r
+ <progressmeter ca:data-animationspeed="-1" value="@load(each.progress)" width="100%" />\r
+ </listcell>\r
+ <listcell label="@load(each.description)" />\r
+ <listcell label="@load(each.parameters)" />\r
+ </listitem>\r
+ </template>\r
+ </listbox>\r
+ \r
+<!-- </center> -->\r
+<!-- <east title="Részletek" size="25%" flex="true" splittable="true" collapsible="true"> -->\r
+<!-- <grid sizedByContent="false" span="true" model="@load(jlm.selectedJobs)" -->\r
+<!-- vflex="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" -->\r
+<!-- sclass="listbox-normal-style" emptyMessage="A részletek megtekintéséhez jelöljön ki egy folyamatot." > -->\r
+<!-- <columns> -->\r
+<!-- <column label="ID" hflex="1" align="left" /> -->\r
+<!-- </columns> -->\r
+<!-- <rows> -->\r
+<!-- <template name="model"> -->\r
+<!-- <row> -->\r
+<!-- <label value="@load(each.parameters)" /> -->\r
+<!-- </row> -->\r
+<!-- </template> -->\r
+<!-- </rows> -->\r
+<!-- </grid> -->\r
+<!-- </east> -->\r
+<!-- </borderlayout> -->\r
+\r
</groupbox>\r
</div>\r
- \r
+\r
</div>\r
- \r
+\r
</zk>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>\r
-<window id="resultWin" title="Folyamat futtatása" width="500px" border="normal" apply="org.zkoss.bind.BindComposer" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobSelectorModel')">\r
- <listbox model="@load(jlm.jobElements)" selectedItem="@bind(jlm.selectedJobElement)">\r
- <listhead>\r
- <listheader label="Név" width="100%" align="left"/>\r
- </listhead>\r
- \r
- <template name="model">\r
- <listitem>\r
- <listcell label="@load(each.name)"/>\r
- </listitem>\r
- </template>\r
- </listbox>\r
- <hbox width="100%" pack="center" align="center">\r
- <button id="closeButton" label="Mégsem" onClick="@command('close')" />\r
- <button id="executeButton" label="Futtatás" onClick="@command('execute')" />\r
- </hbox>\r
+<window id="resultWin" title="Folyamat futtatása" width="700px" border="normal" apply="org.zkoss.bind.BindComposer"\r
+ viewModel="@id('jlm') @init('user.jobengine.zk.model.JobSelectorModel')" forward="onCancel=closeButton.onClick">\r
+ <borderlayout height="450px">\r
+ <center border="none" flex="true">\r
+ <listbox model="@load(jlm.jobs)" selectedItem="@bind(jlm.selectedJob)" selectedItems="@bind(jlm.selectedJobs)">\r
+ <listhead>\r
+ <listheader hflex="1" label="Név" align="left" />\r
+ </listhead>\r
+\r
+ <template name="model">\r
+ <listitem onDoubleClick="@command('execute')">\r
+ <listcell label="@load(each.name)" />\r
+ </listitem>\r
+ </template>\r
+ </listbox>\r
+ </center>\r
+ <east size="25%" flex="true" splittable="true">\r
+<!-- <grid sizedByContent="false" span="true" model="@bind(jlm.selectedJob)" vflex="true" style="border: none; background: #e3e3e3 !important;" -->\r
+<!-- oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" emptyMessage="A részletek megtekintéséhez jelöljön ki egy folyamatot."> -->\r
+ <grid sizedByContent="false" span="true" model="@bind(jlm.selectedJob)">\r
+ <columns>\r
+ <column label="Sablon" hflex="1" align="left" />\r
+ </columns>\r
+ <rows>\r
+ <row>\r
+ <label value="xxx" />\r
+ </row>\r
+ </rows>\r
+ </grid>\r
+ <!-- <listbox model="@load(jlm.selectedJob)"> -->\r
+ <!-- <listhead> -->\r
+ <!-- <listheader hflex="1" label="Sablon" align="left" /> -->\r
+ <!-- </listhead> -->\r
+\r
+ <!-- <template name="model"> -->\r
+ <!-- <listitem> -->\r
+ <!-- <listcell label="@load(each.name)" /> -->\r
+ <!-- </listitem> -->\r
+ <!-- </template> -->\r
+ <!-- </listbox> -->\r
+ </east>\r
+ </borderlayout>\r
+ \r
+ <hbox width="100%" pack="center" align="center">\r
+ <button id="closeButton" label="Mégsem" onClick="@command('close')" />\r
+ <button id="executeButton" label="Futtatás" onClick="@command('execute')" />\r
+ </hbox>\r
</window>\r
<groupbox height="94%" closable="false">\r
<caption sclass="boldfont" label="Hiányzó adásanyagok" />\r
<listbox id="lbJobList" sizedByContent="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top" mold="paging" autopaging="true"\r
- vflex="true" checkmark="true" onSelect="@command('selectJob')" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style"\r
+ vflex="true" checkmark="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style"\r
sclass="listbox-normal-style" emptyMessage="Nincs hiányzó anyag." selectedItems="@bind(jlm.selectedJobs)">\r
<listhead sizable="true">\r
<listheader label="Adásbakerülés" hflex="min" align="left" sort="auto" />\r
import user.jobengine.server.scheduler.SchedulerService;
public interface IJobEngine {
- public static String RCC_HOST = "jobengine.rcc.host";
- public static String RCC_LOWRES_PROFILE = "jobengine.rcc.defaultlowresprofile";
+ public static final int QUEUE_POLL_INTERVALL = 10;
void addJobChangedEventListener(IJobChangedListener listener);
while (!shutdown) {
try {
- while (!messageQueue.isEmpty()) {
- IJobMessage message = messageQueue.poll(50, TimeUnit.MILLISECONDS);
- if (message != null) {
- //logger.debug("Processing {}", message.getClass());
- message.process(JobEngine.this);
- }
+ IJobMessage message = messageQueue.poll(50, TimeUnit.MILLISECONDS);
+ if (message != null) {
+ message.process(JobEngine.this);
+ }
+ } catch (InterruptedException e) {
+ shutdown = true;
+ }
+ }
+ while (!messageQueue.isEmpty()) {
+ try {
+ IJobMessage message = messageQueue.poll(50, TimeUnit.MILLISECONDS);
+ if (message != null) {
+ message.process(JobEngine.this);
}
} catch (InterruptedException e) {
shutdown = true;
while (!shutdown) {
try {
- IJobRuntime jobRuntime = runQueue.poll(50, TimeUnit.MILLISECONDS);
+ IJobRuntime jobRuntime = runQueue.poll(IJobEngine.QUEUE_POLL_INTERVALL, TimeUnit.MILLISECONDS);
if (jobRuntime != null) {
- //logger.info("Begin processing job {}, RC count {}", jobRuntime.getId(), runQueue.size());
while (jobRuntime.hasNextInstruction() && jobRuntime.isRunable()) {
ir = jobRuntime.getNextInstruction();
ir.execute(JobEngine.this, jobRuntime);
}
- //logger.info("End processing job {}", jobRuntime.getId());
if (!jobRuntime.hasNextInstruction() && jobRuntime.isRunable())
jobCleanup(jobRuntime);
}
IJobStep step = null;
while (true) {
try {
- jobRuntime = queue.poll(50, TimeUnit.MILLISECONDS);
+ jobRuntime = queue.poll(IJobEngine.QUEUE_POLL_INTERVALL, TimeUnit.MILLISECONDS);
if (jobRuntime == null && shutdown) {
logger.trace("Shutting down");
break;
outputs = step.run(jobEngine, jobRuntime, inputs);
jobEngine.sendMessage(new JobStepCompletedMessage(jobRuntime.getId(), outputs));
-
} catch (Exception e) {
logger.error("Error in {}", jobRuntime);
Throwable t = e.getCause() == null ? e : e.getCause();
+++ /dev/null
-package user.jobengine.zk.model;\r
-\r
-import com.ibm.nosql.json.api.BasicDBObject;\r
-\r
-public class JobElement {\r
- private String name;\r
- private BasicDBObject dbObject;\r
-\r
- public JobElement() {\r
- }\r
-\r
- public JobElement(BasicDBObject dbObject) {\r
- this.dbObject = dbObject;\r
- this.name = dbObject.getString("name");\r
- }\r
-\r
- public String getName() {\r
- return name;\r
- }\r
-\r
- public void setName(String name) {\r
- this.name = name;\r
- }\r
-\r
- public BasicDBObject getDbObject() {\r
- return dbObject;\r
- }\r
-}
\ No newline at end of file
package user.jobengine.zk.model;\r
\r
+import java.util.Collection;\r
import java.util.HashMap;\r
import java.util.Map;\r
\r
import org.zkoss.zul.Messagebox;\r
import org.zkoss.zul.Window;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.jobengine.db.ItemManagerData.SignalType;\r
import user.jobengine.server.IJobChangedListener;\r
import user.jobengine.server.IJobEngine;\r
public class JobListModel extends AsyncBaseModel implements IJobChangedListener {\r
private static final Logger logger = LogManager.getLogger();\r
private ListModelList<IJobRuntime> jobList = new ListModelList<IJobRuntime>();\r
- private IJobRuntime selectedJob = null;\r
private IJobEngine jobEngine = null;\r
private int newPriority = 1;\r
private boolean shutdownDisabled;\r
private boolean startupDisabled;\r
+ private Collection<BasicDBObject> selectedJobs;\r
\r
@Command\r
public void changeJobsPriority() {\r
return newPriority;\r
}\r
\r
- public IJobRuntime getSelectedJob() {\r
- return this.selectedJob;\r
+ public Collection<BasicDBObject> getSelectedJobs() {\r
+ return selectedJobs;\r
}\r
\r
@Init\r
\r
private void initializeList() {\r
jobList.clear();\r
- Map<Long, IJobRuntime> jobMap = this.jobEngine.getJobs();\r
+ Map<Long, IJobRuntime> jobMap = jobEngine.getJobs();\r
jobList.addAll(jobMap.values());\r
//Collections.sort(jobList, (o1, o2) -> compare(o1, o2));\r
}\r
}\r
\r
private void onJobDeleted(IJobRuntime job) {\r
+ // selectedJobs.remove(job);\r
+ // NotifyChange("selectedJobs");\r
jobList.remove(job);\r
NotifyChange("jobList");\r
}\r
\r
private void onJobUpdated(IJobRuntime job) {\r
+ //List<IJobRuntime> savedSelectedJobs = new ArrayList<>(selectedJobs);\r
jobList.notifyChange(job);\r
}\r
\r
private void onShutdown() {\r
- jobEngine.shutdown();\r
- setStartupDisabled(false);\r
- }\r
-\r
- @Command\r
- public void restart() {\r
- startupDisabled = true;\r
- try {\r
- jobEngine.startup();\r
- } catch (Exception e) {\r
- }\r
- shutdownDisabled = false;\r
- initializeList();\r
- }\r
+ setShutdownDisabled(true);\r
\r
- @Command\r
- @NotifyChange({ "updatePriorityDisabled" })\r
- public void selectJob() {\r
- //only for notification\r
- }\r
+ Runnable r = new Runnable() {\r
+ @Override\r
+ public void run() {\r
+ jobEngine.shutdown();\r
+ registerTask(() -> setStartupDisabled(false));\r
+ }\r
+ };\r
+ Thread t = new Thread(r);\r
+ t.start();\r
+ }\r
+\r
+ // @Command\r
+ // public void restart() {\r
+ // startupDisabled = true;\r
+ // try {\r
+ // jobEngine.startup();\r
+ // } catch (Exception e) {\r
+ // }\r
+ // shutdownDisabled = false;\r
+ // initializeList();\r
+ // }\r
\r
public void setJobList(ListModelList<IJobRuntime> jobList) {\r
this.jobList = jobList;\r
this.newPriority = newPriority;\r
}\r
\r
- public void setSelectedJob(IJobRuntime _selectedJob) {\r
- this.selectedJob = _selectedJob;\r
+ @NotifyChange({ "updatePriorityDisabled" })\r
+ public void setSelectedJobs(Collection<BasicDBObject> selectedJobs) {\r
+ this.selectedJobs = selectedJobs;\r
}\r
\r
public void setShutdownDisabled(boolean shutdownDisabled) {\r
package user.jobengine.zk.model;\r
\r
+import java.util.Set;\r
+\r
import org.zkoss.bind.annotation.AfterCompose;\r
import org.zkoss.bind.annotation.Command;\r
import org.zkoss.bind.annotation.ContextParam;\r
\r
import com.ibm.nosql.json.api.BasicDBObject;\r
\r
+import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.scheduler.ScheduledJob;\r
import user.jobengine.server.scheduler.SchedulerService;\r
@Wire("#resultWin")\r
private Window resultWin;\r
private IJobEngine jobEngine;\r
- private ListModelList<JobElement> jobElements = new ListModelList<>();\r
- private JobElement selectedJobElement = null;\r
+ private ListModelList<BasicDBObject> jobs;\r
+ private BasicDBObject selectedJob;\r
+ private Set<BasicDBObject> selectedJobs;\r
\r
@AfterCompose\r
public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
\r
@Command\r
public void execute() {\r
- if (selectedJobElement == null)\r
+ if (selectedJob == null)\r
return;\r
SchedulerService scheduler = jobEngine.getScheduler();\r
- ScheduledJob scheduledJob = scheduler.createScheduledJob(selectedJobElement.getDbObject());\r
+ ScheduledJob scheduledJob = scheduler.createScheduledJob(selectedJob);\r
scheduledJob.setJobEngine(jobEngine);\r
try {\r
scheduledJob.doJob();\r
close();\r
}\r
\r
- public ListModelList<JobElement> getJobElements() {\r
- return jobElements;\r
+ public ListModelList<BasicDBObject> getJobs() {\r
+ return jobs;\r
+ }\r
+\r
+ public BasicDBObject getSelectedJob() {\r
+ return selectedJob;\r
}\r
\r
- public JobElement getSelectedJobElement() {\r
- return selectedJobElement;\r
+ public Set<BasicDBObject> getSelectedJobs() {\r
+ return selectedJobs;\r
}\r
\r
@Init\r
public void init() {\r
this.jobEngine = (IJobEngine) Executions.getCurrent().getArg().get("jobEngine");\r
- //jobElements.setMultiple(true);\r
- Object[] objects = jobEngine.getScheduler().getScheduleJobs().toArray();\r
- for (Object obj : objects) {\r
- if (obj instanceof BasicDBObject) {\r
- JobElement j = new JobElement((BasicDBObject) obj);\r
- jobElements.add(j);\r
- }\r
- }\r
+ jobs = new ListModelList<>(NoSQLUtils.asList(jobEngine.getScheduler().getScheduleJobs()));\r
+ }\r
+\r
+ public void setJobs(ListModelList<BasicDBObject> jobs) {\r
+ this.jobs = jobs;\r
+ }\r
\r
+ public void setSelectedJob(BasicDBObject selectedJob) {\r
+ this.selectedJob = selectedJob;\r
}\r
\r
- public void setSelectedJobElement(JobElement selectedJobElement) {\r
- this.selectedJobElement = selectedJobElement;\r
+ public void setSelectedJobs(Set<BasicDBObject> selectedJobs) {\r
+ this.selectedJobs = selectedJobs;\r
}\r
\r
}
\ No newline at end of file
private static final String IMPORT_TEMPLATE = "import-morpheus-missing-materials.xml";\r
private static final String RETRIEVE_TEMPLATE = "retrieve-missing-material.xml";\r
private ListModelList<BasicDBObject> jobList = new ListModelList<BasicDBObject>();\r
- private BasicDBObject selectedJob = null;\r
private Set<BasicDBObject> selectedJobs;\r
private IJobEngine jobEngine = null;\r
private boolean importDisabled;\r
return result;\r
}\r
\r
- public BasicDBObject getSelectedJob() {\r
- return this.selectedJob;\r
- }\r
-\r
public Set<BasicDBObject> getSelectedJobs() {\r
return selectedJobs;\r
}\r
}\r
}\r
\r
- @Command\r
- public void selectJob() {\r
- //only for notification\r
- }\r
-\r
public void setImportDisabled(boolean importDisabled) {\r
this.importDisabled = importDisabled;\r
NotifyChange(IMPORT_DISABLED);\r
this.jobList = jobList;\r
}\r
\r
- public void setSelectedJob(BasicDBObject selectedJob) {\r
- this.selectedJob = selectedJob;\r
- }\r
-\r
public void setSelectedJobs(Set<BasicDBObject> selectedJobs) {\r
this.selectedJobs = selectedJobs;\r
}\r
\r
@Override\r
public void cleanup(Desktop desktop) throws Exception {\r
- logger.info("Invoked");\r
+ logger.trace("Invoked");\r
SessionUtil.cleanup();\r
}\r
\r