git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 7 Mar 2018 19:12:38 +0000 (19:12 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Wed, 7 Mar 2018 19:12:38 +0000 (19:12 +0000)
40 files changed:
client/Maestro/Configuration/configuration-grafika.json
client/Maestro/Maestro.csproj
client/Maestro/MaestroForm.Target.cs
client/Maestro/Properties/AssemblyInfo.cs
client/Maestro/Sources/FileSourceItem.cs
client/Maestro/Sources/ISourceItem.cs
client/Maestro/Sources/NexioRESTSource.cs
client/Maestro/Sources/NexioSourceItem.cs
client/MaestroShared/Targets/TargetProcessorParameter.cs
client/MaestroShared/Targets/UNCTargetProcessor.cs
server/-configuration/debug-mediacube-bkup-9999.launch [moved from server/-configuration/debug-mediacube-remote.launch with 100% similarity]
server/-configuration/debug-mediacube-main-9999.launch [new file with mode: 0644]
server/-configuration/scheduledjobs.json
server/-configuration/test-deploy-main-mediacube-plugins.launch [new file with mode: 0644]
server/user.jobengine.executors/META-INF/MANIFEST.MF
server/user.jobengine.executors/jobtemplates/archive-recording.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/DownloadRecordingFromNexioStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/FakeStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/ImportStatisticsStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataTransformStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/RecordingsArchiveItemBuilderStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeFFAStranStep.java
server/user.jobengine.executors/test-deploy-steps-to-bsh-main.bat [new file with mode: 0644]
server/user.jobengine.executors/test-deploy-steps-to-bsh-main.batx [deleted file]
server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF
server/user.jobengine.osgi.commons/src/user/commons/FFAStransAPI.java [moved from server/user.jobengine.osgi.commons/src/user/commons/transcoder/FFAStransAPI.java with 96% similarity]
server/user.jobengine.osgi.commons/src/user/commons/IFFAStransAPI.java [moved from server/user.jobengine.osgi.commons/src/user/commons/transcoder/IFFAStransAPI.java with 87% similarity]
server/user.jobengine.osgi.commons/src/user/commons/IProgressChangedListener.java [moved from server/user.jobengine.osgi.commons/src/user/commons/transcoder/IProgressChangedListener.java with 69% similarity]
server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java
server/user.jobengine.osgi.db/src/user/jobengine/db/WorkflowAction.java
server/user.jobengine.osgi.db/test/user/jobengine/db/Support_new.java
server/user.jobengine.osgi.server/pages/jobselector.zul
server/user.jobengine.osgi.server/pages/newshistory.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/ScheduledJob.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsHistoryModel.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsMaterialTypeChart.java [new file with mode: 0644]

index 3e23f552a859e76d2d99b87c502a4c431b175af8..b09b6dd4ef3f18c47778da33f9572347911e8491 100644 (file)
@@ -10,7 +10,7 @@
   },\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
index 76ed944fbbd2087872520f050e5146d9c2665bdc..2335d5e7f0357d549793e244d50514158225b6e1 100644 (file)
       <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
index 4b74b05f197cbf48c278db6143f37e5517126046..5824f70eaa17ebac3206084c1c2d12be7a3a47d0 100644 (file)
@@ -9,6 +9,7 @@ using MaestroShared.Targets;
 using MaestroShared.Target;\r
 using System.ComponentModel;\r
 using MaestroShared.Commons;\r
