From a52438148e23882308674c74d56b3976421a8e10 Mon Sep 17 00:00:00 2001 From: "vasary.daniel" Date: Thu, 16 Sep 2021 19:06:35 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C32334 --- .../run-mediacube-server-mv.launch | 2 +- .../production/HIRTV/jobs/schedules.json | 12 + .../MEDIAVIVANTIS/jobs/executors.xml | 1 + .../MEDIAVIVANTIS/jobs/schedules.json | 5 +- .../jobs/steps/MetadataUpdater.java | 297 ++++++++++++++++++ .../jobs/templates/metadata-updater.xml | 6 + .../settings/application.yaml | 4 +- .../executors/tests/SupportSelectAll.java | 67 ++++ .../META-INF/MANIFEST.MF | 1 + .../server/steps/MetadataUpdater.java | 297 ++++++++++++++++++ .../server/JobEngineConfiguration.java | 6 +- .../jobengine/zk/model/JobSelectorModel.java | 7 +- 12 files changed, 699 insertions(+), 6 deletions(-) create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataUpdater.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/templates/metadata-updater.xml create mode 100644 server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportSelectAll.java create mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataUpdater.java diff --git a/server/-configuration/run-mediacube-server-mv.launch b/server/-configuration/run-mediacube-server-mv.launch index 5e4df1ae..f08e5a1f 100644 --- a/server/-configuration/run-mediacube-server-mv.launch +++ b/server/-configuration/run-mediacube-server-mv.launch @@ -21,7 +21,7 @@ - + diff --git a/server/-product/production/HIRTV/jobs/schedules.json b/server/-product/production/HIRTV/jobs/schedules.json index f6428f7e..05dbfadd 100644 --- a/server/-product/production/HIRTV/jobs/schedules.json +++ b/server/-product/production/HIRTV/jobs/schedules.json @@ -12,6 +12,18 @@ } ] }, + { + "active": false, + "cronexpression": "0/2 * * * * ?", + "template": "cancelable.xml", + "parameters": [ + { + "name": "param", + "value": 200, + "type": "java.lang.Integer" + } + ] + }, { "active": false, "template": "test-fork-cancelable.xml", diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/executors.xml b/server/-product/production/MEDIAVIVANTIS/jobs/executors.xml index 22205fbb..a0541aae 100644 --- a/server/-product/production/MEDIAVIVANTIS/jobs/executors.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/executors.xml @@ -1,5 +1,6 @@ + diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/schedules.json b/server/-product/production/MEDIAVIVANTIS/jobs/schedules.json index f9cae31a..87d4c2dd 100644 --- a/server/-product/production/MEDIAVIVANTIS/jobs/schedules.json +++ b/server/-product/production/MEDIAVIVANTIS/jobs/schedules.json @@ -1,12 +1,15 @@ {"joblist":[ { + "template": "metadata-updater.xml" + }, + { "active": false, "executeimmediate": false, "name" : "Rekurzív törlés /mnt/POLC/FINISHED_SHOWS (DEMO)", "template": "safe-delete-recursive.xml", "cronexpression": "0 */1 * * * ?", "parameters": [ - {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"}, + {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"} ] }, { diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataUpdater.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataUpdater.java new file mode 100644 index 00000000..681618a7 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataUpdater.java @@ -0,0 +1,297 @@ +package user.jobengine.server.steps; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.ResultSet; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.io.FileUtils; +import org.apache.ibatis.jdbc.SQL; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +import com.ibm.nosql.json.api.BasicDBObject; + +import user.jobengine.db.IItemManager; +import user.jobengine.server.steps.shared.MetadataTypeDetector; +import user.mediacube.metadata.interfaces.IMetadata; +import user.mediacube.metadata.interfaces.IMetadataProvider; +import user.mediacube.metadata.interfaces.IMetadataProviderFactory; +import user.mediacube.metadata.interfaces.MetadataProviderType; +import user.mediacube.metadata.interfaces.MetadataType; +import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions; + +public class MetadataUpdater extends JobStep { + private static final String EMPTY = ""; + private static final String DOT = "."; + private static final Logger logger = LogManager.getLogger(MetadataUpdater.class); + private Marker csvMarker = MarkerManager.getMarker("METADATA-UPDATER-CSV"); + + private static final String ITEM_TITLE = "itemTitle"; + private static final String ITEM_HOUSEID = "itemHouseId"; + private static final String MEDIA_HOUSEID = "mediaHouseId"; + private static final String MEDIA_TITLE = "mediaTitle"; + private static final String MEDIA_DESCRIPTION = "mediaDescription"; + private static final String MEDIA_TYPE = "mediaType"; + private static final String MEDIAFILE_HOUSEID = "mediaFileHouseId"; + + private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + private Set includeList; + + public String createQuery() { + SQL isql = new SQL(); + isql.SELECT("id"); + isql.FROM("STORE"); + isql.WHERE("name = 'TSM'"); + + SQL sql = new SQL(); + sql.SELECT("i.id AS itemId"); + sql.SELECT("i.houseid AS itemHouseId"); + sql.SELECT("i.title AS itemTitle"); + //sql.SELECT("i.description AS itemdescription"); + sql.SELECT("m.id AS mediaId"); + sql.SELECT("m.houseid AS mediaHouseId"); + sql.SELECT("m.title AS mediaTitle"); + sql.SELECT("m.description AS mediaDescription"); + sql.SELECT("mf.houseid AS mediaFileHouseId"); + sql.FROM("MEDIAFILE mf"); + sql.LEFT_OUTER_JOIN("MEDIA m ON (m.id = mf.mediaid)"); + sql.LEFT_OUTER_JOIN("ITEM i ON (i.id = m.itemid)"); + sql.WHERE(String.format("mf.storeid = (%s)", isql.toString())); + return sql.toString(); + } + + public String createCountQuery() { + SQL sql = new SQL(); + sql.SELECT("COUNT(*) as count"); + sql.FROM("MEDIA"); + return sql.toString(); + } + + @StepEntry + public Object[] execute() throws Exception { + try { + + String location = "/opt/test-mediacube/file_list_original.txt"; + includeList = loadIncludeList(location); + + IItemManager manager = getManager(); + String sql = createCountQuery(); + long[] count = new long[1]; + count[0] = 0; + manager.executeQuery(sql, rs -> { + try { + count[0] = rs.getLong("count"); + logger.info(getSessionMarker(), "Processing rs"); + } catch (Exception e) { + logger.error(getMarker(), e.getMessage()); + } + return true; + }, null); + + logger.info(getSessionMarker(), "Count {}", count[0]); + + long[] current = new long[1]; + current[0] = 0; + + logger.info(csvMarker, "Date;Name;isProgramById;includeContains;isMetadataEquals;itemHouseId;P itemHouseId;itemHouseIdEquals;itemTitle;P itemTitle;itemTitleEquals;mediaHouseId;" + + "P mediaHouseId;mediaHouseIdEquals;mediaTitle;P mediaTitle;mediaTitleEquals;" + + "mediaDescription;P mediaDescription;mediaDescriptionEquals;"); + + + sql = createQuery(); + manager.executeQuery(sql, rs -> { + + if (getJobRuntime().isWaitingCancel()) + return false; + + current[0]++; + processRecord(rs); + int p = (int) current[0] * 100 / (int) count[0]; + setProgress(p); + return true; + }, null); + + } catch (Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + } + return null; + } + + private String set(String value) { + return value == null ? EMPTY : value; + } + + private void processRecord(ResultSet rs) { + try { + String itemHouseId = set(rs.getString(ITEM_TITLE)); + String itemTitle = set(rs.getString(ITEM_TITLE)); + String mediaHouseId = set(rs.getString(MEDIA_HOUSEID)); + String mediaTitle = set(rs.getString(MEDIA_TITLE)); + String mediaDescription = set(rs.getString(MEDIA_DESCRIPTION)); + String pitemHouseId = EMPTY; + String pitemTitle = EMPTY; + String pmediaHouseId = EMPTY; + String pmediaTitle = EMPTY; + String pmediaDescription = EMPTY; + + String fileName = rs.getString(MEDIAFILE_HOUSEID); + String mediaFileHouseId = fileName; + if (mediaFileHouseId.contains(DOT)) + mediaFileHouseId = mediaFileHouseId.substring(0, mediaFileHouseId.lastIndexOf(DOT)); + + user.jobengine.server.steps.shared.MetadataType metadataType = MetadataTypeDetector + .GuessMetadataType(mediaFileHouseId); + + boolean isProgramById = false; + boolean includeContains = includeList.contains(fileName); + boolean itemHouseIdEquals = false; + boolean itemTitleEquals = false; + boolean mediaHouseIdEquals = false; + boolean mediaTitleEquals = false; + boolean mediaDescriptionEquals = false; + + logger.info(getMarker(), "{} {}", mediaFileHouseId, metadataType); + ArchiveItem archiveItem = getPlanAirMetadata(mediaFileHouseId); + if (archiveItem != null) { + isProgramById = true; + + if (isProgramById) { + + pitemHouseId = set(archiveItem.getItemHouseId()); + itemHouseIdEquals = pitemHouseId.equals(itemHouseId); + + pitemTitle = set(archiveItem.getItemTitle()); + itemTitleEquals = pitemTitle.equals(itemTitle); + + pmediaHouseId = set(archiveItem.getMediaHouseId()); + mediaHouseIdEquals = pmediaHouseId.equals(mediaHouseId); + + pmediaTitle = set(archiveItem.getMediaTitle()); + mediaTitleEquals = pmediaTitle.equals(mediaTitle); + + pmediaDescription = set(archiveItem.getMediaDescription()); + mediaDescriptionEquals = pmediaDescription.equals(mediaDescription); + + boolean isMetadataEquals = itemHouseIdEquals && itemTitleEquals && mediaHouseIdEquals + && mediaTitleEquals && mediaDescriptionEquals; + + Date now = new Date(System.currentTimeMillis()); + logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now), + fileName, YN(isProgramById), YN(includeContains), YN(isMetadataEquals), itemHouseId, + pitemHouseId, itemHouseIdEquals, itemTitle, pitemTitle, itemTitleEquals, mediaHouseId, + pmediaHouseId, mediaHouseIdEquals, mediaTitle, pmediaTitle, mediaTitleEquals, + mediaDescription, pmediaDescription, mediaDescriptionEquals); + + logger.info(getSessionMarker(), "Processed {} {}{}{}", fileName, YN(isProgramById), + YN(includeContains), YN(isMetadataEquals)); + } + } + + } catch ( + + Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + } + + } + + private ArchiveItem getPlanAirMetadata(String mediaHouseId) throws Exception { + PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions(); + opt.setSearch(mediaHouseId); + opt.setType(MetadataType.Material); + + BasicDBObject json = null; + List data = null; + + IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class); + if (factory == null) + logger.info(getSessionMarker(), "IMetadataProviderFactory is null"); + + IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR); + if (planairProvider == null) + logger.info(getSessionMarker(), "IMetadataProvider is null"); + + ArchiveItem result = null; + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + else { + opt.setType(MetadataType.Promo); + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + else { + opt.setType(MetadataType.AD); + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + } + } + if (json != null) { + result = new ArchiveItem(); + result.setItemHouseId(json.getString(ITEM_HOUSEID)); + result.setItemTitle(json.getString(ITEM_TITLE)); + result.setMediaHouseId(json.getString(MEDIA_HOUSEID)); + result.setMediaTitle(json.getString(MEDIA_TITLE)); + result.setMediaDescription(json.getString(MEDIA_DESCRIPTION)); + result.setMediaType(json.getString(MEDIA_TYPE)); + } + return result; + } + + private char YN(boolean value) { + return value ? 'Y' : 'N'; + } + + private String D(Date value) { + return value == null ? EMPTY : df.format(value); + } + + private Set loadIncludeList(String location) throws IOException { + logger.info(getSessionMarker(), "Loading include list {}", location); + Set result = new LinkedHashSet<>(); + + Path path = Paths.get(location); + List lines = FileUtils.readLines(path.toFile()); + + String lastDir = null; + for (String line : lines) { + line = line.trim(); + if (line.startsWith("Directory of")) { + lastDir = line; + lastDir = lastDir.replace("Directory of", EMPTY); + lastDir = lastDir.replace("X:", EMPTY); + lastDir = lastDir.replace("\\", "/"); + lastDir = lastDir.trim(); + } + + if (lastDir != null && lastDir.endsWith(".STATUS")) + continue; + + if (line.startsWith("2") && line.length() > 39) { + String file = line.substring(39).trim(); + + if (file.equals(DOT) || file.equals("..")) + continue; + + String len = line.substring(21, 39).trim(); + if (len.length() != 0) { + String fullpath = "/mnt/POLC/FINISHED_SHOWS" + lastDir + "/" + file; + result.add(Paths.get(fullpath).getFileName().toString()); + } + } + + } + + return result; + } + +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/templates/metadata-updater.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/metadata-updater.xml new file mode 100644 index 00000000..f516c3e2 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/metadata-updater.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/server/hu.user.mediacube.executors.tests/settings/application.yaml b/server/hu.user.mediacube.executors.tests/settings/application.yaml index bb5f8c7b..55e5eedb 100644 --- a/server/hu.user.mediacube.executors.tests/settings/application.yaml +++ b/server/hu.user.mediacube.executors.tests/settings/application.yaml @@ -1,6 +1,6 @@ datasource: mediacube: - url: jdbc:db2://10.10.1.27:50000/mc + url: jdbc:db2://10.11.1.90:50000/mc user: db2admin password: password external-indexer: false @@ -8,7 +8,7 @@ datasource: login-timeout: 3 pool-size: 10 mediacube-nosql: - url: jdbc:db2://10.10.1.27:50000/mc + url: jdbc:db2://10.11.1.90:50000/mc user: db2admin password: password schema: test diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportSelectAll.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportSelectAll.java new file mode 100644 index 00000000..30125b2f --- /dev/null +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportSelectAll.java @@ -0,0 +1,67 @@ +package hu.user.mediacube.executors.tests; + +import org.apache.ibatis.jdbc.SQL; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import user.jobengine.db.IItemManager; +import user.jobengine.db.ItemManager; + +/*** + * MediaVivantis delete-materials.log-bol kepzett file vizsgalata + * pl. cat delete-materials-12-30-2020-1.log delete-materials-04-16-2021-1.log | grep 'killdate bejegyzés alapján sikeresen' > deleted_finished_shows.txt + * @author elgekko + */ +public class SupportSelectAll { + Logger logger = LogManager.getLogger(); + + protected static IItemManager manager = null; + + @BeforeClass + static public void setUpConnection() throws Exception { + manager = new ItemManager(); + manager.connect(); + } + + @AfterClass + static public void tearDownConnection() throws Exception { + manager.disconnect(); + } + + public String createQuery() { + SQL isql = new SQL(); + isql.SELECT("id"); + isql.FROM("STORE"); + isql.WHERE("name = 'TSM'"); + + SQL sql = new SQL(); + sql.SELECT("i.id AS itemid"); + sql.SELECT("i.houseid AS itemhouseid"); + sql.SELECT("i.title AS itemtitle"); + sql.SELECT("i.description AS itemdescription"); + sql.SELECT("m.id AS mediaid"); + sql.SELECT("m.houseid AS mediahouseid"); + sql.SELECT("m.title AS mediatitle"); + sql.SELECT("m.description AS mediadescription"); + sql.SELECT("mf.houseid AS mediafilehouseid"); + sql.FROM("MEDIAFILE mf"); + sql.LEFT_OUTER_JOIN("MEDIA m ON (m.id = mf.mediaid)"); + sql.LEFT_OUTER_JOIN("ITEM i ON (i.id = m.itemid)"); + sql.WHERE(String.format("mf.storeid = (%s)", isql.toString())); + sql.FETCH_FIRST_ROWS_ONLY(10); + return sql.toString(); + } + + @Test + public void checkDeletedFinishedShows() throws Exception { + String sql = createQuery(); + manager.executeQuery(sql, rs -> { + logger.info("ID {}", rs.getLong("itemid")); + return true; + }, null); + + } +} diff --git a/server/user.jobengine.executors/META-INF/MANIFEST.MF b/server/user.jobengine.executors/META-INF/MANIFEST.MF index 48c56738..0a05cc27 100644 --- a/server/user.jobengine.executors/META-INF/MANIFEST.MF +++ b/server/user.jobengine.executors/META-INF/MANIFEST.MF @@ -41,6 +41,7 @@ Import-Package: groovy.lang;version="3.0.3", org.apache.http.message, org.apache.http.params, org.apache.http.protocol, + org.apache.ibatis.jdbc;version="3.5.2", org.apache.logging.log4j;version="2.8.2", org.apache.logging.log4j.message;version="2.8.2", org.joda.time;version="2.2.0", diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataUpdater.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataUpdater.java new file mode 100644 index 00000000..681618a7 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataUpdater.java @@ -0,0 +1,297 @@ +package user.jobengine.server.steps; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.ResultSet; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.apache.commons.io.FileUtils; +import org.apache.ibatis.jdbc.SQL; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +import com.ibm.nosql.json.api.BasicDBObject; + +import user.jobengine.db.IItemManager; +import user.jobengine.server.steps.shared.MetadataTypeDetector; +import user.mediacube.metadata.interfaces.IMetadata; +import user.mediacube.metadata.interfaces.IMetadataProvider; +import user.mediacube.metadata.interfaces.IMetadataProviderFactory; +import user.mediacube.metadata.interfaces.MetadataProviderType; +import user.mediacube.metadata.interfaces.MetadataType; +import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions; + +public class MetadataUpdater extends JobStep { + private static final String EMPTY = ""; + private static final String DOT = "."; + private static final Logger logger = LogManager.getLogger(MetadataUpdater.class); + private Marker csvMarker = MarkerManager.getMarker("METADATA-UPDATER-CSV"); + + private static final String ITEM_TITLE = "itemTitle"; + private static final String ITEM_HOUSEID = "itemHouseId"; + private static final String MEDIA_HOUSEID = "mediaHouseId"; + private static final String MEDIA_TITLE = "mediaTitle"; + private static final String MEDIA_DESCRIPTION = "mediaDescription"; + private static final String MEDIA_TYPE = "mediaType"; + private static final String MEDIAFILE_HOUSEID = "mediaFileHouseId"; + + private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + private Set includeList; + + public String createQuery() { + SQL isql = new SQL(); + isql.SELECT("id"); + isql.FROM("STORE"); + isql.WHERE("name = 'TSM'"); + + SQL sql = new SQL(); + sql.SELECT("i.id AS itemId"); + sql.SELECT("i.houseid AS itemHouseId"); + sql.SELECT("i.title AS itemTitle"); + //sql.SELECT("i.description AS itemdescription"); + sql.SELECT("m.id AS mediaId"); + sql.SELECT("m.houseid AS mediaHouseId"); + sql.SELECT("m.title AS mediaTitle"); + sql.SELECT("m.description AS mediaDescription"); + sql.SELECT("mf.houseid AS mediaFileHouseId"); + sql.FROM("MEDIAFILE mf"); + sql.LEFT_OUTER_JOIN("MEDIA m ON (m.id = mf.mediaid)"); + sql.LEFT_OUTER_JOIN("ITEM i ON (i.id = m.itemid)"); + sql.WHERE(String.format("mf.storeid = (%s)", isql.toString())); + return sql.toString(); + } + + public String createCountQuery() { + SQL sql = new SQL(); + sql.SELECT("COUNT(*) as count"); + sql.FROM("MEDIA"); + return sql.toString(); + } + + @StepEntry + public Object[] execute() throws Exception { + try { + + String location = "/opt/test-mediacube/file_list_original.txt"; + includeList = loadIncludeList(location); + + IItemManager manager = getManager(); + String sql = createCountQuery(); + long[] count = new long[1]; + count[0] = 0; + manager.executeQuery(sql, rs -> { + try { + count[0] = rs.getLong("count"); + logger.info(getSessionMarker(), "Processing rs"); + } catch (Exception e) { + logger.error(getMarker(), e.getMessage()); + } + return true; + }, null); + + logger.info(getSessionMarker(), "Count {}", count[0]); + + long[] current = new long[1]; + current[0] = 0; + + logger.info(csvMarker, "Date;Name;isProgramById;includeContains;isMetadataEquals;itemHouseId;P itemHouseId;itemHouseIdEquals;itemTitle;P itemTitle;itemTitleEquals;mediaHouseId;" + + "P mediaHouseId;mediaHouseIdEquals;mediaTitle;P mediaTitle;mediaTitleEquals;" + + "mediaDescription;P mediaDescription;mediaDescriptionEquals;"); + + + sql = createQuery(); + manager.executeQuery(sql, rs -> { + + if (getJobRuntime().isWaitingCancel()) + return false; + + current[0]++; + processRecord(rs); + int p = (int) current[0] * 100 / (int) count[0]; + setProgress(p); + return true; + }, null); + + } catch (Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + } + return null; + } + + private String set(String value) { + return value == null ? EMPTY : value; + } + + private void processRecord(ResultSet rs) { + try { + String itemHouseId = set(rs.getString(ITEM_TITLE)); + String itemTitle = set(rs.getString(ITEM_TITLE)); + String mediaHouseId = set(rs.getString(MEDIA_HOUSEID)); + String mediaTitle = set(rs.getString(MEDIA_TITLE)); + String mediaDescription = set(rs.getString(MEDIA_DESCRIPTION)); + String pitemHouseId = EMPTY; + String pitemTitle = EMPTY; + String pmediaHouseId = EMPTY; + String pmediaTitle = EMPTY; + String pmediaDescription = EMPTY; + + String fileName = rs.getString(MEDIAFILE_HOUSEID); + String mediaFileHouseId = fileName; + if (mediaFileHouseId.contains(DOT)) + mediaFileHouseId = mediaFileHouseId.substring(0, mediaFileHouseId.lastIndexOf(DOT)); + + user.jobengine.server.steps.shared.MetadataType metadataType = MetadataTypeDetector + .GuessMetadataType(mediaFileHouseId); + + boolean isProgramById = false; + boolean includeContains = includeList.contains(fileName); + boolean itemHouseIdEquals = false; + boolean itemTitleEquals = false; + boolean mediaHouseIdEquals = false; + boolean mediaTitleEquals = false; + boolean mediaDescriptionEquals = false; + + logger.info(getMarker(), "{} {}", mediaFileHouseId, metadataType); + ArchiveItem archiveItem = getPlanAirMetadata(mediaFileHouseId); + if (archiveItem != null) { + isProgramById = true; + + if (isProgramById) { + + pitemHouseId = set(archiveItem.getItemHouseId()); + itemHouseIdEquals = pitemHouseId.equals(itemHouseId); + + pitemTitle = set(archiveItem.getItemTitle()); + itemTitleEquals = pitemTitle.equals(itemTitle); + + pmediaHouseId = set(archiveItem.getMediaHouseId()); + mediaHouseIdEquals = pmediaHouseId.equals(mediaHouseId); + + pmediaTitle = set(archiveItem.getMediaTitle()); + mediaTitleEquals = pmediaTitle.equals(mediaTitle); + + pmediaDescription = set(archiveItem.getMediaDescription()); + mediaDescriptionEquals = pmediaDescription.equals(mediaDescription); + + boolean isMetadataEquals = itemHouseIdEquals && itemTitleEquals && mediaHouseIdEquals + && mediaTitleEquals && mediaDescriptionEquals; + + Date now = new Date(System.currentTimeMillis()); + logger.info(csvMarker, "{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};{};", D(now), + fileName, YN(isProgramById), YN(includeContains), YN(isMetadataEquals), itemHouseId, + pitemHouseId, itemHouseIdEquals, itemTitle, pitemTitle, itemTitleEquals, mediaHouseId, + pmediaHouseId, mediaHouseIdEquals, mediaTitle, pmediaTitle, mediaTitleEquals, + mediaDescription, pmediaDescription, mediaDescriptionEquals); + + logger.info(getSessionMarker(), "Processed {} {}{}{}", fileName, YN(isProgramById), + YN(includeContains), YN(isMetadataEquals)); + } + } + + } catch ( + + Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + } + + } + + private ArchiveItem getPlanAirMetadata(String mediaHouseId) throws Exception { + PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions(); + opt.setSearch(mediaHouseId); + opt.setType(MetadataType.Material); + + BasicDBObject json = null; + List data = null; + + IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class); + if (factory == null) + logger.info(getSessionMarker(), "IMetadataProviderFactory is null"); + + IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR); + if (planairProvider == null) + logger.info(getSessionMarker(), "IMetadataProvider is null"); + + ArchiveItem result = null; + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + else { + opt.setType(MetadataType.Promo); + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + else { + opt.setType(MetadataType.AD); + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + } + } + if (json != null) { + result = new ArchiveItem(); + result.setItemHouseId(json.getString(ITEM_HOUSEID)); + result.setItemTitle(json.getString(ITEM_TITLE)); + result.setMediaHouseId(json.getString(MEDIA_HOUSEID)); + result.setMediaTitle(json.getString(MEDIA_TITLE)); + result.setMediaDescription(json.getString(MEDIA_DESCRIPTION)); + result.setMediaType(json.getString(MEDIA_TYPE)); + } + return result; + } + + private char YN(boolean value) { + return value ? 'Y' : 'N'; + } + + private String D(Date value) { + return value == null ? EMPTY : df.format(value); + } + + private Set loadIncludeList(String location) throws IOException { + logger.info(getSessionMarker(), "Loading include list {}", location); + Set result = new LinkedHashSet<>(); + + Path path = Paths.get(location); + List lines = FileUtils.readLines(path.toFile()); + + String lastDir = null; + for (String line : lines) { + line = line.trim(); + if (line.startsWith("Directory of")) { + lastDir = line; + lastDir = lastDir.replace("Directory of", EMPTY); + lastDir = lastDir.replace("X:", EMPTY); + lastDir = lastDir.replace("\\", "/"); + lastDir = lastDir.trim(); + } + + if (lastDir != null && lastDir.endsWith(".STATUS")) + continue; + + if (line.startsWith("2") && line.length() > 39) { + String file = line.substring(39).trim(); + + if (file.equals(DOT) || file.equals("..")) + continue; + + String len = line.substring(21, 39).trim(); + if (len.length() != 0) { + String fullpath = "/mnt/POLC/FINISHED_SHOWS" + lastDir + "/" + file; + result.add(Paths.get(fullpath).getFileName().toString()); + } + } + + } + + return result; + } + +} diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java index 7f717088..a82cd32e 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java @@ -329,6 +329,8 @@ public class JobEngineConfiguration implements IJobEngineConfiguration { @Override public void loadSchedules() throws Exception { + + //a kulcs nem lehet a template, mert kulonbozo parameterekkel is benne lehet! schedules.clear(); String configFilePath = systemConfig.getConfig(JobEngineConfiguration.CONF_SCHEDULES); logger.info("Loading scheduler configuration file {}", configFilePath); @@ -356,7 +358,9 @@ public class JobEngineConfiguration implements IJobEngineConfiguration { && file.getFileName().toString().endsWith(".java"); try (Stream stream = Files.list(path)) { stream.filter(filter).forEach(p -> { - if (excludeFileName != null && !excludeFileName.equals(p.getFileName().toString())) + if (excludeFileName == null) + result.add(p.toFile()); + else if (!excludeFileName.equals(p.getFileName().toString())) result.add(p.toFile()); }); diff --git a/server/user.mediacube.gui/src/user/jobengine/zk/model/JobSelectorModel.java b/server/user.mediacube.gui/src/user/jobengine/zk/model/JobSelectorModel.java index d6a5919d..fa8ca9e8 100644 --- a/server/user.mediacube.gui/src/user/jobengine/zk/model/JobSelectorModel.java +++ b/server/user.mediacube.gui/src/user/jobengine/zk/model/JobSelectorModel.java @@ -58,7 +58,11 @@ public class JobSelectorModel extends BaseModel { if (selectedJob == null) return; String template = selectedJob.getString("template"); + + //ez bugos, az azonos template mas parameterekkel elnyelodik ScheduledJob scheduledJob = jobEngine.getScheduledJob(template); + + //ScheduledJob scheduledJob = jobEngine.getJobEngineConfiguration().createScheduledJob(selectedJob, jobEngine); try { scheduledJob.doManualJob(); } catch (Exception e) { @@ -87,7 +91,8 @@ public class JobSelectorModel extends BaseModel { } private void initJobList() { - List jobsCollection = new ArrayList<>(jobEngine.getJobEngineConfiguration().getSchedules().values()); + List jobsCollection = new ArrayList<>( + jobEngine.getJobEngineConfiguration().getSchedules().values()); Collections.sort(jobsCollection, (a, b) -> { String aName = a.getString("name"); if (aName == null) -- 2.54.0