package user.jobengine.server.steps;\r
\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.List;\r
-import java.util.concurrent.Semaphore;\r
-\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
import user.commons.ListUtils;\r
-import user.jobengine.db.ItemManagerData.SignalType;\r
-import user.jobengine.server.IJobChangedListener;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\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 Logger logger = LogManager.getLogger();\r
- int count = 10;\r
+ int count = 2;\r
\r
@StepEntry\r
public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- final Semaphore semaphore = new Semaphore(1);\r
- List<Long> childrenIDs = Collections.synchronizedList(new ArrayList<>());\r
-\r
- IJobChangedListener listener = event -> {\r
- IJobRuntime child = event.getJob();\r
- if (event.getSignalType().equals(SignalType.CREATE)) {\r
- if (child.getParentJobId() == jobRuntime.getId()) {\r
- childrenIDs.add(child.getId());\r
- }\r
-\r
- if (child.getParentJobId() != jobRuntime.getId() && childrenIDs.contains(child.getParentJobId())) {\r
- childrenIDs.add(child.getId());\r
- }\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
}\r
- if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) {\r
- childrenIDs.remove(child.getId());\r
- if (childrenIDs.size() == 0)\r
- semaphore.release();\r
- }\r
- };\r
- jobEngine.addJobChangedEventListener(listener);\r
- semaphore.acquire();\r
- for (int i = 0; i < count; i++) {\r
- jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
}\r
- semaphore.acquire();\r
- jobEngine.removeJobChangedEventListener(listener);\r
+\r
+ jobRuntime.forkWaitComplete();\r
+ logger.info("Done");\r
return null;\r
}\r
}\r
\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.message.Message;\r
\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
Object[] result = { itemID + 1 };\r
\r
- logger.info(jobRuntime.getMarker(), "Starting with {}", itemID);\r
- logger.error(jobRuntime.getMarker(), "Error with {}", itemID);\r
+ //logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
+ Message message = logger.getMessageFactory().newMessage("Starting with {} #{}", itemID, jobRuntime.getId());\r
+ logger.error(jobRuntime.getMarker(), message, new Exception("TESZT"));\r
try {\r
for (int i = 0; i < count; i++) {\r
//sb.append("Sikeres iteráció : ")\r
} catch (Exception e) {\r
logger.error(e.getMessage());\r
}\r
- logger.info(jobRuntime.getMarker(), "Resulting {}", result[0]);\r
return result;\r
}\r
\r
+++ /dev/null
-package user.jobengine.server.steps;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.List;\r
-import java.util.concurrent.Semaphore;\r
-\r
-import user.jobengine.db.ItemManagerData.SignalType;\r
-import user.jobengine.server.IJobChangedListener;\r
-import user.jobengine.server.IJobEngine;\r
-import user.jobengine.server.IJobRuntime;\r
-\r
-public abstract class ForkStep extends JobStep {\r
-\r
- @StepEntry\r
- public void execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- final Semaphore semaphore = new Semaphore(1);\r
- List<Long> childrenIDs = Collections.synchronizedList(new ArrayList<>());\r
-\r
- IJobChangedListener listener = event -> {\r
- IJobRuntime child = event.getJob();\r
- if (event.getSignalType().equals(SignalType.CREATE)) {\r
- if (child.getParentJobId() == jobRuntime.getId()) {\r
- childrenIDs.add(child.getId());\r
- }\r
-\r
- if (child.getParentJobId() != jobRuntime.getId() && childrenIDs.contains(child.getParentJobId())) {\r
- childrenIDs.add(child.getId());\r
- }\r
- }\r
- if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) {\r
- childrenIDs.remove(child.getId());\r
- if (childrenIDs.size() == 0)\r
- semaphore.release();\r
- }\r
- };\r
- jobEngine.addJobChangedEventListener(listener);\r
- semaphore.acquire();\r
- try {\r
- fork(jobEngine, jobRuntime);\r
- } catch (Exception e) {\r
- semaphore.release();\r
- throw e;\r
- }\r
- semaphore.acquire();\r
- jobEngine.removeJobChangedEventListener(listener);\r
- }\r
-\r
- protected abstract void fork(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception;\r
-}\r
* Adattípusok, enumerátorok.\r
*/\r
public class ItemManagerData {\r
- private static final Logger logger = LogManager.getLogger();\r
+ public enum BreakType {\r
+ IN, OUT, SEGMENT\r
+ }\r
\r
- public enum SignalType {\r
- CREATE(0), UPDATE(1), DELETE(2);\r
+ public enum FilterLogic {\r
+ AND, OR\r
+ }\r
\r
- private final long value;\r
+ public enum FilterValueLogic {\r
+ CONTAINS, STARTSWITH, ENDSWITH, EQUALS, LESS, MORE, BEETWEN, ONEWEEK, TWOWEEKS, THREEWEEKS, ONEMONTH, TWOMONTHS, THREEMONTHS, SIXMONTHS, ONEYEAR\r
+ }\r
\r
- SignalType(long value) {\r
- this.value = value;\r
- }\r
+ // public enum LogLevel {\r
+ // TRACE, DEBUG, INFO, WARNING, ERROR, FATAL\r
+ // }\r
\r
- public long getValue() {\r
- return value;\r
- }\r
+ public enum GuiType {\r
+ LABEL, TEXTBOX, DATAGRID, DATEPICKER, DATETIMEPICKER, DOMAINCOMBO, DOMAINLOOKUP, MULTIDOMAINLOOKUP, CHECKBOX, COMBOBOX, MULTILINETEXTBOX, TIMECODE, NUMBER, WHOLENUMBER, METADATAELEMENT, METADATTYPE, FILETYPE, STORE, IMAGE\r
}\r
\r
- public enum UserRight {\r
- READONLY(1), READWRITE(3), ADMINISTRATOR(63);\r
+ public enum ListType {\r
+ LABEL, CHECKBOX, DOMAINLABEL, FOLDERICON, ICON, FILESIZE, WRAPPEDLABEL, TIMECODE, PROGRESS, THUMBNAIL, EDITABLETEXTBOX\r
+ }\r
+\r
+ public enum MdType {\r
+ INDEX(0x0001), UNIQUE(0x0002), NULL(0x0004), EDIT(0x0008), LIST(0x0010), GENERATE(0x0020), SEARCH(0x0040);\r
+\r
+ static public int getValues(MdType... flags) {\r
+ int result = 0;\r
+ if (flags != null) {\r
+ for (MdType mdtype : flags)\r
+ result += mdtype.getValue();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ static public boolean is(int flags, MdType type) {\r
+ return ((flags & type.getValue()) == type.getValue());\r
+ }\r
\r
private final int value;\r
\r
- UserRight(int value) {\r
+ MdType(int value) {\r
this.value = value;\r
}\r
\r
public int getValue() {\r
return value;\r
}\r
-\r
- static public boolean is(int flags, UserRight type) {\r
- return ((flags & type.getValue()) == type.getValue());\r
- }\r
}\r
\r
- // public enum LogLevel {\r
- // TRACE, DEBUG, INFO, WARNING, ERROR, FATAL\r
- // }\r
-\r
public enum OrderDirection {\r
ASC, DESC\r
}\r
\r
- public enum FilterLogic {\r
- AND, OR\r
- }\r
-\r
- public enum FilterValueLogic {\r
- CONTAINS, STARTSWITH, ENDSWITH, EQUALS, LESS, MORE, BEETWEN, ONEWEEK, TWOWEEKS, THREEWEEKS, ONEMONTH, TWOMONTHS, THREEMONTHS, SIXMONTHS, ONEYEAR\r
- }\r
+ public enum SignalType {\r
+ CREATE(0), UPDATE(1), DELETE(2);\r
\r
- public enum StaticTables {\r
- ITEM(0), ITEMTYPE(1), MEDIA(2), MEDIAFILE(3), METADATA(4), METADATELEMENT(5), METADATATYPE(6), FOLDER(7), SHOT(\r
- 8), BREAK(9), STORE(10), STOREURI(11), MEDIAINFO(12), REMOTESTORE(13), REMOTEFILE(14), SEARCHDEFINITION(\r
- 15), DOMAIN(16), DOMAINCATEGORY(17), JOB(18), USERINFO(19), FILETYPE(20), SCENE(\r
- 21), SCENECONTENT(22), TEMPLATE(23), TEMPLATESTEP(24), TEMPLATEDECLARATION(\r
- 25), INPUTPARAM(26), OUTPUTPARAM(27), LOGEVENT(28), JOBSTART(29);\r
private final long value;\r
\r
- StaticTables(long value) {\r
+ SignalType(long value) {\r
this.value = value;\r
}\r
\r
public long getValue() {\r
return value;\r
}\r
-\r
}\r
\r
public enum SqlIndexType {\r
NONE, INDEX, UNIQUE\r
}\r
\r
- public enum MdType {\r
- INDEX(0x0001), UNIQUE(0x0002), NULL(0x0004), EDIT(0x0008), LIST(0x0010), GENERATE(0x0020), SEARCH(0x0040);\r
+ // public enum StaticField {\r
+ // NONE,\r
+ // ITEM_NAME,\r
+ // ITEM_DESCRIPTION,\r
+ // ITEM_HOUSEID,\r
+ // MEDIA_NAME,\r
+ // MEDIA_DESCRIPTION,\r
+ // MEDIA_HOUSEID\r
+ // }\r
\r
- private final int value;\r
+ public enum StaticTables {\r
+ ITEM(0), ITEMTYPE(1), MEDIA(2), MEDIAFILE(3), METADATA(4), METADATELEMENT(5), METADATATYPE(6), FOLDER(7), SHOT(8), BREAK(9), STORE(10), STOREURI(\r
+ 11), MEDIAINFO(12), REMOTESTORE(13), REMOTEFILE(14), SEARCHDEFINITION(15), DOMAIN(16), DOMAINCATEGORY(17), JOB(18), USERINFO(19), FILETYPE(\r
+ 20), SCENE(21), SCENECONTENT(\r
+ 22), TEMPLATE(23), TEMPLATESTEP(24), TEMPLATEDECLARATION(25), INPUTPARAM(26), OUTPUTPARAM(27), LOGEVENT(28), JOBSTART(29);\r
+ private final long value;\r
\r
- MdType(int value) {\r
+ StaticTables(long value) {\r
this.value = value;\r
}\r
\r
- public int getValue() {\r
+ public long getValue() {\r
return value;\r
}\r
\r
- static public boolean is(int flags, MdType type) {\r
- return ((flags & type.getValue()) == type.getValue());\r
- }\r
+ }\r
\r
- static public int getValues(MdType... flags) {\r
- int result = 0;\r
- if (flags != null) {\r
- for (MdType mdtype : flags)\r
- result += mdtype.getValue();\r
- }\r
- return result;\r
+ public enum UserRight {\r
+ READONLY(1), READWRITE(3), ADMINISTRATOR(63);\r
+\r
+ static public boolean is(int flags, UserRight type) {\r
+ return ((flags & type.getValue()) == type.getValue());\r
}\r
- }\r
\r
- // public enum StaticField {\r
- // NONE,\r
- // ITEM_NAME,\r
- // ITEM_DESCRIPTION,\r
- // ITEM_HOUSEID,\r
- // MEDIA_NAME,\r
- // MEDIA_DESCRIPTION,\r
- // MEDIA_HOUSEID\r
- // }\r
+ private final int value;\r
\r
- public enum GuiType {\r
- LABEL, TEXTBOX, DATAGRID, DATEPICKER, DATETIMEPICKER, DOMAINCOMBO, DOMAINLOOKUP, MULTIDOMAINLOOKUP, CHECKBOX, COMBOBOX, MULTILINETEXTBOX, TIMECODE, NUMBER, WHOLENUMBER, METADATAELEMENT, METADATTYPE, FILETYPE, STORE, IMAGE\r
- }\r
+ UserRight(int value) {\r
+ this.value = value;\r
+ }\r
\r
- public enum ListType {\r
- LABEL, CHECKBOX, DOMAINLABEL, FOLDERICON, ICON, FILESIZE, WRAPPEDLABEL, TIMECODE, PROGRESS, THUMBNAIL, EDITABLETEXTBOX\r
+ public int getValue() {\r
+ return value;\r
+ }\r
}\r
\r
- public enum BreakType {\r
- IN, OUT, SEGMENT\r
- }\r
+ private static final Logger logger = LogManager.getLogger();\r
\r
private static Map<BaseType, TypeDefinition> typeDefinitions = null;\r
\r
typeDefinitions = new Hashtable<BaseType, TypeDefinition>();\r
typeDefinitions.put(BaseType.BIGINT, new TypeDefinition("java.lang.Long", "java.lang.Long", "BIGINT"));\r
typeDefinitions.put(BaseType.BINARY, new TypeDefinition("byte[]", "byte[]", "BLOB"));\r
- typeDefinitions.put(BaseType.BOOL,\r
- new TypeDefinition("java.lang.Boolean", "java.lang.Boolean", "CHARACTER(1)"));\r
+ typeDefinitions.put(BaseType.BOOL, new TypeDefinition("java.lang.Boolean", "java.lang.Boolean", "CHARACTER(1)"));\r
typeDefinitions.put(BaseType.CHAR, new TypeDefinition("java.sql.String", "java.sql.String", "CHARACTER"));\r
- typeDefinitions.put(BaseType.DATETIME,\r
- new TypeDefinition("java.sql.Timestamp", "com.ibm.db2.jcc.DBTimestamp", "TIMESTAMP"));\r
- typeDefinitions.put(BaseType.DOMAIN,\r
- new TypeDefinition("user.jobengine.db.Domains", "user.jobengine.db.Domains", ""));\r
+ typeDefinitions.put(BaseType.DATETIME, new TypeDefinition("java.sql.Timestamp", "com.ibm.db2.jcc.DBTimestamp", "TIMESTAMP"));\r
+ typeDefinitions.put(BaseType.DOMAIN, new TypeDefinition("user.jobengine.db.Domains", "user.jobengine.db.Domains", ""));\r
typeDefinitions.put(BaseType.DOUBLE, new TypeDefinition("java.lang.Double", "java.lang.Double", "DOUBLE"));\r
- typeDefinitions.put(BaseType.DECIMAL,\r
- new TypeDefinition("java.math.BigDecimal", "java.math.BigDecimal", "DECIMAL"));\r
+ typeDefinitions.put(BaseType.DECIMAL, new TypeDefinition("java.math.BigDecimal", "java.math.BigDecimal", "DECIMAL"));\r
typeDefinitions.put(BaseType.INT, new TypeDefinition("java.lang.Integer", "java.lang.Integer", "INT"));\r
typeDefinitions.put(BaseType.REAL, new TypeDefinition("java.lang.Float", "java.lang.Float", "REAL"));\r
typeDefinitions.put(BaseType.TEXT, new TypeDefinition("java.lang.String", "java.lang.String", "CLOB"));\r
typeDefinitions.put(BaseType.VARCHAR, new TypeDefinition("java.lang.String", "java.lang.String", "VARCHAR"));\r
}\r
\r
- public static BaseType toBaseType(String typeName) {\r
- return BaseType.valueOf(typeName);\r
- }\r
-\r
- public static GuiType toGuiType(String typeName) {\r
- return GuiType.valueOf(typeName);\r
- }\r
-\r
- public static BreakType toBreakType(String typeName) {\r
- return BreakType.valueOf(typeName);\r
- }\r
-\r
- public static ListType toListType(String typeName) {\r
- return ListType.valueOf(typeName);\r
- }\r
-\r
- public static StaticTables toStaticTable(String name) {\r
- return name == null ? null : StaticTables.valueOf(name);\r
- }\r
-\r
- public static RemoteStoreProtocol toRemoteStoreProtocol(String name) {\r
- return name == null ? null : RemoteStoreProtocol.valueOf(name);\r
- }\r
-\r
- public static DeliveryMethod toDeliveryMethod(String name) {\r
- return name == null ? null : DeliveryMethod.valueOf(name);\r
- }\r
-\r
public static boolean checkObjectType(String name, Object value, BaseType baseType, boolean fromDb) {\r
boolean result = true;\r
if (value != null) {\r
if (!result) {\r
if (expectedType == null)\r
expectedType = "UNDEFINED";\r
- String msg = String.format(\r
- "Value type is not acceptable for column: %1$s. Expected: %2$s, found: %3$s", name,\r
- expectedType, value.getClass().getName());\r
+ String msg = String.format("Value type is not acceptable for column: %1$s. Expected: %2$s, found: %3$s", name, expectedType,\r
+ value.getClass().getName());\r
logger.error(msg);\r
}\r
}\r
return result;\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
+ public static Class<? extends EntityBase> getEntityClass(String type) {\r
+ Class<? extends EntityBase> result = null;\r
+ try {\r
+ result = (Class<? extends EntityBase>) Class.forName("user.jobengine.db." + type);\r
+ } catch (ClassNotFoundException e) {\r
+ logger.error(e.getMessage());\r
+ }\r
+ return result;\r
+\r
+ }\r
+\r
+ public static BaseType toBaseType(String typeName) {\r
+ return BaseType.valueOf(typeName);\r
+ }\r
+\r
+ public static BreakType toBreakType(String typeName) {\r
+ return BreakType.valueOf(typeName);\r
+ }\r
+\r
public static String toDateString(String fullDate, int addday, int field) {\r
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);\r
Date date = null;\r
return formatter.format(cal.getTime());\r
}\r
\r
- @SuppressWarnings("unchecked")\r
- public static Class<? extends EntityBase> getEntityClass(String type) {\r
- Class<? extends EntityBase> result = null;\r
- try {\r
- result = (Class<? extends EntityBase>) Class.forName("user.jobengine.db." + type);\r
- } catch (ClassNotFoundException e) {\r
- logger.error(e.getMessage());\r
- }\r
- return result;\r
+ public static DeliveryMethod toDeliveryMethod(String name) {\r
+ return name == null ? null : DeliveryMethod.valueOf(name);\r
+ }\r
\r
+ public static GuiType toGuiType(String typeName) {\r
+ return GuiType.valueOf(typeName);\r
+ }\r
+\r
+ public static ListType toListType(String typeName) {\r
+ return ListType.valueOf(typeName);\r
+ }\r
+\r
+ public static RemoteStoreProtocol toRemoteStoreProtocol(String name) {\r
+ return name == null ? null : RemoteStoreProtocol.valueOf(name);\r
+ }\r
+\r
+ public static StaticTables toStaticTable(String name) {\r
+ return name == null ? null : StaticTables.valueOf(name);\r
}\r
}\r
--- /dev/null
+package user.jobengine.db;\r
+\r
+import java.nio.charset.Charset;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.StandardOpenOption;\r
+import java.sql.Connection;\r
+import java.sql.DriverManager;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.Types;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.List;\r
+import java.util.function.Consumer;\r
+import java.util.stream.Stream;\r
+\r
+import org.junit.AfterClass;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import user.commons.IEntityBase;\r
+import user.commons.logging.LogUtils;\r
+\r
+public class Support {\r
+ public class BD {\r
+ Date fBD;\r
+ Date nBD;\r
+ }\r
+\r
+ private static final String HEADER = "név;archivált;méret;első_adás;következő_adás;törölhető";\r
+\r
+ protected static IItemManager manager = null;\r
+\r
+ @BeforeClass\r
+ static public void setUpConnection() {\r
+ System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
+ System.setProperty(ItemManager.DBPASSWORD, "password");\r
+ System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
+ // System.setProperty(ItemManager.DBURL,\r
+\r
+ manager = new ItemManager();\r
+ manager.connect();\r
+ }\r
+\r
+ @AfterClass\r
+ static public void tearDownConnection() {\r
+ manager.disconnect();\r
+ }\r
+\r
+ @Test\r
+ public void generateMorpheusArchivedList() throws Exception {\r
+ Path sourcePath = Paths.get("\\\\10.10.1.100\\BRAAVOS\\PLAYOUT\\Video");\r
+ MediaFileDAO dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);\r
+ final SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm");\r
+ final List<String> lines = new ArrayList<>();\r
+ lines.add(HEADER);\r
+ final List<String> dlines = new ArrayList<>();\r
+ dlines.add(HEADER);\r
+ final Date now = new Date();\r
+ try (Stream<Path> pathStream = Files.walk(sourcePath);\r
+ Connection con = getConnection("jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "MAM", "Echotv.hu")) {\r
+ pathStream.forEach(new Consumer<Path>() {\r
+ @Override\r
+ public void accept(Path p) {\r
+ String name = p.getFileName().toString();\r
+ if (!name.toLowerCase().endsWith(".mxf"))\r
+ return;\r
+ if (name.startsWith("P") || name.startsWith("R"))\r
+ return;\r
+\r
+ List<IEntityBase> mediaFiles = dao.getByHouseId(name);\r
+ boolean archived = mediaFiles != null && !mediaFiles.isEmpty();\r
+\r
+ String fbd = "-";\r
+ String nbd = "-";\r
+ boolean inUse = false;\r
+ try {\r
+ BD bd = query(con, name.replace(".MXF", ""));\r
+ if (bd != null) {\r
+ if (bd.fBD != null) {\r
+ fbd = df.format(bd.fBD).substring(0, 10);\r
+ inUse = bd.fBD.after(now);\r
+ }\r
+ if (bd.nBD != null) {\r
+ nbd = df.format(bd.nBD).substring(0, 10);\r
+ inUse = inUse || bd.nBD.after(now);\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ boolean canDelete = archived && !inUse;\r
+ String line = String.format("%s;%s;%d;%s;%s;%s", name, archived ? "igen" : "nem", p.toFile().length(), fbd, nbd,\r
+ canDelete ? "igen" : "nem");\r
+ System.out.println(line);\r
+ lines.add(line);\r
+ if (canDelete)\r
+ dlines.add(line);\r
+ }\r
+ });\r
+ }\r
+\r
+ Files.write(Paths.get("c:\\temp\\morpheus_all.csv"), lines, Charset.forName("ISO-8859-2"), StandardOpenOption.CREATE);\r
+ Files.write(Paths.get("c:\\temp\\morpheus_cleanup.csv"), dlines, Charset.forName("ISO-8859-2"), StandardOpenOption.CREATE);\r
+ }\r
+\r
+ private Connection getConnection(String dbUrl, String userName, String password) throws Exception {\r
+ Connection result = null;\r
+ try {\r
+ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");\r
+ result = DriverManager.getConnection(dbUrl, userName, password);\r
+ } catch (Exception e) {\r
+ throw e;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private BD query(Connection con, String id) throws Exception {\r
+ BD result = null;\r
+ if (id.startsWith("P") || id.startsWith("R"))\r
+ return null;\r
+\r
+ // 1002: Musorok\r
+ // 2002: Promo\r
+ // 3002: AD\r
+\r
+ // @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null,\r
+ // @@StrParam1 varchar(200)=Null\r
+\r
+ // v_ProgrammeID\r
+ // v_Live\r
+ // v_EpisodeID\r
+ // v_VariantID\r
+ // v_MediaID\r
+ // v_VariantTypeID\r
+ // v_ProgTitle\r
+ // v_EpTitle\r
+ // v_Episode\r
+ // v_VariantType\r
+ // v_VariantKeywords\r
+ // v_VariantLengthTC\r
+ // v_VariantLengthFrame\r
+ // v_VariantNrSegments\r
+ // v_FirstBroadcastDate\r
+ // v_NextBroadcastDate\r
+ // v_OkForAir\r
+ // v_ForTransm\r
+\r
+ try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(1002, 0, ?, ?, ?, ?, ?)}")) {\r
+ stmt.setNull(1, Types.INTEGER);\r
+ stmt.setNull(2, Types.INTEGER);\r
+ stmt.setNull(3, Types.INTEGER);\r
+ stmt.setNull(4, Types.INTEGER);\r
+ stmt.setString(5, id);\r
+ try (ResultSet rs = stmt.executeQuery()) {\r
+ // ResultSetMetaData rsmd = rs.getMetaData();\r
+ // for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {\r
+ // System.out.println(rsmd.getColumnLabel(i));\r
+ // }\r
+ while (rs.next()) {\r
+\r
+ result = new BD();\r
+ result.fBD = rs.getDate("v_FirstBroadcastDate");\r
+ result.nBD = rs.getDate("v_NextBroadcastDate");\r
+ break;\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ throw e;\r
+ } finally {\r
+ }\r
+ return result;\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.db;\r
+\r
+import java.nio.charset.Charset;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.StandardOpenOption;\r
+import java.sql.Connection;\r
+import java.sql.DriverManager;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.ResultSetMetaData;\r
+import java.sql.Types;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Date;\r
+import java.util.List;\r
+import java.util.function.Consumer;\r
+import java.util.stream.Stream;\r
+\r
+import org.junit.AfterClass;\r
+import org.junit.BeforeClass;\r
+import org.junit.Test;\r
+\r
+import user.commons.IEntityBase;\r
+import user.commons.logging.LogUtils;\r
+\r
+public class Support_new {\r
+ public class BD {\r
+ Date fBD;\r
+ Date nBD;\r
+ }\r
+\r
+ protected static IItemManager manager = null;\r
+\r
+ @BeforeClass\r
+ static public void setUpConnection() {\r
+ System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty(ItemManager.DBUSERNAME, "db2admin");\r
+ System.setProperty(ItemManager.DBPASSWORD, "password");\r
+ System.setProperty(LogUtils.LOGLEVEL, "INFO");\r
+ // System.setProperty(ItemManager.DBURL,\r
+\r
+ manager = new ItemManager();\r
+ manager.connect();\r
+ }\r
+\r
+ @AfterClass\r
+ static public void tearDownConnection() {\r
+ manager.disconnect();\r
+ }\r
+\r
+ @Test\r
+ public void generateMorpheusArchivedList() throws Exception {\r
+ Path sourcePath = Paths.get("\\\\10.10.1.100\\BRAAVOS\\PLAYOUT\\Video");\r
+ MediaFileDAO dao = (MediaFileDAO) manager.getBaseDAO(MediaFile.class);\r
+ final SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm");\r
+ final List<String> lines = new ArrayList<>();\r
+ lines.add("név,archivált,méret,első_adás,következő_adás,törölhető");\r
+ final List<String> dlines = new ArrayList<>();\r
+ dlines.add("név,archivált,méret,első_adás,következő_adás,törölhető");\r
+\r
+ List<String> files = null;\r
+ try (Connection con = getConnection("jdbc:sqlserver://10.10.1.45\\sql16;databaseName=PA_Echo;", "MAM", "Echotv.hu")) {\r
+ files = query(con);\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ final List<String> filesInUse = files;\r
+\r
+ try (Stream<Path> pathStream = Files.walk(sourcePath)) {\r
+ pathStream.forEach(new Consumer<Path>() {\r
+ @Override\r
+ public void accept(Path p) {\r
+ String name = p.getFileName().toString();\r
+ if (!name.toLowerCase().endsWith(".mxf"))\r
+ return;\r
+\r
+ List<IEntityBase> mediaFiles = dao.getByHouseId(name);\r
+ boolean archived = mediaFiles != null && !mediaFiles.isEmpty();\r
+ boolean inUse = filesInUse.contains(name);\r
+ boolean canDelete = archived && !inUse;\r
+ String line = String.format("%s,%s,%d,%s", name, archived ? "igen" : "nem", p.toFile().length(), canDelete ? "igen" : "nem");\r
+ System.out.println(line);\r
+ lines.add(line);\r
+ if (canDelete)\r
+ dlines.add(line);\r
+ }\r
+ });\r
+ }\r
+\r
+ Files.write(Paths.get("c:\\temp\\morpheus_all.csv"), lines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW);\r
+ Files.write(Paths.get("c:\\temp\\morpheus_cleanup.csv"), dlines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW);\r
+ }\r
+\r
+ private Connection getConnection(String dbUrl, String userName, String password) throws Exception {\r
+ Connection result = null;\r
+ try {\r
+ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");\r
+ result = DriverManager.getConnection(dbUrl, userName, password);\r
+ } catch (Exception e) {\r
+ throw e;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private List<String> query(Connection con) throws Exception {\r
+ List<String> result = new ArrayList<>();\r
+\r
+ // [clIFsp_EC_MAM] @Operation int, @@@Options int, @@ItemID int, @@IntParam1 int=Null, @@IntParam2 int=Null, @@IntParam3 int=Null,\r
+ // @@StrParam1 varchar(200)=Null, @@StrParam2 varchar(max)=Null, @@DateParam1 datetime=Null, @@DateParam2 datetime=Null\r
+\r
+ try (PreparedStatement stmt = con.prepareStatement("{call dbo.clIFsp_EC_MAM(5001, 7, ?, ?, ?, ?, ?, ?, ?)}")) {\r
+ stmt.setNull(1, Types.INTEGER);\r
+ stmt.setNull(2, Types.INTEGER);\r
+ stmt.setNull(3, Types.INTEGER);\r
+ stmt.setNull(4, Types.INTEGER);\r
+ stmt.setNull(5, Types.VARCHAR);\r
+ stmt.setNull(6, Types.VARCHAR);\r
+ stmt.setDate(7, new java.sql.Date(new Date().getTime()));\r
+ try (ResultSet rs = stmt.executeQuery()) {\r
+ while (rs.next()) {\r
+\r
+ ResultSetMetaData rsmd = rs.getMetaData();\r
+ for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {\r
+ System.out.println(rsmd.getColumnLabel(i));\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ } catch (Exception e) {\r
+ throw e;\r
+ } finally {\r
+ }\r
+ return result;\r
+ }\r
+\r
+}\r
<!-- servlet> <description>Test servlet for jetty</description> <servlet-name>testservlet</servlet-name> <servlet-class>user.jobengine.servlet.TestServlet</servlet-class> \r
<load-on-startup>2</load-on-startup> </servlet -->\r
\r
-\r
<!-- ZK -->\r
<servlet-mapping>\r
<servlet-name>zkLoader</servlet-name>\r
\r
<!-- servlet-mapping> <servlet-name>testservlet</servlet-name> <url-pattern>/noway/*</url-pattern> </servlet-mapping -->\r
\r
+ <servlet-mapping>\r
+ <servlet-name>zkLoader</servlet-name>\r
+ <url-pattern>/test</url-pattern>\r
+ </servlet-mapping>\r
\r
<session-config>\r
<session-timeout>120</session-timeout>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<zk xmlns="http://www.zkoss.org/2005/zul">\r
+ <div width="100%" height="100%" apply="org.zkoss.bind.BindComposer"\r
+ viewModel="@id('vm') @init('user.jobengine.zk.model.DatabaseModel')">\r
+ <grid model="@load(vm.dataList)" mold="paging" sizedByContent="false" vflex="true" pagingPosition="top">\r
+ <columns sizable="true">\r
+ <column forEach="${vm.columnList}" label="${each}"></column>\r
+ </columns>\r
+ <template name="model" var="r">\r
+ <row>\r
+ <label forEach="${vm.columnList}" value="${r.get(each)}"></label>\r
+ </row>\r
+ </template>\r
+ </grid>\r
+ </div>\r
+</zk>
\ No newline at end of file
<menuitem sclass="rozsda" label="Statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
<menuitem sclass="rozsda" label="Folyamatok" onClick='includeContent.src="/pages/joblist.zul"' disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
<menuitem sclass="rozsda" label="Hiányzó anyagok" onClick='includeContent.src="/pages/missingmaterials.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" />\r
+ <menuitem sclass="rozsda" label="Test" onClick='includeContent.src="/pages/database.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter or sessionScope.userPrincipal.anonymous}" />\r
</menupopup>\r
</menu>\r
\r
\r
public void done();\r
\r
+ boolean forkPrepare() throws InterruptedException;\r
+\r
+ void forkWaitComplete() throws InterruptedException;\r
+\r
IInstruction getCurrentInstruction();\r
\r
Marker getFinishMarker();\r
@Override
public void shutdown() {
+ isRunning = false;
if (schedulerService != null)
schedulerService.shutdown();
} catch (TSMException e) {
logger.catching(e);
}
- isRunning = false;
logger.info("JobEngine stopped");
}
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;
private List<JobRuntime> children;
private MediaCubeMarker sessionMarker;
private boolean isService;
+ private Semaphore forkSempahore;
+ private IJobChangedListener jobChangedListener;
+ private List<Long> childrenIDs;
public JobRuntime() {
this.listeners = new EventListenerList();
((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();
job.setParentJobId(getParentJobId());
return job;
}
-
}
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.Init;\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.ListUtils;\r
+import user.commons.nosql.NoSQLUtils;\r
+\r
+//http://zkfiddle.org/sample/3op451q/12-Dynamic-Columns#source-1\r
+public class DatabaseModel {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ private List<BasicDBObject> dataList;\r
+ private List<String> columnList;\r
+ private DB db = null;\r
+\r
+ private DBCollection collection;\r
+\r
+ public List<String> getColumnList() {\r
+ return columnList;\r
+ }\r
+\r
+ public List<BasicDBObject> getDataList() {\r
+ return dataList;\r
+ }\r
+\r
+ @Init\r
+ public void init() {\r
+ db = NoSQLUtils.getNoSQLDB();\r
+ collection = db.getCollection("sessionlogs");\r
+\r
+ BasicDBObject first = (BasicDBObject) collection.findOne();\r
+ columnList = new ArrayList<>(first.keySet());\r
+\r
+ dataList = ListUtils.cast(collection.find().sort(new BasicDBObject("dateTime", -1)).toArray());\r
+ }\r
+\r
+ public void setColumnList(List<String> columnList) {\r
+ this.columnList = columnList;\r
+ }\r
+\r
+ public void setDataList(List<BasicDBObject> dataList) {\r
+ this.dataList = dataList;\r
+ }\r
+\r
+}\r