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