--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.nio.file.Paths;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.stream.Collectors;\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
+import com.ibm.nosql.json.api.DB;\r
+import com.ibm.nosql.json.api.DBCollection;\r
+\r
+import user.commons.IJob;\r
+import user.commons.JobStatus;\r
+import user.commons.log4j2.marker.MediaCubeUndoMarker;\r
+import user.commons.nosql.NoSQLUtils;\r
+import user.jobengine.db.Media;\r
+import user.jobengine.db.MediaFile;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class ForkMissingLowresStep extends JobStep {\r
+ private static final String MISSING_LOWRES_COLLECTION = "missing_lowres_test";\r
+ private static final int MAX_ALLOWED_TRANSCODE = 4;\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String CHILD_TEMPLATE = "cancelable.xml";\r
+\r
+ @StepEntry\r
+ public Object[] execute(String localHiresPath) throws Exception {\r
+\r
+ int currentTranscodes = getExecutingTranscodeCount();\r
+ if (currentTranscodes == MAX_ALLOWED_TRANSCODE) {\r
+ return null;\r
+ }\r
+\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ DBCollection collection = db.getCollection(MISSING_LOWRES_COLLECTION);\r
+ List<Media> medias = getUntranscodedMedias(collection);\r
+\r
+ try {\r
+ if (medias.size() == 0) {\r
+ logger.info(new MediaCubeUndoMarker(getSessionMarker().getSessionID()), "Nincs feldolgozandó hiány.");\r
+ cancel();\r
+ return null;\r
+ }\r
+\r
+ for (Media media : medias) {\r
+ String name = media.getMediaFileRealName();\r
+ ArchiveItem archiveItem = new ArchiveItem();\r
+ archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString());\r
+ collection.save(new BasicDBObject("name", name));\r
+ logger.info(getSessionMarker(), "Processing mediaID: {}", media.getId());\r
+ Map<String, Object> parameters = new HashMap<>();\r
+\r
+ IJobRuntime child = getEngine().submit(CHILD_TEMPLATE, "Proxy pótlás", parameters);\r
+ if (child == null)\r
+ throw new Exception("Submit error.");\r
+// child.setDescription(escortFileName);\r
+// child.setRelated(downloadable.getString("title") + "|" + targetStore.getName());\r
+\r
+ }\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ setProgress(100);\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private int getExecutingTranscodeCount() {\r
+ Map<Long, IJobRuntime> jobs = getEngine().getJobs();\r
+ List<IJob> transcodeJobs = jobs.values().stream().filter(j -> j.getTemplate().equals(CHILD_TEMPLATE) && !JobStatus.SUSPENDED.equals(j.getStatus()))\r
+ .collect(Collectors.toList());\r
+ return transcodeJobs.size();\r
+ }\r
+\r
+ private List<Media> getUntranscodedMedias(DBCollection collection) {\r
+ List<Media> result = new ArrayList<>();\r
+ String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS";\r
+ getManager().executeQuery(query, rs -> {\r
+ try {\r
+ long mediaId = rs.getLong(1);\r
+ Media media = getManager().getMedia(mediaId);\r
+ // a nevgeneralas miatt az eredeti MediaFilesName nem jo, a pontos nev kell\r
+ // nekunk\r
+ String name = media.getMediaFileRealName();\r
+ long existing = collection.find(new BasicDBObject("name", name)).count();\r
+ if (existing > 0) {\r
+ // logger.info(getSessionMarker(), "{} is on missing_lowres list", name);\r
+ return true;\r
+ }\r
+\r
+ // 210617 proxy keszites tiltasa\r
+ MediaFile mf = getManager().getSystemMediaFile(media);\r
+ if (mf.isDisableProxy())\r
+ return true;\r
+\r
+ result.add(media);\r
+ int currentTranscodes = getExecutingTranscodeCount();\r
+ if (currentTranscodes + result.size() == MAX_ALLOWED_TRANSCODE)\r
+ return false;\r
+\r
+ } catch (Exception e) {\r
+ logger.error(e);\r
+ }\r
+ return true;\r
+ }, null);\r
+ return result;\r
+ }\r
+}\r