<Filters>\r
<MarkerFilter marker="MEDIACUBE" onMatch="ACCEPT" onMismatch="DENY" />\r
</Filters>\r
- <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg (%F:%L) %n" />\r
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %marker - %msg (%F:%L) %n" />\r
</Console>\r
<HTMLMailAppender name="MarkeredMail" subject="TEST MediaCube rendszerüzenet" to="vasary@elgekko.net" from="mediacubeserver@gmail.com" smtpHost="smtp.gmail.com"\r
smtpPort="465" smtpProtocol="smtps" smtpUsername="mediacubeserver@gmail.com" smtpPassword="salabakter" ignoreExceptions="false" bufferSize="1">\r
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/user/jobengine/server/steps" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=10.10.1.55 -Dnexio.disable=true -Djobengine.octopus.rundowns.name=new-rundowns -Djobengine.octopus.storyfolders.name=new-storyfolders -Djobengine.octopus.stories.name=new-stories -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/user/jobengine/server/steps" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Dnexio.host=10.10.1.55 -Dnexio.disable=true -Djobengine.octopus.rundowns.name=test_rundowns -Djobengine.octopus.storyfolders.name=test_storyfolders -Djobengine.octopus.stories.name=test_stories -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
<booleanAttribute key="show_selected_only" value="true"/>\r
<stringAttribute key="target_bundles" value="cglib@default:default,com.auth0.java-jwt@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.google.guava@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,com.sun.el.javax.el@default:default,commons-logging@default:default,javassist@default:default,javax.annotation-api@default:default,javax.inject@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.servlet.jsp-api@default:default,javax.validation.api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.jasper.glassfish@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jdt.core.compiler.batch@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.jsp@default:default,org.eclipse.jetty.osgi.boot.jsp@default:false,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.jvnet.mimepull@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.reflections@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
import javax.mail.internet.MimeUtility;
import javax.mail.util.ByteArrayDataSource;
+import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LoggingException;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AbstractManager;
import org.apache.logging.log4j.core.appender.ManagerFactory;
import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.core.impl.MutableLogEvent;
import org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.core.net.MimeMessageBuilder;
import org.apache.logging.log4j.core.util.NameUtil;
import org.apache.logging.log4j.core.util.NetUtils;
-import org.apache.logging.log4j.message.ReusableMessage;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.apache.logging.log4j.util.Strings;
}
private final Session session;
-
- //private final CyclicBuffer<LogEvent> buffer;
-
private volatile MimeMessage message;
-
private final FactoryData data;
-
private String defaultRecipient;
+ private String defaultSubject;
protected SmtpManager(final String name, final Session session, final MimeMessage message, final FactoryData data) {
super(null, name);
this.message = message;
this.data = data;
this.defaultRecipient = data.to;
- //this.buffer = new CyclicBuffer<>(LogEvent.class, data.numElements);
}
- public void add(LogEvent event) {
- if (event instanceof Log4jLogEvent && event.getMessage() instanceof ReusableMessage) {
- ((Log4jLogEvent) event).makeMessageImmutable();
- } else if (event instanceof MutableLogEvent) {
- event = ((MutableLogEvent) event).createMemento();
- }
- //buffer.add(event);
- }
+ // public void add(LogEvent event) {
+ // if (event instanceof Log4jLogEvent && event.getMessage() instanceof ReusableMessage) {
+ // ((Log4jLogEvent) event).makeMessageImmutable();
+ // } else if (event instanceof MutableLogEvent) {
+ // event = ((MutableLogEvent) event).createMemento();
+ // }
+ // }
private synchronized void connect(final LogEvent appendEvent) {
if (message != null) {
}
try {
message = createMimeMessage(data, session, appendEvent);
+ this.defaultSubject = message.getSubject();
} catch (final MessagingException e) {
logError("Could not set SmtpAppender message options", e);
message = null;
return mp;
}
- private void sendEmail(final String to, byte[] content, String contentType) {
+ private void sendEmail(final String to, final String subject, byte[] content, String contentType) {
try {
+ message.setSubject(subject);
final String encoding = getEncoding(content, contentType);
final byte[] encodedBytes = encodeContentToBytes(content, encoding);
final InternetHeaders headers = getHeaders(contentType, encoding);
}
}
- private void sendEvents(final Layout<?> layout, final List<LogEvent> events, final String to) {
- try {
- final byte[] rawBytes = formatContentToBytes(events, layout);
- final String contentType = layout.getContentType();
- sendEmail(to, rawBytes, contentType);
- } catch (Exception e) {
- logError("Caught exception while sending e-mail notification.", e);
- throw new LoggingException("Error occurred while sending email", e);
- }
- }
-
/**
* Send the contents of the cyclic buffer as an e-mail message.
*
if (appendEvent.getMarker() instanceof MediaCubeFinishMarker) {
MediaCubeFinishMarker mcm = (MediaCubeFinishMarker) appendEvent.getMarker();
storeSessionEvent(mcm, appendEvent);
- sendSessionEvents(mcm, layout);
+ sendSessionEvents(mcm, layout, appendEvent.getLevel());
return;
}
}
- sendEvents(layout, Arrays.asList(appendEvent), to);
+ sendEvents(to, defaultSubject, layout, Arrays.asList(appendEvent));
+ }
+
+ private void sendEvents(final String to, final String subject, final Layout<?> layout, final List<LogEvent> events) {
+ try {
+ final byte[] rawBytes = formatContentToBytes(events, layout);
+ final String contentType = layout.getContentType();
+ sendEmail(to, subject, rawBytes, contentType);
+ } catch (Exception e) {
+ logError("Caught exception while sending e-mail notification.", e);
+ throw new LoggingException("Error occurred while sending email", e);
+ }
}
protected void sendMultipartMessage(final MimeMessage msg, final MimeMultipart mp) throws MessagingException {
}
}
- private void sendSessionEvents(final MediaCubeMarker mcm, final Layout<?> layout) {
+ private void sendSessionEvents(final MediaCubeMarker mcm, final Layout<?> layout, final Level level) {
String sessionID = mcm.getSessionID();
List<LogEvent> events = sessionEvents.get(sessionID);
if (events == null)
return;
String to = mcm.getTo() == null ? defaultRecipient : mcm.getTo();
- sendEvents(layout, events, to);
+ String subject = mcm.getSessionName() == null ? defaultSubject : String.format("%s: %s", level, mcm.getSessionName());
+ sendEvents(to, subject, layout, events);
sessionEvents.remove(sessionID);
}
<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="OCTOPUS adatok szinkronizálása">\r
+<jobtemplate name="OCTOPUS adatok szinkronizálása" service="true">\r
<declarations>\r
<parameters>\r
<parameter name="includeArchived" type="java.lang.Boolean" />\r
import org.apache.commons.net.ftp.FTPReply;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.Marker;\r
\r
import com.ibm.nosql.json.api.BasicDBList;\r
import com.ibm.nosql.json.api.BasicDBObject;\r
private int nexioKillDateDays;\r
private String nexioAgency;\r
private Object[] filterAgencies;\r
+ private Marker systemMarker;\r
\r
private int check(int value, String name) {\r
if (value == 0) {\r
- logger.error(getMarker(), "A folyamat '{}' bemeneti paramétere 0.", name);\r
+ logger.error(systemMarker, "A folyamat '{}' bemeneti paramétere 0.", name);\r
throw new NullPointerException(String.format("System is not configured properly, missing '%s' input parameter.", name));\r
}\r
return value;\r
\r
private String check(String value, String name) {\r
if (StringUtils.isBlank(value)) {\r
- logger.error(getMarker(), "A folyamat '{}' bemeneti paramétere üres.", name);\r
+ logger.error(systemMarker, "A folyamat '{}' bemeneti paramétere üres.", name);\r
throw new NullPointerException(String.format("System is not configured properly, missing '%s' input parameter.", name));\r
}\r
return value;\r
for (FileArchive fileArchive : storyArchive.getFileArchives()) {\r
try {\r
copyFile(fileArchive, rundownArchive, storyArchive);\r
- logger.info(getMarker(), "Sikeres anyag archiválás a '{}' tükörhöz: '{}'.", rundownArchive.getItemTitle(), fileArchive.getFileName());\r
+ logger.info(systemMarker, "Sikeres fájl archiválás a '{}' tükörhöz: '{}'.", rundownArchive.getItemTitle(), fileArchive.getFileName());\r
} catch (Exception e) {\r
- logger.error(getMarker(), "Az '{}' anyag archiválása sikertelen. A rendszer üzenete: {}", fileArchive.getFileName(), e.getMessage());\r
+ logger.error(systemMarker, "Az '{}' fájl archiválása sikertelen. A rendszer üzenete: {}", fileArchive.getFileName(), e.getMessage());\r
}\r
}\r
}\r
@StepEntry\r
public Object[] execute(int nexioPort, String nexioUserName, String nexioPassword, String archiveFtp, String archiveUserName, String archivePassword,\r
String agencies, int limit, int nexioKillDateDays, String nexioAgency, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ systemMarker = jobRuntime.getMarker();\r
setAndCheck(nexioPort, nexioUserName, nexioPassword, archiveFtp, archiveUserName, archivePassword, agencies, limit, nexioKillDateDays, nexioAgency,\r
jobEngine);\r
octopusAPI = new OctopusAPI();\r
}\r
\r
private Date getScheduledStart(String clipName, Date recordDate) {\r
- if (StringUtils.isBlank(clipName))\r
- logger.warn(getMarker(), "A anyagnak nincs neve, ezért nem archiválható.", clipName);\r
- if (recordDate == null)\r
- logger.warn(getMarker(), "A {} anyag rögzítésének ideje nem meghatározható, ezért nem archiválható.", clipName);\r
+ if (StringUtils.isBlank(clipName)) {\r
+ logger.warn(systemMarker, "A fájlnak nincs neve, ezért nem archiválható.");\r
+ return null;\r
+ }\r
+ if (recordDate == null) {\r
+ logger.warn(systemMarker, "Az '{}' fájl rögzítésének ideje nem meghatározható, ezért nem archiválható.", clipName);\r
+ return null;\r
+ }\r
\r
Date timePart = null;\r
try {\r
String clipNameTime = clipName.split("_")[0];\r
timePart = startTimeformat.parse(clipNameTime);\r
} catch (ParseException e) {\r
- logger.warn(getMarker(), "A {} anyag neve nem időbélyeggel kezdődik, ezért nem archiválható.", clipName);\r
+ logger.warn(systemMarker, "A '{}' fájl neve nem időbélyeggel kezdődik, ezért nem archiválható.", clipName);\r
return null;\r
}\r
return CalendarUtils.createCalendar(CalendarUtils.createCalendar(recordDate), timePart).getTime();\r
return null;\r
DBObject rundown = octopusAPI.getRundown(scheduledStart);\r
if (rundown == null) {\r
- logger.error(getMarker(), "A '{}' anyaghoz nem található tükör '{}' kezdéssel, ezért nem archiválható.", clipName, scheduledStart);\r
+ logger.error(systemMarker, "A '{}' anyaghoz nem található tükör '{}' kezdéssel, ezért nem archiválható.", clipName, scheduledStart);\r
return null;\r
}\r
\r
result = processRundow(rundown, clipName, duration);\r
} catch (Exception e) {\r
logger.catching(e);\r
- logger.error(getMarker(), "A '{}' anyag metaadatainak transzformálása sikertelen, ezért az nem archiválható. A rendszer hibaüzenete: {}",\r
+ logger.error(systemMarker, "A '{}' anyag metaadatainak transzformálása sikertelen, ezért az nem archiválható. A rendszer hibaüzenete: {}",\r
e.getMessage());\r
return null;\r
}\r
}\r
\r
private void processClips(List<BasicDBObject> clips, int limit) {\r
- logger.info(getMarker(), "A folyamat {} archiválható anyagot érzékelt.", clips.size());\r
+ logger.info(systemMarker, "A folyamat {} archiválható anyagot érzékelt.", clips.size());\r
int current = 0;\r
for (BasicDBObject clip : clips) {\r
RundownArchive rundownArchive = processClip(clip);\r
String agencies, int limit, int nexioKillDateDays, String nexioAgency, IJobEngine jobEngine) throws Exception {\r
db = NoSQLUtils.getNoSQLDB();\r
if (db == null) {\r
- logger.error(getMarker(), "Az NoSQL adatkezelő réteg nem elérhető.");\r
+ logger.error(systemMarker, "Az NoSQL adatkezelő réteg nem elérhető.");\r
throw new NullPointerException("Internal error, missing NoSQL DB reference.");\r
}\r
\r
if (jobEngine == null) {\r
- logger.error(getMarker(), "Az folyamatkezelő réteg nem elérhető.");\r
+ logger.error(systemMarker, "Az folyamatkezelő réteg nem elérhető.");\r
throw new NullPointerException("Internal error, missing JobEngine reference.");\r
}\r
manager = jobEngine.getItemManager();\r
if (manager == null) {\r
- logger.error(getMarker(), "Az adatbáziskezelő réteg nem elérhető.");\r
+ logger.error(systemMarker, "Az adatbáziskezelő réteg nem elérhető.");\r
throw new NullPointerException("Internal error, missing ItemManager reference.");\r
}\r
String nexioHost = System.getProperty("nexio.host");\r
if (StringUtils.isBlank(nexioHost)) {\r
- logger.error(getMarker(), "A 'nexio.host' rendszer paraméter nem található.");\r
+ logger.error(systemMarker, "A 'nexio.host' rendszer paraméter nem található.");\r
throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing.");\r
}\r
check(nexioPort, "nexioPort");\r
sourceUri.setUserName(nexioUserName);\r
sourceUri.setPassword(nexioPassword);\r
if (sourceUri == null) {\r
- logger.error(getMarker(), "A forrás nem elérhető.");\r
+ logger.error(systemMarker, "A forrás nem elérhető.");\r
throw new NullPointerException("Internal error, missing 'sourceUri'.");\r
}\r
\r
targetUri.setUserName(archiveUserName);\r
targetUri.setPassword(archivePassword);\r
if (targetUri == null) {\r
- logger.error(getMarker(), "A cél nem elérhető.");\r
+ logger.error(systemMarker, "A cél nem elérhető.");\r
throw new NullPointerException("Internal error, missing 'targetUri'.");\r
}\r
\r
if (!FTPReply.isPositiveCompletion(reply))\r
throw new Exception("STAT parancs válasza: " + sourceFtp.getReplyString());\r
\r
- logger.info("Status: {}", sourceFtp.getReplyString());\r
+ //logger.info("Status: {}", sourceFtp.getReplyString());\r
if (reply == 226) {\r
break;\r
}\r
int count = 10;\r
\r
@StepEntry\r
- public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws InterruptedException {\r
- logger.info(jobRuntime.getMarker(), "A folyamat elindult");\r
- logger.warn(jobRuntime.getMarker(), "Egy WARN");\r
- logger.error(jobRuntime.getMarker(), "Egy ERROR");\r
- // logger.warn(toMarker, "Egy WARN {}", "paraméterrel");\r
- // logger.error(toMarker, "Egy ERROR {}", "paraméterrel");\r
+ public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ logger.warn(jobRuntime.getMarker(), "Egy WARN {}", "paraméterrel");\r
+ logger.error(jobRuntime.getMarker(), "Egy ERROR {}", "paraméterrel");\r
for (int i = 0; i < count; i++) {\r
if (!canContinue())\r
break;\r
jobRuntime.incrementProgress((i + 1) * count);\r
+\r
Thread.sleep(100);\r
logger.info(jobRuntime.getMarker(), "Log markered" + i);\r
- // logger.info(toMarker, "Log markered" + i);\r
- //logger.info("Progress {}", jobRuntime.getProgress());\r
+\r
+ if (i == 8)\r
+ throw new Exception("stop");\r
}\r
- logger.info(jobRuntime.getFinishMarker(), "A folyamat véget ért");\r
- //logger.info(LogCollector.FINISH);\r
return null;\r
}\r
\r
private int objectCount;\r
private int currentObjectIndex;\r
\r
+ private boolean disableWrite = false;\r
+\r
public OctopusDataMiner() {\r
db = NoSQLUtils.getNoSQLDB();\r
\r
storeRundowns(rundowns);\r
storeStoryFolders(storyFolders);\r
\r
+ if (disableWrite)\r
+ return;\r
+\r
deleteDiff(currentRundowns.keySet(), rundownIDs, IOctopusAPI.RUNDOWN_COLLECTION);\r
deleteDiff(currentFolder.keySet(), folderIDs, IOctopusAPI.FOLDER_COLLECTION);\r
deleteDiff(currentStories.keySet(), storyIDs, IOctopusAPI.STORY_COLLECTION);\r
String objId = obj.getString(IOctopusAPI.OBJ_ID);\r
if (objId == null)\r
continue;\r
- result.put(mosId, label);\r
+ result.put(objId, label);\r
\r
}\r
return result;\r
\r
private void fireProgressEvent() {\r
currentObjectIndex++;\r
- logger.info("currentObjectIndex {}", currentObjectIndex);\r
+ //logger.info("currentObjectIndex {}", currentObjectIndex);\r
int progress = currentObjectIndex * 100 / objectCount;\r
if (progress != progressEvent.getProgress()) {\r
progressEvent.setProgress(progress);\r
DBCollection collection = db.getCollection(IOctopusAPI.RUNDOWN_COLLECTION);\r
long rundownID = NoSQLUtils.asLong(rundown, IOctopusAPI.ID);\r
setObjectID(currentRundowns, rundownID, rundown);\r
- collection.save(rundown);\r
+ if (!disableWrite)\r
+ collection.save(rundown);\r
}\r
logger.trace(ENTER);\r
}\r
story.append(IOctopusAPI.PARENT_STORY_ID, parentStoryId);\r
logger.debug(SAVING_STORY_ID, storyID);\r
setObjectID(currentStories, storyID, story);\r
- collection.save(story);\r
+ if (!disableWrite)\r
+ collection.save(story);\r
logger.trace(EXIT);\r
}\r
\r
logger.debug("Storing story folder {}", name);\r
long folderID = NoSQLUtils.asLong(storyFolder, IOctopusAPI.ID);\r
setObjectID(currentFolder, folderID, storyFolder);\r
- collection.save(storyFolder);\r
+ if (!disableWrite)\r
+ collection.save(storyFolder);\r
logger.trace(EXIT);\r
}\r
\r
ensureTargetPathExistence(targetPath);\r
} catch (Exception e) {\r
logger.catching(e);\r
- logger.error(getMarker(), "A cél mappa {} nem létezik és hozható létre. A rendszer hibaüzenete: {}", targetPath, e.getMessage());\r
+ logger.error(jobRuntime.getMarker(), "A cél mappa '{}' nem létezik és hozható létre. A rendszer hibaüzenete: {}", targetPath, e.getMessage());\r
+ throw e;\r
}\r
return new Object[] { targetPath, targetNamePattern };\r
}\r
import org.apache.commons.lang.StringUtils;\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.commons.LogUtils;\r
import user.commons.MediaCubeMarker;\r
import user.commons.RemoteFile;\r
import user.commons.StoreUri;\r
targetFileName = String.format(targetNamePattern, sourceFileName);\r
RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName);\r
\r
- String successMessage = "Az '{}' állomány visszatöltése sikeres. Elérhető az \r\n'{}' mappa\r\n'{}' állományában.";\r
+ Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikeres. Elérhető az \r\n'{}' mappa\r\n'{}' állományában.", sourceFileName,\r
+ targetPath, targetFileName);\r
if (StringUtils.isNotBlank(successRecipient))\r
- logger.info(new MediaCubeMarker(successRecipient), successMessage, sourceFileName, targetPath, targetFileName);\r
- logger.info(getMarker(), successMessage, sourceFileName, targetPath, targetFileName);\r
+ logger.info(new MediaCubeMarker(successRecipient), msg);\r
+ logger.info(getMarker(), msg);\r
+ logger.info(jobRuntime.getMarker(), msg);\r
\r
if (killDateDays > 0)\r
EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, getMarker());\r
\r
} catch (Exception e) {\r
- logger.error(getMarker(), "Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}", sourceFileName, e.getMessage());\r
+ Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}", sourceFileName, e.getMessage());\r
+ logger.error(getMarker(), msg);\r
+ logger.error(jobRuntime.getMarker(), msg);\r
logger.catching(e);\r
throw e;\r
}\r
com.fasterxml.jackson.datatype.joda;version="2.4.5",
com.fasterxml.jackson.jaxrs.json;version="2.4.5",
org.apache.logging.log4j;version="2.8.2",
+ org.apache.logging.log4j.message;version="2.8.2",
org.jboss.resteasy.client.jaxrs,
org.jboss.resteasy.plugins.providers,
org.jboss.resteasy.spi,
--- /dev/null
+package user.commons;\r
+\r
+import org.apache.logging.log4j.message.Message;\r
+import org.apache.logging.log4j.message.ParameterizedMessageFactory;\r
+\r
+public class LogUtils {\r
+ private static ParameterizedMessageFactory factory = new ParameterizedMessageFactory();\r
+\r
+ public static Message format(String message, Object... parameters) {\r
+ return factory.newMessage(message, parameters);\r
+ }\r
+}\r
\r
public MediaCubeFinishMarker(MediaCubeMarker parent) {\r
setSessionID(parent.getSessionID());\r
+ setSessionName(parent.getSessionName());\r
}\r
\r
public MediaCubeFinishMarker(MediaCubeMarker parent, String to) {\r
super(to);\r
setSessionID(parent.getSessionID());\r
+ setSessionName(parent.getSessionName());\r
}\r
}\r
private static final String MEDIACUBE = "MEDIACUBE";\r
private String to;\r
private String sessionID;\r
+ private String sessionName;\r
\r
public MediaCubeMarker() {\r
super(MEDIACUBE);\r
return sessionID;\r
}\r
\r
+ public String getSessionName() {\r
+ return sessionName;\r
+ }\r
+\r
public String getTo() {\r
return to;\r
}\r
this.sessionID = sessionID;\r
}\r
\r
+ public void setSessionName(String sessionName) {\r
+ this.sessionName = sessionName;\r
+ }\r
+\r
public void setTo(String to) {\r
this.to = to;\r
}\r
public List<DBObject> getStories() {\r
List<DBObject> result = null;\r
DBCollection collection = db.getCollection(STORY_COLLECTION);\r
- DBCursor find = collection.find().limit(1000);\r
+ DBCursor find = collection.find(new BasicDBObject(), new BasicDBObject("mosObjects", 1).append("_id", 0)).limit(1000);\r
if (find.hasNext())\r
result = find.toArray();\r
return result;\r
</row>\r
<row>\r
Felhasználó\r
- <textbox value="@bind(jlm.account)" id="account" width="200px" forward="onOK=login.onClick" />\r
+ <textbox value="@bind(jlm.account)" id="account" width="200px" forward="onOK=login.onClick" onCreate="self.focus()" />\r
</row>\r
<row>\r
Jelszó\r
<menu sclass="whitemenu" label="Archívum" >\r
<menupopup>\r
<menuitem sclass="rozsda" label="Keresés" onClick='includeContent.src="/pages/search_items.zul"' disabled="false" />\r
- <menuitem sclass="rozsda" label="Statisztikák" onClick='includeContent.src="/pages/statistics.zul"' disabled="${not sessionScope.userPrincipal.admin}" />\r
- <menuitem sclass="rozsda" label="Folyamatok" onClick='includeContent.src="/pages/joblist.zul"' disabled="${not sessionScope.userPrincipal.admin}" />\r
- <menuitem sclass="rozsda" label="Hiányzó anyagok" onClick='includeContent.src="/pages/missingmaterials.zul"' disabled="${not sessionScope.userPrincipal.jobSubmitter}" />\r
+ <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
</menupopup>\r
</menu>\r
\r
<?xml version="1.0" encoding="UTF-8"?>\r
-<window id="resultWin" title="Visszatöltés azonosító" width="500px" border="normal" apply="org.zkoss.bind.BindComposer" viewModel="@id('jlm') @init('user.jobengine.zk.model.RetrieveSelectorModel')">\r
- <grid>\r
- <columns>\r
- <column width="120px" />\r
- <column width="100%"/>\r
- </columns>\r
- <rows>\r
- <row>\r
- <label value="Azonosító:" />\r
- <textbox value="@bind(jlm.houseId)" width="100%" tabindex="1" constraint="no empty: Kérem adjon meg egy TRAFFIC vagy egy OCTOPUS azonosítót!"/>\r
- </row>\r
- <row>\r
- <label value="Értesítési cím:"/>\r
- <textbox value="@bind(jlm.email)" width="100%" tabindex="2" constraint="/.+@.+\.[a-z]+/: Kérem adjon meg egy email címet!" />\r
- </row>\r
- </rows>\r
- </grid>\r
- <hbox width="100%" pack="center">\r
- <button id="closeButton" label="Mégsem" onClick="@command('close')" />\r
- <button id="executeButton" label="Végrehajtás" onClick="@command('execute')" />\r
- </hbox>\r
+<window id="resultWin" title="Azonosító megadása" width="500px" border="normal" apply="org.zkoss.bind.BindComposer"\r
+ viewModel="@id('jlm') @init('user.jobengine.zk.model.RetrieveSelectorModel')" onCancel="self.detach(); event.stopPropagation();">\r
+ <grid>\r
+ <columns>\r
+ <column width="120px" />\r
+ <column width="100%" />\r
+ </columns>\r
+ <rows>\r
+ <row>\r
+ <label value="Azonosító:" />\r
+ <textbox value="@load(jlm.houseId) @save(jlm.houseId,before='execute')" width="100%" tabindex="1"\r
+ forward="onOK=execute.onClick"\r
+ constraint="no empty: Kérem adjon meg egy TRAFFIC vagy egy OCTOPUS azonosítót!" />\r
+ </row>\r
+ <row>\r
+ <label value="Értesítési cím:" />\r
+ <textbox value="@load(jlm.email) @save(jlm.email,before='execute')" width="100%" tabindex="2"\r
+ forward="onOK=execute.onClick"\r
+ constraint="/.+@.+\.[a-z]+/: Kérem adjon meg egy email címet!" />\r
+ </row>\r
+ </rows>\r
+ </grid>\r
+ <hbox width="100%" pack="center">\r
+ \r
+ <button id="close" label="Mégsem" onClick="@command('close')" />\r
+ \r
+ <button id="execute" label="Végrehajtás" onClick="@command('execute')" />\r
+ \r
+ </hbox>\r
</window>\r
\r
boolean isRunable();\r
\r
+ boolean isService();\r
+\r
boolean isWaiting();\r
\r
Object popFromStack();\r
@Override\r
void setParameters(Map<String, Object> parameters);\r
\r
+ void setService(boolean isService);\r
+\r
void setVariable(String name, Object value);\r
\r
void swapStack();\r
result.setTemplate(template);
result.setName(name);
result.setParameters(parameters);
+ result.setService(program.getTemplate().isService());
submit(result);
} else {
logger.error("Unknown template: " + template);
private int runtimeWeight;
private List<JobRuntime> children;
private MediaCubeMarker sessionMarker;
+ private boolean isService;
public JobRuntime() {
this.listeners = new EventListenerList();
if (sessionMarker == null) {
sessionMarker = new MediaCubeMarker();
sessionMarker.setSessionID(String.valueOf(getId()));
+ sessionMarker.setSessionName(name);
}
return sessionMarker;
}
return result;
}
+ @Override
+ public boolean isService() {
+ return isService;
+ }
+
@Override
public boolean isWaiting() {
return ((getStatus().getValue() & 0x0100) == 0x0100);
}
}
+ @Override
+ public void setService(boolean isService) {
+ this.isService = isService;
+ }
+
@Override
public void setStatus(JobStatus status) {
if (this.status != status) {
logger.catching(t);
jobEngine.suspendJob(t, jobRuntime);
} finally {
- logger.info(jobRuntime.getFinishMarker(), "A folyamat futása véget ért");
-
if (step != null) {
step.cleanup();
jobRuntime = null;
package user.jobengine.server.actions;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
import user.commons.JobStatus;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class DoneExecutingAction implements IJobStatusAction {\r
+ private static final Logger logger = LogManager.getLogger();\r
\r
@Override\r
public void processAction(IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
jobRuntime.setStatus(JobStatus.RUNABLE);\r
jobRuntime.NotifyUpdate();\r
jobEngine.addToRunQueue(jobRuntime);\r
+ if (!jobRuntime.isService())\r
+ logger.info(jobRuntime.getFinishMarker(), "A '{}' folyamat futása sikeresen véget ért", jobRuntime.getName());\r
}\r
}\r
\r
import java.sql.Timestamp;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
import user.commons.JobStatus;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class DoneSuspendAction implements IJobStatusAction {\r
+ private static final Logger logger = LogManager.getLogger();\r
\r
@Override\r
public void processAction(IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
jobRuntime.NotifyUpdate();\r
jobRuntime.restoreStack();\r
jobRuntime.decrementInstructionPointer();\r
+ if (!jobRuntime.isService())\r
+ logger.error(jobRuntime.getFinishMarker(), "A '{}' folyamat futása megszakadt", jobRuntime.getName());\r
}\r
}\r
package user.jobengine.server.actions;\r
\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
import user.commons.JobStatus;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class ExecuteRunableAction implements IJobStatusAction {\r
+ private static final Logger logger = LogManager.getLogger();\r
\r
@Override\r
public void processAction(IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
jobRuntime.NotifyUpdate();\r
jobRuntime.saveStack();\r
jobEngine.addToExecutorQueue(jobRuntime);\r
+ if (!jobRuntime.isService())\r
+ logger.info(jobRuntime.getMarker(), "A '{}' folyamat elindult", jobRuntime.getName());\r
}\r
}\r
private String name = null;\r
private String description = null;\r
private boolean multiInstance;\r
+ private boolean service;\r
\r
public JobTemplate() {\r
}\r
return multiInstance;\r
}\r
\r
+ public boolean isService() {\r
+ return service;\r
+ }\r
+\r
public void setCommandSequence(CommandSequence commandSequence) {\r
this.commandSequence = commandSequence;\r
}\r
this.name = name;\r
}\r
\r
+ public void setService(boolean service) {\r
+ this.service = service;\r
+ }\r
+\r
public List<String> validate() throws Exception {\r
Map<String, String> parameters = new HashMap<>();\r
Map<String, String> variables = new HashMap<>();\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
import user.jobengine.server.JobEngine;\r
+import user.jobengine.zk.util.SessionUtil;\r
\r
public class RetrieveSelectorModel extends BaseModel {\r
private static final Logger logger = LogManager.getLogger();\r
@Command\r
public void execute() {\r
try {\r
+ if (StringUtils.isBlank(houseId))\r
+ throw new Exception("Az azonosító megadása kötelező!");\r
+ if (StringUtils.isBlank(email))\r
+ throw new Exception("Az értesítési cím megadása kötelező!");\r
String trafficOutputPath = "/mnt/ISILON/PLAYOUT_NLE";\r
String octopusOutputPath = "/mnt/ISILON/OCTOPUS";\r
String genericOutputPath = "/mnt/ISILON/ARCHIVE_RESTORE";\r
- if (StringUtils.isBlank(houseId))\r
- throw new Exception("Az azonosító megadása kötelező!");\r
Map<String, Object> parameters = ListUtils.asMap(TRAFFICOUTPUTPATH, trafficOutputPath, OCTOPUSOUTPUTPATH, octopusOutputPath, GENERICOUTPUTPATH,\r
genericOutputPath, MEDIACUBEMEDIA, this.selectedMedia, HOUSEID, houseId, SUCCESSRECIPIENT, email, KILLDATEDAYS, 7);\r
IJobEngine jobEngine = JobEngine.getInstance();\r
public void init() {\r
Map<?, ?> args = Executions.getCurrent().getArg();\r
this.selectedMedia = (Media) args.get(MEDIACUBEMEDIA);\r
+ setEmail(SessionUtil.getUserPrincipal().getEmail());\r
}\r
\r
public void setEmail(String email) {\r
Properties cfg = getConfiguration();\r
UserPrincipal userPrincipal = null;\r
if (authenticateLocal(account, password, cfg, LOCAL_ADMINS)) {\r
- userPrincipal = new UserPrincipal(account, true, true);\r
+ userPrincipal = new UserPrincipal(account, true, true, false);\r
} else {\r
if (authenticateLocal(account, password, cfg, LOCAL_JOBSUBMITTERS)) {\r
- userPrincipal = new UserPrincipal(account, false, true);\r
+ userPrincipal = new UserPrincipal(account, false, true, false);\r
} else {\r
if (authenticateLocal(account, password, cfg, LOCAL_USERS)) {\r
- userPrincipal = new UserPrincipal(account, false, false);\r
+ userPrincipal = new UserPrincipal(account, false, false, false);\r
} else {\r
LDAPHandler h = new LDAPHandler(account, password, cfg);\r
userPrincipal = h.getUserPrincipal();\r
return !isAuthenticationEnabled() || getUserPrincipal() != null;\r
}\r
\r
- private static boolean isAuthenticationEnabled() {\r
+ public static boolean isAuthenticationEnabled() {\r
boolean result = false;\r
try {\r
Properties cfg = getConfiguration();\r
result = Boolean.parseBoolean(cfg.getProperty(AUTH_ENABLED, "false"));\r
if (!result)\r
- setAttribute(USERPRINCIPAL, new UserPrincipal("admin", true, true));\r
+ setAttribute(USERPRINCIPAL, new UserPrincipal("anonymous", true, true, true));\r
} finally {\r
}\r
return result;\r
\r
private List<String> memberOf;\r
private boolean admin;\r
+ private boolean anonymous;\r
private boolean jobSubmitter;\r
private String account;\r
private String displayName;\r
private String email;\r
\r
public UserPrincipal(String account) {\r
- this(account, false, false);\r
+ this(account, false, false, false);\r
}\r
\r
- public UserPrincipal(String account, boolean isAdmin, boolean isJobSubmitter) {\r
+ public UserPrincipal(String account, boolean isAdmin, boolean isJobSubmitter, boolean isAnonymous) {\r
this.account = account;\r
this.displayName = account;\r
this.admin = isAdmin;\r
this.jobSubmitter = isJobSubmitter;\r
+ this.anonymous = isAnonymous;\r
}\r
\r
public String getAccount() {\r
return admin;\r
}\r
\r
+ public boolean isAnonymous() {\r
+ return anonymous;\r
+ }\r
+\r
public boolean isJobSubmitter() {\r
return jobSubmitter;\r
}\r
this.admin = admin;\r
}\r
\r
+ public void setAnonymous(boolean anonymous) {\r
+ this.anonymous = anonymous;\r
+ }\r
+\r
public void setDisplayName(String displayName) {\r
this.displayName = displayName;\r
}\r