+using Myriadbits.MXF;\r
 \r
 namespace Maestro {\r
 \r
@@ -89,6 +90,20 @@ namespace Maestro {
                     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
@@ -178,6 +193,7 @@ namespace Maestro {
             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
index cf01775d3c857d2f1149574e41dcb6a40a77c662..4124d82a907045f60cf5f2f5195f5ef625c07ae1 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // 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
index faa013ccd063fb106b0b8579c0658be18b752fee..94ac7fbef4f1210e4a4c65125cd388f7abaab105 100644 (file)
@@ -13,7 +13,7 @@ namespace Maestro.Sources {
         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
@@ -73,6 +73,14 @@ namespace Maestro.Sources {
             }\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
@@ -93,7 +101,6 @@ namespace Maestro.Sources {
             }\r
         }\r
 \r
-\r
         public bool CanHandle(List<String> extensions) {\r
             if (extensions == null || extensions.Count < 1)\r
                 return true;\r
index eb43f6cdc663f2576a79d62d22d9418412bf0704..31f669ea3191f417afa014868d52b3f5b261c08d 100644 (file)
@@ -7,6 +7,6 @@ namespace Maestro.Sources {
         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
index bca5dea7d0c713ce27af54490bfcef9ff5ad4610..6f0416b2afc635bdb934f14adccd6af6ee74db5f 100644 (file)
@@ -228,8 +228,8 @@ namespace Maestro.Sources {
                 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
index cbc0800f03fb584e3ab25c76e6d78f85a8be8891..354293edd0ec88c6cdc7093e15ce2116338fbbd7 100644 (file)
@@ -12,6 +12,7 @@ namespace Maestro.Sources {
         private string agency;\r
         private string id;\r
         private string duration;\r
+        private long frames;\r
 \r
         public event PropertyChangedEventHandler PropertyChanged;\r
 \r
@@ -93,6 +94,14 @@ namespace Maestro.Sources {
             }\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
index 6f923a96c136b82a9f0639ef870f334f256b185a..1520f2ee76e1cf204ad4d9dab8b64fe3c8f55452 100644 (file)
@@ -21,5 +21,6 @@ namespace MaestroShared.Target {
         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
index 6e8b517c92f456828a54f28b7d9cb9362862174f..4fea4d0a88842b8e1eb2a7fc340deab21c36f7ac 100644 (file)
@@ -57,7 +57,8 @@ namespace MaestroShared.Targets {
                 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
diff --git a/server/-configuration/debug-mediacube-main-9999.launch b/server/-configuration/debug-mediacube-main-9999.launch
new file mode 100644 (file)
index 0000000..f188461
--- /dev/null
@@ -0,0 +1,18 @@
+<?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="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;user.commons.log4j2&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;user.jobengine.executors&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;user.jobengine.osgi.commons&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;user.jobengine.osgi.db&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;user.jobengine.osgi.server&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkcharts.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/classes&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/commons-codec-1.10.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/commons-fileupload-1.2.1.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/commons-io-1.4.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/commons-logging-1.1.1.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zcommon.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zel.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zhtml.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_bsh.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_commons-collections.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_elinez.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_eplotz.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_Filters.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_flashchart.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_gmapsz.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jackson-annotations.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jackson-core.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jackson-databind.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jasperreports.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_javassist.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jcommon.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jfreechart.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_jsp.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_monitor.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_psz.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_sapphire.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_shchart.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_silvertail.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_timelinez.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_timeplotz.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk_zuljsp.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zk.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkbind.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkex_r.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkmax.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zkplus.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zml.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zsoup.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zul.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zuti.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;packageFragmentRoot handle=&amp;quot;=user.jobengine.osgi.server/WEB-INF\/lib\/zweb.jar&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.packageFragmentRoot&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;user.jobengine.osgi.services&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;user.tsm.client&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;"/>\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
index b2fc4826da6b7c4062004120e53e56bec4de430b..beb98cbbce67646e021bdf8971f495f1cbea38c1 100644 (file)
@@ -31,7 +31,7 @@
       "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
diff --git a/server/-configuration/test-deploy-main-mediacube-plugins.launch b/server/-configuration/test-deploy-main-mediacube-plugins.launch
new file mode 100644 (file)
index 0000000..4475453
--- /dev/null
@@ -0,0 +1,19 @@
+<?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
index 121efda8ae26205e3b84e30541dc8be41a59c45b..5c6c38dea768703e911f8618a21e21b0d8cb7c02 100644 (file)
@@ -28,4 +28,5 @@ Import-Package: com.fasterxml.jackson.annotation;version="2.4.5",
  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
index b18b03ba412822c810f5d48f789d2e6fe05bbc72..1b22d263426f495b5f6daad4f499bc4de1652bd3 100644 (file)
@@ -1,16 +1,16 @@
 <?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
@@ -25,7 +25,7 @@
                <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
@@ -62,7 +62,7 @@
                                        <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
index 98cc14ed43a62a405db87439db5f4d90ad1a33e0..03380a5db932c05fdc6b24fa33768e1176d8bc65 100644 (file)
@@ -249,14 +249,35 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep {
                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
index 10caec80419b36f030046af228ae22c24fb736a3..c334f89c2af5d36ee06bdb40cbbe44b79e9ab855 100644 (file)
@@ -65,6 +65,17 @@ public class DownloadRecordingFromNexioStep extends JobStep {
                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
index 431205b530c37048ee1733b7df7f6be6fe7cfea7..5e49068cb3059fe31d198dc826476c1cc427cc11 100644 (file)
@@ -3,9 +3,6 @@ package user.jobengine.server.steps;
 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
@@ -17,10 +14,10 @@ public class FakeStep extends JobStep {
        @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
@@ -28,10 +25,14 @@ public class FakeStep extends JobStep {
                                        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
index 798b3fb9b91ceabe781ea7ec94d63dfc1d152d54..5a73d619ba23300b8532e7541df78bba8c98380c 100644 (file)
@@ -1,5 +1,6 @@
 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
@@ -20,6 +21,7 @@ import user.commons.CalendarUtils;
 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
@@ -35,6 +37,7 @@ public class ImportStatisticsStep extends JobStep {
        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
@@ -63,6 +66,7 @@ public class ImportStatisticsStep extends JobStep {
        @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
@@ -88,7 +92,77 @@ public class ImportStatisticsStep extends JobStep {
                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
@@ -155,6 +229,8 @@ public class ImportStatisticsStep extends JobStep {
                        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
@@ -180,20 +256,43 @@ public class ImportStatisticsStep extends JobStep {
                                }\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
index 9b4631a7d1828e11e8be0eaa46267f2b5dde564f..9f40d80d3018ede59aceb3641699c299fc4cd8ff 100644 (file)
@@ -15,6 +15,7 @@ import org.apache.logging.log4j.Logger;
 \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
@@ -31,82 +32,89 @@ public class MetadataTransformStep extends JobStep {
        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
index f1aa4e9b6c2a807d187811a226b52d9dcb734bbc..daf8c1e08dc524c814de0422a650d50265fc6b7b 100644 (file)
@@ -10,6 +10,7 @@ import java.nio.file.SimpleFileVisitor;
 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
@@ -19,6 +20,8 @@ import org.apache.logging.log4j.Logger;
 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
@@ -39,6 +42,7 @@ public class RecordingsArchiveItemBuilderStep extends JobStep {
        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
@@ -48,6 +52,7 @@ public class RecordingsArchiveItemBuilderStep extends JobStep {
                        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
@@ -57,6 +62,22 @@ public class RecordingsArchiveItemBuilderStep extends JobStep {
                        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
@@ -84,6 +105,8 @@ public class RecordingsArchiveItemBuilderStep extends JobStep {
        @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
@@ -150,6 +173,9 @@ public class RecordingsArchiveItemBuilderStep extends JobStep {
                        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
@@ -195,7 +221,7 @@ public class RecordingsArchiveItemBuilderStep extends JobStep {
                }\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
@@ -207,6 +233,13 @@ public class RecordingsArchiveItemBuilderStep extends JobStep {
                        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
@@ -272,9 +305,6 @@ public class RecordingsArchiveItemBuilderStep extends JobStep {
                }\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
index c09674f2d733e5dbe2631ba8a188ce0450f438c5..ae3802d892d19a1f90e984b7eb227334c154d64b 100644 (file)
@@ -12,8 +12,8 @@ import org.apache.logging.log4j.Marker;
 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
@@ -36,11 +36,11 @@ public class TranscodeFFAStranStep extends JobStep {
        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
@@ -52,42 +52,59 @@ public class TranscodeFFAStranStep extends JobStep {
                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
diff --git a/server/user.jobengine.executors/test-deploy-steps-to-bsh-main.bat b/server/user.jobengine.executors/test-deploy-steps-to-bsh-main.bat
new file mode 100644 (file)
index 0000000..4ad3d7e
--- /dev/null
@@ -0,0 +1,30 @@
+@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
diff --git a/server/user.jobengine.executors/test-deploy-steps-to-bsh-main.batx b/server/user.jobengine.executors/test-deploy-steps-to-bsh-main.batx
deleted file mode 100644 (file)
index 8a83ec7..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-@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
index f5903f8093a6c71a1c00a642e7b0a154f773867b..51f1af6fc6c781783cef70c45da2c359e3f93d2a 100644 (file)
@@ -31,8 +31,7 @@ Export-Package: user.commons,
  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,
similarity index 69%
rename from server/user.jobengine.osgi.commons/src/user/commons/transcoder/IProgressChangedListener.java
rename to server/user.jobengine.osgi.commons/src/user/commons/IProgressChangedListener.java
index 395435fb21947e314365c6825926f7d06cc08d5d..ee5155e0e821fc9c1ddc666da2f6a5a2fe47ef5b 100644 (file)
@@ -1,4 +1,4 @@
-package user.commons.transcoder;\r
+package user.commons;\r
 \r
 public interface IProgressChangedListener {\r
        void onProgressChanged(int progress);\r
index 90d09852991f5eec180ba7495057510553b88caa..4278d8a6330c3b57c45798b7d63d611fd3802dcb 100644 (file)
@@ -2,9 +2,12 @@ package user.jobengine.db;
 \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
@@ -179,6 +182,8 @@ public interface IItemManager extends IEntityPersister {
         */\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
index 6cde5259f4695f41d288160b6e2f9771a440efed..cc67e64266f1e3ce1afde1f7fa1eb61fc3bcaf10 100644 (file)
@@ -7,6 +7,7 @@ import java.sql.ResultSet;
 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
@@ -18,6 +19,8 @@ import java.util.Map;
 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
@@ -512,6 +515,51 @@ public class ItemManager extends MemoryCache implements IItemManager {
                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
index 8d89a664a36cb9e82f28bb44d6ec30d6f45bcbca..a86ace16de8627a28df929ff3c6bb559128ef4e5 100644 (file)
@@ -8,6 +8,7 @@ public class WorkflowAction extends JSONBase implements Serializable {
        private Timestamp touched;
        private Timestamp started;
        private Timestamp finished;
+       private Timestamp fileCreated;
        private boolean successful;
        private String houseId;
        private String description;
index b02ed534a595432a580ff27a8a0201c3eadee302..2fc515ff12ca2531edb40aac3f5e13b22cd6f6c9 100644 (file)
@@ -11,8 +11,12 @@ import java.sql.PreparedStatement;
 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
@@ -20,8 +24,15 @@ import org.junit.AfterClass;
 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
@@ -33,6 +44,9 @@ public class Support_new {
 \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
@@ -48,6 +62,77 @@ public class Support_new {
                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
index f18033d06ac620f817d1b6e1dc544fc496c136c6..276051941e47bf998324c3310915ac4bce1d4acc 100644 (file)
@@ -1,5 +1,5 @@
 <?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
index cb3cdb2f5108d9ae6705ed4d8aed1ed0656a8b2f..3fd4ecaf5813e21daa075b5606f773213bb94363 100644 (file)
@@ -4,30 +4,62 @@
                <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
index 56e161c589d71a974c86dddefd9e56ed0422e764..e35b6c6167d50a2fc58f163a613f2c74a76a3748 100644 (file)
@@ -264,6 +264,15 @@ public class JobEngine implements IJobEngine {
                //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>();
        }
@@ -653,12 +662,7 @@ public class JobEngine implements IJobEngine {
                        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);
                }
 
        }
@@ -851,6 +855,7 @@ public class JobEngine implements IJobEngine {
                logger.error(description);
                jobRuntime.setDescription(description);
                statusMachine.processAction(JobAction.FINISH, jobRuntime);
+               closeSessionLog(jobRuntime);
        }
 
        public synchronized void unbindItemManagerService(IItemManager service) {
index 080be74034098e374974b76182bc3ce0d8a7af04..13072a48ddcac31f650c4d36acb8ed22766a2cbb 100644 (file)
@@ -215,7 +215,11 @@ public class JobRuntime extends Job implements IJobRuntime {
                                                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();
index a7313a249b3574154265ca6d80107373aad2e49c..fcbb31ccce9ebc8eb60656e3bd87d4841f4c146d 100644 (file)
@@ -34,11 +34,11 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
        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
@@ -118,7 +118,7 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
        }\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
@@ -130,4 +130,8 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
                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
index 6ae2337127bfdaa1cee0df7a5d92bc293e4a6c90..3b4a71690c38703da89f8b866ff3f5dfc04c476b 100644 (file)
@@ -1,28 +1,92 @@
 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
@@ -32,15 +96,48 @@ public class NewsHistoryModel {
                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
@@ -51,4 +148,14 @@ public class NewsHistoryModel {
                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
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsMaterialTypeChart.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/NewsMaterialTypeChart.java
new file mode 100644 (file)
index 0000000..2095950
--- /dev/null
@@ -0,0 +1,56 @@
+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