--- /dev/null
+{\r
+ "title": "TRANSCODER",\r
+ "active": true,\r
+ "startInTray": true,\r
+ "enableCustomMetadataId": true,\r
+ "defaultWindowColor": "#E3F2FD",\r
+ "partialWindowColor": "#BBDEFB",\r
+ "player": {\r
+ "enabled": true,\r
+ "autoStart": false,\r
+ "segmentEditor": true\r
+ },\r
+ "source": {\r
+ "$type": "UNCSource",\r
+ "filter": "avi,wav,mxf",\r
+ "local": {\r
+ "address": "file://10.10.1.100/braavos/TRANSCODER"\r
+ }\r
+ },\r
+ "metadatas": [\r
+ {\r
+ "$type": "OctopusMetadata",\r
+ "server": {\r
+ "address": "http://10.10.1.27/services/rest/octopus/",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "$type": "TrafficMetadata",\r
+ "server": {\r
+ "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
+ "userName": "MAM",\r
+ "password": "7RKZYBzumKjL40SJwuwiFCvX57xuCN8zay6OttUm2wbrgImyYZBHyZTUUYrXX31Ge2Uwew07HYsqh2uzdJeDBDwcVntxaHg3nIpv9Dyq/odVoiC4tUF/K+lgvKWANcrZ",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "$type": "MediaCubeMetadata",\r
+ "server": {\r
+ "address": "http://10.10.1.27/services/rest/jobengine/",\r
+ "timeout": 1000\r
+ }\r
+ }\r
+ ],\r
+ "targets": [\r
+ {\r
+ "label": "Octopus mappába küldés",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "%ID%-%SOURCENAME%",\r
+ "tag": "Betöltés",\r
+ "subFolderFormat": "%IDROOT%-%TEXT%",\r
+ "killDateDays": 7,\r
+ "saveArchiveMetadata": false,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/OCTOPUS",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "label": "Traffic mappába küldés",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "%ID%-%SOURCENAME%",\r
+ "tag": "Betöltés",\r
+ "subFolderFormat": "%IDROOT%-%TEXT%",\r
+ "killDateDays": 7,\r
+ "saveArchiveMetadata": false,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "label": "Reklám mappába küldés",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "%ID%-%SOURCENAME%",\r
+ "tag": "Betöltés",\r
+ "subFolderFormat": "%IDROOT%-%TEXT%/INGEST-%TIMESTAMP%",\r
+ "killDateDays": 14,\r
+ "saveArchiveMetadata": false,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/REKLAM_NLE",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "label": "Lebonyba küldés",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "%ID%",\r
+ "tag": "Lebony",\r
+ "killDateDays": 7,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/TQC/CHECK",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ },\r
+ {\r
+ "label": "Archiválás",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "%ID%",\r
+ "tag": "Archiválás",\r
+ "saveArchiveMetadata": true,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100/ARCHIVE",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
+ }\r
+ ]\r
+}\r
+++ /dev/null
-{\r
- "title": "TQC check",\r
- "active": true,\r
- "startInTray": false,\r
- "enableCustomMetadataId": true,\r
- "player": {\r
- "enabled": true,\r
- "autoStart": false,\r
- "segmentEditor": true\r
- },\r
- "source": {\r
- "$type": "UNCSource",\r
- "filter": "avi,wav,mxf",\r
- "local": {\r
- "address": "file://10.10.1.100/BRAAVOS/TQC/CHECK",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- },\r
- "remote": {\r
- "address": "ftp://10.10.1.100/TQC/CHECK",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- }\r
- },\r
- "metadatas": [\r
- {\r
- "$type": "TrafficMetadata",\r
- "server": {\r
- "address": "Data Source=10.10.1.45\\sql16;Initial Catalog=PA_Echo;Persist Security Info=True;",\r
- "userName": "MAM",\r
- "password": "7RKZYBzumKjL40SJwuwiFCvX57xuCN8zay6OttUm2wbrgImyYZBHyZTUUYrXX31Ge2Uwew07HYsqh2uzdJeDBDwcVntxaHg3nIpv9Dyq/odVoiC4tUF/K+lgvKWANcrZ",\r
- "timeout": 1000\r
- }\r
- },\r
- {\r
- "$type": "MediaCubeMetadata",\r
- "server": {\r
- "address": "http://10.10.1.27/services/rest/jobengine/",\r
- "timeout": 1000\r
- }\r
- }\r
- ],\r
- "targets": [\r
- {\r
- "label": "Adáskész",\r
- "processor": "FXPTargetProcessor",\r
- "outputFormat": "%ID%",\r
- "saveSegments": true,\r
- "tag": "Adáskész",\r
- "disableFileVersioning": true,\r
- "enableOverride": true,\r
- "saveMorpheusMetadata": true,\r
- "pathMorpheusMetadata": "/PLAYOUT/MorpheusGateway/Input",\r
- "deviceIdMorpheus": "ISILON",\r
- "remote": {\r
- "address": "ftp://10.10.1.100/PLAYOUT/Video",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- }\r
- },\r
- {\r
- "label": "Újravágás",\r
- "processor": "FXPTargetProcessor",\r
- "subFolderFormat": "%IDROOT%-%TEXT%",\r
- "outputFormat": "%ID%-%TEXT%",\r
- "tag": "Újravágás",\r
- "disableFileVersioning": true,\r
- "enableOverride": true,\r
- "remote": {\r
- "address": "ftp://10.10.1.100/PLAYOUT_NLE",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- },\r
- "sendEmailOnSuccess": true,\r
- "successEmailRecipient": "vasary@elgekko.net",\r
- "successEmailPattern": "A %TARGETNAME% újravágása szükséges."\r
- },\r
- {\r
- "label": "Archiválás",\r
- "processor": "FXPTargetProcessor",\r
- "outputFormat": "%ID%",\r
- "tag": "Archiválás",\r
- "saveArchiveMetadata": true,\r
- "disableFileVersioning": true,\r
- "enableOverride": true,\r
- "remote": {\r
- "address": "ftp://10.10.1.100/ARCHIVE",\r
- "userName": "mediacube",\r
- "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
- "timeout": 1000\r
- }\r
- }\r
- ]\r
-}\r
<None Include="Configuration\-configuration-grafika.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
- <None Include="Configuration\configuration-tqc-check.json">\r
+ <None Include="Configuration\-configuration-transcoder.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
<None Include="Configuration\global.json">\r
using System;\r
using System.Collections.Concurrent;\r
using System.Collections.Generic;\r
-using System.Diagnostics;\r
using System.DirectoryServices.AccountManagement;\r
using System.IO;\r
using System.Linq;\r
using System.Runtime.InteropServices;\r
using System.Security.AccessControl;\r
using System.Security.Principal;\r
-using System.Text.RegularExpressions;\r
using System.Threading;\r
using System.Threading.Tasks;\r
using System.Windows.Forms;\r
namespace Maestro {\r
\r
static class Program {\r
+ private static Logger logger = LogManager.GetCurrentClassLogger();\r
\r
/// <summary>\r
/// The main entry point for the application.\r
Application.Run(context);\r
}\r
catch (Exception e) {\r
- Debug.WriteLine(e.Message);\r
+ logger.Error(e);\r
MessageBox.Show(new Form() { TopMost = true }, e.Message);\r
}\r
finally {\r
}\r
\r
public class TrayApplicationContext : ApplicationContext {\r
+ private static Logger logger = LogManager.GetCurrentClassLogger();\r
private const string GLOBAL_JSON = "global.json";\r
private const string AUDIORECORDER_JSON = "audiorecorder.json";\r
private const string JSON_WILDCARD = "*.json";\r
private const string CONFIG_ERROR = "Nem található aktív konfiguráció.";\r
private const string SYSCONFIG_ERROR = "Nem található a 'global.json' rendszer konfiguráció.";\r
+ private const string SYSCONFIG_DOMAIN_ERROR = "Nem található a 'global.json' rendszer konfigurációban a tartományhitelesítő beállítása.";\r
private const string CONFIGURATION_FOLDER = "./Configuration";\r
private const string DOMAIN_QUERY_ERROR = "A bejelentkezett felhasználó domain információja nem elérhető.";\r
private const string NOSPLASH = "nosplash";\r
private const string NOLOGIN = "nologin";\r
public const string NOSINGLE = "nosingle";\r
private const string HYPHEN = "-";\r
- private static Logger logger = LogManager.GetCurrentClassLogger();\r
private NotifyIcon trayIcon;\r
private ConcurrentBag<MeastroFormNotifyIcon> forms = new ConcurrentBag<MeastroFormNotifyIcon>();\r
private IMessageBus messageBus = new MessageBus();\r
if (userInfo.Length < 2)\r
throw new Exception(DOMAIN_QUERY_ERROR);\r
string userDomainName = userInfo[0];\r
+\r
+ logger.Info("User is authenticated by domain: {0}", userDomainName);\r
+\r
if (userDomainName.Contains("."))\r
userDomainName = userDomainName.Split('.')[0];\r
if (domainName.ToLower().Equals(userDomainName.ToLower()))\r
\r
private void CheckUser() {\r
string globalFile = Path.Combine(CONFIGURATION_FOLDER, GLOBAL_JSON);\r
- string domainName = GlobalConfig.UserDomain.Address.ToString();\r
+ string domainName = GlobalConfig?.UserDomain?.Address?.ToString();\r
if (String.IsNullOrEmpty(domainName))\r
- throw new Exception(SYSCONFIG_ERROR);\r
+ throw new Exception(SYSCONFIG_DOMAIN_ERROR);\r
else {\r
UserName = WindowsIdentity.GetCurrent().Name;\r
- if (IsDomainUser(UserName, domainName))\r
+ logger.Debug("Current user is: {0}", UserName);\r
+ if (IsDomainUser(UserName, domainName)) {\r
+ logger.Debug("User automatically accepted");\r
return;\r
- UserName = GlobalConfig.UserDomain.UserName;\r
+ }\r
+ UserName = GlobalConfig.UserDomain?.UserName;\r
if (HasCommandlineParameter(NOLOGIN))\r
return;\r
- string password = GlobalConfig.UserDomain.Password;\r
+ string password = GlobalConfig.UserDomain?.Password;\r
LoginForm loginForm = null;\r
try {\r
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName)) {\r
while (true) {\r
+ logger.Debug("Trying authenticate user {0}", UserName);\r
bool isValid = pc.ValidateCredentials(UserName, password);\r
if (isValid) {\r
+ logger.Debug("Authenticated: {0}", UserName);\r
break;\r
}\r
\r
{"name": "archiveFtp", "value": "ftp://10.10.1.100/ARCHIVE/TEST", "type": "java.lang.String"},\r
{"name": "archiveUserName", "value": "mediacube", "type": "java.lang.String"},\r
{"name": "archivePassword", "value": "Broadca5T", "type": "java.lang.String"},\r
- {"name": "agencies", "value": "schedule-rec", "type": "java.lang.String"},\r
+ {"name": "filterAgencies", "value": "schedule-rec", "type": "java.lang.String"},\r
{"name": "limit", "value": 10, "type": "java.lang.Integer"},\r
{"name": "nexioKillDateDays", "value": 7, "type": "java.lang.Integer"},\r
{"name": "nexioAgency", "value": "ARCHIVED", "type": "java.lang.String"}\r
]\r
}, \r
{\r
+ "active": true,\r
+ "executeimmediate": false,\r
+ "name" : "Lejárt NEXIO anyagok törlése",\r
+ "template": "delete-nexio-materials.xml",\r
+ "cronexpression": "0 0 10 * * ?",\r
+ "parameters": [ \r
+ {"name": "port", "value": 2098, "type": "java.lang.Integer"},\r
+ {"name": "userName", "value": "administrator", "type": "java.lang.String"},\r
+ {"name": "password", "value": "system", "type": "java.lang.String"},\r
+ {"name": "filterAgencies", "value": "ARCHIVED", "type": "java.lang.String"},\r
+ {"name": "gracePeriodDays", "value": 1, "type": "java.lang.Integer"},\r
+ {"name": "notificationOnly", "value": true, "type": "java.lang.Boolean"}\r
+ ]\r
+ }, \r
+ {\r
"active": false,\r
"name" : "TRAFFIC anyagok visszatöltése",\r
"template": "retrieve-traffic-missing-materials.xml",\r
]\r
}, \r
{\r
- "active": false,\r
- "name" : "NEXIO anyagok törlése",\r
- "template": "delete-nexio-materials.xml",\r
- "executeimmediate": true,\r
- "cronexpression": "0 0 0/1 1/1 * ? *",\r
- "parameters": [ \r
- {"name": "port", "value": 2098, "type": "java.lang.Integer"},\r
- {"name": "userName", "value": "administrator", "type": "java.lang.String"},\r
- {"name": "password", "value": "system", "type": "java.lang.String"},\r
- {"name": "gracePeriodDays", "value": 12, "type": "java.lang.Integer"}\r
- ]\r
- }, \r
- {\r
"active": false,\r
"name" : "OCTOPUS adatok szinkronizálása",\r
"template": "sync-octopus.xml",\r
if (events == null)
return;
String to = mcm.getTo() == null ? defaultRecipient : mcm.getTo();
- String subject = mcm.getSessionName() == null ? defaultSubject : String.format("%s: %s", level, mcm.getSessionName());
+ String subject = mcm.getSessionName() == null ? defaultSubject : String.format("%s: %s #%s", level, mcm.getSessionName(), mcm.getSessionID());
sendEvents(to, subject, layout, events);
sessionEvents.remove(sessionID);
}
<parameter name="archiveFtp" type="java.lang.String"/>\r
<parameter name="archiveUserName" type="java.lang.String"/>\r
<parameter name="archivePassword" type="java.lang.String"/>\r
- <parameter name="agencies" type="java.lang.String"/>\r
+ <parameter name="filterAgencies" type="java.lang.String"/>\r
<parameter name="limit" type="java.lang.Integer"/>\r
<parameter name="nexioKillDateDays" type="java.lang.Integer"/>\r
- <parameter name="nexioAgency" type="java.lang.String"/>\r
+ <parameter name="targetAgency" type="java.lang.String"/>\r
</parameters>\r
</declarations>\r
<commands>\r
<parameter name="archivePassword" />\r
</input>\r
<input>\r
- <parameter name="agencies" />\r
+ <parameter name="filterAgencies" />\r
</input>\r
<input>\r
<parameter name="limit" />\r
<parameter name="nexioKillDateDays" />\r
</input>\r
<input>\r
- <parameter name="nexioAgency" />\r
+ <parameter name="targetAgency" />\r
</input>\r
</inputs>\r
</calljobstep>\r
<parameter name="port" type="java.lang.Integer"/>\r
<parameter name="userName" type="java.lang.String"/>\r
<parameter name="password" type="java.lang.String"/>\r
+ <parameter name="filterAgencies" type="java.lang.String"/>\r
<parameter name="gracePeriodDays" type="java.lang.Integer"/>\r
+ <parameter name="notificationOnly" type="java.lang.Boolean"/>\r
</parameters>\r
</declarations>\r
<commands>\r
<input>\r
<parameter name="password" />\r
</input>\r
+ <input>\r
+ <parameter name="filterAgencies" />\r
+ </input>\r
<input>\r
<parameter name="gracePeriodDays" />\r
</input>\r
+ <input>\r
+ <parameter name="notificationOnly" />\r
+ </input>\r
</inputs>\r
</calljobstep>\r
</commands>\r
try {\r
for (ArchiveItem archiveItem : archiveList) {\r
try {\r
- IJobRuntime submit = jobEngine.submit(JOBTEMPLATE, ARCHIVE, ListUtils.asMap(ARCHIVE_ITEM, archiveItem, GLOBAL_SOURCE_PATH, globalSourcePath,\r
- TRANSCODER_TARGET_PATH, transcoderTargetPath, WEB_PATH, webPath, KILL_DATE_DAYS, killDateDays));\r
+ IJobRuntime runtime = jobEngine.submit(JOBTEMPLATE, ARCHIVE, ListUtils.asMap(ARCHIVE_ITEM, archiveItem, GLOBAL_SOURCE_PATH,\r
+ globalSourcePath, TRANSCODER_TARGET_PATH, transcoderTargetPath, WEB_PATH, webPath, KILL_DATE_DAYS, killDateDays));\r
+\r
} catch (Exception e) {\r
if (archiveItem != null)\r
archiveItem.removeCatchedFile();\r
private static final String LONGNAMEID = "longnameid";\r
private static final String ARCHIVEDRUNDOWNS = "archivedrundowns";\r
private static final String ID = "id";\r
+ private static final String MEDIATYPE = "Octopus bejátszó";\r
private OctopusAPI octopusAPI;\r
private IItemManager manager;\r
\r
}\r
\r
private BasicDBObject createMetadata(RundownArchive rundownArchive, StoryArchive storyArchive, FileArchive fileArchive) {\r
- // {\r
- // "itemHouseId": "43",\r
- // "itemTitle": "Hazahúzó",\r
- // "itemDescription": null,\r
- // "mediaHouseId": "002570",\r
- // "mediaTitle": "2017.12.13",\r
- // "mediaDescription": null,\r
- // "ok": false,\r
- // "userName": "echotest"\r
- // }\r
BasicDBObject result = new BasicDBObject();\r
result.put("itemHouseId", rundownArchive.getItemHouseId());\r
result.put("itemTitle", rundownArchive.getItemTitle());\r
result.put("mediaHouseId", storyArchive.getMediaHouseId());\r
result.put("mediaTitle", storyArchive.getMediaTitle());\r
result.put("mediaDescription", storyArchive.getMediaDesc());\r
+ result.put("mediaType", MEDIATYPE);\r
\r
result.put("duration", fileArchive.getDuration());\r
return result;\r
import user.jobengine.server.IJobRuntime;\r
\r
public class CopyForArchiveNEXIORecordingsStep extends JobStep {\r
- private static final String MEDIATYPE_RECORDING = "Visszarögzített";\r
+ private static final String MEDIATYPE = "Visszarögzített";\r
private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm";\r
private static final String STARTTIME_FORMAT = "HHmm";\r
private static final Logger logger = LogManager.getLogger();\r
result.put("mediaDescription", storyArchive.getMediaDesc());\r
\r
result.put("duration", fileArchive.getDuration());\r
- result.put("mediaType", MEDIATYPE_RECORDING);\r
+ result.put("mediaType", MEDIATYPE);\r
return result;\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
+ String filterAgencies, int limit, int nexioKillDateDays, String targetAgency, 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
+ setAndCheck(nexioPort, nexioUserName, nexioPassword, archiveFtp, archiveUserName, archivePassword, filterAgencies, limit, nexioKillDateDays,\r
+ targetAgency, jobEngine);\r
octopusAPI = new OctopusAPI();\r
List<BasicDBObject> clips = queryClips();\r
processClips(clips, limit);\r
package user.jobengine.server.steps;\r
\r
+import java.text.SimpleDateFormat;\r
import java.util.Calendar;\r
import java.util.Date;\r
import java.util.List;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
+import com.ibm.nosql.json.api.BasicDBList;\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
import com.ibm.nosql.json.api.DBCursor;\r
import com.ibm.nosql.json.api.QueryBuilder;\r
\r
-import user.commons.CalendarUtils;\r
import user.commons.ListUtils;\r
import user.commons.RemoteFile;\r
import user.commons.StoreUri;\r
import user.jobengine.db.IItemManager;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.JobRuntime;\r
\r
public class DeleteNEXIOMaterialsStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
private static final String LONGNAMEID = "longnameid";\r
private static final String EXTAGENCY = "extagency";\r
private StoreUri sourceUri;\r
+ private JobRuntime jobRuntime;\r
\r
private void delete(String name) {\r
RemoteFile remoteFile = null;\r
try {\r
remoteFile = sourceUri.getRemoteFile(name);\r
- if (remoteFile == null)\r
- throw new NullPointerException("File not exists: " + name);\r
+ if (remoteFile == null) {\r
+ logger.warn(jobRuntime.getMarker(), "A '{}' fájl már nem található a NEXIO szerveren", name);\r
+ return;\r
+ }\r
sourceUri.delete(remoteFile);\r
- logger.info(getMarker(), "A {} fájl törlése sikeres volt.", remoteFile.getName());\r
+ logger.info(jobRuntime.getMarker(), "A '{}' fájl törlése sikeres volt.", remoteFile.getName());\r
} catch (Exception e) {\r
- logger.error(getMarker(), "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", remoteFile.getName(), e.getMessage());\r
+ logger.error(jobRuntime.getMarker(), "A '{}' fájl nem törölhető. A rendszer hibaüzenete: {}", remoteFile.getName(), e.getMessage());\r
}\r
}\r
\r
@StepEntry\r
- public Object[] execute(int port, String userName, String password, int gracePeriodDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ public Object[] execute(int port, String userName, String password, String filterAgencies, int gracePeriodDays, boolean notificationOnly,\r
+ IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\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
- throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing.");\r
+ logger.error(jobRuntime.getMarker(), "A 'nexio.host' rendszer paraméter nem található.");\r
+ throw new NullPointerException("System is not configured properly, 'nexio.host' startup parameter missing.");\r
}\r
\r
- DB db = NoSQLUtils.getNoSQLDB();\r
+ if (StringUtils.isBlank(filterAgencies)) {\r
+ logger.error(jobRuntime.getMarker(), "A 'nexioAgencies' folyamat paraméter nem található.");\r
+ throw new NullPointerException("System is not configured properly, 'nexioAgencies' job parameter missing.");\r
+ }\r
\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
DBCollection collection = db.getCollection(NEXIOCLIPS);\r
//https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html\r
//http://www.vogella.com/tutorials/JavaRegularExpressions/article.html\r
// if (StringUtils.isNotBlank(fileNameRegex))\r
// queryBuilder.and(QueryBuilder.start(LONGNAMEID).regex(Pattern.compile(fileNameRegex)).get());\r
- // if (StringUtils.isNotBlank(agency))\r
- // queryBuilder.and(QueryBuilder.start(EXTAGENCY).all(agency).get());\r
Calendar now = Calendar.getInstance();\r
now.add(Calendar.DAY_OF_YEAR, gracePeriodDays * -1);\r
+ BasicDBList agencies = new BasicDBList((Object[]) filterAgencies.split(","));\r
+\r
+ QueryBuilder dateQueryBuilder = QueryBuilder.start(KILLDATE).lessThan(now.getTime());\r
+ QueryBuilder queryBuilder = QueryBuilder.start(EXTAGENCY).in(agencies).and(dateQueryBuilder.get());\r
+ DBCursor cursor = collection.find(queryBuilder.get()).sort(KILLDATE, -1);\r
\r
- QueryBuilder queryBuilder = QueryBuilder.start(KILLDATE).lessThan(now.getTime());\r
- DBCursor cursor = collection.find(queryBuilder.get());\r
if (!cursor.hasNext())\r
return null;\r
\r
sourceUri.setPassword(password);\r
\r
List<BasicDBObject> clips = ListUtils.cast(cursor.toArray());\r
+ SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");\r
+\r
+ int i = 0;\r
for (BasicDBObject clip : clips) {\r
String name = String.valueOf(clip.get(LONGNAMEID));\r
Date killdate = clip.getDate(KILLDATE);\r
- logger.info("{}, {}, {}", name, CalendarUtils.toDateString(CalendarUtils.createCalendar(killdate)), clip.getString(EXTAGENCY));\r
- delete(name);\r
+ if (notificationOnly)\r
+ logger.info(jobRuntime.getMarker(), "Az {} fájl törölhető. Lejárt: {} ", name, df.format(killdate));\r
+ // else\r
+ // delete(name);\r
+ i++;\r
+ setProgress(i * 100 / clips.size());\r
}\r
\r
return null;\r
package user.jobengine.server.steps;\r
\r
+import java.util.concurrent.CountDownLatch;\r
+\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
+import user.commons.JobStatus;\r
+import user.commons.ListUtils;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.JobStatusChangedEvent;\r
\r
public class FakeNoParamsStep extends JobStep {\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
+ CountDownLatch latch = new CountDownLatch(count);\r
+\r
+ private void childStatusChanged(JobStatusChangedEvent event) {\r
+ if (JobStatus.SUSPENDED.equals(event.getStatus()) || JobStatus.FINISHED.equals(event.getStatus()))\r
+ latch.countDown();\r
+ }\r
\r
@StepEntry\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
+ // 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
+ //\r
+ // if (i == 8)\r
+ // throw new Exception("stop");\r
+ // }\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
-\r
- if (i == 8)\r
- throw new Exception("stop");\r
+ jobEngine.submit(jobRuntime, e -> childStatusChanged(e), CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
}\r
+ latch.await();\r
return null;\r
}\r
-\r
}\r
\r
@StepEntry\r
public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- Object[] result = { 1 };\r
+ Object[] result = { itemID + 1 };\r
+\r
+ logger.info(jobRuntime.getMarker(), "Starting with {}", itemID);\r
try {\r
for (int i = 0; i < count; i++) {\r
//sb.append("Sikeres iteráció : ")\r
if (!canContinue())\r
break;\r
jobRuntime.incrementProgress((i + 1) * count);\r
- Thread.sleep(500);\r
+ Thread.sleep(100);\r
//logger.info("Progress {}", jobRuntime.getProgress());\r
}\r
} catch (Exception e) {\r
logger.error(e.getMessage());\r
}\r
- //logger.info(getMarker(), "Log markered");\r
+ logger.info(jobRuntime.getMarker(), "Resulting {}", result[0]);\r
return result;\r
}\r
\r
public class MetadataTransformStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null";\r
- public static final String ITEMTYPENAME = "Generic";\r
+ public static final String DEFAULT_MEDIATYPE = "Generic";\r
\r
@StepEntry\r
public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
jobRuntime.incrementProgress(50);\r
\r
if (mediaCubeItem == null)\r
- mediaCubeItem = itemManager.createItem(ITEMTYPENAME, archiveItem.getItemTitle(), archiveItem.getItemDescription(),\r
+ mediaCubeItem = itemManager.createItem(DEFAULT_MEDIATYPE, archiveItem.getItemTitle(), archiveItem.getItemDescription(),\r
archiveItem.getItemHouseId());\r
\r
- String mediaTypeName = archiveItem.getMediaType();\r
- if (StringUtils.isBlank(mediaTypeName)) {\r
- mediaCubeMedia = itemManager.createMedia(ITEMTYPENAME, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
+ String mediaType = archiveItem.getMediaType();\r
+ if (StringUtils.isBlank(mediaType)) {\r
+ mediaCubeMedia = itemManager.createMedia(DEFAULT_MEDIATYPE, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
archiveItem.getMediaHouseId());\r
} else {\r
- ItemType itemType = itemManager.getItemType(mediaTypeName);\r
- if (itemType == null)\r
- itemManager.createItemType(mediaTypeName, mediaTypeName).add();\r
- mediaCubeMedia = itemManager.createMedia(mediaTypeName, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
+ ItemType mediaItemType = itemManager.getItemType(mediaType);\r
+ if (mediaItemType == null)\r
+ itemManager.createItemType(mediaType, mediaType).add();\r
+ mediaCubeMedia = itemManager.createMedia(mediaType, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
archiveItem.getMediaHouseId());\r
}\r
\r
void startup();
+ IJobRuntime submit(IJobRuntime parent, IJobStatusChangedListener statusListener, String template, String name, Map<String, Object> parameters)
+ throws JobEngineException;
+
IJobRuntime submit(String template, String name, Map<String, Object> parameters) throws JobEngineException;
void suspendJob(Throwable t, IJobRuntime jobRuntime);
public void addToRunQueue(IJobRuntime jobRuntime) {
try {
logger.debug("{} adding to run queue", jobRuntime);
+ if (jobRuntime.getIp() == 0 && !jobRuntime.isService() && jobRuntime.getParentJobId() == 0)
+ logger.info(jobRuntime.getMarker(), "A '{}' folyamat elindult", jobRuntime.getName());
runQueue.put(jobRuntime);
} catch (Exception e) {
logger.error(e.getMessage(), e);
IJobRuntime jobRuntime = submittedJobs.remove(id);
fireJobChangedEvent(new JobChangedEvent(jobRuntime, SignalType.DELETE));
logger.info("--- {} removed from VM", jobRuntime);
+ if (!jobRuntime.isService() && jobRuntime.getParentJobId() == 0) {
+ if (JobStatus.FINISHED.equals(jobRuntime.getStatus()))
+ logger.info(jobRuntime.getFinishMarker(), "A '{}' folyamat futása sikeresen véget ért", jobRuntime.getName());
+ else
+ logger.error(jobRuntime.getFinishMarker(), "A '{}' folyamat futása megszakadt", jobRuntime.getName());
+ }
}
+
}
@Override
logger.info("+++ {} added to VM ", runtime);
}
+ @Override
+ public IJobRuntime submit(IJobRuntime parent, IJobStatusChangedListener statusListener, String template, String name, Map<String, Object> parameters)
+ throws JobEngineException {
+ IJobRuntime result = null;
+ IProgram program = getProgram(template);
+ if (program != null) {
+ isRunnable(program);
+ result = new JobRuntime(this, program);
+ result.setPersister(itemManager);
+ result.setTemplate(template);
+ result.setName(name);
+ result.setParameters(parameters);
+ result.setService(program.getTemplate().isService());
+ result.setParentJobId(parent.getId());
+ if (statusListener != null)
+ result.addEventListener(statusListener);
+ submit(result);
+ } else {
+ logger.error("Unknown template: " + template);
+ }
+ return result;
+ }
+
IJobRuntime submit(IProgram program, IJobStatusChangedListener listener) {
IJobRuntime jobRuntime = new JobRuntime(this, program);
jobRuntime.addEventListener(listener);
children.add(c);
Message m = logger.getMessageFactory().newMessage("{} {} alfolyamata", this.getId(), this.getName());
c.setName(m.getFormattedMessage());
- c.setParentJobId(this.getId());
+ c.setParentJobId(getParentJobId() == 0 ? getId() : getParentJobId());
}
@Override
public Marker getMarker() {
if (sessionMarker == null) {
sessionMarker = new MediaCubeMarker();
- sessionMarker.setSessionID(String.valueOf(getId()));
+ sessionMarker.setSessionID(getParentJobId() == 0 ? String.valueOf(getId()) : String.valueOf(getParentJobId()));
sessionMarker.setSessionName(name);
}
return sessionMarker;
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.saveStatus();\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.setStatus(JobStatus.WAIT_EXECUTOR);\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
StatusMachineAction machineAction = new StatusMachineAction(jobAction, jobRuntime.getStatus());\r
if (actions.containsKey(machineAction)) {\r
IJobStatusAction action = actions.get(machineAction);\r
- logger.debug("{} status change {} -> {}", jobRuntime, jobRuntime.getStatus(), jobAction);\r
+ logger.info("{} status change {} -> {}", jobRuntime, jobRuntime.getStatus(), jobAction);\r
action.processAction(jobEngine, jobRuntime);\r
}\r
\r