From: Vásáry Dániel Date: Fri, 16 Feb 2018 14:56:25 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=a730b3d309e2f77dcd3c6491e1f2e8628fa056a5;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30907 --- diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java index 03cadcfb..cdf70a2f 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeNoParamsStep.java @@ -1,16 +1,9 @@ package user.jobengine.server.steps; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.Semaphore; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import user.commons.ListUtils; -import user.jobengine.db.ItemManagerData.SignalType; -import user.jobengine.server.IJobChangedListener; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -18,37 +11,18 @@ public class FakeNoParamsStep extends JobStep { private static final String CHILD_TITLE = "Párhuzamosított alfolyamat"; private static final String CHILD_TEMPLATE = "fake-concurrent.xml"; private static final Logger logger = LogManager.getLogger(); - int count = 10; + int count = 2; @StepEntry public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - final Semaphore semaphore = new Semaphore(1); - List childrenIDs = Collections.synchronizedList(new ArrayList<>()); - - IJobChangedListener listener = event -> { - IJobRuntime child = event.getJob(); - if (event.getSignalType().equals(SignalType.CREATE)) { - if (child.getParentJobId() == jobRuntime.getId()) { - childrenIDs.add(child.getId()); - } - - if (child.getParentJobId() != jobRuntime.getId() && childrenIDs.contains(child.getParentJobId())) { - childrenIDs.add(child.getId()); - } + if (jobRuntime.forkPrepare()) { + for (int i = 0; i < count; i++) { + jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i)); } - if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) { - childrenIDs.remove(child.getId()); - if (childrenIDs.size() == 0) - semaphore.release(); - } - }; - jobEngine.addJobChangedEventListener(listener); - semaphore.acquire(); - for (int i = 0; i < count; i++) { - jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i)); } - semaphore.acquire(); - jobEngine.removeJobChangedEventListener(listener); + + jobRuntime.forkWaitComplete(); + logger.info("Done"); return null; } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java index c3b694d4..b5ca3150 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java @@ -2,6 +2,7 @@ package user.jobengine.server.steps; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.message.Message; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -15,8 +16,9 @@ public class FakeStep extends JobStep { public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { Object[] result = { itemID + 1 }; - logger.info(jobRuntime.getMarker(), "Starting with {}", itemID); - logger.error(jobRuntime.getMarker(), "Error with {}", itemID); + //logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId()); + Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId()); + logger.error(jobRuntime.getMarker(), message, new Exception("TESZT")); try { for (int i = 0; i < count; i++) { //sb.append("Sikeres iteráció : ") @@ -29,7 +31,6 @@ public class FakeStep extends JobStep { } catch (Exception e) { logger.error(e.getMessage()); } - logger.info(jobRuntime.getMarker(), "Resulting {}", result[0]); return result; } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkStep.java deleted file mode 100644 index fe17d209..00000000 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkStep.java +++ /dev/null @@ -1,50 +0,0 @@ -package user.jobengine.server.steps; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.Semaphore; - -import user.jobengine.db.ItemManagerData.SignalType; -import user.jobengine.server.IJobChangedListener; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; - -public abstract class ForkStep extends JobStep { - - @StepEntry - public void execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - final Semaphore semaphore = new Semaphore(1); - List childrenIDs = Collections.synchronizedList(new ArrayList<>()); - - IJobChangedListener listener = event -> { - IJobRuntime child = event.getJob(); - if (event.getSignalType().equals(SignalType.CREATE)) { - if (child.getParentJobId() == jobRuntime.getId()) { - childrenIDs.add(child.getId()); - } - - if (child.getParentJobId() != jobRuntime.getId() && childrenIDs.contains(child.getParentJobId())) { - childrenIDs.add(child.getId()); - } - } - if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) { - childrenIDs.remove(child.getId()); - if (childrenIDs.size() == 0) - semaphore.release(); - } - }; - jobEngine.addJobChangedEventListener(listener); - semaphore.acquire(); - try { - fork(jobEngine, jobRuntime); - } catch (Exception e) { - semaphore.release(); - throw e; - } - semaphore.acquire(); - jobEngine.removeJobChangedEventListener(listener); - } - - protected abstract void fork(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception; -} diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManagerData.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManagerData.java index bd83a7b3..9c5d0b98 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManagerData.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManagerData.java @@ -21,126 +21,125 @@ import user.commons.remotestore.RemoteStoreProtocol; * Adattípusok, enumerátorok. */ public class ItemManagerData { - private static final Logger logger = LogManager.getLogger(); + public enum BreakType { + IN, OUT, SEGMENT + } - public enum SignalType { - CREATE(0), UPDATE(1), DELETE(2); + public enum FilterLogic { + AND, OR + } - private final long value; + public enum FilterValueLogic { + CONTAINS, STARTSWITH, ENDSWITH, EQUALS, LESS, MORE, BEETWEN, ONEWEEK, TWOWEEKS, THREEWEEKS, ONEMONTH, TWOMONTHS, THREEMONTHS, SIXMONTHS, ONEYEAR + } - SignalType(long value) { - this.value = value; - } + // public enum LogLevel { + // TRACE, DEBUG, INFO, WARNING, ERROR, FATAL + // } - public long getValue() { - return value; - } + public enum GuiType { + LABEL, TEXTBOX, DATAGRID, DATEPICKER, DATETIMEPICKER, DOMAINCOMBO, DOMAINLOOKUP, MULTIDOMAINLOOKUP, CHECKBOX, COMBOBOX, MULTILINETEXTBOX, TIMECODE, NUMBER, WHOLENUMBER, METADATAELEMENT, METADATTYPE, FILETYPE, STORE, IMAGE } - public enum UserRight { - READONLY(1), READWRITE(3), ADMINISTRATOR(63); + public enum ListType { + LABEL, CHECKBOX, DOMAINLABEL, FOLDERICON, ICON, FILESIZE, WRAPPEDLABEL, TIMECODE, PROGRESS, THUMBNAIL, EDITABLETEXTBOX + } + + public enum MdType { + INDEX(0x0001), UNIQUE(0x0002), NULL(0x0004), EDIT(0x0008), LIST(0x0010), GENERATE(0x0020), SEARCH(0x0040); + + static public int getValues(MdType... flags) { + int result = 0; + if (flags != null) { + for (MdType mdtype : flags) + result += mdtype.getValue(); + } + return result; + } + + static public boolean is(int flags, MdType type) { + return ((flags & type.getValue()) == type.getValue()); + } private final int value; - UserRight(int value) { + MdType(int value) { this.value = value; } public int getValue() { return value; } - - static public boolean is(int flags, UserRight type) { - return ((flags & type.getValue()) == type.getValue()); - } } - // public enum LogLevel { - // TRACE, DEBUG, INFO, WARNING, ERROR, FATAL - // } - public enum OrderDirection { ASC, DESC } - public enum FilterLogic { - AND, OR - } - - public enum FilterValueLogic { - CONTAINS, STARTSWITH, ENDSWITH, EQUALS, LESS, MORE, BEETWEN, ONEWEEK, TWOWEEKS, THREEWEEKS, ONEMONTH, TWOMONTHS, THREEMONTHS, SIXMONTHS, ONEYEAR - } + public enum SignalType { + CREATE(0), UPDATE(1), DELETE(2); - public enum StaticTables { - ITEM(0), ITEMTYPE(1), MEDIA(2), MEDIAFILE(3), METADATA(4), METADATELEMENT(5), METADATATYPE(6), FOLDER(7), SHOT( - 8), BREAK(9), STORE(10), STOREURI(11), MEDIAINFO(12), REMOTESTORE(13), REMOTEFILE(14), SEARCHDEFINITION( - 15), DOMAIN(16), DOMAINCATEGORY(17), JOB(18), USERINFO(19), FILETYPE(20), SCENE( - 21), SCENECONTENT(22), TEMPLATE(23), TEMPLATESTEP(24), TEMPLATEDECLARATION( - 25), INPUTPARAM(26), OUTPUTPARAM(27), LOGEVENT(28), JOBSTART(29); private final long value; - StaticTables(long value) { + SignalType(long value) { this.value = value; } public long getValue() { return value; } - } public enum SqlIndexType { NONE, INDEX, UNIQUE } - public enum MdType { - INDEX(0x0001), UNIQUE(0x0002), NULL(0x0004), EDIT(0x0008), LIST(0x0010), GENERATE(0x0020), SEARCH(0x0040); + // public enum StaticField { + // NONE, + // ITEM_NAME, + // ITEM_DESCRIPTION, + // ITEM_HOUSEID, + // MEDIA_NAME, + // MEDIA_DESCRIPTION, + // MEDIA_HOUSEID + // } - private final int value; + public enum StaticTables { + ITEM(0), ITEMTYPE(1), MEDIA(2), MEDIAFILE(3), METADATA(4), METADATELEMENT(5), METADATATYPE(6), FOLDER(7), SHOT(8), BREAK(9), STORE(10), STOREURI( + 11), MEDIAINFO(12), REMOTESTORE(13), REMOTEFILE(14), SEARCHDEFINITION(15), DOMAIN(16), DOMAINCATEGORY(17), JOB(18), USERINFO(19), FILETYPE( + 20), SCENE(21), SCENECONTENT( + 22), TEMPLATE(23), TEMPLATESTEP(24), TEMPLATEDECLARATION(25), INPUTPARAM(26), OUTPUTPARAM(27), LOGEVENT(28), JOBSTART(29); + private final long value; - MdType(int value) { + StaticTables(long value) { this.value = value; } - public int getValue() { + public long getValue() { return value; } - static public boolean is(int flags, MdType type) { - return ((flags & type.getValue()) == type.getValue()); - } + } - static public int getValues(MdType... flags) { - int result = 0; - if (flags != null) { - for (MdType mdtype : flags) - result += mdtype.getValue(); - } - return result; + public enum UserRight { + READONLY(1), READWRITE(3), ADMINISTRATOR(63); + + static public boolean is(int flags, UserRight type) { + return ((flags & type.getValue()) == type.getValue()); } - } - // public enum StaticField { - // NONE, - // ITEM_NAME, - // ITEM_DESCRIPTION, - // ITEM_HOUSEID, - // MEDIA_NAME, - // MEDIA_DESCRIPTION, - // MEDIA_HOUSEID - // } + private final int value; - public enum GuiType { - LABEL, TEXTBOX, DATAGRID, DATEPICKER, DATETIMEPICKER, DOMAINCOMBO, DOMAINLOOKUP, MULTIDOMAINLOOKUP, CHECKBOX, COMBOBOX, MULTILINETEXTBOX, TIMECODE, NUMBER, WHOLENUMBER, METADATAELEMENT, METADATTYPE, FILETYPE, STORE, IMAGE - } + UserRight(int value) { + this.value = value; + } - public enum ListType { - LABEL, CHECKBOX, DOMAINLABEL, FOLDERICON, ICON, FILESIZE, WRAPPEDLABEL, TIMECODE, PROGRESS, THUMBNAIL, EDITABLETEXTBOX + public int getValue() { + return value; + } } - public enum BreakType { - IN, OUT, SEGMENT - } + private static final Logger logger = LogManager.getLogger(); private static Map typeDefinitions = null; @@ -148,16 +147,12 @@ public class ItemManagerData { typeDefinitions = new Hashtable(); typeDefinitions.put(BaseType.BIGINT, new TypeDefinition("java.lang.Long", "java.lang.Long", "BIGINT")); typeDefinitions.put(BaseType.BINARY, new TypeDefinition("byte[]", "byte[]", "BLOB")); - typeDefinitions.put(BaseType.BOOL, - new TypeDefinition("java.lang.Boolean", "java.lang.Boolean", "CHARACTER(1)")); + typeDefinitions.put(BaseType.BOOL, new TypeDefinition("java.lang.Boolean", "java.lang.Boolean", "CHARACTER(1)")); typeDefinitions.put(BaseType.CHAR, new TypeDefinition("java.sql.String", "java.sql.String", "CHARACTER")); - typeDefinitions.put(BaseType.DATETIME, - new TypeDefinition("java.sql.Timestamp", "com.ibm.db2.jcc.DBTimestamp", "TIMESTAMP")); - typeDefinitions.put(BaseType.DOMAIN, - new TypeDefinition("user.jobengine.db.Domains", "user.jobengine.db.Domains", "")); + typeDefinitions.put(BaseType.DATETIME, new TypeDefinition("java.sql.Timestamp", "com.ibm.db2.jcc.DBTimestamp", "TIMESTAMP")); + typeDefinitions.put(BaseType.DOMAIN, new TypeDefinition("user.jobengine.db.Domains", "user.jobengine.db.Domains", "")); typeDefinitions.put(BaseType.DOUBLE, new TypeDefinition("java.lang.Double", "java.lang.Double", "DOUBLE")); - typeDefinitions.put(BaseType.DECIMAL, - new TypeDefinition("java.math.BigDecimal", "java.math.BigDecimal", "DECIMAL")); + typeDefinitions.put(BaseType.DECIMAL, new TypeDefinition("java.math.BigDecimal", "java.math.BigDecimal", "DECIMAL")); typeDefinitions.put(BaseType.INT, new TypeDefinition("java.lang.Integer", "java.lang.Integer", "INT")); typeDefinitions.put(BaseType.REAL, new TypeDefinition("java.lang.Float", "java.lang.Float", "REAL")); typeDefinitions.put(BaseType.TEXT, new TypeDefinition("java.lang.String", "java.lang.String", "CLOB")); @@ -165,34 +160,6 @@ public class ItemManagerData { typeDefinitions.put(BaseType.VARCHAR, new TypeDefinition("java.lang.String", "java.lang.String", "VARCHAR")); } - public static BaseType toBaseType(String typeName) { - return BaseType.valueOf(typeName); - } - - public static GuiType toGuiType(String typeName) { - return GuiType.valueOf(typeName); - } - - public static BreakType toBreakType(String typeName) { - return BreakType.valueOf(typeName); - } - - public static ListType toListType(String typeName) { - return ListType.valueOf(typeName); - } - - public static StaticTables toStaticTable(String name) { - return name == null ? null : StaticTables.valueOf(name); - } - - public static RemoteStoreProtocol toRemoteStoreProtocol(String name) { - return name == null ? null : RemoteStoreProtocol.valueOf(name); - } - - public static DeliveryMethod toDeliveryMethod(String name) { - return name == null ? null : DeliveryMethod.valueOf(name); - } - public static boolean checkObjectType(String name, Object value, BaseType baseType, boolean fromDb) { boolean result = true; if (value != null) { @@ -204,9 +171,8 @@ public class ItemManagerData { if (!result) { if (expectedType == null) expectedType = "UNDEFINED"; - String msg = String.format( - "Value type is not acceptable for column: %1$s. Expected: %2$s, found: %3$s", name, - expectedType, value.getClass().getName()); + String msg = String.format("Value type is not acceptable for column: %1$s. Expected: %2$s, found: %3$s", name, expectedType, + value.getClass().getName()); logger.error(msg); } } @@ -214,6 +180,26 @@ public class ItemManagerData { return result; } + @SuppressWarnings("unchecked") + public static Class getEntityClass(String type) { + Class result = null; + try { + result = (Class) Class.forName("user.jobengine.db." + type); + } catch (ClassNotFoundException e) { + logger.error(e.getMessage()); + } + return result; + + } + + public static BaseType toBaseType(String typeName) { + return BaseType.valueOf(typeName); + } + + public static BreakType toBreakType(String typeName) { + return BreakType.valueOf(typeName); + } + public static String toDateString(String fullDate, int addday, int field) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); Date date = null; @@ -236,15 +222,23 @@ public class ItemManagerData { return formatter.format(cal.getTime()); } - @SuppressWarnings("unchecked") - public static Class getEntityClass(String type) { - Class result = null; - try { - result = (Class) Class.forName("user.jobengine.db." + type); - } catch (ClassNotFoundException e) { - logger.error(e.getMessage()); - } - return result; + public static DeliveryMethod toDeliveryMethod(String name) { + return name == null ? null : DeliveryMethod.valueOf(name); + } + public static GuiType toGuiType(String typeName) { + return GuiType.valueOf(typeName); + } + + public static ListType toListType(String typeName) { + return ListType.valueOf(typeName); + } + + public static RemoteStoreProtocol toRemoteStoreProtocol(String name) { + return name == null ? null : RemoteStoreProtocol.valueOf(name); + } + + public static StaticTables toStaticTable(String name) { + return name == null ? null : StaticTables.valueOf(name); } } diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/Support.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/Support.java new file mode 100644 index 00000000..01641e04 --- /dev/null +++ b/server/user.jobengine.osgi.db/test/user/jobengine/db/Support.java @@ -0,0 +1,180 @@ +package user.jobengine.db; + +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Types; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.function.Consumer; +import java.util.stream.Stream; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import user.commons.IEntityBase; +import user.commons.logging.LogUtils; + +public class Support { + public class BD { + Date fBD; + Date nBD; + } + + private static final String HEADER = "név;archivált;méret;első_adás;következő_adás;törölhető"; + + protected static IItemManager manager = null; + + @BeforeClass + static public void setUpConnection() { + System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + System.setProperty(ItemManager.DBUSERNAME, "db2admin"); + System.setProperty(ItemManager.DBPASSWORD, "password"); + System.setProperty(LogUtils.LOGLEVEL, "INFO"); + // System.setProperty(ItemManager.DBURL, + + manager = new ItemManager(); + manager.connect(); + } + + @AfterClass + static public void tearDownConnection() { + manager.disconnect(); + } + + @Test + public void generateMorpheusArchivedList() throws Exception { + Path sourcePath = Paths.get("\\\\10.10.1.100\\BRAAVOS\\PLAYOUT\\Video"); + MediaFileDAO dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class); + final SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm"); + final List lines = new ArrayList<>(); + lines.add(HEADER); + final List dlines = new ArrayList<>(); + dlines.add(HEADER); + final Date now = new Date(); + try (Stream pathStream = Files.walk(sourcePath); + Connection con = getConnection("jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "MAM", "Echotv.hu")) { + pathStream.forEach(new Consumer() { + @Override + public void accept(Path p) { + String name = p.getFileName().toString(); + if (!name.toLowerCase().endsWith(".mxf")) + return; + if (name.startsWith("P") || name.startsWith("R")) + return; + + List mediaFiles = dao.getByHouseId(name); + boolean archived = mediaFiles != null && !mediaFiles.isEmpty(); + + String fbd = "-"; + String nbd = "-"; + boolean inUse = false; + try { + BD bd = query(con, name.replace(".MXF", "")); + if (bd != null) { + if (bd.fBD != null) { + fbd = df.format(bd.fBD).substring(0, 10); + inUse = bd.fBD.after(now); + } + if (bd.nBD != null) { + nbd = df.format(bd.nBD).substring(0, 10); + inUse = inUse || bd.nBD.after(now); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + boolean canDelete = archived && !inUse; + String line = String.format("%s;%s;%d;%s;%s;%s", name, archived ? "igen" : "nem", p.toFile().length(), fbd, nbd, + canDelete ? "igen" : "nem"); + System.out.println(line); + lines.add(line); + if (canDelete) + dlines.add(line); + } + }); + } + + Files.write(Paths.get("c:\\temp\\morpheus_all.csv"), lines, Charset.forName("ISO-8859-2"), StandardOpenOption.CREATE); + Files.write(Paths.get("c:\\temp\\morpheus_cleanup.csv"), dlines, Charset.forName("ISO-8859-2"), StandardOpenOption.CREATE); + } + + private Connection getConnection(String dbUrl, String userName, String password) throws Exception { + Connection result = null; + try { + Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); + result = DriverManager.getConnection(dbUrl, userName, password); + } catch (Exception e) { + throw e; + } + return result; + } + + private BD query(Connection con, String id) throws Exception { + BD result = null; + if (id.startsWith("P") || id.startsWith("R")) + return null; + + // 1002: Musorok + // 2002: Promo + // 3002: AD + + // @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null, + // @@StrParam1 varchar(200)=Null + + // v_ProgrammeID + // v_Live + // v_EpisodeID + // v_VariantID + // v_MediaID + // v_VariantTypeID + // v_ProgTitle + // v_EpTitle + // v_Episode + // v_VariantType + // v_VariantKeywords + // v_VariantLengthTC + // v_VariantLengthFrame + // v_VariantNrSegments + // v_FirstBroadcastDate + // v_NextBroadcastDate + // v_OkForAir + // v_ForTransm + + try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(1002, 0, ?, ?, ?, ?, ?)}")) { + stmt.setNull(1, Types.INTEGER); + stmt.setNull(2, Types.INTEGER); + stmt.setNull(3, Types.INTEGER); + stmt.setNull(4, Types.INTEGER); + stmt.setString(5, id); + try (ResultSet rs = stmt.executeQuery()) { + // ResultSetMetaData rsmd = rs.getMetaData(); + // for (int i = 1; i < rsmd.getColumnCount() + 1; i++) { + // System.out.println(rsmd.getColumnLabel(i)); + // } + while (rs.next()) { + + result = new BD(); + result.fBD = rs.getDate("v_FirstBroadcastDate"); + result.nBD = rs.getDate("v_NextBroadcastDate"); + break; + } + } + } catch (Exception e) { + throw e; + } finally { + } + return result; + } + +} diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java new file mode 100644 index 00000000..ae4d6d92 --- /dev/null +++ b/server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java @@ -0,0 +1,139 @@ +package user.jobengine.db; + +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Types; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.function.Consumer; +import java.util.stream.Stream; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import user.commons.IEntityBase; +import user.commons.logging.LogUtils; + +public class Support_new { + public class BD { + Date fBD; + Date nBD; + } + + protected static IItemManager manager = null; + + @BeforeClass + static public void setUpConnection() { + System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + System.setProperty(ItemManager.DBUSERNAME, "db2admin"); + System.setProperty(ItemManager.DBPASSWORD, "password"); + System.setProperty(LogUtils.LOGLEVEL, "INFO"); + // System.setProperty(ItemManager.DBURL, + + manager = new ItemManager(); + manager.connect(); + } + + @AfterClass + static public void tearDownConnection() { + manager.disconnect(); + } + + @Test + public void generateMorpheusArchivedList() throws Exception { + Path sourcePath = Paths.get("\\\\10.10.1.100\\BRAAVOS\\PLAYOUT\\Video"); + MediaFileDAO dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class); + final SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm"); + final List lines = new ArrayList<>(); + lines.add("név,archivált,méret,első_adás,következő_adás,törölhető"); + final List dlines = new ArrayList<>(); + dlines.add("név,archivált,méret,első_adás,következő_adás,törölhető"); + + List files = null; + try (Connection con = getConnection("jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "MAM", "Echotv.hu")) { + files = query(con); + } catch (Exception e) { + e.printStackTrace(); + } + + final List filesInUse = files; + + try (Stream pathStream = Files.walk(sourcePath)) { + pathStream.forEach(new Consumer() { + @Override + public void accept(Path p) { + String name = p.getFileName().toString(); + if (!name.toLowerCase().endsWith(".mxf")) + return; + + List mediaFiles = dao.getByHouseId(name); + boolean archived = mediaFiles != null && !mediaFiles.isEmpty(); + boolean inUse = filesInUse.contains(name); + boolean canDelete = archived && !inUse; + String line = String.format("%s,%s,%d,%s", name, archived ? "igen" : "nem", p.toFile().length(), canDelete ? "igen" : "nem"); + System.out.println(line); + lines.add(line); + if (canDelete) + dlines.add(line); + } + }); + } + + Files.write(Paths.get("c:\\temp\\morpheus_all.csv"), lines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW); + Files.write(Paths.get("c:\\temp\\morpheus_cleanup.csv"), dlines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW); + } + + private Connection getConnection(String dbUrl, String userName, String password) throws Exception { + Connection result = null; + try { + Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); + result = DriverManager.getConnection(dbUrl, userName, password); + } catch (Exception e) { + throw e; + } + return result; + } + + private List query(Connection con) throws Exception { + List result = new ArrayList<>(); + + // [clIFsp_EC_MAM] @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null, + // @@StrParam1 varchar(200)=Null, @@StrParam2 varchar(max)=Null, @@DateParam1 datetime=Null, @@DateParam2 datetime=Null + + try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, 7, ?, ?, ?, ?, ?, ?, ?)}")) { + stmt.setNull(1, Types.INTEGER); + stmt.setNull(2, Types.INTEGER); + stmt.setNull(3, Types.INTEGER); + stmt.setNull(4, Types.INTEGER); + stmt.setNull(5, Types.VARCHAR); + stmt.setNull(6, Types.VARCHAR); + stmt.setDate(7, new java.sql.Date(new Date().getTime())); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + + ResultSetMetaData rsmd = rs.getMetaData(); + for (int i = 1; i < rsmd.getColumnCount() + 1; i++) { + System.out.println(rsmd.getColumnLabel(i)); + } + break; + } + } + } catch (Exception e) { + throw e; + } finally { + } + return result; + } + +} diff --git a/server/user.jobengine.osgi.server/WEB-INF/web.xml b/server/user.jobengine.osgi.server/WEB-INF/web.xml index fd917dc6..5fbfe23e 100644 --- a/server/user.jobengine.osgi.server/WEB-INF/web.xml +++ b/server/user.jobengine.osgi.server/WEB-INF/web.xml @@ -24,7 +24,6 @@ - zkLoader @@ -43,6 +42,10 @@ + + zkLoader + /test + 120 diff --git a/server/user.jobengine.osgi.server/pages/database.zul b/server/user.jobengine.osgi.server/pages/database.zul new file mode 100644 index 00000000..cb5fcebf --- /dev/null +++ b/server/user.jobengine.osgi.server/pages/database.zul @@ -0,0 +1,16 @@ + + +
+ + + + + + +
+
\ No newline at end of file diff --git a/server/user.jobengine.osgi.server/pages/menu.zul b/server/user.jobengine.osgi.server/pages/menu.zul index 89ed1a88..125cdf82 100644 --- a/server/user.jobengine.osgi.server/pages/menu.zul +++ b/server/user.jobengine.osgi.server/pages/menu.zul @@ -58,6 +58,7 @@ + diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobRuntime.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobRuntime.java index 2021009d..40f5b6c7 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobRuntime.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobRuntime.java @@ -26,6 +26,10 @@ public interface IJobRuntime extends IJob { public void done(); + boolean forkPrepare() throws InterruptedException; + + void forkWaitComplete() throws InterruptedException; + IInstruction getCurrentInstruction(); Marker getFinishMarker(); diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java index c95634f3..b99c1743 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java @@ -758,6 +758,7 @@ public class JobEngine implements IJobEngine { @Override public void shutdown() { + isRunning = false; if (schedulerService != null) schedulerService.shutdown(); @@ -770,7 +771,6 @@ public class JobEngine implements IJobEngine { } catch (TSMException e) { logger.catching(e); } - isRunning = false; logger.info("JobEngine stopped"); } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java index 1d55710b..b0247fcd 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java @@ -6,11 +6,13 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.sql.Timestamp; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.Stack; +import java.util.concurrent.Semaphore; import javax.swing.event.EventListenerList; @@ -50,6 +52,9 @@ public class JobRuntime extends Job implements IJobRuntime { private List children; private MediaCubeMarker sessionMarker; private boolean isService; + private Semaphore forkSempahore; + private IJobChangedListener jobChangedListener; + private List childrenIDs; public JobRuntime() { this.listeners = new EventListenerList(); @@ -191,6 +196,61 @@ public class JobRuntime extends Job implements IJobRuntime { ((IJobStatusChangedListener) targets[i + 1]).statusChanged(event); } + @Override + public boolean forkPrepare() throws InterruptedException { + boolean result = false; + forkSempahore = new Semaphore(1); + if (jobChangedListener == null) { + logger.info("Preparing fork"); + childrenIDs = Collections.synchronizedList(new ArrayList<>()); + + jobChangedListener = event -> { + IJobRuntime child = event.getJob(); + if (event.getSignalType().equals(SignalType.CREATE)) { + if (child.getParentJobId() == getId()) { + childrenIDs.add(child.getId()); + } + + if (child.getParentJobId() != getId() && childrenIDs.contains(child.getParentJobId())) { + childrenIDs.add(child.getId()); + } + } + if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) { + childrenIDs.remove(child.getId()); + if (childrenIDs.size() == 0) + forkSempahore.release(); + } + if (!jobEngine.isRunning()) + forkSempahore.release(); + }; + logger.info("Adding job changed listener"); + jobEngine.addJobChangedEventListener(jobChangedListener); + result = true; + forkSempahore.acquire(); + } else { + if (childrenIDs != null && childrenIDs.size() > 0) + forkSempahore.acquire(); + } + return result; + } + + @Override + public void forkWaitComplete() throws InterruptedException { + logger.info("Waiting for semaphore" + forkSempahore); + forkSempahore.acquire(); + logger.info("Removing job changed listener"); + if (jobEngine.isRunning()) { + logger.info("Removing job changed listener"); + jobEngine.removeJobChangedEventListener(jobChangedListener); + jobChangedListener = null; + childrenIDs = null; + } else { + logger.info("Instruction pointer repositioned"); + decrementInstructionPointer(); + restoreStack(); + } + } + private void fromJob(IJob job) { id = job.getId(); description = job.getDescription(); @@ -552,5 +612,4 @@ public class JobRuntime extends Job implements IJobRuntime { job.setParentJobId(getParentJobId()); return job; } - } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DatabaseModel.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DatabaseModel.java new file mode 100644 index 00000000..3c395848 --- /dev/null +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/DatabaseModel.java @@ -0,0 +1,54 @@ +package user.jobengine.zk.model; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.zkoss.bind.annotation.Init; + +import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; + +import user.commons.ListUtils; +import user.commons.nosql.NoSQLUtils; + +//http://zkfiddle.org/sample/3op451q/12-Dynamic-Columns#source-1 +public class DatabaseModel { + private static final Logger logger = LogManager.getLogger(); + + private List dataList; + private List columnList; + private DB db = null; + + private DBCollection collection; + + public List getColumnList() { + return columnList; + } + + public List getDataList() { + return dataList; + } + + @Init + public void init() { + db = NoSQLUtils.getNoSQLDB(); + collection = db.getCollection("sessionlogs"); + + BasicDBObject first = (BasicDBObject) collection.findOne(); + columnList = new ArrayList<>(first.keySet()); + + dataList = ListUtils.cast(collection.find().sort(new BasicDBObject("dateTime", -1)).toArray()); + } + + public void setColumnList(List columnList) { + this.columnList = columnList; + } + + public void setDataList(List dataList) { + this.dataList = dataList; + } + +}