],\r
"authentication": {\r
"defaultUser": "root",\r
- "defaultPassword": "password", \r
+ "defaultPassword": "password",\r
"authEnabled": true,\r
"adHost": "intra.mediavivantis.hu",\r
"adNonSecurePort": 3268,\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.11.1.90: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.11.1.90: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.transcoder.address=http://10.11.1.111:65445/api/json/v1/ -Djobengine.transcoder.template=MP4 -Djobengine.transcoder.version=1 -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=VDani -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -Djobengine.mediafinder.external=false -Djobengine.mediacube.service.proxyroot="/opt" -Djobengine.randomize.archives=true"/>\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.jackson2-provider@default:default,org.jboss.resteasy.jaxrs-api@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
+<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-api@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
<booleanAttribute key="tracing" value="false"/>\r
<booleanAttribute key="useCustomFeatures" value="false"/>\r
<booleanAttribute key="useDefaultConfigArea" value="true"/>\r
return null;\r
}\r
\r
+ @Test\r
+ public void getJSONFile() throws Exception {\r
+ Path filePath = Paths.get("//10.11.1.90/root/mediacube/data/ARCHIVE/14-03379-0092-1_.mov");\r
+ Path json = Paths.get(Paths.get(filePath.getParent().toString(), ".STATUS", filePath.getFileName().toString()) + ".json");\r
+ System.out.println(json);\r
+ }\r
+\r
@Test\r
public void mediaByName() throws Exception {\r
Media media = manager.getMedia("DK_10103300_01");\r
<?xml version="1.0" encoding="UTF-8"?>\r
<executors>\r
- <executor className="user.jobengine.server.steps.CancelableStep" maxConcurrent="1" isRemote="true" />\r
+ <executor className="CancelableStep.java" maxConcurrent="1" isRemote="true" />\r
<executor className="FakeStep.java" maxConcurrent="1" />\r
+ <executor className="NEXIOCheckerStep.java" maxConcurrent="1" />\r
</executors>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>\r
<executors>\r
+ <executor className="CancelableStep.java" maxConcurrent="20" isRemote="false" />\r
<executor className="FakeStep.java" maxConcurrent="20" isRemote="false" />\r
<executor className="MergeStep.java" maxConcurrent="20" isRemote="false" />\r
<executor className="user.jobengine.server.steps.ArchiveListBuilderStep" maxConcurrent="1" isRemote="false" />\r
<?xml version="1.0" encoding="UTF-8"?>\r
<jobtemplate multiInstance="true">\r
<commands>\r
- <calljobstep remote="true" id="step1" type="user.jobengine.server.steps.CancelableStep" weight="1">\r
- </calljobstep>\r
+ <calljobstep remote="true" type="CancelableStep.java" weight="1" />\r
</commands>\r
</jobtemplate>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate multiInstance="true" name="Fake">\r
-<declarations>\r
- <parameters>\r
- <parameter name="storeName" type="java.lang.String"/>\r
- </parameters>\r
- <variables>\r
- <variable name="newFiles" type="java.lang.ArrayList"/>\r
- <variable name="updatedFiles" type="java.lang.ArrayList"/>\r
- </variables>\r
-</declarations>\r
-<commands>\r
- <calljobstep type="NEXIOCheckerStep.java" weight="1">\r
- <inputs>\r
- <input>\r
- <parameter name="storeName" />\r
- </input>\r
- </inputs>\r
- <outputs>\r
- <output>\r
- <variable name="newFiles" />\r
- </output>\r
- <output>\r
- <variable name="updatedFiles" />\r
- </output>\r
- </outputs>\r
- </calljobstep>\r
- <calljobstep type="SubmitDownloadStep.java" weight="1">\r
- <inputs>\r
- <input>\r
- <variable name="storeName" />\r
- </input>\r
- <input>\r
- <variable name="newFiles" />\r
- </input>\r
- <input>\r
- <variable name="updatedFiles" />\r
- </input>\r
- </inputs>\r
- </calljobstep>\r
-</commands>\r
-</jobtemplate>
\ No newline at end of file
</input>\r
</inputs>\r
<commands>\r
- <calljobstep id="step2" type="user.jobengine.server.steps.Fake1Step" weight="1">\r
+ <calljobstep id="step2" type="user.jobengine.server.steps.FakeStep" weight="1">\r
<inputs>\r
<input>\r
<parameter name="itemID" />\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate multiInstance="true" name="Fake">\r
+<declarations>\r
+ <parameters>\r
+ <parameter name="storeName" type="java.lang.String"/>\r
+ <parameter name="outputPath" type="java.lang.String"/>\r
+ <parameter name="limit" type="int"/>\r
+ </parameters>\r
+</declarations>\r
+<commands>\r
+ <calljobstep type="NEXIOCheckerStep.java" weight="1">\r
+ <inputs>\r
+ <input>\r
+ <parameter name="storeName" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
+</commands>\r
+</jobtemplate>
\ No newline at end of file
--- /dev/null
+package hu.user.mediacube.steps;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+public class DownloadableArchive extends BasicDBObject {\r
+\r
+}\r
--- /dev/null
+package hu.user.mediacube.steps;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.nio.file.DirectoryStream;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.steps.JobStep;\r
+import user.jobengine.server.steps.StepEntry;\r
+\r
+public class DownloadableListBuilderStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ // private static final String UTF8 = "utf-8";\r
+ private static final String STATUSFOLDER = ".STATUS";\r
+ private static final String JSONEXT = ".json";\r
+ private static final String CATCHEDEXT = ".catched";\r
+\r
+ public static final String ITEM_TITLE = "itemTitle";\r
+ public static final String ITEM_HOUSEID = "itemHouseId";\r
+ public static final String ITEM_DESCRIPTION = "itemDescription";\r
+ public static final String MEDIA_HOUSEID = "mediaHouseId";\r
+ public static final String MEDIA_TITLE = "mediaTitle";\r
+ public static final String MEDIA_DESCRIPTION = "mediaDescription";\r
+ public static final String MEDIA_TYPE = "mediaType";\r
+ private static final String DURATION = "duration";\r
+ private static final String EXISTING_MEDIAID = "existingMediaId";\r
+\r
+ @StepEntry\r
+ public Object[] execute(String sourcePath, int limit, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
+ DirectoryStream<Path> directoryStream = null;\r
+ try {\r
+ directoryStream = Files.newDirectoryStream(Paths.get(sourcePath));\r
+ for (Path p : directoryStream) {\r
+ processPathItem(p);\r
+ }\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ } finally {\r
+ if (directoryStream != null) {\r
+ try {\r
+ directoryStream.close();\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private String getMetadata(BasicDBObject dbObject, String fieldName) {\r
+ String result = null;\r
+ if (dbObject.containsKey(fieldName))\r
+ result = dbObject.getString(fieldName);\r
+ return result;\r
+ }\r
+\r
+ private boolean processPathItem(Path mediaFilePath) {\r
+ File mediaFile = mediaFilePath.toFile();\r
+\r
+ // if (mediaFile.length() > 0)\r
+ // return false;\r
+\r
+ if (mediaFile.isDirectory()) {\r
+ return false;\r
+ }\r
+\r
+ Path dotStorePath = Paths.get(mediaFilePath.getParent().toString(), STATUSFOLDER);\r
+ Path catchedFilePath = Paths.get(dotStorePath.toString(), mediaFile.getName() + CATCHEDEXT);\r
+ File catchedFile = catchedFilePath.toFile();\r
+ return true;\r
+ }\r
+}\r
--- /dev/null
+package hu.user.mediacube.steps;\r
+\r
+import java.io.IOException;\r
+import java.sql.Timestamp;\r
+import java.util.Iterator;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.StoreUri;\r
+import user.commons.nexio.api.Clip;\r
+import user.commons.nexio.api.ClipNotFoundException;\r
+import user.commons.nexio.api.Controller;\r
+import user.commons.nexio.api.Mediabase;\r
+import user.commons.nexio.server.protocol.ProtocolException;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.steps.EscortFiles;\r
+import user.jobengine.server.steps.JobStep;\r
+import user.jobengine.server.steps.StepEntry;\r
+\r
+public class NEXIOCheckerStep extends JobStep {\r
+ private static final String DOT_MXF = ".MXF";\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ private DownloadableArchive createArchive(String title, Timestamp modified, Timestamp created, int duration) {\r
+ DownloadableArchive archive = new DownloadableArchive();\r
+ archive.append("title", title);\r
+ archive.append("fileName", title + DOT_MXF);\r
+ archive.append("modified", modified);\r
+ archive.append("created", created);\r
+ archive.append("duration", duration);\r
+ return archive;\r
+ }\r
+\r
+ @StepEntry\r
+ public Object[] execute(String storeName, String outputPath, int limit) throws Exception {\r
+ Store store = getManager().getStore(storeName);\r
+ if (store == null)\r
+ throw new NullPointerException("Store not available: " + storeName);\r
+\r
+ StoreUri storeUri = store.getSourceStoreUri(RemoteStoreProtocol.NEXIO);\r
+ if (storeUri == null)\r
+ throw new NullPointerException("NEXIO StoreUri not available on: " + storeName);\r
+\r
+ Controller controller = null;\r
+\r
+ try {\r
+ if (storeUri.getPortNumber() == 0)\r
+ controller = new Controller(storeUri.getRootPath(), storeUri.getPortNumber());\r
+ else\r
+ controller = new Controller(storeUri.getRootPath());\r
+ controller.connect();\r
+ Mediabase mediabase = controller.getMediabase();\r
+ Iterator<Clip> clips = mediabase.getClips();\r
+ processClips(outputPath, limit, clips);\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ if (controller != null)\r
+ controller.disconnect();\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private void processClips(String outputPath, int limit, Iterator<Clip> clips) throws ClipNotFoundException, IOException, ProtocolException {\r
+ int count = limit;\r
+ while (clips.hasNext()) {\r
+\r
+ //megszakithatosag\r
+ if (getJobRuntime().isWaitingCancel())\r
+ break;\r
+\r
+ Clip clip = clips.next();\r
+ String title = clip.getXid().get();\r
+ Timestamp modified = Timestamp.from(clip.getModifiedTimestamp().toInstant());\r
+ Timestamp created = Timestamp.from(clip.getRecordDateTimestamp().toInstant());\r
+ int duration = clip.getDuration();\r
+\r
+ Media media = getManager().getMedia(title);\r
+ boolean create = media == null || media.getLength() != duration || !media.getModified().equals(modified) || !media.getCreated().equals(created);\r
+ if (create) {\r
+ DownloadableArchive archive = createArchive(title, modified, created, duration);\r
+ //letezik : mar hozzadva\r
+ if (tryAdd(outputPath, archive))\r
+ count--;\r
+ }\r
+\r
+ //vegtelen : limit=-1\r
+ if (count == 0) {\r
+ logger.info("Limit reached: {}", limit);\r
+ break;\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+ private boolean tryAdd(String outputPath, DownloadableArchive archive) throws IOException {\r
+ boolean result = false;\r
+ String fileName = archive.getString("fileName");\r
+ if (!EscortFiles.isMetadataExists(outputPath, fileName)) {\r
+ String metadata = archive.toPrettyString("");\r
+ EscortFiles.createMetadata(outputPath, fileName, metadata);\r
+ result = true;\r
+ }\r
+ return result;\r
+ }\r
+\r
+}\r
package user.jobengine.server.steps;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import com.fasterxml.jackson.databind.ObjectMapper;\r
+\r
+import user.commons.rest.ServiceObjectMapper;\r
+\r
public class CancelableStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
int count = 10;\r
+ private ObjectMapper mapper = ServiceObjectMapper.getMapper();\r
\r
@StepEntry\r
public Object[] execute() throws Exception {\r
+\r
+ // DownloadableArchive a = new DownloadableArchive();\r
+ // Media media = getManager().createMedia("Generic", "Name", "description", "houseId");\r
+ // a.setMedia(media);\r
+ //\r
+ // String m1 = mapper.writeValueAsString(media);\r
+ // Media m2 = mapper.readValue(m1, Media.class);\r
+ //\r
+ // String prettyString = mapper.writeValueAsString(a);\r
+ // DownloadableArchive b = mapper.readValue(prettyString, DownloadableArchive.class);\r
+ // Media media2 = b.getMedia();\r
try {\r
for (int i = 0; i < count; i++) {\r
if (getJobRuntime().isWaitingCancel())\r
break;\r
- Thread.sleep(1000);\r
+ Thread.sleep(100);\r
setProgress((i + 1) * count);\r
}\r
} catch (Exception e) {\r
import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.db.IItemManager;\r
import user.jobengine.db.Media;\r
-import user.jobengine.db.Store;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class CreateMissingLowresStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
private MediaCubeMarker marker;\r
- private Store highResStore;\r
\r
@StepEntry\r
public Object[] execute(String localHiresPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
DB db = NoSQLUtils.getNoSQLDB();\r
DBCollection collection = db.getCollection("missing_lowres");\r
IItemManager manager = jobEngine.getItemManager();\r
- highResStore = manager.getSystemStore(false);\r
Media media = getFirstUntranscodedMedia(manager, collection);\r
\r
try {\r
import user.commons.remotestore.FtpDirectoryLister;\r
\r
public class EscortFiles {\r
+ private static final String DOT_JSON = ".json";\r
private static final Logger logger = LogManager.getLogger();\r
private static final String EXTENDEDAGENCY = "ExtendedAgency";\r
private static final String EXTENDEDDESCRIPTION = "ExtendedDescription";\r
return String.format(KILLDATE_FILENAME, fileName, composeKillDate(days));\r
}\r
\r
- public static void createMetadata(String filePath, String fileName, String metadata, Marker marker) throws IOException {\r
+ public static void createMetadata(String filePath, String fileName, String metadata) throws IOException {\r
ensureUNCFolder(filePath, STATUSFOLDER);\r
- String metadataFileName = fileName + ".json";\r
+ String metadataFileName = fileName + DOT_JSON;\r
Path metadataPath = Paths.get(filePath, STATUSFOLDER, metadataFileName);\r
Files.write(metadataPath, metadata.getBytes());\r
}\r
ensureUNCFolder(statusPath);\r
}\r
\r
+ public static boolean isMetadataExists(String filePath, String fileName) throws IOException {\r
+ boolean result = false;\r
+ String metadataFileName = fileName + DOT_JSON;\r
+ Path metadataPath = Paths.get(filePath, STATUSFOLDER, metadataFileName);\r
+ result = metadataPath.toFile().exists();\r
+ return result;\r
+ }\r
+\r
public static void setNEXIOKillDate(int killDateDays, String targetFileName, String nexioAgency, StoreUri targetUri) throws Exception {\r
OutputStream outStream = null;\r
try {\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
-import user.commons.ListUtils;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class FakeNoParamsStep extends JobStep {\r
private static final String CHILD_TITLE = "Párhuzamosított alfolyamat";\r
- private static final String CHILD_TEMPLATE = "fake-concurrent.xml";\r
+ // private static final String CHILD_TEMPLATE = "fake-concurrent.xml";\r
+ private static final String CHILD_TEMPLATE = "cancelable.xml";\r
private static final Logger logger = LogManager.getLogger();\r
int count = 2;\r
\r
public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
if (jobRuntime.forkPrepare()) {\r
for (int i = 0; i < count; i++) {\r
- jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
+ //jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
+ jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, null);\r
}\r
}\r
\r
logger.info(getMarker(), "Starting params: {}");\r
\r
try {\r
+ getJobRuntime().setDescription("Teszt");\r
int step = 100 / count;\r
for (int i = 0; i < count; i++) {\r
if (!canContinue())\r
return false;\r
}\r
\r
- IItemManager manager = getManager();\r
- MediaFileDAO mfDAO = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);\r
- List<IEntityBase> mediaFiles = mfDAO.getByHouseId(source.getFileName().toString());\r
- if (mediaFiles != null && mediaFiles.size() > 0) {\r
- logger.warn(marker, "Már archivált: {}", hsmFileName);\r
- return false;\r
- }\r
-\r
File sourceFile = source.toFile();\r
File targetFile = target.toFile();\r
\r
\r
private boolean processHSMFile(String volumeName, String hsmFileName, Path sourceFilePath, Path targetFilePath) throws Exception {\r
int repeat = 4;\r
- boolean successCopy = true;\r
+ boolean successCopy = false;\r
+\r
+ IItemManager manager = getManager();\r
+ MediaFileDAO mfDAO = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);\r
+ List<IEntityBase> mediaFiles = mfDAO.getByHouseId(sourceFilePath.getFileName().toString());\r
+ if (mediaFiles != null && mediaFiles.size() > 0) {\r
+ logger.warn(marker, "Már archivált: {}", hsmFileName);\r
+ return false;\r
+ }\r
+\r
if (prepareCopy(hsmFileName, sourceFilePath, targetFilePath)) {\r
- successCopy = false;\r
while (repeat > 0) {\r
try {\r
resumeableCopy(sourceFilePath, targetFilePath);\r
String metadata = null;\r
try {\r
metadata = createMetadata(volumeName, hsmFileName).toPrettyString("");\r
- EscortFiles.createMetadata(targetFilePath.getParent().toString(), targetFilePath.getFileName().toString(), metadata, marker);\r
+ EscortFiles.createMetadata(targetFilePath.getParent().toString(), targetFilePath.getFileName().toString(), metadata);\r
//saveFileHistory(contentFileName);\r
\r
} catch (Exception e) {\r
+++ /dev/null
-package user.jobengine.server.steps;\r
-\r
-import java.sql.Timestamp;\r
-import java.time.Instant;\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-\r
-import user.commons.StoreUri;\r
-import user.commons.nexio.api.Clip;\r
-import user.commons.nexio.api.Controller;\r
-import user.commons.nexio.api.Mediabase;\r
-import user.commons.remotestore.RemoteStoreProtocol;\r
-import user.jobengine.db.IItemManager;\r
-import user.jobengine.db.Media;\r
-import user.jobengine.db.Store;\r
-\r
-public class NEXIOCheckerStep extends JobStep {\r
- private static final Logger logger = LogManager.getLogger();\r
-\r
- @StepEntry\r
- public Object[] execute(String storeName, int limit) throws Exception {\r
- List<Media> newItems = new ArrayList<>();\r
- List<Media> updatedItems = new ArrayList<>();\r
- Object[] result = Arrays.asList(newItems, updatedItems).toArray();\r
- IItemManager manager = getManager();\r
-\r
- Store store = manager.getStore(storeName);\r
- if (store == null)\r
- throw new NullPointerException("Store not available: " + storeName);\r
-\r
- StoreUri storeUri = store.getSourceStoreUri(RemoteStoreProtocol.NEXIO);\r
- if (storeUri == null)\r
- throw new NullPointerException("NEXIO StoreUri not available on: " + storeName);\r
-\r
- Controller controller = null;\r
-\r
- try {\r
- controller = new Controller(storeUri.getRootPath(), storeUri.getPortNumber());\r
- controller.connect();\r
- Mediabase mediabase = controller.getMediabase();\r
- Iterator<Clip> clips = mediabase.getClips();\r
- int count = limit;\r
- while (clips.hasNext()) {\r
-\r
- if (getJobRuntime().isWaitingCancel())\r
- break;\r
-\r
- Clip clip = clips.next();\r
- String title = clip.getXid().get();\r
- Timestamp modified = Timestamp.from(clip.getModifiedTimestamp().toInstant());\r
- Timestamp created = Timestamp.from(clip.getRecordDateTimestamp().toInstant());\r
- int duration = clip.getDuration();\r
-\r
- Media media = manager.getMedia(title);\r
- if (media == null) {\r
- media = new Media();\r
- media.setModified(modified);\r
- media.setCreated(created);\r
- media.setArchived(Timestamp.from(Instant.now()));\r
- media.setTitle(title);\r
- media.setDescription(title);\r
- media.setLength(duration);\r
- newItems.add(media);\r
- count--;\r
- } else {\r
- if (media.getLength() != duration || !media.getModified().equals(modified)) {\r
- media.setArchived(Timestamp.from(Instant.now()));\r
- media.setModified(modified);\r
- media.setLength(duration);\r
- updatedItems.add(media);\r
- count--;\r
- }\r
- }\r
-\r
- //ha volt limit, akkor egyszer csak 0 lesz, ha nem volt akkor alapbol -1\r
- if (count == 0) {\r
- logger.info("Limit reached: {}", limit);\r
- break;\r
- }\r
-\r
- }\r
- } catch (Exception e) {\r
- logger.error(e);\r
- } finally {\r
- if (controller != null)\r
- controller.disconnect();\r
- }\r
-\r
- if (newItems.size() == 0 && updatedItems.size() == 0)\r
- cancel();\r
-\r
- return result;\r
- }\r
-\r
-}\r
\r
setAndCheck(archiveItem, mediaCubeMedia, getEngine());\r
\r
- getJobRuntime().setDescription(String.format("%s: %s", getJobRuntime().getDescription(), details));\r
+ getJobRuntime().setDescription(details);\r
\r
+ //TODO mxf helyett az osszes kiterjesztest!!!!!\r
//A dupla ellenorzes a napon beluli ismetlesek miatt kell\r
long existingMediaId = archiveItem.getExistingMediaId();\r
if (sourceMediaFile.length() == 0 && existingMediaId == 0) {\r
implements sqlj.runtime.NamedIterator
{
private int posterNdx;
+ private int modifiedNdx;
private int archivedNdx;
private int createdNdx;
private int lengthNdx;
lengthNdx = findColumn("length");
createdNdx = findColumn("created");
archivedNdx = findColumn("archived");
+ modifiedNdx = findColumn("modified");
posterNdx = findColumn("poster");
}
public MediaIter(sqlj.runtime.profile.RTResultSet resultSet, int fetchSize, int maxRows)
lengthNdx = findColumn("length");
createdNdx = findColumn("created");
archivedNdx = findColumn("archived");
+ modifiedNdx = findColumn("modified");
posterNdx = findColumn("poster");
}
public long id()
{
return resultSet.getTimestamp(archivedNdx);
}
+ public Timestamp modified()
+ throws java.sql.SQLException
+ {
+ return resultSet.getTimestamp(modifiedNdx);
+ }
public byte[] poster()
throws java.sql.SQLException
{
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:10^178*/
+/*@lineinfo:user-code*//*@lineinfo:10^198*/
@SuppressWarnings("unused")
class MediaDAO extends EntityBaseDAO {
entity.setLength(iterator.length());
entity.setCreated(iterator.created());
entity.setArchived(iterator.archived());
+ entity.setModified(iterator.modified());
entity.setPoster(iterator.poster());
if (result == null)
@Override
protected ResultSetIterImpl selectByKey(DefaultContext context, long id) throws SQLException{
MediaIter iter = null;
- /*@lineinfo:generated-code*//*@lineinfo:78^2*/
+ /*@lineinfo:generated-code*//*@lineinfo:79^2*/
// ************************************************************
-// #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA WHERE ID = :id };
+// #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE ID = :id };
// ************************************************************
{
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:78^146*/
+/*@lineinfo:user-code*//*@lineinfo:79^156*/
return iter;
}
@Override
protected ResultSetIterImpl selectByForeignKey(DefaultContext context, long id) throws SQLException{
MediaIter iter = null;
- /*@lineinfo:generated-code*//*@lineinfo:85^2*/
+ /*@lineinfo:generated-code*//*@lineinfo:86^2*/
// ************************************************************
-// #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA WHERE ITEMID = :id };
+// #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE ITEMID = :id };
// ************************************************************
{
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:85^150*/
+/*@lineinfo:user-code*//*@lineinfo:86^160*/
return iter;
}
- @Override
- protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{
+ public ResultSetIterImpl selectByTitle(DefaultContext context, String title) throws SQLException{
MediaIter iter = null;
/*@lineinfo:generated-code*//*@lineinfo:92^2*/
// ************************************************************
-// #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, POSTER FROM MEDIA };
+// #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA WHERE TITLE = :title };
// ************************************************************
{
synchronized (__sJT_execCtx) {
sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 2);
try
+ {
+ __sJT_stmt.setString(1, title);
+ iter = new MediaIter(__sJT_execCtx.executeQuery(), __sJT_execCtx.getFetchSize(), __sJT_execCtx.getMaxRows());
+ }
+ finally
+ {
+ __sJT_execCtx.releaseStatement();
+ }
+ }
+}
+
+
+// ************************************************************
+
+/*@lineinfo:user-code*//*@lineinfo:92^162*/
+ return iter;
+ }
+
+ @Override
+ protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{
+ MediaIter iter = null;
+ /*@lineinfo:generated-code*//*@lineinfo:99^2*/
+
+// ************************************************************
+// #sql [context] iter = { SELECT ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, CREATED, ARCHIVED, MODIFIED, POSTER FROM MEDIA };
+// ************************************************************
+
+{
+ sqlj.runtime.ConnectionContext __sJT_connCtx = context;
+ if (__sJT_connCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_DEFAULT_CONN_CTX();
+ sqlj.runtime.ExecutionContext __sJT_execCtx = __sJT_connCtx.getExecutionContext();
+ if (__sJT_execCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_EXEC_CTX();
+ synchronized (__sJT_execCtx) {
+ sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 3);
+ try
{
iter = new MediaIter(__sJT_execCtx.executeQuery(), __sJT_execCtx.getFetchSize(), __sJT_execCtx.getMaxRows());
}
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:92^131*/
+/*@lineinfo:user-code*//*@lineinfo:99^141*/
return iter;
}
@Override
protected void delete(DefaultContext context, long id) throws SQLException{
- /*@lineinfo:generated-code*//*@lineinfo:98^2*/
+ /*@lineinfo:generated-code*//*@lineinfo:105^2*/
// ************************************************************
// #sql [context] { DELETE FROM MEDIA WHERE ID = :id };
sqlj.runtime.ExecutionContext __sJT_execCtx = __sJT_connCtx.getExecutionContext();
if (__sJT_execCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_EXEC_CTX();
synchronized (__sJT_execCtx) {
- sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 3);
+ sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 4);
try
{
__sJT_stmt.setLong(1, id);
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:98^52*/
+/*@lineinfo:user-code*//*@lineinfo:105^52*/
}
@Override
protected void truncateTable(DefaultContext context) throws SQLException{
- /*@lineinfo:generated-code*//*@lineinfo:103^2*/
+ /*@lineinfo:generated-code*//*@lineinfo:110^2*/
// ************************************************************
// #sql [context] { TRUNCATE TABLE MEDIA DROP STORAGE IGNORE DELETE TRIGGERS IMMEDIATE };
sqlj.runtime.ExecutionContext __sJT_execCtx = __sJT_connCtx.getExecutionContext();
if (__sJT_execCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_EXEC_CTX();
synchronized (__sJT_execCtx) {
- sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 4);
+ sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 5);
try
{
__sJT_execCtx.executeUpdate();
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:103^86*/
+/*@lineinfo:user-code*//*@lineinfo:110^86*/
}
@Override
long length = obj.getLength();
byte[] poster = obj.getPoster();
Timestamp archived = obj.getArchived();
+ Timestamp modified = obj.getModified();
- /*@lineinfo:generated-code*//*@lineinfo:119^2*/
+ /*@lineinfo:generated-code*//*@lineinfo:127^2*/
// ************************************************************
-// #sql [context] { UPDATE MEDIA SET TITLE = :title, DESCRIPTION = :description, ITEMID = :itemId, ITEMTYPEID = :itemTypeId, HOUSEID = :houseId, LENGTH = :length, POSTER = :poster, ARCHIVED = :archived WHERE ID = :id };
+// #sql [context] { UPDATE MEDIA SET TITLE = :title, DESCRIPTION = :description, ITEMID = :itemId, ITEMTYPEID = :itemTypeId, HOUSEID = :houseId, LENGTH = :length, POSTER = :poster, ARCHIVED = :archived, MODIFIED = :modified WHERE ID = :id };
// ************************************************************
{
sqlj.runtime.ExecutionContext __sJT_execCtx = __sJT_connCtx.getExecutionContext();
if (__sJT_execCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_EXEC_CTX();
synchronized (__sJT_execCtx) {
- sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 5);
+ sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 6);
try
{
__sJT_stmt.setString(1, title);
__sJT_stmt.setLong(6, length);
__sJT_stmt.setBytes(7, poster);
__sJT_stmt.setTimestamp(8, archived);
- __sJT_stmt.setLong(9, id);
+ __sJT_stmt.setTimestamp(9, modified);
+ __sJT_stmt.setLong(10, id);
__sJT_execCtx.executeUpdate();
}
finally
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:119^216*/
+/*@lineinfo:user-code*//*@lineinfo:127^238*/
}
@Override
long length = obj.getLength();
byte[] poster = obj.getPoster();
Timestamp archived = obj.getArchived();
+ Timestamp modified = obj.getModified();
- /*@lineinfo:generated-code*//*@lineinfo:135^2*/
+ /*@lineinfo:generated-code*//*@lineinfo:144^2*/
// ************************************************************
-// #sql [context] { INSERT INTO MEDIA (ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, POSTER, ARCHIVED) VALUES (:id, :title, :description, :itemId, :itemTypeId, :houseId, :length, :poster, :archived) };
+// #sql [context] { INSERT INTO MEDIA (ID, TITLE, DESCRIPTION, ITEMID, ITEMTYPEID, HOUSEID, LENGTH, POSTER, ARCHIVED, MODIFIED) VALUES (:id, :title, :description, :itemId, :itemTypeId, :houseId, :length, :poster, :archived, :modified) };
// ************************************************************
{
sqlj.runtime.ExecutionContext __sJT_execCtx = __sJT_connCtx.getExecutionContext();
if (__sJT_execCtx == null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_EXEC_CTX();
synchronized (__sJT_execCtx) {
- sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 6);
+ sqlj.runtime.profile.RTStatement __sJT_stmt = __sJT_execCtx.registerStatement(__sJT_connCtx, MediaDAO_SJProfileKeys.getKey(0), 7);
try
{
__sJT_stmt.setLong(1, id);
__sJT_stmt.setLong(7, length);
__sJT_stmt.setBytes(8, poster);
__sJT_stmt.setTimestamp(9, archived);
+ __sJT_stmt.setTimestamp(10, modified);
__sJT_execCtx.executeUpdate();
}
finally
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:135^213*/
+/*@lineinfo:user-code*//*@lineinfo:144^234*/
}
/**
- * Besz\ufffdrja az Item objektumhoz kapcsol\ufffdd\ufffd statikus/dinamikus Media adatokat.
+ * Besz\ufffd\ufffd\ufffdrja az Item objektumhoz kapcsol\ufffd\ufffd\ufffdd\ufffd\ufffd\ufffd statikus/dinamikus Media adatokat.
*/
void addAll(DefaultContext context, IEntityBase entity) throws SQLException {
manager.traceIn();
--- /dev/null
+--
+-- Copyright 2010-2016 the original author or authors.
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+-- // Alter missing proxy view, select video only
+-- Migration SQL that makes the change goes here.
+
+DROP VIEW VW_MISSING_PROXY_IDS
+@
+
+CREATE VIEW VW_MISSING_PROXY_IDS AS
+select m.id as mediaid
+from vw_mediafiles v, mediafile mf, filetype ft, media m
+where
+ m.id = mf.mediaid and
+ mf.mediaid = v.mediaid and
+ v.mediafilecount = 1 and
+ mf.filetypeid = ft.id and
+ ft.name = 'High-res' and
+ UPPER(RIGHT(mf.HOUSEID, 3)) IN ('.TS', 'M4V', 'MOV', 'MP4', 'MPG', 'MXF')
+@
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+DROP VIEW VW_MISSING_PROXY_IDS
+@
+
+CREATE VIEW VW_MISSING_PROXY_IDS AS
+ select m.id as mediaid
+ from vw_mediafiles v, mediafile mf, filetype ft, media m
+ where
+ m.id = mf.mediaid and
+ mf.mediaid = v.mediaid and
+ v.mediafilecount = 1 and
+ mf.filetypeid = ft.id and
+ ft.name = 'High-res'
+@
REFERENCES DB2ADMIN.MEDIAFILE(ID)\r
\r
db2ts "drop index media_description for text connect to mc" \r
-db2ts "create index media_description for text on MEDIADESCRIPTION(DESCRIPTION) UPDATE FREQUENCY D(*) H(*) M(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59) UPDATE MINIMUM 1 connect to mc"\r
+db2ts "create index media_description for text on MEDIADESCRIPTION(DESCRIPTION) UPDATE FREQUENCY D(*) H(*) M(2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58) UPDATE MINIMUM 1 connect to mc"\r
db2ts "update index media_description for text connect to mc"\r
\ No newline at end of file
import java.sql.Statement;\r
import java.sql.Timestamp;\r
import java.text.SimpleDateFormat;\r
+import java.time.Instant;\r
import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.Calendar;\r
entity.setDescription(description);\r
entity.setHouseId(houseId);\r
entity.setLength(0);\r
+ entity.setModified(Timestamp.from(Instant.now()));\r
traceOut();\r
return entity;\r
}\r
<rows>\r
<row>\r
Tartomány\r
- <label id="domain" width="200px" value="intra.echotv.hu" />\r
+ <label id="domain" width="200px" value="@load(jlm.domain)" />\r
</row>\r
<row>\r
Felhasználó\r
import user.jobengine.server.scheduler.SchedulerService;
public interface IJobEngine {
- static final int QUEUE_POLL_INTERVAL_MS = 1;
+ static final int QUEUE_POLL_INTERVAL_MS = 50;
void addJobChangedEventListener(IJobChangedListener listener);
@Override
public void processJobStepCompletedMessage(IJobMessage message) {
- // TODO cancel nem megy, valszeg itt van gubasz
IJobRuntime jobRuntime = getJobById(message.getJobId());
- if (jobRuntime.getParentJobId() > 0)
- removeSpanwChild(jobRuntime);
+ //TODO ez hibat okoz az archivalasnal, mert hamarabb eltavolitja a childUd-ket
+
+ // if (jobRuntime.getParentJobId() > 0)
+ // removeSpanwChild(jobRuntime);
JobStepCompletedMessage m = (JobStepCompletedMessage) message;
//kesz vagyunk, jelezni
@Override
public void suspendExecutingJob(Throwable t, IJobRuntime jobRuntime) {
- String description = t.getClass().getSimpleName() + ": " + t.getMessage();
+ String description = t.getMessage();
jobRuntime.setDescription(description);
logger.error(description);
//TODO itt miert FINISH a kovetkezo allapot, miert nem SUSPEND
@Override
public void suspendWaitExecutorJob(Throwable t, IJobRuntime jobRuntime) {
- String description = t.getClass().getSimpleName() + ": " + t.getMessage();
+ String description = t.getMessage();
jobRuntime.setDescription(description);
logger.error(description);
statusMachine.processAction(JobAction.SUSPEND, jobRuntime);
if (event.getSignalType().equals(SignalType.CREATE)) {
if (child.getParentJobId() == getId()) {
childrenIDs.add(child.getId());
+ logger.info("Added child {} to {}", child.getId(), getId());
}
if (child.getParentJobId() != getId() && childrenIDs.contains(child.getParentJobId())) {
}
}
- boolean isChildDeleted = event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId());
- boolean isChildHasError = event.getSignalType().equals(SignalType.UPDATE) && childrenIDs.contains(child.getId())
- && JobStatus.SUSPENDED.equals(child.getStatus());
- if (isChildDeleted || isChildHasError) {
- childrenIDs.remove(child.getId());
- if (childrenIDs.size() == 0)
+ if (childrenIDs.contains(child.getId())) {
+ logger.info("Child {} notification", child.getId());
+ switch (event.getSignalType()) {
+ case UPDATE:
+ if (JobStatus.SUSPENDED.equals(child.getStatus()))
+ forkSempahore.release();
+ break;
+ case DELETE:
+ removeSpanwChild(child.getId());
+ break;
+ }
+
+ if (!getJobEngine().isRunning())
forkSempahore.release();
}
- if (!getJobEngine().isRunning())
- forkSempahore.release();
-
- //A gyerek(ek) el sem indultak, pl. nem letezik a template
- if (event.getSignalType().equals(SignalType.UPDATE) && JobStatus.SUSPENDED.equals(getStatus()))
- forkSempahore.release();
};
logger.info("Adding job changed listener");
return;
logger.info("Waiting for semaphore {}", forkSempahore);
forkSempahore.acquire();
- logger.info("Removing job changed listener");
if (getJobEngine().isRunning()) {
logger.info("Removing job changed listener");
getJobEngine().removeJobChangedEventListener(spawnJobListener);
@Override
public void removeSpanwChild(long id) {
- childrenIDs.remove(id);
+ if (childrenIDs != null && childrenIDs.contains(id)) {
+ childrenIDs.remove(id);
+ if (childrenIDs.size() == 0 && forkSempahore != null)
+ forkSempahore.release();
+ }
}
@Override
return status;\r
}\r
\r
+ public boolean isRuntimeTerminated() {\r
+ return JobStatus.FINISHED.equals(status) || JobStatus.SUSPENDED.equals(status);\r
+ }\r
+\r
}\r
private int maxConcurrent;
private String stepUnitName;
private boolean isRemote;
+ private URLClassLoader parentLoader;
public JobStepExecutor() {
}
if (StringUtils.isEmpty(stepUnitName))
throw new JobEngineException("Step unit name can't be null.");
+ parentLoader = URLClassLoader.newInstance(DynamicClassLocator.makeURLs(), getClass().getClassLoader());
if (!isGroovyStep()) {
//a groovy-nak nem kell
try {
- URLClassLoader loader = URLClassLoader.newInstance(DynamicClassLocator.makeURLs(), getClass().getClassLoader());
- stepClass = (Class<IJobStep>) loader.loadClass(stepUnitName);
+ stepClass = (Class<IJobStep>) parentLoader.loadClass(stepUnitName);
} catch (ClassNotFoundException e1) {
logger.catching(e1);
throw new JobEngineException("System can't load JobStep implementation: " + stepUnitName);
IJobStep result = null;
if (isGroovyStep()) {
- GroovyClassLoader gcl = new GroovyClassLoader();
+ GroovyClassLoader gcl = new GroovyClassLoader(parentLoader);
Class myClass = gcl.parseClass(Paths.get(System.getProperty("jobengine.jobsteps.groovy.root", ""), stepUnitName).toFile());
result = (IJobStep) myClass.newInstance();
} else
}
private boolean isGroovyStep() {
- return stepUnitName.toLowerCase().endsWith(".java");
+ return stepUnitName.toLowerCase().endsWith(".java") || stepUnitName.toLowerCase().endsWith(".groovy");
}
@Override
private String password;\r
private String message;\r
private String query;\r
+ private String domain;\r
\r
@AfterCompose\r
public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
\r
MediaCubeConfig mediaCubeConfig = SessionUtil.getMediaCubeConfig();\r
MediaCubeAuthentication authentication = mediaCubeConfig.getAuthentication();\r
+ domain = authentication.getAdHost();\r
if (StringUtils.isNotEmpty(authentication.getDefaultUser()) && StringUtils.isNotBlank(authentication.getDefaultPassword()))\r
authenticate(authentication.getDefaultUser(), authentication.getDefaultPassword());\r
}\r
return account;\r
}\r
\r
+ public String getDomain() {\r
+ return domain;\r
+ }\r
+\r
public String getMessage() {\r
return message;\r
}\r
--- /dev/null
+package user.jobengine.server.IT;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.FileInputStream;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.CountDownLatch;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import user.commons.JobStatus;
+import user.commons.StoreUri;
+import user.commons.remotestore.RemoteStoreProtocol;
+import user.jobengine.db.IItemManager;
+import user.jobengine.db.ItemManager;
+import user.jobengine.db.Store;
+import user.jobengine.server.IJobEngine;
+import user.jobengine.server.IJobRuntime;
+import user.jobengine.server.JobEngine;
+
+public class AMCTests {
+ private static IItemManager manager;
+ private static IJobEngine jobEngine;
+
+ @BeforeClass
+ public static void initialize() throws Exception {
+ //Kornyezeti valtozok betoltese
+ Properties properties = new Properties();
+ URL srcLocation = AMCTests.class.getProtectionDomain().getCodeSource().getLocation();
+ URL location = new URL(srcLocation, "../../-configuration/mediacube-dev-user.properties");
+ properties.load(new FileInputStream(location.toURI().getPath().toString()));
+ System.getProperties().putAll(properties);
+
+ manager = new ItemManager();
+ manager.connect();
+
+ jobEngine = new JobEngine();
+ jobEngine.startup();
+ jobEngine.bindItemManagerService(manager);
+
+ }
+
+ @AfterClass
+ public static void terminate() throws Exception {
+ jobEngine.shutdown();
+ manager.disconnect();
+ }
+
+ @Test
+ public void testNexioCheckerStep() throws Exception {
+ Store nexioStore = manager.createStore("NEXIO", false, false);
+ nexioStore.add();
+
+ //Tesztelni a HirTV-n lehet
+ StoreUri storeUri = manager.createStoreUri(RemoteStoreProtocol.NEXIO, "10.10.1.55");
+ storeUri.setStoreId(nexioStore.getId());
+ storeUri.add();
+
+ CountDownLatch finishLatch = new CountDownLatch(1);
+
+ Map<String, Object> jobParams = new HashMap<>();
+ jobParams.put("storeName", "NEXIO");
+ jobParams.put("outputPath", "/opt");
+ jobParams.put("limit", 1);
+
+ IJobRuntime jobRuntime = jobEngine.submit(null, e -> {
+ if (e.isRuntimeTerminated())
+ finishLatch.countDown();
+ }, "nexio-check.xml", "NEXIO check", jobParams);
+
+ finishLatch.await();
+
+ storeUri.remove();
+ nexioStore.remove();
+
+ assertEquals(JobStatus.FINISHED, jobRuntime.getStatus());
+ }
+
+}