},\r
"source": {\r
"$type": "UNCSource",\r
- "filter": "png,tga,mov,mxf",\r
+ "filter": "png,tga,mov,mxf,wav",\r
"local": {\r
"address": "file://C:/x/",\r
"userName": "mediacube",\r
"password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
"timeout": 1000\r
}\r
+ },\r
+ {\r
+ "label": "Archiválás",\r
+ "processor": "FTPTargetProcessor",\r
+ "outputFormat": "%SOURCENAME%-%ID%",\r
+ "tag": "Archiválás",\r
+ "saveArchiveMetadata": true,\r
+ "remote": {\r
+ "address": "ftp://10.10.1.100:21/ARCHIVE",\r
+ "userName": "mediacube",\r
+ "password": "Dn8t4gfHcK98o8hyPgLDhr5SgSji4JCxsfpMJsODikUp3nXgrM0UNCi45lLAK8ZOnmEneO44P9qpJ4QDqhctN6MxZodjJgdZTyoZKmSa+ECzEzLr/wPYNgxVaXrVotEy",\r
+ "timeout": 1000\r
+ }\r
}\r
]\r
}\r
<Project>{cefd0348-ded4-453e-bf3a-0b52f8890ab3}</Project>\r
<Name>MediaCubeClient</Name>\r
</ProjectReference>\r
+ <ProjectReference Include="..\MXFFileParser\MXFFileParser.csproj">\r
+ <Project>{bf494ee9-1e70-44e8-8942-dd726510a766}</Project>\r
+ <Name>MXFFileParser</Name>\r
+ </ProjectReference>\r
<ProjectReference Include="..\OctopusClient\OctopusClient.csproj">\r
<Project>{8cc7c930-9dbf-487b-aed5-776937a649d5}</Project>\r
<Name>OctopusClient</Name>\r
using MaestroShared.Target;\r
using System.ComponentModel;\r
using MaestroShared.Commons;\r
+using Myriadbits.MXF;\r
\r
namespace Maestro {\r
\r
result = null;\r
break;\r
}\r
+\r
+ if (sourceItem is FileSourceItem && sourceItem.Frames == 0) {\r
+ try {\r
+ string fullName = (sourceItem as FileSourceItem).FileInfo.FullName;\r
+ MXFFile mxf = new MXFFile(fullName);\r
+ mxf.Inspect();\r
+ sourceItem.Frames = (long)mxf.TimecodeComponent.Duration;\r
+ }\r
+ catch (Exception e) {\r
+ string fullName = (sourceItem as FileSourceItem).FileInfo.FullName;\r
+ logger.Error("Can not detect length of '{0}'. Error message is: {1}", fullName, e.Message);\r
+ }\r
+ }\r
+\r
TargetProcessorParameter processorParameter = null;\r
try {\r
processorParameter = CreateProcessorParameter(target, sourceItem, createDate);\r
result.UserName = TrayApplicationContext.UserName;\r
result.MessageBus = MessageBus;\r
result.CreateDate = createDate;\r
+ result.Frames = sourceItem.Frames;\r
\r
result.ArchiveMetadata.userName = result.UserName;\r
if (SelectedMetadata.Kind == MetadataType.MediaCube && result.ArchiveMetadata != null) {\r
// You can specify all the values or you can default the Build and Revision Numbers\r
// by using the '*' as shown below:\r
// [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("2.0.7.6")]\r
-[assembly: AssemblyFileVersion("2.0.7.6")]\r
+[assembly: AssemblyVersion("2.0.7.7")]\r
+[assembly: AssemblyFileVersion("2.0.7.7")]\r
private bool isHighlighted;\r
private bool isChecked;\r
private static string[] sizes = { "", "KB", "MB", "GB", "TB" };\r
-\r
+ private long frames;\r
public event PropertyChangedEventHandler PropertyChanged;\r
\r
protected void NotifyPropertyChanged([CallerMemberName] string propertyName = "") {\r
}\r
}\r
\r
+ public long Frames {\r
+ get => frames;\r
+ set {\r
+ frames = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+\r
private string GetSizeString(long length) {\r
double len = length;\r
int order = 0;\r
}\r
}\r
\r
-\r
public bool CanHandle(List<String> extensions) {\r
if (extensions == null || extensions.Count < 1)\r
return true;\r
DateTime Created { get; }\r
bool IsHighlighted { get; set; }\r
bool IsChecked { get; set; }\r
-\r
+ long Frames { get; set; }\r
}\r
}
\ No newline at end of file
item.Created = created ?? DateTime.MinValue;\r
DateTime? modified = token.Value<DateTime?>(MODIFIED);\r
item.Modified = modified ?? DateTime.MinValue;\r
- int d = token.Value<int>(DURATION);\r
- item.Duration = new Timecode(d).ToString();\r
+ item.Frames = token.Value<int>(DURATION);\r
+ item.Duration = new Timecode((int)item.Frames).ToString();\r
}\r
catch (Exception e) {\r
logger.Error(e.Message);\r
private string agency;\r
private string id;\r
private string duration;\r
+ private long frames;\r
\r
public event PropertyChangedEventHandler PropertyChanged;\r
\r
}\r
}\r
\r
+ public long Frames {\r
+ get => frames;\r
+ set {\r
+ frames = value;\r
+ NotifyPropertyChanged();\r
+ }\r
+ }\r
+\r
public bool CanHandle(List<String> extensions) {\r
if (extensions == null || extensions.Count < 1)\r
return true;\r
public string UserName { get; set; }\r
public IMessageBus MessageBus { get; set; }\r
public DateTime CreateDate { get; set; }\r
+ public long Frames { get; set; }\r
}\r
}\r
houseId = ID,\r
tag = parameters.TargetConfig.Tag,\r
touched = DateTime.Now,\r
- userName = parameters.UserName\r
+ userName = parameters.UserName,\r
+ size = parameters.Frames\r
};\r
Label = parameters.TargetConfig.Label;\r
string popupMessage = parameters.TargetConfig?.PopupMessage;\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<launchConfiguration type="org.eclipse.jdt.launching.remoteJavaApplication">\r
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">\r
+<listEntry value="/user.jobengine.osgi.server"/>\r
+</listAttribute>\r
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">\r
+<listEntry value="4"/>\r
+</listAttribute>\r
+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>\r
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;user.commons.log4j2&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;user.jobengine.executors&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;user.jobengine.osgi.commons&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;user.jobengine.osgi.db&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;user.jobengine.osgi.server&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkcharts.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/classes&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/commons-codec-1.10.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/commons-fileupload-1.2.1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/commons-io-1.4.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/commons-logging-1.1.1.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zcommon.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zel.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zhtml.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_bsh.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_commons-collections.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_elinez.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_eplotz.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_Filters.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_flashchart.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_gmapsz.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jackson-annotations.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jackson-core.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jackson-databind.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jasperreports.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_javassist.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jcommon.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jfreechart.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jsp.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_monitor.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_psz.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_sapphire.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_shchart.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_silvertail.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_timelinez.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_timeplotz.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_zuljsp.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkbind.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkex_r.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkmax.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkplus.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zml.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zsoup.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zul.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zuti.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;packageFragmentRoot handle=&quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zweb.jar&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;user.jobengine.osgi.services&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;javaProject name=&quot;user.tsm.client&quot;/&gt;&#13;&#10;" typeId="org.eclipse.jdt.launching.sourceContainer.javaProject"/> </sourceContainers> </sourceLookupDirector> "/>\r
+<booleanAttribute key="org.eclipse.jdt.launching.ALLOW_TERMINATE" value="false"/>\r
+<mapAttribute key="org.eclipse.jdt.launching.CONNECT_MAP">\r
+<mapEntry key="hostname" value="10.10.1.27"/>\r
+<mapEntry key="port" value="9999"/>\r
+</mapAttribute>\r
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="user.jobengine.osgi.server"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_CONNECTOR_ID" value="org.eclipse.jdt.launching.socketAttachConnector"/>\r
+</launchConfiguration>\r
"template": "import-statistics.xml",\r
"cronexpression": "0 0 0/1 1/1 * ? *",\r
"parameters": [ \r
- {"name": "daysBeforeNow", "value": 1, "type": "java.lang.Integer"}\r
+ {"name": "daysBeforeNow", "value": 3, "type": "java.lang.Integer"}\r
]\r
},\r
{\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">\r
+<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>\r
+<stringAttribute key="M2_GOALS" value="clean deploy -Dremote.address=scp://root:password@10.10.1.28 -Dremote.location=/opt/test-mediacube -P plugins"/>\r
+<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>\r
+<booleanAttribute key="M2_OFFLINE" value="false"/>\r
+<stringAttribute key="M2_PROFILES" value=""/>\r
+<listAttribute key="M2_PROPERTIES"/>\r
+<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>\r
+<booleanAttribute key="M2_SKIP_TESTS" value="false"/>\r
+<intAttribute key="M2_THREADS" value="1"/>\r
+<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>\r
+<stringAttribute key="M2_USER_SETTINGS" value=""/>\r
+<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>\r
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">\r
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>\r
+</listAttribute>\r
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}/-modules"/>\r
+</launchConfiguration>\r
org.jboss.resteasy.plugins.providers,
org.jboss.resteasy.spi,
org.joda.time;version="2.2.0",
- org.joda.time.base;version="2.2.0"
+ org.joda.time.base;version="2.2.0",
+ sqlj.runtime.ref
<?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate name="Anyag archiválása" multiInstance="true">\r
+<jobtemplate name="Visszarögzített anyagok archiválása mappából">\r
<declarations>\r
<parameters>\r
- <parameter name="localSourcePath" type="java.lang.String" />\r
- <parameter name="targetPath" type="java.lang.String" />\r
+ <parameter name="localHiresSourcePath" type="java.lang.String" />\r
+ <parameter name="localHiresTargetPath" type="java.lang.String" />\r
<parameter name="nexioPort" type="java.lang.Integer" />\r
<parameter name="nexioUserName" type="java.lang.String" />\r
<parameter name="nexioPassword" type="java.lang.String" />\r
<parameter name="transcoderAddress" type="java.lang.String" />\r
<parameter name="transcoderTemplateName" type="java.lang.String" />\r
- <parameter name="globalSourcePath" type="java.lang.String" />\r
- <parameter name="localTranscoderTargetPath" type="java.lang.String" />\r
+ <parameter name="globalHiresSourcePath" type="java.lang.String" />\r
+ <parameter name="localLowresTargetPath" type="java.lang.String" />\r
<parameter name="webPath" type="java.lang.String" />\r
<parameter name="deleteSource" type="java.lang.Boolean" />\r
</parameters>\r
<calljobstep type="user.jobengine.server.steps.RecordingsArchiveItemBuilderStep" weight="1">\r
<inputs>\r
<input>\r
- <parameter name="localSourcePath" />\r
+ <parameter name="localHiresSourcePath" />\r
</input>\r
</inputs>\r
<outputs>\r
<variable name="archiveItem" />\r
</input>\r
<input>\r
- <parameter name="targetPath" />\r
+ <parameter name="localHiresTargetPath" />\r
</input>\r
<input>\r
<variable name="targetFileName" />\r
</output>\r
</outputs>\r
</calljobstep>\r
-<!-- <calljobstep type="user.jobengine.server.steps.TSMBackupStep" weight="2"> -->\r
-<!-- <inputs> -->\r
-<!-- <input> -->\r
-<!-- <variable name="archiveItem" /> -->\r
-<!-- </input> -->\r
-<!-- <input> -->\r
-<!-- <variable name="mediaCubeMedia" /> -->\r
-<!-- </input> -->\r
-<!-- <input> -->\r
-<!-- <variable name="killDateDays" /> -->\r
-<!-- </input> -->\r
-<!-- </inputs> -->\r
-<!-- </calljobstep> -->\r
+ <calljobstep type="user.jobengine.server.steps.TSMBackupStep" weight="2">\r
+ <inputs>\r
+ <input>\r
+ <variable name="archiveItem" />\r
+ </input>\r
+ <input>\r
+ <variable name="mediaCubeMedia" />\r
+ </input>\r
+ <input>\r
+ <variable name="killDateDays" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
<calljobstep type="user.jobengine.server.steps.TranscodeFFAStranStep" weight="1">\r
<inputs>\r
<input>\r
<parameter name="transcoderTemplateName" />\r
</input>\r
<input>\r
- <parameter name="localSourcePath" />\r
+ <parameter name="localHiresSourcePath" />\r
</input>\r
<input>\r
- <parameter name="globalSourcePath" />\r
+ <parameter name="globalHiresSourcePath" />\r
</input>\r
<input>\r
- <parameter name="localTranscoderTargetPath" />\r
+ <parameter name="localLowresTargetPath" />\r
</input>\r
<input>\r
<parameter name="webPath" />\r
result.setItemHouseId(String.valueOf(rundownID));\r
result.setItemTitle(String.format("%s %s %s", start, name, channel));\r
\r
+ // StringBuilder sb = new StringBuilder();\r
+ // for (DBObject s : stories) {\r
+ // BasicDBObject story = (BasicDBObject) s;\r
+ // sb.append(story.getString(IOctopusAPI.PARENT_STORY_ID));\r
+ // sb.append(" [" + story.getString(IOctopusAPI.FORMAT) + "] ");\r
+ // sb.append(story.getString(IOctopusAPI.NAME));\r
+ // sb.append("\r\n");\r
+ // }\r
+\r
StringBuilder sb = new StringBuilder();\r
for (DBObject s : stories) {\r
BasicDBObject story = (BasicDBObject) s;\r
+\r
+ sb.append("*** ");\r
sb.append(story.getString(IOctopusAPI.PARENT_STORY_ID));\r
sb.append(" [" + story.getString(IOctopusAPI.FORMAT) + "] ");\r
sb.append(story.getString(IOctopusAPI.NAME));\r
+ sb.append(" ***");\r
sb.append("\r\n");\r
+ String content = story.getString(IOctopusAPI.SCRIPT_CONTENT);\r
+ if (content != null) {\r
+ content = content.replace("\r\n\r\n\r\n\r\n", "\r\n");\r
+ content = content.replace("\r\n\r\n\r\n", "\r\n");\r
+ content = content.replace("\r\n\r\n", "\r\n");\r
+ sb.append(content);\r
+ sb.append("\r\n");\r
+ }\r
}\r
+\r
StoryArchive storyArchive = new StoryArchive();\r
storyArchive.setMediaHouseId(result.getItemHouseId());\r
storyArchive.setMediaTitle(clipName);\r
String sourceFileName = targetFileName;\r
try {\r
final IJobRuntime runtime = jobRuntime;\r
+\r
+ RemoteFile sourceFile = null;\r
+ while (sourceFile == null) {\r
+ try {\r
+ sourceFile = sourceUri.getRemoteFile(sourceFileName);\r
+ Thread.sleep(1000);\r
+ } catch (Exception e) {\r
+ logger.warn(e.getMessage());\r
+ }\r
+ }\r
+\r
targetUri.addProgressListener(new IProgressEventListener() {\r
@Override\r
public void progressChanged(ProgressEvent evt) {\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
-import com.ibm.nosql.json.api.DB;\r
-\r
-import user.commons.nosql.NoSQLUtils;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
@StepEntry\r
public Object[] execute(long itemID, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
Object[] result = { itemID + 1 };\r
- DB noSQLDB = NoSQLUtils.getNoSQLDB();\r
- //logger.info(jobRuntime.getMarker(), "Starting with {} #{}", itemID, jobRuntime.getId());\r
+\r
+ //logransger.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
+ //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
break;\r
jobRuntime.incrementProgress((i + 1) * count);\r
Thread.sleep(100);\r
+\r
+ if (i == 2)\r
+ throw new Exception("TESZT");\r
//logger.info("Progress {}", jobRuntime.getProgress());\r
}\r
} catch (Exception e) {\r
- logger.error(e.getMessage());\r
+ logger.error(jobRuntime.getMarker(), e.getMessage());\r
+ throw e;\r
}\r
return result;\r
}\r
package user.jobengine.server.steps;\r
\r
+import java.util.ArrayList;\r
import java.util.Calendar;\r
import java.util.Date;\r
import java.util.HashMap;\r
import user.commons.nosql.NoSQLUtils;\r
import user.commons.octopus.IOctopusAPI;\r
import user.commons.octopus.OctopusAPI;\r
+import user.jobengine.db.IItemManager;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
private int current;\r
private DB db;\r
private DBCollection clipCollection;\r
+ private IItemManager manager;\r
\r
private void createAPI(IJobRuntime jobRuntime) throws Exception {\r
try {\r
@StepEntry\r
public Object[] execute(int daysBeforeNow, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
marker = jobRuntime.getMarker();\r
+ manager = jobEngine.getItemManager();\r
db = NoSQLUtils.getNoSQLDB();\r
clipCollection = db.getCollection(NEXIOCLIPS);\r
\r
stories.putAll(folderStories);\r
logger.info(jobRuntime.getMarker(), "Gyűjtőkben megtalálható anyagok száma {}", stories.size());\r
\r
- store(scheduledDate, stories);\r
+ BasicDBObject planStat = new BasicDBObject();\r
+\r
+ BasicDBObject typeStat = new BasicDBObject();\r
+ BasicDBObject typeStatRawData = new BasicDBObject();\r
+ typeStat.put("rawData", typeStatRawData);\r
+ long sumduration = 0;\r
+\r
+ List<BasicDBObject> rawData = new ArrayList<>();\r
+ for (BasicDBObject story : stories.values()) {\r
+ List<BasicDBObject> mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS);\r
+ for (BasicDBObject mos : mosObjects) {\r
+ String label = NoSQLUtils.asString(mos, IOctopusAPI.LABEL);\r
+ long duration = NoSQLUtils.asLong(mos, "duration");\r
+ long rdCount = NoSQLUtils.asLong(story, IOctopusAPI.REF_RUNDOWN);\r
+ long sfCount = NoSQLUtils.asLong(story, IOctopusAPI.REF_STORYFOLDER);\r
+ long parentStoryId = NoSQLUtils.asLong(story, IOctopusAPI.PARENT_STORY_ID);\r
+\r
+ BasicDBObject raw = new BasicDBObject();\r
+ raw.put(IOctopusAPI.ID, NoSQLUtils.asLong(story, IOctopusAPI.ID));\r
+ raw.put(IOctopusAPI.NAME, NoSQLUtils.asString(story, IOctopusAPI.NAME));\r
+ raw.put(IOctopusAPI.PARENT_STORY_ID, parentStoryId);\r
+ raw.put(IOctopusAPI.REPORTERS, NoSQLUtils.asString(story, IOctopusAPI.REPORTERS));\r
+ raw.put(IOctopusAPI.OBJ_ID, NoSQLUtils.asString(mos, IOctopusAPI.OBJ_ID));\r
+ raw.put(IOctopusAPI.LABEL, label);\r
+ raw.put("duration", duration);\r
+ raw.put(IOctopusAPI.REF_RUNDOWN, rdCount);\r
+ raw.put(IOctopusAPI.REF_STORYFOLDER, sfCount);\r
+\r
+ long ingestCount = 0;\r
+ long ingestDuration = 0;\r
+ BasicDBObject ingestInfo = manager.getIngestInfo(scheduledDate, String.valueOf(parentStoryId));\r
+ if (ingestInfo != null) {\r
+ ingestCount = ingestInfo.getLong("count");\r
+ ingestDuration = ingestInfo.getLong("duration");\r
+ raw.put("ingest_count", ingestCount);\r
+ raw.put("ingest_duration", ingestDuration);\r
+ }\r
+\r
+ rawData.add(raw);\r
+\r
+ //planStat\r
+ if (sfCount > 0 && rdCount == 0) {\r
+ long planned = NoSQLUtils.asLong(planStat, "unreleased_count");\r
+ planned++;\r
+ planStat.put("unreleased_count", planned);\r
+ long plannedDuration = NoSQLUtils.asLong(planStat, "unreleased_duration");\r
+ planStat.put("unreleased_duration", plannedDuration + duration);\r
+ }\r
+ if (rdCount > 0) {\r
+ long released = NoSQLUtils.asLong(planStat, "released_count");\r
+ released++;\r
+ planStat.put("released_count", released);\r
+ long releasedDuration = NoSQLUtils.asLong(planStat, "released_duration");\r
+ planStat.put("released_duration", releasedDuration + duration);\r
+\r
+ //typeStat\r
+ sumduration += duration;\r
+ if (typeStatRawData.containsKey(label)) {\r
+ BasicDBObject dbo = NoSQLUtils.asDBObject(typeStatRawData, label);\r
+ dbo.put("count", dbo.getInt("count") + 1);\r
+ dbo.put("duration", dbo.getInt("duration") + duration);\r
+ } else\r
+ typeStatRawData.put(label, new BasicDBObject("count", 1).append("duration", duration));\r
+ }\r
+ }\r
+ }\r
+\r
+ planStat.put("all_count", rawData.size());\r
+ planStat.put("all_duration", sumduration);\r
+\r
+ store(scheduledDate, rawData, typeStat, planStat);\r
return null;\r
}\r
\r
long storyID = NoSQLUtils.asLong(story, IOctopusAPI.ID);\r
if (storyID == 0)\r
continue;\r
+ if (result.containsKey(storyID))\r
+ continue;\r
\r
if (scheduledDate != null) {\r
Date scheduleFrom = story.getDate(IOctopusAPI.SCHEDULEFROM);\r
}\r
}\r
\r
- if (!result.containsKey(storyID))\r
- result.put(storyID, story);\r
+ List<BasicDBObject> rdList = NoSQLUtils.asList(story, IOctopusAPI.REF_RUNDOWN);\r
+ story.put(IOctopusAPI.REF_RUNDOWN, rdList == null ? 0 : rdList.size());\r
+ List<BasicDBObject> sfList = NoSQLUtils.asList(story, IOctopusAPI.REF_STORYFOLDER);\r
+ story.put(IOctopusAPI.REF_STORYFOLDER, sfList == null ? 0 : sfList.size());\r
+\r
+ List<BasicDBObject> reporters = NoSQLUtils.asList(story, IOctopusAPI.REPORTERS);\r
+ String reporterNames = "";\r
+ if (reporters != null && reporters.size() > 0) {\r
+ for (BasicDBObject reporter : reporters) {\r
+ String userName = NoSQLUtils.asString(reporter, "userName");\r
+ if (userName != null) {\r
+ if (reporterNames.length() > 0)\r
+ reporterNames += ", ";\r
+ reporterNames += userName;\r
+ }\r
+ }\r
+ }\r
+ story.put(IOctopusAPI.REPORTERS, reporterNames);\r
+\r
+ result.put(storyID, story);\r
}\r
return result;\r
}\r
\r
- private void store(Calendar scheduledDate, Map<Long, BasicDBObject> stories) {\r
+ private void store(Calendar scheduledDate, List<BasicDBObject> stories, BasicDBObject typeStat, BasicDBObject planStat) {\r
BasicDBObject dailyHistory = new BasicDBObject();\r
dailyHistory.put("dateTime", scheduledDate.getTime());\r
- dailyHistory.put("rawData", new BasicDBList(stories.values()));\r
+ BasicDBList list = new BasicDBList();\r
+ dailyHistory.put("rawData", list);\r
+ for (BasicDBObject story : stories) {\r
+ list.add(story);\r
+ }\r
+ dailyHistory.put("typeStat", typeStat);\r
+ dailyHistory.put("planStat", planStat);\r
+\r
DBCollection collection = db.getCollection("daily_news_history");\r
- BasicDBObject existingHistory = (BasicDBObject) collection.findOne(new BasicDBObject("dateTime", scheduledDate.getTime()));\r
- if (existingHistory != null)\r
- dailyHistory.put(IOctopusAPI._ID, existingHistory.getID());\r
+ collection.remove(new BasicDBObject("dateTime", scheduledDate.getTime()));\r
collection.save(dailyHistory);\r
}\r
\r
\r
import user.jobengine.db.Item;\r
import user.jobengine.db.ItemManager;\r
+import user.jobengine.db.ItemType;\r
import user.jobengine.db.Media;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
public static final String DEFAULT_MEDIATYPE = "Generic";\r
private ItemManager itemManager;\r
\r
- @StepEntry\r
- public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- Media mediaCubeMedia = null;\r
- try {\r
- itemManager = (ItemManager) jobEngine.getItemManager();\r
- if (itemManager == null)\r
- throw new NullPointerException(ITEM_MANAGER_IS_NULL);\r
-\r
- File sourceMediaFile = new File(archiveItem.getMediaFile());\r
- String sourceFileName = sourceMediaFile.getName();\r
-\r
- if (itemManager.isMediaFileExists(sourceFileName)) {\r
- try {\r
- Path sourcePath = Paths.get(archiveItem.getMediaFile());\r
- Path parent = sourcePath.getParent();\r
- Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
- File folder = conflictPath.toFile();\r
- if (!folder.exists() || !folder.isDirectory()) {\r
- Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
- FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
+ private void checkDuplicates(ArchiveItem archiveItem, String sourceFileName) throws Exception {\r
+ if (itemManager.isMediaFileExists(sourceFileName)) {\r
+ try {\r
+ Path sourcePath = Paths.get(archiveItem.getMediaFile());\r
+ Path parent = sourcePath.getParent();\r
+ Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
+ File folder = conflictPath.toFile();\r
+ if (!folder.exists() || !folder.isDirectory()) {\r
+ Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
+ FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
+ try {\r
+ Files.createDirectories(conflictPath, attr);\r
+ } catch (Exception e) {\r
try {\r
- Files.createDirectories(conflictPath, attr);\r
- } catch (Exception e) {\r
- try {\r
- Files.createDirectory(conflictPath);\r
- } catch (Exception e1) {\r
- logger.catching(e);\r
- throw e;\r
- }\r
+ Files.createDirectory(conflictPath);\r
+ } catch (Exception e1) {\r
+ logger.catching(e);\r
+ throw e;\r
}\r
}\r
-\r
- Files.move(sourcePath, Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime()));\r
- } catch (Exception e1) {\r
- logger.catching(e1);\r
- logger.error(getMarker(), "Hiba az állomány {} mappába másolásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
}\r
- throw new Exception("Az '" + sourceFileName + "' állomány már megtalálható az archívumban, archiválása nem lehetséges.");\r
- }\r
-\r
- Item mediaCubeItem = itemManager.getItemByHouseID(archiveItem.getItemHouseId());\r
- jobRuntime.incrementProgress(50);\r
\r
- if (mediaCubeItem == null)\r
- mediaCubeItem = itemManager.createItem(DEFAULT_MEDIATYPE, archiveItem.getItemTitle(), archiveItem.getItemDescription(),\r
- archiveItem.getItemHouseId());\r
-\r
- mediaCubeMedia = itemManager.createMedia(DEFAULT_MEDIATYPE, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(),\r
- archiveItem.getMediaHouseId());\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 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
+ Files.move(sourcePath, Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime()));\r
+ } catch (Exception e1) {\r
+ logger.catching(e1);\r
+ logger.error(getMarker(), "Hiba az állomány {} mappába másolásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
+ }\r
+ throw new Exception("Az '" + sourceFileName + "' állomány már megtalálható az archívumban, archiválása nem lehetséges.");\r
+ }\r
+ }\r
\r
- mediaCubeMedia.setLength(archiveItem.getDuration());\r
- mediaCubeItem.appendMedia(mediaCubeMedia);\r
+ private Media createMedia(ArchiveItem archiveItem, Item mediaCubeItem, String mediaType) {\r
+ Media mediaCubeMedia;\r
+ mediaCubeMedia = itemManager.createMedia(mediaType, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(), archiveItem.getMediaHouseId());\r
+ mediaCubeMedia.setLength(archiveItem.getDuration());\r
+ mediaCubeItem.appendMedia(mediaCubeMedia);\r
+ return mediaCubeMedia;\r
+ }\r
\r
+ @StepEntry\r
+ public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
+ Media mediaCubeMedia = null;\r
+ itemManager = (ItemManager) jobEngine.getItemManager();\r
+ if (itemManager == null)\r
+ throw new NullPointerException(ITEM_MANAGER_IS_NULL);\r
+ try {\r
+ File sourceMediaFile = new File(archiveItem.getMediaFile());\r
+ String sourceFileName = sourceMediaFile.getName();\r
+ checkDuplicates(archiveItem, sourceFileName);\r
+ Item mediaCubeItem = getCreateItem(archiveItem);\r
+ jobRuntime.incrementProgress(50);\r
+ String mediaType = getCreateType(archiveItem);\r
+ mediaCubeMedia = createMedia(archiveItem, mediaCubeItem, mediaType);\r
itemManager.mergeItemStructure(mediaCubeItem);\r
} catch (Exception e) {\r
logger.catching(e);\r
if (!archiveItem.removeCatchedFile())\r
logger.error(getMarker(), "A {} állomány .catched jelző állománya nem törölhető.", new File(archiveItem.getMediaFile()).getName());\r
-\r
throw e;\r
-\r
} finally {\r
jobRuntime.incrementProgress(100);\r
}\r
return new Object[] { mediaCubeMedia };\r
}\r
\r
+ private Item getCreateItem(ArchiveItem archiveItem) {\r
+ Item mediaCubeItem = itemManager.getItemByHouseID(archiveItem.getItemHouseId());\r
+ if (mediaCubeItem == null)\r
+ mediaCubeItem = itemManager.createItem(DEFAULT_MEDIATYPE, archiveItem.getItemTitle(), archiveItem.getItemDescription(),\r
+ archiveItem.getItemHouseId());\r
+ return mediaCubeItem;\r
+ }\r
+\r
+ private String getCreateType(ArchiveItem archiveItem) {\r
+ String mediaType = archiveItem.getMediaType();\r
+ if (mediaType == null || mediaType.length() == 0)\r
+ mediaType = DEFAULT_MEDIATYPE;\r
+ else {\r
+ ItemType mediaItemType = itemManager.getItemType(mediaType);\r
+ if (mediaItemType == null)\r
+ itemManager.createItemType(mediaType, mediaType).add();\r
+ }\r
+ return mediaType;\r
+ }\r
+\r
}\r
import java.nio.file.attribute.BasicFileAttributes;\r
import java.text.ParseException;\r
import java.text.SimpleDateFormat;\r
+import java.util.Calendar;\r
import java.util.Date;\r
import java.util.List;\r
\r
import org.apache.logging.log4j.Marker;\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
import com.ibm.nosql.json.api.DBObject;\r
\r
import user.commons.CalendarUtils;\r
private static final String SCHEDULED_FORMAT = "yyyy.MM.dd HH:mm";\r
\r
private Marker marker;\r
+ private DBCollection existingRecordings;\r
\r
private ArchiveItem createArchiveItem(Path mediaFilePath, Path catchedFilePath) {\r
ArchiveItem result = null;\r
String clipName = mediaFilePath.toFile().getName();\r
Date scheduledStart = getScheduledStart(clipName, recordDate);\r
IOctopusAPI octopusAPI = new OctopusAPI();\r
+\r
DBObject rundown = octopusAPI.getRundown(scheduledStart);\r
if (rundown == null) {\r
logger.error(marker, "A '{}' anyaghoz nem található tükör '{}' kezdéssel, ezért nem archiválható.", clipName, scheduledStart);\r
if (result == null)\r
return null;\r
\r
+ if (clipName.startsWith("1900")) {\r
+ Calendar cal = CalendarUtils.createCalendar(scheduledStart);\r
+ cal.add(Calendar.MINUTE, 5);\r
+ rundown = octopusAPI.getRundown(cal.getTime());\r
+ if (rundown == null) {\r
+ logger.error(marker, "A '{}' anyaghoz nem található tükör '{}' kezdéssel, ezért nem archiválható.", clipName, scheduledStart);\r
+ return null;\r
+ }\r
+ ArchiveItem item2 = processRundow(octopusAPI, rundown);\r
+ if (item2 == null)\r
+ return null;\r
+\r
+ result.setItemTitle(result.getItemTitle() + " + NAPIAKT");\r
+ result.setMediaDescription(result.getMediaDescription() + "\r\n\r\n****** NAPIAKT ******\r\n\r\n" + item2.getMediaDescription());\r
+ }\r
+\r
result.setMediaTitle(clipName);\r
result.setMediaType(MEDIATYPE);\r
result.setMediaFile(mediaFilePath.toString());\r
@StepEntry\r
public Object[] execute(String sourcePath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
final ArchiveItem[] archiveItems = { null };\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ existingRecordings = db.getCollection("tmp_existing_recordings");\r
marker = getJobRuntime().getMarker();\r
try {\r
Files.walkFileTree(Paths.get(sourcePath), new SimpleFileVisitor<Path>() {\r
String name = new File(mediaFile).getName();\r
int extPos = name.toLowerCase().lastIndexOf(LXFEXT);\r
targetFileName = String.format("20%s-%s", Paths.get(mediaFile).getParent().getFileName(), name.substring(0, extPos));\r
+ if (targetFileName.length() > 32) {\r
+ targetFileName = targetFileName.substring(0, 27) + "_PGM";\r
+ }\r
logger.info(marker, "Az archiváló folyamat az '{}' anyagot archiválja.", mediaFile);\r
}\r
\r
}\r
\r
if (mediaFile.isDirectory() || !mediaFile.getName().toLowerCase().endsWith(LXFEXT.toLowerCase())\r
- || mediaFilePath.getParent().toFile().getName().length() != 6) {\r
+ || mediaFilePath.getParent().toFile().getName().length() != 6 || !mediaFile.getName().toLowerCase().contains("_pgm_")) {\r
logger.info("Skipping '{}'", mediaFilePath);\r
return null;\r
}\r
return null;\r
}\r
\r
+ DBObject existingRecording = existingRecordings.findOne(new BasicDBObject("title", archiveItem.getItemTitle().substring(0, 16)));\r
+\r
+ if (existingRecording != null) {\r
+ logger.warn("'{}' already archived, skipping.", archiveItem.getItemTitle());\r
+ return null;\r
+ }\r
+\r
if (StringUtils.isBlank(archiveItem.getItemHouseId())) {\r
logger.warn("'{}' has no Item HouseID specified in metadata.", mediaFilePath);\r
return null;\r
}\r
result.setMediaHouseId(result.getItemHouseId());\r
result.setMediaDescription(sb.toString());\r
- //TODO\r
- if (result.getMediaDescription() != null && result.getMediaDescription().length() > 5000)\r
- result.setMediaDescription(result.getMediaDescription().substring(0, 5000));\r
return result;\r
}\r
}\r
import org.apache.logging.log4j.message.Message;\r
import org.apache.logging.log4j.message.ParameterizedMessage;\r
\r
-import user.commons.transcoder.FFAStransAPI;\r
-import user.commons.transcoder.IFFAStransAPI;\r
+import user.commons.FFAStransAPI;\r
+import user.commons.IFFAStransAPI;\r
import user.jobengine.db.FileType;\r
import user.jobengine.db.IItemManager;\r
import user.jobengine.db.Media;\r
public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, String transcoderAddress, String transcoderTemplateName, String localHiresTargetPath,\r
String globalHiresSourcePath, String localLowresTargetPath, String webPath, boolean deleteSource, IJobEngine jobEngine, IJobRuntime jobRuntime)\r
throws Exception {\r
- marker = jobRuntime.getMarker();\r
- manager = jobEngine.getItemManager();\r
- store = check(manager.getSystemStore(true), "lowres Store");\r
- fileType = check(manager.getFileType(LOWRES_FILETYPE), "lowres FileType");\r
- mediaCubeMedia = check(mediaCubeMedia, "mediaCubeMedia");\r
+ this.marker = jobRuntime.getMarker();\r
+ this.manager = jobEngine.getItemManager();\r
+ this.store = check(manager.getSystemStore(true), "lowres Store");\r
+ this.fileType = check(manager.getFileType(LOWRES_FILETYPE), "lowres FileType");\r
+ this.mediaCubeMedia = check(mediaCubeMedia, "mediaCubeMedia");\r
check(archiveItem, "archiveItem");\r
check(transcoderAddress, "transcoderAddress");\r
check(transcoderTemplateName, "transcoderTemplateName");\r
File sourceMediaFile = new File(archiveItem.getMediaFile());\r
String sourceFileName = sourceMediaFile.getName();\r
String details = String.format("%s (%d bytes)", sourceFileName, sourceMediaFile.length());\r
+ Path targetPath = null;\r
try {\r
- String sourceFile = sourceMediaFile.toString().replace(localHiresTargetPath, globalHiresSourcePath);\r
+ String sourceFile = Paths.get(globalHiresSourcePath, sourceFileName).toString();\r
IFFAStransAPI api = new FFAStransAPI(transcoderAddress, p -> {\r
- jobRuntime.incrementProgress(p);\r
+ if (p <= 100)\r
+ jobRuntime.incrementProgress(p);\r
});\r
api.submit(transcoderTemplateName, sourceFile);\r
jobRuntime.setDescription(String.format("%s: %s", jobRuntime.getDescription(), details));\r
api.monitor(1000);\r
- Path targetPath = Paths.get(localLowresTargetPath, sourceFileName.replace(MXFEXT, MP4EXT));\r
+ targetPath = Paths.get(localLowresTargetPath, sourceFileName.replace(MXFEXT, MP4EXT));\r
postprocess(targetPath, webPath);\r
- if (deleteSource)\r
- sourceMediaFile.delete();\r
} catch (Exception e) {\r
logger.catching(e);\r
Message m = new ParameterizedMessage("Az '{}' állomány átkódolása sikertelen. A rendszer hibaüzenete: {}", details, e.getMessage());\r
logger.error(marker, m);\r
throw new Exception(m.getFormattedMessage());\r
+ } finally {\r
+ try {\r
+ if (deleteSource && sourceMediaFile != null && sourceMediaFile.exists())\r
+ sourceMediaFile.delete();\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
+ try {\r
+ if (deleteSource && targetPath != null && targetPath.toFile().exists())\r
+ Files.delete(targetPath);\r
+ } catch (Exception e) {\r
+ logger.catching(e);\r
+ }\r
}\r
return null;\r
}\r
\r
private void postprocess(Path transcodedFilePath, String webPath) {\r
+ Path lowresPath = null;\r
try {\r
String transcodedFileName = transcodedFilePath.getFileName().toString();\r
if (transcodedFileName.indexOf(".") > 2) {\r
Path subdir = Paths.get(transcodedFileName.substring(0, 1), transcodedFileName.substring(1, 2), transcodedFileName.substring(2, 3));\r
manager.createMediaFile(Paths.get(subdir.toString(), transcodedFileName).toString(), fileType, store, mediaCubeMedia).add();\r
EscortFiles.ensureUNCFolder(webPath, subdir.toString());\r
- Files.move(transcodedFilePath, Paths.get(webPath, subdir.toString(), transcodedFileName));\r
+ lowresPath = Paths.get(webPath, subdir.toString(), transcodedFileName);\r
+ Files.move(transcodedFilePath, lowresPath);\r
} else {\r
manager.createMediaFile(transcodedFileName, fileType, store, mediaCubeMedia).add();\r
- Files.move(transcodedFilePath, Paths.get(webPath, transcodedFileName));\r
+ lowresPath = Paths.get(webPath, transcodedFileName);\r
+ Files.move(transcodedFilePath, lowresPath);\r
}\r
} catch (IOException e) {\r
+ lowresPath = transcodedFilePath;\r
logger.catching(e);\r
- logger.error(marker, "A '{}' állomány mozgatása a '{}' mappába nem sikerült.", transcodedFilePath, webPath);\r
+ logger.error(marker, "A '{}' állomány mozgatása a '{}' helyre nem sikerült.", transcodedFilePath, transcodedFilePath);\r
}\r
}\r
\r
--- /dev/null
+@ECHO OFF\r
+\r
+SET REMOTE_HOST=10.10.1.28\r
+SET REMOTE_SERVER_HOSTKEY=ssh-ed25519 256 ea:ab:67:70:79:63:2f:6a:34:81:48:e2:b9:dd:ca:d4\r
+SET REMOTE_SERVER_ADDRESS=scp://root:password@%REMOTE_HOST%\r
+\r
+SET LOCAL_STEPS_LOCATION=bin/user\r
+SET REMOTE_STEPS_LOCATION=/opt/test-mediacube/configuration/executors/user\r
+\r
+SET LOCAL_TEMPLATES_LOCATION=jobtemplates\r
+SET REMOTE_TEMPLATES_LOCATION=/opt/test-mediacube/configuration/jobtemplates\r
+ \r
+ ECHO *** Deploy steps to server %REMOTE_HOST% ***\r
+ WinSCP.com /command ^\r
+ "open %REMOTE_SERVER_ADDRESS% -hostkey=""%REMOTE_SERVER_HOSTKEY%"" -timeout=60" ^\r
+ "lcd %LOCAL_STEPS_LOCATION%" ^\r
+ "cd %REMOTE_STEPS_LOCATION%" ^\r
+ "synchronize remote" ^\r
+ "exit"\r
+\r
+ ECHO *** Deploy templates to server %REMOTE_HOST% ***\r
+ WinSCP.com /command ^\r
+ "open %REMOTE_SERVER_ADDRESS% -hostkey=""%REMOTE_SERVER_HOSTKEY%"" -timeout=60" ^\r
+ "lcd %LOCAL_TEMPLATES_LOCATION%" ^\r
+ "cd %REMOTE_TEMPLATES_LOCATION%" ^\r
+ "synchronize remote" ^\r
+ "exit"\r
+\r
+@ECHO ON\r
+
\ No newline at end of file
+++ /dev/null
-@ECHO OFF\r
-\r
-SET REMOTE_HOST=10.10.1.28\r
-SET REMOTE_LOCATION=/opt/test-mediacube/configuration/executors\r
-SET REMOTE_SERVER_HOSTKEY=ssh-ed25519 256 ea:ab:67:70:79:63:2f:6a:34:81:48:e2:b9:dd:ca:d4\r
-SET REMOTE_SERVER_ADDRESS=scp://root:password@%REMOTE_HOST%\r
-SET LOCAL_STEPS_LOCATION=bin/user/jobengine/server/steps\r
-SET LOCAL_CONFIG_LOCATION=config\r
- \r
- ECHO *** Begin deploy steps to server %REMOTE_HOST% ***\r
- ECHO --- Deploying\r
- \r
- WinSCP.com /command ^\r
- "open %REMOTE_SERVER_ADDRESS% -hostkey=""%REMOTE_SERVER_HOSTKEY%"" -timeout=60" ^\r
- "cd %REMOTE_LOCATION%" ^\r
- "lcd %LOCAL_STEPS_LOCATION%" ^\r
- "synchronize remote" ^\r
- "lcd ..\" ^\r
- "lcd ..\" ^\r
- "lcd ..\" ^\r
- "lcd ..\" ^\r
- "lcd ..\" ^\r
- "lcd %LOCAL_CONFIG_LOCATION%" ^\r
- "synchronize remote -filemask=config.xml" ^\r
- "cd .." ^\r
- "synchronize remote -filemask=scheduledjobs.json" ^\r
- "exit"\r
- \r
- ECHO *** Completed ***\r
-@ECHO ON\r
-\r
- \r
user.commons.selenio.wsclient,
user.commons.server.protocol,
user.commons.server.tcp,
- user.commons.strings,
- user.commons.transcoder
+ user.commons.strings
Require-Bundle: org.apache.commons.lang;bundle-version="2.4.0",
user.tsm.client;bundle-version="1.2.0",
org.apache.commons.digester;bundle-version="3.2.0";visibility:=reexport,
-package user.commons.transcoder;\r
+package user.commons;\r
\r
import java.util.List;\r
\r
-package user.commons.transcoder;\r
+package user.commons;\r
\r
import java.util.List;\r
\r
-package user.commons.transcoder;\r
+package user.commons;\r
\r
public interface IProgressChangedListener {\r
void onProgressChanged(int progress);\r
\r
import java.net.URI;\r
import java.sql.Timestamp;\r
+import java.util.Calendar;\r
import java.util.Date;\r
import java.util.List;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import user.commons.BaseType;\r
import user.commons.IEntityBase;\r
import user.commons.IEntityPersister;\r
*/\r
List<IEntityBase> getFolders(long id);\r
\r
+ BasicDBObject getIngestInfo(Calendar scheduleDate, String houseId);\r
+\r
Item getItemByHouseID(String houseID);\r
\r
ItemType getItemType(String itemTypeName);\r
import java.sql.SQLException;\r
import java.sql.Statement;\r
import java.sql.Timestamp;\r
+import java.text.SimpleDateFormat;\r
import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.Calendar;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
import sqlj.runtime.ref.DefaultContext;\r
import user.commons.BaseType;\r
import user.commons.CalendarUtils;\r
return result;\r
}\r
\r
+ @Override\r
+ public BasicDBObject getIngestInfo(Calendar scheduleDate, String houseid) {\r
+ BasicDBObject result = null;\r
+ ResultSet rs = null;\r
+ PreparedStatement st = null;\r
+ DefaultContext context = getDbContext();\r
+ Connection connection = context.getConnection();\r
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");\r
+ try {\r
+ String date = df.format(scheduleDate.getTime());\r
+ String query = String.format(\r
+ "SELECT COUNT(*) as count, SUM(size) as duration FROM VW_RD_INGEST WHERE HOUSEID='%s' AND FINISHED LIKE '%s%%' GROUP BY HOUSEID", houseid,\r
+ date);\r
+ st = connection.prepareStatement(query);\r
+ rs = st.executeQuery();\r
+ if (rs.next()) {\r
+ result = new BasicDBObject();\r
+ result.put("count", rs.getLong("count"));\r
+ result.put("duration", rs.getLong("duration"));\r
+ }\r
+\r
+ connection.commit();\r
+ } catch (Exception e) {\r
+ try {\r
+ connection.rollback();\r
+ } catch (Exception e1) {\r
+ }\r
+ throwError(e);\r
+ } finally {\r
+ try {\r
+ if (rs != null)\r
+ rs.close();\r
+ } catch (Exception e1) {\r
+ }\r
+ try {\r
+ if (st != null)\r
+ st.close();\r
+ } catch (Exception e1) {\r
+ }\r
+ putDbContext(context);\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
@Override\r
public Item getItemByHouseID(String houseID) {\r
traceIn();\r
private Timestamp touched;
private Timestamp started;
private Timestamp finished;
+ private Timestamp fileCreated;
private boolean successful;
private String houseId;
private String description;
import java.sql.ResultSet;\r
import java.text.SimpleDateFormat;\r
import java.util.ArrayList;\r
+import java.util.Calendar;\r
+import java.util.Collections;\r
import java.util.Date;\r
+import java.util.LinkedHashMap;\r
import java.util.List;\r
+import java.util.Map;\r
import java.util.function.Consumer;\r
import java.util.stream.Stream;\r
\r
import org.junit.BeforeClass;\r
import org.junit.Test;\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 sqlj.runtime.ref.DefaultContext;\r
+import user.commons.CalendarUtils;\r
import user.commons.IEntityBase;\r
import user.commons.logging.LogUtils;\r
+import user.commons.nosql.NoSQLUtils;\r
\r
public class Support_new {\r
public class BD {\r
\r
@BeforeClass\r
static public void setUpConnection() {\r
+ System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;");\r
+ System.setProperty("jobengine.nosql.db.user", "db2admin");\r
+ System.setProperty("jobengine.nosql.db.password", "password");\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
manager.disconnect();\r
}\r
\r
+ public void buildRecordings(Map<String, String> recordings) {\r
+ ResultSet rs = null;\r
+ PreparedStatement st = null;\r
+ DefaultContext context = ((ItemManager) manager).getDbContext();\r
+ Connection connection = context.getConnection();\r
+ try {\r
+ DB db = NoSQLUtils.getNoSQLDB();\r
+ DBCollection collection = db.getCollection("tmp_existing_recordings");\r
+ collection.drop();\r
+ String query = "select itemtitle, mediafilehouseid from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' order by itemtitle, mediafilehouseid";\r
+ st = connection.prepareStatement(query);\r
+ rs = st.executeQuery();\r
+ while (rs.next()) {\r
+ String itemtitle = rs.getString("itemtitle").substring(0, 16);\r
+ String mediafilehosueid = rs.getString("mediafilehouseid");\r
+ recordings.put(itemtitle, mediafilehosueid);\r
+ collection.save(new BasicDBObject("title", itemtitle));\r
+ }\r
+\r
+ connection.commit();\r
+ } catch (Exception e) {\r
+ try {\r
+ connection.rollback();\r
+ } catch (Exception e1) {\r
+ }\r
+ } finally {\r
+ try {\r
+ if (rs != null)\r
+ rs.close();\r
+ } catch (Exception e1) {\r
+ }\r
+ try {\r
+ if (st != null)\r
+ st.close();\r
+ } catch (Exception e1) {\r
+ }\r
+ ((ItemManager) manager).putDbContext(context);\r
+ }\r
+\r
+ }\r
+\r
+ @Test\r
+ public void generateMissingRecordingsList() throws Exception {\r
+ // select itemtitle, mediafilehouseid from vw_items where itemtitle like '%Echo TV%' and itemtitle like '2%' and mediatitle like '%PGM%' order by itemtitle, mediafilehouseid\r
+ String[] hours = { "07:00", "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00",\r
+ "22:00" };\r
+\r
+ Map<String, String> recordings = new LinkedHashMap<>();\r
+ Calendar cal = CalendarUtils.createZeroCalendar(new Date(2018 - 1900, 0, 1));\r
+ SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");\r
+ for (int i = 0; i < 70; i++) {\r
+ for (String hour : hours) {\r
+ String key = String.format("%s %s", df.format(cal.getTime()), hour);\r
+ recordings.put(key, "");\r
+ // System.out.println(key);\r
+ }\r
+ cal.add(Calendar.DAY_OF_MONTH, 1);\r
+ }\r
+ buildRecordings(recordings);\r
+\r
+ List<String> lines = new ArrayList<>();\r
+ List<String> keys = new ArrayList<>(recordings.keySet());\r
+ Collections.sort(keys);\r
+ for (String key : keys) {\r
+ lines.add(key + ";" + recordings.get(key) + ";");\r
+ System.out.println(key + "\t" + recordings.get(key));\r
+ }\r
+ Files.write(Paths.get("c:\\temp\\recordings.csv"), lines, Charset.forName("UTF-8"), StandardOpenOption.CREATE_NEW);\r
+\r
+ }\r
+\r
@Test\r
public void generateMorpheusArchivedList() throws Exception {\r
Path sourcePath = Paths.get("\\\\10.10.1.100\\BRAAVOS\\PLAYOUT\\Video");\r
<?xml version="1.0" encoding="UTF-8"?>\r
-<window id="resultWin" title="Folyamat futtatása" width="700px" border="normal" apply="org.zkoss.bind.BindComposer"\r
+<window id="resultWin" title="Folyamat futtatása" width="900px" border="normal" apply="org.zkoss.bind.BindComposer"\r
viewModel="@id('jlm') @init('user.jobengine.zk.model.JobSelectorModel')" forward="onCancel=closeButton.onClick">\r
<borderlayout height="450px">\r
<center border="none" flex="true">\r
</template>\r
</listbox>\r
</center>\r
- <east size="25%" flex="true" splittable="true" collapsible="true">\r
- <grid sizedByContent="false" span="true" model="@bind(jlm.selectedJob)" vflex="true" style="border: none; background: #e3e3e3 !important;"\r
+ <east size="60%" flex="true" splittable="true" collapsible="true">\r
+ <grid sizedByContent="false" span="true" model="@load(jlm.selectedJob)" vflex="true" style="border: none; background: #e3e3e3 !important;"\r
oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" emptyMessage="A részletek megtekintéséhez jelöljön ki egy folyamatot.">\r
- <columns>\r
- <column label="" hflex="1" align="left" />\r
- </columns>\r
- <rows>\r
- <template name="xmodel">\r
- <row>\r
- <div sclass="details">\r
- <div>\r
- <label value="Facilities:" />\r
- <label value="@load(each.template)" />\r
- </div>\r
- </div>\r
- </row>\r
- </template>\r
- </rows>\r
+<!-- <columns> -->\r
+<!-- <column label="Paraméter" hflex="1" align="left" /> -->\r
+<!-- <column label="Érték" hflex="1" align="left" /> -->\r
+<!-- </columns> -->\r
+<!-- <rows> -->\r
+<!-- <row> -->\r
+<!-- <label value="Aktív"></label> -->\r
+<!-- <label value="${each.get('active'))}"></label> -->\r
+<!-- </row> -->\r
+<!-- <row> -->\r
+<!-- <label value="Szerverrel indul"></label> -->\r
+<!-- <label value="${each.get('executeimmediate'))}"></label> -->\r
+<!-- </row> -->\r
+<!-- </rows> -->\r
</grid>\r
</east>\r
</borderlayout>\r
<hbox height="10px" hflex="1" />\r
<hlayout hflex="1">\r
<space bar="false" />\r
- <datebox id="chartDateSelector" width="150px" format="yyyy.MM.dd" lenient="false" compact="false" buttonVisible="true" disabled="false" />\r
- <button id="btnShowChart" label="Megjelenít" />\r
+ <datebox value="@bind(vm.selectedDate)" width="150px" format="yyyy.MM.dd" lenient="false" compact="false" buttonVisible="true"\r
+ constraint="no empty, no future: now or never" />\r
</hlayout>\r
<hbox height="10px" hflex="1" />\r
- <hlayout hflex="1" vflex="1" style="background: red;">\r
+ <hlayout hflex="1" vflex="1">\r
<tabbox hflex="1" vflex="1">\r
<tabs>\r
- <tab label="Adatok" closable="false" />\r
<tab label="Grafikonok" closable="false" />\r
+ <tab label="Adatok" closable="false" />\r
</tabs>\r
<tabpanels>\r
<tabpanel>\r
- <grid model="@load(vm.dataList)" mold="default" sizedByContent="default" vflex="1" hflex="1">\r
- <columns sizable="true">\r
- <column forEach="${vm.columnList}" label="${each}"></column>\r
- </columns>\r
- <template name="model" var="r">\r
+ <grid>\r
+ <rows sclass="narrow">\r
<row>\r
- <label forEach="${vm.columnList}" value="${r.get(each)}"></label>\r
+ <div width="100%" onAfterSize='typeChartCount.setWidth(new Integer(event.getWidth()))'>\r
+ <charts id="typeChartCount" type="pie" />\r
+ </div>\r
+ <div width="100%" onAfterSize='typeChartSumDuration.setWidth(new Integer(event.getWidth()))'>\r
+ <charts id="typeChartSumDuration" type="pie" />\r
+ </div>\r
+ <div width="100%" onAfterSize='planChart.setWidth(new Integer(event.getWidth()))'>\r
+ <charts id="planChart" type="pie" />\r
+ </div>\r
</row>\r
- </template>\r
+ </rows>\r
</grid>\r
+ <!-- <vlayout style="overflow:auto;text-align:center;" height="100%" width="100%"> -->\r
+ <!-- <hlayout width="100%"> -->\r
+ <!-- </hlayout> -->\r
+ <!-- </vlayout> -->\r
</tabpanel>\r
<tabpanel>\r
+ <grid model="@load(vm.dataList)" mold="paging" sizedByContent="default" vflex="1" hflex="1" emptyMessage="Nincs adat!">\r
+ <auxhead>\r
+ <auxheader colspan="11" align="right">\r
+ <a href="javascript:void(0);" label="letöltés" onClick="@command('downloadRawData')" disabled="@load(vm.downloadDisabled)" />\r
+ \r
+ </auxheader>\r
+ </auxhead> \r
+ <!-- <auxhead sclass="category-center"> -->\r
+ <!-- <auxheader colspan="1"> -->\r
+ <!-- <textbox instant="true" width="100px" value="@bind(vm.filter.category)" onChange="@command('changeFilter')" /> -->\r
+ <!-- </auxheader> -->\r
+ <!-- </auxhead> -->\r
+ <columns sizable="true">\r
+ <column forEach="${vm.columnList}" label="${each}" sort="auto"></column>\r
+ </columns>\r
+ <rows>\r
+ <template name="model" var="r">\r
+ <row>\r
+ <label forEach="${vm.columnList}" value="${r.get(each)}"></label>\r
+ </row>\r
+ </template>\r
+ </rows>\r
+ </grid>\r
</tabpanel>\r
</tabpanels>\r
</tabbox>\r
//submit("fake-noparams.xml", "Bootstrap", null);
}
+ private void closeSessionLog(IJobRuntime 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());
+ }
+ }
+
protected Map<Long, IJobRuntime> createJobs() {
return new ConcurrentHashMap<Long, IJobRuntime>();
}
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());
- }
+ closeSessionLog(jobRuntime);
}
}
logger.error(description);
jobRuntime.setDescription(description);
statusMachine.processAction(JobAction.FINISH, jobRuntime);
+ closeSessionLog(jobRuntime);
}
public synchronized void unbindItemManagerService(IItemManager service) {
childrenIDs.add(child.getId());
}
}
- if (event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId())) {
+
+ boolean isChildDeleted = event.getSignalType().equals(SignalType.DELETE) && childrenIDs.contains(child.getId());
+ boolean isChildHasError = event.getSignalType().equals(SignalType.UPDATE) && childrenIDs.contains(child.getId())
+ && JobStatus.SUSPENDED.equals(child.getStatus());
+ if (isChildDeleted || isChildHasError) {
childrenIDs.remove(child.getId());
if (childrenIDs.size() == 0)
forkSempahore.release();
private Map<String, Object> jobParameters = new HashMap<String, Object>();\r
\r
public IJobRuntime doJob() throws JobEngineException {\r
- return jobEngine.submit(templateName, jobName, jobParameters);\r
+ return jobEngine.submit(templateName, jobName, getJobParameters());\r
}\r
\r
public IJobRuntime doJob(IJobStatusChangedListener statusListener) throws JobEngineException {\r
- return jobEngine.submit(null, statusListener, templateName, jobName, jobParameters);\r
+ return jobEngine.submit(null, statusListener, templateName, jobName, getJobParameters());\r
}\r
\r
@Override\r
}\r
\r
public void setJobParameter(String name, Object value) {\r
- this.jobParameters.put(name, value);\r
+ this.getJobParameters().put(name, value);\r
}\r
\r
public void setTemplateName(String templateName) {\r
return String.format("!%s! %s", jobName, templateName);\r
}\r
\r
+ public void setJobParameters(Map<String, Object> jobParameters) {\r
+ this.jobParameters = jobParameters;\r
+ }\r
+\r
}\r
package user.jobengine.zk.model;\r
\r
+import java.text.SimpleDateFormat;\r
import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Calendar;\r
+import java.util.Date;\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.BindUtils;\r
+import org.zkoss.bind.annotation.AfterCompose;\r
+import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.ContextParam;\r
+import org.zkoss.bind.annotation.ContextType;\r
import org.zkoss.bind.annotation.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.chart.Charts;\r
+import org.zkoss.chart.Lang;\r
+import org.zkoss.chart.Options;\r
+import org.zkoss.zhtml.Filedownload;\r
+import org.zkoss.zk.ui.Component;\r
+import org.zkoss.zk.ui.select.Selectors;\r
+import org.zkoss.zk.ui.select.annotation.Wire;\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
\r
-import user.commons.ListUtils;\r
+import user.commons.CalendarUtils;\r
import user.commons.nosql.NoSQLUtils;\r
+import user.commons.octopus.IOctopusAPI;\r
\r
//http://zkfiddle.org/sample/3op451q/12-Dynamic-Columns#source-1\r
public class NewsHistoryModel {\r
private static final Logger logger = LogManager.getLogger();\r
-\r
private List<BasicDBObject> dataList;\r
- private List<String> columnList;\r
+ private List<String> columnList = Arrays.asList(IOctopusAPI.ID, IOctopusAPI.NAME, IOctopusAPI.PARENT_STORY_ID, IOctopusAPI.REPORTERS, IOctopusAPI.OBJ_ID,\r
+ IOctopusAPI.LABEL, "duration", IOctopusAPI.REF_RUNDOWN, IOctopusAPI.REF_STORYFOLDER, "ingest_count", "ingest_duration");\r
private DB db = null;\r
-\r
private DBCollection collection;\r
+ private Date selectedDate;\r
+ private boolean downloadDisabled;\r
+\r
+ @Wire\r
+ Charts typeChartCount;\r
+ @Wire\r
+ Charts typeChartSumDuration;\r
+ @Wire\r
+ Charts planChart;\r
+ private BasicDBList currentRawData;\r
+\r
+ @AfterCompose\r
+ public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
+ Selectors.wireComponents(view, this, false);\r
+\r
+ setSelectedDate(new Date());\r
+ }\r
+\r
+ private void clearChart(Charts charts) {\r
+ int size = charts.getSeriesSize();\r
+ for (int i = 0; i < size; i++)\r
+ charts.getSeries(i).setData(new ArrayList<Integer>());\r
+\r
+ Options options = charts.getOptions();\r
+ if (options == null)\r
+ options = new Options();\r
+\r
+ Lang lang = options.getLang();\r
+ if (lang == null)\r
+ lang = new Lang();\r
+\r
+ options.setLang(lang);\r
+ charts.setOptions(options);\r
+ charts.setTitle("");\r
+ charts.setSubtitle("");\r
+ lang.setNoData("Nincs adat!");\r
+ charts.getTooltip().setEnabled(false);\r
+ charts.getExporting().setEnabled(false);\r
+ }\r
+\r
+ @Command\r
+ public void downloadRawData() {\r
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");\r
+ byte[] content = currentRawData.toJSON().getBytes();\r
+ Filedownload.save(content, "text/csv", String.format("%s-news-stat.csv", dateFormat.format(selectedDate)));\r
+ }\r
\r
public List<String> getColumnList() {\r
return columnList;\r
return dataList;\r
}\r
\r
+ public Date getSelectedDate() {\r
+ return selectedDate;\r
+ }\r
+\r
@Init\r
public void init() {\r
db = NoSQLUtils.getNoSQLDB();\r
- collection = db.getCollection("sessionlogs");\r
+ collection = db.getCollection("daily_news_history");\r
+ }\r
+\r
+ public boolean isDownloadDisabled() {\r
+ return downloadDisabled;\r
+ }\r
+\r
+ private void refresh() {\r
+ setDownloadDisabled(true);\r
+ setDataList(null);\r
+ BindUtils.postNotifyChange(null, null, this, "dataList");\r
+\r
+ clearChart(typeChartCount);\r
+ clearChart(typeChartSumDuration);\r
+\r
+ Calendar scheduledDate = CalendarUtils.createZeroCalendar(selectedDate);\r
+ BasicDBObject dateFilter = new BasicDBObject("dateTime", scheduledDate.getTime());\r
+ BasicDBObject dailyData = (BasicDBObject) collection.findOne(dateFilter);\r
+ if (dailyData == null) {\r
+ return;\r
+ }\r
+ currentRawData = NoSQLUtils.asDBList(dailyData, "rawData");\r
\r
- BasicDBObject first = (BasicDBObject) collection.findOne();\r
- columnList = new ArrayList<>(first.keySet());\r
+ setDataList(NoSQLUtils.asList(dailyData, "rawData"));\r
+ if (dataList == null || dataList.size() == 0) {\r
+ return;\r
+ }\r
\r
- dataList = ListUtils.cast(collection.find().sort(new BasicDBObject("dateTime", -1)).toArray());\r
+ BindUtils.postNotifyChange(null, null, this, "dataList");\r
+\r
+ BasicDBObject typeStat = NoSQLUtils.asDBObject(dailyData, "typeStat");\r
+\r
+ NewsMaterialTypeChart.initTypeCount(typeChartCount, typeStat);\r
+ NewsMaterialTypeChart.initDurationDuration(typeChartSumDuration, typeStat);\r
+ setDownloadDisabled(false);\r
}\r
\r
public void setColumnList(List<String> columnList) {\r
this.dataList = dataList;\r
}\r
\r
+ public void setDownloadDisabled(boolean downloadDisabled) {\r
+ this.downloadDisabled = downloadDisabled;\r
+ }\r
+\r
+ @NotifyChange("downloadDisabled")\r
+ public void setSelectedDate(Date selectedDate) {\r
+ this.selectedDate = selectedDate;\r
+ refresh();\r
+ }\r
+\r
}\r
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.chart.Charts;\r
+import org.zkoss.chart.Point;\r
+\r
+import com.ibm.nosql.json.api.BasicDBObject;\r
+\r
+import user.commons.nosql.NoSQLUtils;\r
+\r
+public class NewsMaterialTypeChart {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ private static void fill(Charts charts, BasicDBObject datas, String member) {\r
+ Point maxPoint = null;\r
+ BasicDBObject rawData = (BasicDBObject) datas.get("rawData");\r
+ for (String name : rawData.keySet()) {\r
+ BasicDBObject dbo = NoSQLUtils.asDBObject(rawData, name);\r
+ Number y = dbo.getLong(member);\r
+ Point point = new Point(name, y);\r
+ charts.getSeries().addPoint(point);\r
+ if (maxPoint == null || y.longValue() > maxPoint.getY().longValue())\r
+ maxPoint = point;\r
+ }\r
+\r
+ if (maxPoint != null) {\r
+ maxPoint.setSliced(true);\r
+ maxPoint.setSelected(true);\r
+ }\r
+ }\r
+\r
+ private static void init(Charts charts) {\r
+ charts.getChart().setPlotBorderWidth(0);\r
+ charts.getChart().setPlotShadow(false);\r
+ charts.getPlotOptions().getPie().setAllowPointSelect(false);\r
+ charts.getPlotOptions().getPie().setEnableMouseTracking(false);\r
+ charts.getPlotOptions().getPie().setShowInLegend(true);\r
+ charts.getPlotOptions().getPie().setAnimation(false);\r
+ }\r
+\r
+ static public void initTypeCount(Charts charts, BasicDBObject datas) {\r
+ init(charts);\r
+ charts.setTitle("Adásbejátszók száma típus szerint");\r
+ charts.getSeries().getDataLabels().setFormat("{point.name} {point.y} db");\r
+ fill(charts, datas, "count");\r
+ }\r
+\r
+ static public void initDurationDuration(Charts charts, BasicDBObject datas) {\r
+ init(charts);\r
+ charts.setTitle("Adásbejátszók hossza típus szerint");\r
+ charts.getSeries().getDataLabels().setFormat("{point.name} {point.y} képkocka");\r
+ fill(charts, datas, "duration");\r
+ }\r
+\r
+}\r