From 2ddd0b8ea0a4c41f2d6e1c186c5c90bbc5413796 Mon Sep 17 00:00:00 2001 From: "vasary.daniel" Date: Mon, 8 Feb 2021 14:25:58 +0000 Subject: [PATCH] git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C32132 --- server/-configuration/20170531-todo.txt | 15 - .../-configuration/jetty-deploy/etc/jetty.xml | 129 --- .../jetty-deploy/etc/login.conf | 5 - .../jetty-deploy/etc/login.properties | 4 - .../jetty-deploy/etc/login_propertyfile.conf | 5 - .../jetty-deploy/etc/sampkey.jks | Bin 2145 -> 0 bytes .../jetty-deploy/etc/user-jetty-deployer.xml | 76 -- .../etc/user-jetty-http-redirect.xml | 61 -- .../jetty-deploy/etc/webdefault.xml | 534 ----------- server/-configuration/jetty/etc/jetty.xml | 129 --- server/-configuration/jetty/etc/login.conf | 5 - .../-configuration/jetty/etc/login.properties | 4 - .../jetty/etc/login_propertyfile.conf | 5 - server/-configuration/jetty/etc/sampkey.jks | Bin 2145 -> 0 bytes .../jetty/etc/user-jetty-deployer.xml | 76 -- .../jetty/etc/user-jetty-http-redirect.xml | 61 -- .../-configuration/jetty/etc/webdefault.xml | 534 ----------- server/-configuration/obsolate/attach.xml | 61 -- .../-configuration/obsolate/attachlocal.xml | 44 - server/-configuration/obsolate/export.xml | 55 -- server/-configuration/obsolate/import.xml | 36 - .../obsolate/lowrestranscodemedia.xml | 19 - server/-configuration/obsolate/nexio-sync.xml | 6 - server/-configuration/obsolate/program1.xml | 29 - server/-configuration/obsolate/template.xml | 6 - server/-configuration/obsolate/teszt.xml | 19 - server/-configuration/obsolate/tsmbackup.xml | 24 - server/-configuration/obsolate/tsmrestore.xml | 17 - .../run-mediacube-server-hirtv.launch | 2 +- .../run-mediacube-server-mv.launch | 5 +- .../run-mediacube-server-test.launch | 2 +- .../run-mediacube-server-user.launch | 2 +- .../run-mediacube-server.launch | 2 +- server/-dependencies/jobengine.target | 5 +- server/-dependencies/pom.xml | 48 +- server/-product/log4j2.xml | 86 -- server/-product/mediacube.product | 92 +- server/-product/mediacube.sh | 1 - server/-product/mediacube1 | 174 ---- server/-product/mediacube2 | 175 ---- server/-product/pom.xml | 218 ----- server/-product/pom.xml.210206 | 259 +++++ .../production/HIRTV/configuration/config.ini | 93 ++ .../HIRTV/configuration/jetty/jetty-http.xml} | 0 .../configuration/jetty/jetty-https.xml} | 0 .../jetty/jetty-ssl-context.xml} | 4 +- .../HIRTV/configuration/jetty/jetty-ssl.xml} | 0 .../HIRTV/configuration/jetty/jetty.xml} | 0 .../HIRTV/configuration/jetty}/keystore | Bin .../HIRTV/configuration/jetty}/localhost.jks | Bin .../HIRTV/jobs/templates}/archive-limited.xml | 0 .../jobs/templates}/archive-material.xml | 0 .../jobs/templates}/archive-ondemand.xml | 0 .../jobs/templates}/archive-recursive.xml | 0 .../templates}/batch-retrieve-ondemand.xml | 0 .../HIRTV/jobs/templates}/cancelable.xml | 0 .../HIRTV/jobs/templates}/common-copy.xml | 0 .../copyforarchive-nexio-materials.xml | 0 .../copyforarchive-nexio-recordings.xml | 0 .../templates}/create-lowres-ondemand.xml | 0 .../jobs/templates}/delete-materials.xml | 0 .../templates}/delete-nexio-materials.xml | 0 .../templates}/delete-promo-materials.xml | 0 .../jobs/templates}/duplicate-remover.xml | 0 .../HIRTV/jobs/templates}/fake-concurrent.xml | 0 .../HIRTV/jobs/templates}/fake-noparams.xml | 0 .../HIRTV/jobs/templates}/fake-spawn.xml | 0 .../production/HIRTV/jobs/templates}/fake.xml | 0 .../templates}/fork-validate-and-archive.xml | 0 .../templates}/fork-validate-and-restore.xml | 0 .../templates}/generic-archive-checker.xml | 0 .../harris-missingmaterial-checker.xml | 0 .../jobs/templates}/import-statistics.xml | 0 .../HIRTV/jobs/templates}/migrate-hsm.xml | 0 .../jobs/templates}/nexio-archive-checker.xml | 0 .../peablebeach-missingmaterial-checker.xml | 0 .../jobs/templates}/register-user-restore.xml | 0 .../jobs/templates}/register-vod-restore.xml | 0 .../jobs/templates}/retrieve-material.xml | 0 .../retrieve-morpheus-missing-materials.xml | 0 .../jobs/templates}/retrieve-ondemand.xml | 0 .../retrieve-traffic-missing-materials.xml | 0 .../HIRTV/jobs/templates}/retrieve.xml | 0 .../HIRTV/jobs/templates}/submit-child.xml | 0 .../HIRTV/jobs/templates}/sync-octopus.xml | 0 .../HIRTV/jobs/templates}/sync-subtitles.xml | 0 .../templates}/sys-check-lowres-integrity.xml | 0 .../sys-import-morpheus-missing-materials.xml | 0 .../jobs/templates}/sys-recreate-length.xml | 0 .../jobs/templates}/sys-recreate-lowres.xml | 0 .../sys-retrieve-missing-material.xml | 0 .../jobs/templates}/test-fork-cancelable.xml | 0 .../HIRTV/jobs/templates}/test-multiparam.xml | 0 .../jobs/templates}/validate-and-archive.xml | 0 .../jobs/templates}/validate-and-restore.xml | 0 .../jobs/templates}/validate-dir-mxf.xml | 0 .../jobs/templates}/worker-keepalive.xml | 0 .../-product/production/HIRTV/mediacube.bat | 40 + .../configuration/application.yaml | 63 ++ .../MEDIAVIVANTIS/configuration/config.ini | 93 ++ .../configuration/jetty/jetty-http.xml} | 2 +- .../configuration/jetty/jetty-https.xml} | 0 .../jetty/jetty-ssl-context.xml} | 4 +- .../configuration/jetty/jetty-ssl.xml} | 2 +- .../configuration/jetty/jetty.xml} | 0 .../configuration/jetty}/keystore | Bin .../configuration/jetty}/localhost.jks | Bin .../MEDIAVIVANTIS/configuration/log4j2.xml | 21 + .../MEDIAVIVANTIS/configuration/maestro.json | 61 ++ .../configuration/mediacube.json | 107 +++ .../jobengine/server/steps/EscortFiles.class | Bin 0 -> 14968 bytes .../server/steps/ItemManagerExtensions.class | Bin 0 -> 4134 bytes .../jobengine/server/steps/MetadataType.class | Bin 0 -> 1320 bytes .../MetadataTypeDetector$MetadataType.class | Bin 0 -> 1554 bytes .../server/steps/MetadataTypeDetector.class | Bin 0 -> 2084 bytes .../server/steps/TSMRestoreStep$1.class | Bin 0 -> 1303 bytes .../server/steps/TSMRestoreStep$2.class | Bin 0 -> 1187 bytes .../server/steps/TSMRestoreStep.class | Bin 0 -> 9183 bytes .../MEDIAVIVANTIS/jobs/executors.xml | 24 + .../MEDIAVIVANTIS/jobs/schedules.json | 169 ++++ .../jobs/steps/ArchiveListBuilderStep.java | 167 ++++ .../jobs/steps/ArchiveMaterialSubmitStep.java | 52 + .../jobs/steps/ArchiveRecursive.java | 291 ++++++ .../jobs/steps/BatchRetrieveForkStep.java | 76 ++ .../jobs/steps/CancelableStep.java | 66 ++ .../steps/CleanupMountedLocationStep.java | 316 ++++++ .../jobs/steps/CreateArchiveItemStep.java | 45 + .../jobs/steps/CreateMissingLowresStep.java | 80 ++ .../jobs/steps/FileCopyStep.java | 95 ++ .../jobs/steps/HSMMigrateStep.java | 401 ++++++++ .../jobs/steps/MXFCutterStep.java | 129 +++ .../jobs/steps/MediaToolStep.java | 41 + .../jobs/steps/MetadataTransformStep.java | 168 ++++ .../steps/OutputPathAndNameSelectorStep.java | 151 +++ .../jobs/steps/TSMBackupStep.java | 207 ++++ .../jobs/steps/TSMExtendedRetrieveStep.java | 85 ++ .../jobs/steps/TSMRestoreStep.java | 159 +++ .../jobs/steps/TSMSimpleRestoreStep.java | 57 ++ .../jobs/steps/TestForkCancelableStep.java | 37 + .../jobs/steps/TranscodeFFAStranStep.java | 151 +++ .../jobs/steps/UpdateGhostMediaDataStep.java | 88 ++ .../jobs/templates}/archive-limited.xml | 0 .../jobs/templates}/archive-material.xml | 6 +- .../jobs/templates}/archive-ondemand.xml | 4 +- .../jobs/templates/archive-recursive.xml | 25 + .../templates}/batch-retrieve-ondemand.xml | 2 +- .../jobs/templates}/cancelable.xml | 15 - .../jobs/templates}/common-copy.xml | 2 +- .../templates}/create-lowres-ondemand.xml | 10 +- .../jobs/templates}/delete-materials.xml | 2 +- .../jobs/templates}/migrate-hsm.xml | 2 +- .../jobs/templates}/retrieve-ondemand.xml | 6 +- .../MEDIAVIVANTIS/jobs/templates/retrieve.xml | 21 + .../jobs/templates}/sys-recreate-lowres.xml | 10 +- .../jobs/templates}/test-fork-cancelable.xml | 0 .../production/MEDIAVIVANTIS/mediacube.bat | 16 + .../production/MEDIAVIVANTIS/mediacube.sh | 24 + server/-product/test-deploy-main-plugins.bat | 12 - .../executors/tests/RescueNEXIOMaterials.java | 10 +- .../mediacube/executors/tests/SmallTests.java | 34 +- .../mediacube/executors/tests/Support.java | 8 +- .../executors/tests/SupportAttachLowres.java | 12 +- .../executors/tests/SupportCheckItem.java | 22 +- .../src/log4j2-test.xml | 13 + server/user.commons.log4j2/log4j2-test.xml | 13 + server/user.jobengine.executors/.classpath | 1 - .../server/steps/FileValidatorStep.java | 1 - .../HarrisMissingMaterialCheckerStep.java | 7 +- .../user/jobengine/server/steps/PBQuery.java | 5 +- ...PeableBeachMissingMaterialCheckerStep.java | 4 +- .../server/steps/RegisterUserRestoreStep.java | 2 +- .../server/steps/RegisterVODRestoreStep.java | 6 +- .../jobengine/server/steps/TransferStep.java | 11 - .../config/config-mv.xml | 5 - .../mediavivantis/fake-concurrent.xml | 26 - .../jobtemplates/mediavivantis/fake-spawn.xml | 45 - .../jobtemplates/mediavivantis/fake.xml | 29 - .../obsolate/DeleteMaterialsStep.java | 106 -- .../obsolate/obsolate/DownloadStep.java | 73 -- .../obsolate/obsolate/GetItemSourcesStep.java | 43 - .../obsolate/ImportWriteDataToDBStep.java | 52 - .../obsolate/obsolate/MediaDBWriterStep.java | 31 - .../obsolate/obsolate/MediaDownloadStep.java | 74 -- .../obsolate/obsolate/MediaUploadStep.java | 77 -- .../obsolate/obsolate/NexioDataMinerStep.java | 45 - .../obsolate/obsolate/SetArchivedStep.java | 50 - .../obsolate/obsolate/TSMBackupStep_orig.java | 160 ---- .../obsolate/obsolate/TemplateStep.java | 19 - .../obsolate/obsolate/TranscodeStep.java | 133 --- .../server/steps/CancelableStep.java | 5 +- .../src/user/jobengine/server/steps/Cmd.java | 6 +- .../CopyForArchiveNEXIOMaterialsStep.java | 8 +- .../CopyForArchiveNEXIORecordingsStep.java | 14 +- .../steps/DeleteNEXIOMaterialsStep.java | 7 +- .../steps/DownloadRecordingFromNexioStep.java | 9 +- .../jobengine/server/steps/MXFCutterStep.java | 6 +- .../server/steps/OctopusDataMiner.java | 17 +- .../server/steps/OctopusDataMinerStable.java | 848 ---------------- .../jobengine/server/steps/TSMBackupStep.java | 6 +- .../server/steps/TSMExtendedRetrieveStep.java | 8 +- .../jobengine/server/steps/TSMWriterStep.java | 6 +- .../server/steps/TranscodeSELENIOStep.java | 18 +- .../jobengine/server/steps/TranscodeStep.java | 16 +- .../steps/UploadRecordingToNexioStep.java | 11 +- .../META-INF/MANIFEST.MF | 4 +- .../OSGI-INF/systemConfiguration.xml | 7 + .../src/user/commons/FFAStransAPI.java | 14 - .../commons/MediaCubeDataSourceFactory.java | 93 +- .../src/user/commons/StoreUri.java | 16 +- .../src/user/commons/config/JSONConfig.java | 33 +- .../commons/configuration/IConfiguration.java | 15 + .../configuration/SystemConfiguration.java | 88 ++ .../src/user/commons/logging/LogUtils.java | 41 - .../user/commons/nexio/NexioDataMiner.java | 11 +- .../user/commons/nexio/NexioDispatcher.java | 20 +- .../src/user/commons/octopus/IOctopusAPI.java | 8 +- .../commons/octopus/OctopusDataMiner1.java | 905 ------------------ .../user/commons/remotestore/TSMLister.java | 11 +- .../octopus/test/OctopusDataMinerTest.java | 35 - .../OSGI-INF/component.xml | 4 +- .../src/user/commons/pool/ConnectionPool.java | 74 -- .../pool/ConnectionPoolProperties.java | 79 -- .../src/user/commons/pool/ContextPool.java | 69 +- .../src/user/commons/pool/ResourcePool.java | 19 +- .../src/user/jobengine/db/IItemManager.java | 12 - .../src/user/jobengine/db/ItemManager.java | 68 +- .../user/jobengine/search/MediaFinder.java | 3 +- .../user/commons/pool/TestConnectionPool.java | 37 - .../test/user/commons/pool/TestingThread.java | 31 - .../test/user/jobengine/db/TestBase.java | 9 +- .../OSGI-INF/componentBinder.xml | 2 +- .../osgi/server/ComponentBinder.java | 14 + .../jobengine/server/DynamicClassLocator.java | 2 +- .../src/user/jobengine/server/IJobEngine.java | 16 +- .../jobengine/server/IJobStepExecutor.java | 1 - .../src/user/jobengine/server/JobEngine.java | 261 +---- .../server/JobEngineConfiguration.java | 202 ++++ .../jobengine/server/JobStepExecutor.java | 91 +- .../server/scheduler/SchedulerService.java | 46 +- .../user/jobengine/server/steps/JobStep.java | 2 + .../user/jobengine/server/IT/JobengineIT.java | 2 - .../user/jobengine/server/IT/Support.java | 32 +- .../server/IT/SupportRemoveDuplicates.java | 26 +- .../user/jobengine/server/IT/SupportTest.java | 24 +- .../user/jobengine/server/JobEngineTest.java | 88 +- .../user/jobengine/server/JobIntegration.java | 1 - .../jobengine/server/JobStepExecutorTest.java | 4 - .../server/JobStepExecutorTest1.java | 4 +- .../jobengine/server/SchedulerConfigTest.java | 26 +- .../META-INF/MANIFEST.MF | 1 + .../OSGI-INF/componentBinder.xml | 1 + .../osgi/mediacube/MediaFileServlet.java | 4 +- .../jobengine/osgi/rest/ComponentBinder.java | 21 +- .../OSGI-INF/componentBinder.xml | 1 + .../user/jobengine/gui/ComponentBinder.java | 13 + .../jobengine/zk/model/MediaCubeConfig.java | 45 + .../user/jobengine/zk/model/MenuModel.java | 4 +- .../user/jobengine/zk/util/SessionUtil.java | 40 +- .../META-INF/MANIFEST.MF | 4 +- .../OSGI-INF/component.xml | 1 + .../metadata/MetadataProviderFactory.java | 27 +- .../metadata/hsm/HSMMetadataProvider.java | 7 +- .../planair/PlanAirMetadataProvider.java | 10 +- 263 files changed, 4818 insertions(+), 6745 deletions(-) delete mode 100644 server/-configuration/20170531-todo.txt delete mode 100644 server/-configuration/jetty-deploy/etc/jetty.xml delete mode 100644 server/-configuration/jetty-deploy/etc/login.conf delete mode 100644 server/-configuration/jetty-deploy/etc/login.properties delete mode 100644 server/-configuration/jetty-deploy/etc/login_propertyfile.conf delete mode 100644 server/-configuration/jetty-deploy/etc/sampkey.jks delete mode 100644 server/-configuration/jetty-deploy/etc/user-jetty-deployer.xml delete mode 100644 server/-configuration/jetty-deploy/etc/user-jetty-http-redirect.xml delete mode 100644 server/-configuration/jetty-deploy/etc/webdefault.xml delete mode 100644 server/-configuration/jetty/etc/jetty.xml delete mode 100644 server/-configuration/jetty/etc/login.conf delete mode 100644 server/-configuration/jetty/etc/login.properties delete mode 100644 server/-configuration/jetty/etc/login_propertyfile.conf delete mode 100644 server/-configuration/jetty/etc/sampkey.jks delete mode 100644 server/-configuration/jetty/etc/user-jetty-deployer.xml delete mode 100644 server/-configuration/jetty/etc/user-jetty-http-redirect.xml delete mode 100644 server/-configuration/jetty/etc/webdefault.xml delete mode 100644 server/-configuration/obsolate/attach.xml delete mode 100644 server/-configuration/obsolate/attachlocal.xml delete mode 100644 server/-configuration/obsolate/export.xml delete mode 100644 server/-configuration/obsolate/import.xml delete mode 100644 server/-configuration/obsolate/lowrestranscodemedia.xml delete mode 100644 server/-configuration/obsolate/nexio-sync.xml delete mode 100644 server/-configuration/obsolate/program1.xml delete mode 100644 server/-configuration/obsolate/template.xml delete mode 100644 server/-configuration/obsolate/teszt.xml delete mode 100644 server/-configuration/obsolate/tsmbackup.xml delete mode 100644 server/-configuration/obsolate/tsmrestore.xml delete mode 100644 server/-product/log4j2.xml delete mode 100644 server/-product/mediacube.sh delete mode 100644 server/-product/mediacube1 delete mode 100644 server/-product/mediacube2 create mode 100644 server/-product/pom.xml.210206 create mode 100644 server/-product/production/HIRTV/configuration/config.ini rename server/{-configuration/jetty/etc/user-jetty-http.xml => -product/production/HIRTV/configuration/jetty/jetty-http.xml} (100%) rename server/{-configuration/jetty-deploy/etc/user-jetty-https.xml => -product/production/HIRTV/configuration/jetty/jetty-https.xml} (100%) rename server/{-configuration/jetty-deploy/etc/user-jetty-ssl-context.xml => -product/production/HIRTV/configuration/jetty/jetty-ssl-context.xml} (95%) rename server/{-configuration/jetty/etc/user-jetty-ssl.xml => -product/production/HIRTV/configuration/jetty/jetty-ssl.xml} (100%) rename server/{-configuration/jetty-deploy/etc/user-jetty.xml => -product/production/HIRTV/configuration/jetty/jetty.xml} (100%) rename server/{-configuration/jetty-deploy/etc => -product/production/HIRTV/configuration/jetty}/keystore (100%) rename server/{-configuration/jetty-deploy/etc => -product/production/HIRTV/configuration/jetty}/localhost.jks (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/archive-limited.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/archive-material.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/archive-ondemand.xml (100%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/HIRTV/jobs/templates}/archive-recursive.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/batch-retrieve-ondemand.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/cancelable.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/common-copy.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/copyforarchive-nexio-materials.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/copyforarchive-nexio-recordings.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/create-lowres-ondemand.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/delete-materials.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/delete-nexio-materials.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/delete-promo-materials.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/duplicate-remover.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/fake-concurrent.xml (100%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/HIRTV/jobs/templates}/fake-noparams.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/fake-spawn.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/fake.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/fork-validate-and-archive.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/fork-validate-and-restore.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/generic-archive-checker.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/harris-missingmaterial-checker.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/import-statistics.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/migrate-hsm.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/nexio-archive-checker.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/peablebeach-missingmaterial-checker.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/register-user-restore.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/register-vod-restore.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/retrieve-material.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/retrieve-morpheus-missing-materials.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/retrieve-ondemand.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/retrieve-traffic-missing-materials.xml (100%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/HIRTV/jobs/templates}/retrieve.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/submit-child.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/sync-octopus.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/sync-subtitles.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/sys-check-lowres-integrity.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/sys-import-morpheus-missing-materials.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/sys-recreate-length.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/sys-recreate-lowres.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/sys-retrieve-missing-material.xml (100%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/HIRTV/jobs/templates}/test-fork-cancelable.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/test-multiparam.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/validate-and-archive.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/validate-and-restore.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/validate-dir-mxf.xml (100%) rename server/{user.jobengine.executors/jobtemplates => -product/production/HIRTV/jobs/templates}/worker-keepalive.xml (100%) create mode 100644 server/-product/production/HIRTV/mediacube.bat create mode 100644 server/-product/production/MEDIAVIVANTIS/configuration/application.yaml create mode 100644 server/-product/production/MEDIAVIVANTIS/configuration/config.ini rename server/{-configuration/jetty-deploy/etc/user-jetty-http.xml => -product/production/MEDIAVIVANTIS/configuration/jetty/jetty-http.xml} (99%) rename server/{-configuration/jetty/etc/user-jetty-https.xml => -product/production/MEDIAVIVANTIS/configuration/jetty/jetty-https.xml} (100%) rename server/{-configuration/jetty/etc/user-jetty-ssl-context.xml => -product/production/MEDIAVIVANTIS/configuration/jetty/jetty-ssl-context.xml} (95%) rename server/{-configuration/jetty-deploy/etc/user-jetty-ssl.xml => -product/production/MEDIAVIVANTIS/configuration/jetty/jetty-ssl.xml} (98%) rename server/{-configuration/jetty/etc/user-jetty.xml => -product/production/MEDIAVIVANTIS/configuration/jetty/jetty.xml} (100%) rename server/{-configuration/jetty/etc => -product/production/MEDIAVIVANTIS/configuration/jetty}/keystore (100%) rename server/{-configuration/jetty/etc => -product/production/MEDIAVIVANTIS/configuration/jetty}/localhost.jks (100%) create mode 100644 server/-product/production/MEDIAVIVANTIS/configuration/log4j2.xml create mode 100644 server/-product/production/MEDIAVIVANTIS/configuration/maestro.json create mode 100644 server/-product/production/MEDIAVIVANTIS/configuration/mediacube.json create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/EscortFiles.class create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/ItemManagerExtensions.class create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/MetadataType.class create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/MetadataTypeDetector$MetadataType.class create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/MetadataTypeDetector.class create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep$1.class create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep$2.class create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep.class create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/executors.xml create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/schedules.json create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveListBuilderStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveMaterialSubmitStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveRecursive.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/BatchRetrieveForkStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/CancelableStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/CleanupMountedLocationStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateArchiveItemStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateMissingLowresStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/FileCopyStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/HSMMigrateStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/MXFCutterStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/MediaToolStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataTransformStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/OutputPathAndNameSelectorStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMBackupStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMExtendedRetrieveStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMRestoreStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMSimpleRestoreStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/TestForkCancelableStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/TranscodeFFAStranStep.java create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/steps/UpdateGhostMediaDataStep.java rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/archive-limited.xml (100%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/archive-material.xml (78%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/archive-ondemand.xml (79%) create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-recursive.xml rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/batch-retrieve-ondemand.xml (87%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/cancelable.xml (53%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/common-copy.xml (90%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/create-lowres-ondemand.xml (84%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/delete-materials.xml (77%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/migrate-hsm.xml (82%) rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/retrieve-ondemand.xml (90%) create mode 100644 server/-product/production/MEDIAVIVANTIS/jobs/templates/retrieve.xml rename server/{user.jobengine.executors/jobtemplates/mediavivantis => -product/production/MEDIAVIVANTIS/jobs/templates}/sys-recreate-lowres.xml (84%) rename server/{user.jobengine.executors/jobtemplates => -product/production/MEDIAVIVANTIS/jobs/templates}/test-fork-cancelable.xml (100%) create mode 100644 server/-product/production/MEDIAVIVANTIS/mediacube.bat create mode 100644 server/-product/production/MEDIAVIVANTIS/mediacube.sh delete mode 100644 server/-product/test-deploy-main-plugins.bat create mode 100644 server/hu.user.mediacube.executors.tests/src/log4j2-test.xml create mode 100644 server/user.commons.log4j2/log4j2-test.xml delete mode 100644 server/user.jobengine.executors/config/config-mv.xml delete mode 100644 server/user.jobengine.executors/jobtemplates/mediavivantis/fake-concurrent.xml delete mode 100644 server/user.jobengine.executors/jobtemplates/mediavivantis/fake-spawn.xml delete mode 100644 server/user.jobengine.executors/jobtemplates/mediavivantis/fake.xml delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/DeleteMaterialsStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/DownloadStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/GetItemSourcesStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/ImportWriteDataToDBStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/MediaDBWriterStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/MediaDownloadStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/MediaUploadStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/NexioDataMinerStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/SetArchivedStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/TSMBackupStep_orig.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/TemplateStep.java delete mode 100644 server/user.jobengine.executors/obsolate/obsolate/TranscodeStep.java delete mode 100644 server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMinerStable.java create mode 100644 server/user.jobengine.osgi.commons/OSGI-INF/systemConfiguration.xml create mode 100644 server/user.jobengine.osgi.commons/src/user/commons/configuration/IConfiguration.java create mode 100644 server/user.jobengine.osgi.commons/src/user/commons/configuration/SystemConfiguration.java delete mode 100644 server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner1.java delete mode 100644 server/user.jobengine.osgi.db/src/user/commons/pool/ConnectionPool.java delete mode 100644 server/user.jobengine.osgi.db/src/user/commons/pool/ConnectionPoolProperties.java delete mode 100644 server/user.jobengine.osgi.db/test/user/commons/pool/TestConnectionPool.java delete mode 100644 server/user.jobengine.osgi.db/test/user/commons/pool/TestingThread.java create mode 100644 server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java diff --git a/server/-configuration/20170531-todo.txt b/server/-configuration/20170531-todo.txt deleted file mode 100644 index bdeb53f9..00000000 --- a/server/-configuration/20170531-todo.txt +++ /dev/null @@ -1,15 +0,0 @@ -Ami kuka: --Documents --user.jobengine.osgi.helper --user.jobengine.osgi.service --user.jobengine.osgi.web - -Feladatok: --DB2 test adatbázis létrehozása user.jobengine.osgi.db/database/db_create.sql alapján - KÉSZ ---dependencies beállítása a legújabb Jetty/Jersey/Jackson hármasra --Új bundle: user.jobengine.osgi.rest: ez a JobEngineWebService funkcióját valósítja meg. --Bundle függõségek tracker helyett DS alapokra --Jetty custom http/https konfiguráció - --Jetty vagy REST service JWL támogatás beépítése - diff --git a/server/-configuration/jetty-deploy/etc/jetty.xml b/server/-configuration/jetty-deploy/etc/jetty.xml deleted file mode 100644 index f85a955c..00000000 --- a/server/-configuration/jetty-deploy/etc/jetty.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/server/-configuration/jetty-deploy/etc/login.conf b/server/-configuration/jetty-deploy/etc/login.conf deleted file mode 100644 index 7f38fa8f..00000000 --- a/server/-configuration/jetty-deploy/etc/login.conf +++ /dev/null @@ -1,5 +0,0 @@ -loginModule { - user.jobengine.osgi.service.LoginModule required - debug="true" - option="1"; -}; \ No newline at end of file diff --git a/server/-configuration/jetty-deploy/etc/login.properties b/server/-configuration/jetty-deploy/etc/login.properties deleted file mode 100644 index 4b91dd7b..00000000 --- a/server/-configuration/jetty-deploy/etc/login.properties +++ /dev/null @@ -1,4 +0,0 @@ -me=me,me,roleA -lol=lol,user,admin -password=password,user,admin -user=user,user,admin diff --git a/server/-configuration/jetty-deploy/etc/login_propertyfile.conf b/server/-configuration/jetty-deploy/etc/login_propertyfile.conf deleted file mode 100644 index 3829c9b1..00000000 --- a/server/-configuration/jetty-deploy/etc/login_propertyfile.conf +++ /dev/null @@ -1,5 +0,0 @@ -loginModule { -org.eclipse.jetty.plus.jaas.spi.PropertyFileLoginModule required -debug="true" -file="/etc/login.properties"; -}; \ No newline at end of file diff --git a/server/-configuration/jetty-deploy/etc/sampkey.jks b/server/-configuration/jetty-deploy/etc/sampkey.jks deleted file mode 100644 index e8da3a672941d7cc4c7d7b32770efd0cd8abf38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2145 zcmbu9X*ARe1IGWenlZ*UwwpCeLimqCmLW?9mlkW1osqG7Nl}rh2r(r4Bo$e*Wi4A# zSuSE2YZ=_RvNNULF!yp#o%fz|zrP=z55M!A^PJ~AAD;b<{S5#Bpa1|seu^j3J0v`a z90LFl{cQSo3;-aYAQiq3@*{cGkPtXT6)FUQAOJWOzG`?6g(4S3$^|LfAFb~D%dXOA zQ_e>M&2ZEY>y2AHY?-VYH?s$In83a(5kGd~p0O8c{J-m6l5BPr(JRfx?_1a`gSE3m zD zlc{{qW*4Dx;A5~*()v|8C@r6(*Xg0acYt4-KXW11=h8jXP^p*`6w4s9-8d^-W`FW% zCOUiu=kM-ElPMSq7LmiBy)Qjiwa;_9lg^fyaskb3^SUw|Sb|EFS7m|~iS=H_rAVV3 z)hZIl%fKKA!Wr;eHT-YH8oBOA4}NH7}^mpD7Pi@W%o z5pbC_78v*PcC+RrrwX_EGQaNju76QP^o>5gl$w!V(&XY*4^Pf{0Q1JEpy!$A@R{kj z)L0m;JNugLlUPKSd35*~~W5~ube3)WtG@d3Q@Jcv)#x1}<*g{LBRg!yy z8mK)y^vleK%QAM!oqlwjcp+KdqTrP{_whSC)Xs9$;hRUB z=)AvPH}W7L(@*m*)=AmM2(Z%6jLa97(Iq)V1M&u`76&{twOz2&mA2sDR?(NV8OLgwbfRA zqX~0NdBnyqFbUEqyL0huQq>E6x8o~;J!PZzG?7eUX~!jPmU3eiQJunXHT}uONJi1^ z-7$^MC>P{rTH7nMS4fs$3jZl@v{2+sX1TxbIsCdzhqv($+M-u#FlnxZ0|nQj&O}@ zRcm?7G(Hs-t-8Id5G%Z!!8UhLm2BvTj|N(;>0+G}xIKoWtSx`OYQtEKu+~<#>AG`N z{`1`SMD0zMeJf`wYLPq#T3?DWbWSX9HpN*J5}x|IFAi>JF&)86u_2ZQ*#U)JU+&rj zv@wkL7KBy}@2g+di$K>95GWDT*UGg1mruul8_2;y@>Ho`(zAAQGA2Zp)7Zba>F4gS z`8C#DPm`&*wEitx{ZxAccfRRadO{N3Y5m?)6STxq(aa7)x#`O!_~F_GfwWz{HqSBY z>$8!~-wdtYS1F+3<#(59s~63hwq`hrDrUanWFgMWw*D(t%dT83^WKjj`8JyUeLNq->jW!7-D+%jUD zIccj>a534yeD2W4T9Zywe&dbjxE;^r{tqN7W?4zYRv8tBkNkO!2p0_RjH!Lm#6HJSUgueK`@D zO!&>VHhz^{0T)#INLOwPL3F5&Ba`HW#u#3Yrh7kD^LOj`-tS4U@{{l{mzE( zqu(~chW8P_tz6MSBusZPmuMH8TglZ5{b~ZFeA+sX z{>YTLet8@Ug8+~xhe26T8VPff=7)>HMON;d!nc&B$9J^qh<|R<@xJfz0Q~oeh@T@u z0ABSuL37F>xsK>~R&4&wJW+=UK0G_aGeO%TY_Ry)zR9Fr&Up!F@^X-7*;{N(8G^`6 z&%SiaA8s(W)(7obK9Ndpea%kWC1kvqRjIM=k_z4HG(6C_PU;jb31<^c;}*MM!$Tjr ztZApQk=v+L-JuDg=tuATyHQVRp3fV*#}5g<_2ip;Y&3rjCwO>P%mphS;aXCXm=GoC zALkpdT(wy^>Op@>3_hy3Um<;tz-wf~UfoM|O^rPUDL%4MF8d5rk<<6*BP}^!p7nF`W5hjT3Wek+AwFvjbR)4Wk V-Sk}_W<&X?1>MH&87C - - - - - - - - - - - - - - - - - - - org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern - .*/[^/]*servlet-api-[^/]*\.jar$|.*/javax.servlet.jsp.jstl-.*\.jar$|.*/org.apache.taglibs.taglibs-standard-impl-.*\.jar$ - - - - - - - - - - - jetty.deploy.monitoredPath - - / - - - - - - jetty.deploy.defaultsDescriptorPath - - /etc/webdefault.xml - - - - - - - - - - - - - - - - - - diff --git a/server/-configuration/jetty-deploy/etc/user-jetty-http-redirect.xml b/server/-configuration/jetty-deploy/etc/user-jetty-http-redirect.xml deleted file mode 100644 index 701042ca..00000000 --- a/server/-configuration/jetty-deploy/etc/user-jetty-http-redirect.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https - 8443 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/server/-configuration/jetty-deploy/etc/webdefault.xml b/server/-configuration/jetty-deploy/etc/webdefault.xml deleted file mode 100644 index d54d76f3..00000000 --- a/server/-configuration/jetty-deploy/etc/webdefault.xml +++ /dev/null @@ -1,534 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Default web.xml file. - This file is applied to a Web application before it's own WEB_INF/web.xml file - - - - - - - - org.eclipse.jetty.servlet.listener.ELContextCleaner - - - - - - - - org.eclipse.jetty.servlet.listener.IntrospectorCleaner - - - - - - - - - - - - - - - - - default - org.eclipse.jetty.servlet.DefaultServlet - - aliases - false - - - acceptRanges - true - - - dirAllowed - true - - - welcomeServlets - false - - - redirectWelcome - false - - - maxCacheSize - 256000000 - - - maxCachedFileSize - 200000000 - - - maxCachedFiles - 2048 - - - gzip - false - - - etags - false - - - useFileMappedBuffer - true - - - - 0 - - - - default - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jsp - org.eclipse.jetty.jsp.JettyJspServlet - - logVerbosityLevel - DEBUG - - - fork - false - - - xpoweredBy - false - - - compilerTargetVM - 1.7 - - - compilerSourceVM - 1.7 - - - 0 - - - - jsp - *.jsp - *.jspf - *.jspx - *.xsp - *.JSP - *.JSPF - *.JSPX - *.XSP - - - - - - - - 30 - - - - - - - - - - - - - - - index.html - index.htm - index.jsp - - - - - - - - ar - ISO-8859-6 - - - be - ISO-8859-5 - - - bg - ISO-8859-5 - - - ca - ISO-8859-1 - - - cs - ISO-8859-2 - - - da - ISO-8859-1 - - - de - ISO-8859-1 - - - el - ISO-8859-7 - - - en - ISO-8859-1 - - - es - ISO-8859-1 - - - et - ISO-8859-1 - - - fi - ISO-8859-1 - - - fr - ISO-8859-1 - - - hr - ISO-8859-2 - - - hu - ISO-8859-2 - - - is - ISO-8859-1 - - - it - ISO-8859-1 - - - iw - ISO-8859-8 - - - ja - Shift_JIS - - - ko - EUC-KR - - - lt - ISO-8859-2 - - - lv - ISO-8859-2 - - - mk - ISO-8859-5 - - - nl - ISO-8859-1 - - - no - ISO-8859-1 - - - pl - ISO-8859-2 - - - pt - ISO-8859-1 - - - ro - ISO-8859-2 - - - ru - ISO-8859-5 - - - sh - ISO-8859-5 - - - sk - ISO-8859-2 - - - sl - ISO-8859-2 - - - sq - ISO-8859-2 - - - sr - ISO-8859-5 - - - sv - ISO-8859-1 - - - tr - ISO-8859-9 - - - uk - ISO-8859-5 - - - zh - GB2312 - - - zh_TW - Big5 - - - - - - - - - Disable TRACE - / - TRACE - - - - - - Enable everything but TRACE - / - TRACE - - - - - diff --git a/server/-configuration/jetty/etc/jetty.xml b/server/-configuration/jetty/etc/jetty.xml deleted file mode 100644 index f85a955c..00000000 --- a/server/-configuration/jetty/etc/jetty.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/server/-configuration/jetty/etc/login.conf b/server/-configuration/jetty/etc/login.conf deleted file mode 100644 index 7f38fa8f..00000000 --- a/server/-configuration/jetty/etc/login.conf +++ /dev/null @@ -1,5 +0,0 @@ -loginModule { - user.jobengine.osgi.service.LoginModule required - debug="true" - option="1"; -}; \ No newline at end of file diff --git a/server/-configuration/jetty/etc/login.properties b/server/-configuration/jetty/etc/login.properties deleted file mode 100644 index 4b91dd7b..00000000 --- a/server/-configuration/jetty/etc/login.properties +++ /dev/null @@ -1,4 +0,0 @@ -me=me,me,roleA -lol=lol,user,admin -password=password,user,admin -user=user,user,admin diff --git a/server/-configuration/jetty/etc/login_propertyfile.conf b/server/-configuration/jetty/etc/login_propertyfile.conf deleted file mode 100644 index 3829c9b1..00000000 --- a/server/-configuration/jetty/etc/login_propertyfile.conf +++ /dev/null @@ -1,5 +0,0 @@ -loginModule { -org.eclipse.jetty.plus.jaas.spi.PropertyFileLoginModule required -debug="true" -file="/etc/login.properties"; -}; \ No newline at end of file diff --git a/server/-configuration/jetty/etc/sampkey.jks b/server/-configuration/jetty/etc/sampkey.jks deleted file mode 100644 index e8da3a672941d7cc4c7d7b32770efd0cd8abf38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2145 zcmbu9X*ARe1IGWenlZ*UwwpCeLimqCmLW?9mlkW1osqG7Nl}rh2r(r4Bo$e*Wi4A# zSuSE2YZ=_RvNNULF!yp#o%fz|zrP=z55M!A^PJ~AAD;b<{S5#Bpa1|seu^j3J0v`a z90LFl{cQSo3;-aYAQiq3@*{cGkPtXT6)FUQAOJWOzG`?6g(4S3$^|LfAFb~D%dXOA zQ_e>M&2ZEY>y2AHY?-VYH?s$In83a(5kGd~p0O8c{J-m6l5BPr(JRfx?_1a`gSE3m zD zlc{{qW*4Dx;A5~*()v|8C@r6(*Xg0acYt4-KXW11=h8jXP^p*`6w4s9-8d^-W`FW% zCOUiu=kM-ElPMSq7LmiBy)Qjiwa;_9lg^fyaskb3^SUw|Sb|EFS7m|~iS=H_rAVV3 z)hZIl%fKKA!Wr;eHT-YH8oBOA4}NH7}^mpD7Pi@W%o z5pbC_78v*PcC+RrrwX_EGQaNju76QP^o>5gl$w!V(&XY*4^Pf{0Q1JEpy!$A@R{kj z)L0m;JNugLlUPKSd35*~~W5~ube3)WtG@d3Q@Jcv)#x1}<*g{LBRg!yy z8mK)y^vleK%QAM!oqlwjcp+KdqTrP{_whSC)Xs9$;hRUB z=)AvPH}W7L(@*m*)=AmM2(Z%6jLa97(Iq)V1M&u`76&{twOz2&mA2sDR?(NV8OLgwbfRA zqX~0NdBnyqFbUEqyL0huQq>E6x8o~;J!PZzG?7eUX~!jPmU3eiQJunXHT}uONJi1^ z-7$^MC>P{rTH7nMS4fs$3jZl@v{2+sX1TxbIsCdzhqv($+M-u#FlnxZ0|nQj&O}@ zRcm?7G(Hs-t-8Id5G%Z!!8UhLm2BvTj|N(;>0+G}xIKoWtSx`OYQtEKu+~<#>AG`N z{`1`SMD0zMeJf`wYLPq#T3?DWbWSX9HpN*J5}x|IFAi>JF&)86u_2ZQ*#U)JU+&rj zv@wkL7KBy}@2g+di$K>95GWDT*UGg1mruul8_2;y@>Ho`(zAAQGA2Zp)7Zba>F4gS z`8C#DPm`&*wEitx{ZxAccfRRadO{N3Y5m?)6STxq(aa7)x#`O!_~F_GfwWz{HqSBY z>$8!~-wdtYS1F+3<#(59s~63hwq`hrDrUanWFgMWw*D(t%dT83^WKjj`8JyUeLNq->jW!7-D+%jUD zIccj>a534yeD2W4T9Zywe&dbjxE;^r{tqN7W?4zYRv8tBkNkO!2p0_RjH!Lm#6HJSUgueK`@D zO!&>VHhz^{0T)#INLOwPL3F5&Ba`HW#u#3Yrh7kD^LOj`-tS4U@{{l{mzE( zqu(~chW8P_tz6MSBusZPmuMH8TglZ5{b~ZFeA+sX z{>YTLet8@Ug8+~xhe26T8VPff=7)>HMON;d!nc&B$9J^qh<|R<@xJfz0Q~oeh@T@u z0ABSuL37F>xsK>~R&4&wJW+=UK0G_aGeO%TY_Ry)zR9Fr&Up!F@^X-7*;{N(8G^`6 z&%SiaA8s(W)(7obK9Ndpea%kWC1kvqRjIM=k_z4HG(6C_PU;jb31<^c;}*MM!$Tjr ztZApQk=v+L-JuDg=tuATyHQVRp3fV*#}5g<_2ip;Y&3rjCwO>P%mphS;aXCXm=GoC zALkpdT(wy^>Op@>3_hy3Um<;tz-wf~UfoM|O^rPUDL%4MF8d5rk<<6*BP}^!p7nF`W5hjT3Wek+AwFvjbR)4Wk V-Sk}_W<&X?1>MH&87C - - - - - - - - - - - - - - - - - - - org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern - .*/[^/]*servlet-api-[^/]*\.jar$|.*/javax.servlet.jsp.jstl-.*\.jar$|.*/org.apache.taglibs.taglibs-standard-impl-.*\.jar$ - - - - - - - - - - - jetty.deploy.monitoredPath - - / - - - - - - jetty.deploy.defaultsDescriptorPath - - /etc/webdefault.xml - - - - - - - - - - - - - - - - - - diff --git a/server/-configuration/jetty/etc/user-jetty-http-redirect.xml b/server/-configuration/jetty/etc/user-jetty-http-redirect.xml deleted file mode 100644 index 701042ca..00000000 --- a/server/-configuration/jetty/etc/user-jetty-http-redirect.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https - 8443 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/server/-configuration/jetty/etc/webdefault.xml b/server/-configuration/jetty/etc/webdefault.xml deleted file mode 100644 index d54d76f3..00000000 --- a/server/-configuration/jetty/etc/webdefault.xml +++ /dev/null @@ -1,534 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Default web.xml file. - This file is applied to a Web application before it's own WEB_INF/web.xml file - - - - - - - - org.eclipse.jetty.servlet.listener.ELContextCleaner - - - - - - - - org.eclipse.jetty.servlet.listener.IntrospectorCleaner - - - - - - - - - - - - - - - - - default - org.eclipse.jetty.servlet.DefaultServlet - - aliases - false - - - acceptRanges - true - - - dirAllowed - true - - - welcomeServlets - false - - - redirectWelcome - false - - - maxCacheSize - 256000000 - - - maxCachedFileSize - 200000000 - - - maxCachedFiles - 2048 - - - gzip - false - - - etags - false - - - useFileMappedBuffer - true - - - - 0 - - - - default - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jsp - org.eclipse.jetty.jsp.JettyJspServlet - - logVerbosityLevel - DEBUG - - - fork - false - - - xpoweredBy - false - - - compilerTargetVM - 1.7 - - - compilerSourceVM - 1.7 - - - 0 - - - - jsp - *.jsp - *.jspf - *.jspx - *.xsp - *.JSP - *.JSPF - *.JSPX - *.XSP - - - - - - - - 30 - - - - - - - - - - - - - - - index.html - index.htm - index.jsp - - - - - - - - ar - ISO-8859-6 - - - be - ISO-8859-5 - - - bg - ISO-8859-5 - - - ca - ISO-8859-1 - - - cs - ISO-8859-2 - - - da - ISO-8859-1 - - - de - ISO-8859-1 - - - el - ISO-8859-7 - - - en - ISO-8859-1 - - - es - ISO-8859-1 - - - et - ISO-8859-1 - - - fi - ISO-8859-1 - - - fr - ISO-8859-1 - - - hr - ISO-8859-2 - - - hu - ISO-8859-2 - - - is - ISO-8859-1 - - - it - ISO-8859-1 - - - iw - ISO-8859-8 - - - ja - Shift_JIS - - - ko - EUC-KR - - - lt - ISO-8859-2 - - - lv - ISO-8859-2 - - - mk - ISO-8859-5 - - - nl - ISO-8859-1 - - - no - ISO-8859-1 - - - pl - ISO-8859-2 - - - pt - ISO-8859-1 - - - ro - ISO-8859-2 - - - ru - ISO-8859-5 - - - sh - ISO-8859-5 - - - sk - ISO-8859-2 - - - sl - ISO-8859-2 - - - sq - ISO-8859-2 - - - sr - ISO-8859-5 - - - sv - ISO-8859-1 - - - tr - ISO-8859-9 - - - uk - ISO-8859-5 - - - zh - GB2312 - - - zh_TW - Big5 - - - - - - - - - Disable TRACE - / - TRACE - - - - - - Enable everything but TRACE - / - TRACE - - - - - diff --git a/server/-configuration/obsolate/attach.xml b/server/-configuration/obsolate/attach.xml deleted file mode 100644 index 38cacaec..00000000 --- a/server/-configuration/obsolate/attach.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/attachlocal.xml b/server/-configuration/obsolate/attachlocal.xml deleted file mode 100644 index 383545c3..00000000 --- a/server/-configuration/obsolate/attachlocal.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/export.xml b/server/-configuration/obsolate/export.xml deleted file mode 100644 index 022659a7..00000000 --- a/server/-configuration/obsolate/export.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/import.xml b/server/-configuration/obsolate/import.xml deleted file mode 100644 index 6934163a..00000000 --- a/server/-configuration/obsolate/import.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/lowrestranscodemedia.xml b/server/-configuration/obsolate/lowrestranscodemedia.xml deleted file mode 100644 index cbe87b1e..00000000 --- a/server/-configuration/obsolate/lowrestranscodemedia.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/nexio-sync.xml b/server/-configuration/obsolate/nexio-sync.xml deleted file mode 100644 index 49e68fde..00000000 --- a/server/-configuration/obsolate/nexio-sync.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/program1.xml b/server/-configuration/obsolate/program1.xml deleted file mode 100644 index 746e6c03..00000000 --- a/server/-configuration/obsolate/program1.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/template.xml b/server/-configuration/obsolate/template.xml deleted file mode 100644 index c95345f4..00000000 --- a/server/-configuration/obsolate/template.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/teszt.xml b/server/-configuration/obsolate/teszt.xml deleted file mode 100644 index 388af717..00000000 --- a/server/-configuration/obsolate/teszt.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/server/-configuration/obsolate/tsmbackup.xml b/server/-configuration/obsolate/tsmbackup.xml deleted file mode 100644 index 54eee943..00000000 --- a/server/-configuration/obsolate/tsmbackup.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-configuration/obsolate/tsmrestore.xml b/server/-configuration/obsolate/tsmrestore.xml deleted file mode 100644 index 576e1fcf..00000000 --- a/server/-configuration/obsolate/tsmrestore.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-configuration/run-mediacube-server-hirtv.launch b/server/-configuration/run-mediacube-server-hirtv.launch index f92465a3..340263dc 100644 --- a/server/-configuration/run-mediacube-server-hirtv.launch +++ b/server/-configuration/run-mediacube-server-hirtv.launch @@ -22,7 +22,7 @@ - + diff --git a/server/-configuration/run-mediacube-server-mv.launch b/server/-configuration/run-mediacube-server-mv.launch index c56d7cff..eab8ccfd 100644 --- a/server/-configuration/run-mediacube-server-mv.launch +++ b/server/-configuration/run-mediacube-server-mv.launch @@ -19,10 +19,11 @@ - + + - + diff --git a/server/-configuration/run-mediacube-server-test.launch b/server/-configuration/run-mediacube-server-test.launch index ed4ce421..e4391816 100644 --- a/server/-configuration/run-mediacube-server-test.launch +++ b/server/-configuration/run-mediacube-server-test.launch @@ -22,7 +22,7 @@ - + diff --git a/server/-configuration/run-mediacube-server-user.launch b/server/-configuration/run-mediacube-server-user.launch index 4b40742d..96e8844d 100644 --- a/server/-configuration/run-mediacube-server-user.launch +++ b/server/-configuration/run-mediacube-server-user.launch @@ -22,7 +22,7 @@ - + diff --git a/server/-configuration/run-mediacube-server.launch b/server/-configuration/run-mediacube-server.launch index eee244c3..1d0b7bb9 100644 --- a/server/-configuration/run-mediacube-server.launch +++ b/server/-configuration/run-mediacube-server.launch @@ -21,7 +21,7 @@ - + diff --git a/server/-dependencies/jobengine.target b/server/-dependencies/jobengine.target index ba125a69..8a7d24ca 100644 --- a/server/-dependencies/jobengine.target +++ b/server/-dependencies/jobengine.target @@ -1,5 +1,5 @@ - + @@ -8,6 +8,7 @@ + @@ -35,8 +36,6 @@ - - diff --git a/server/-dependencies/pom.xml b/server/-dependencies/pom.xml index c1e79f10..dcaa5f7a 100644 --- a/server/-dependencies/pom.xml +++ b/server/-dependencies/pom.xml @@ -12,8 +12,6 @@ UTF-8 UTF-8 9.3.9.v20160517 - - 1.5.9 3.0.11.Final 2.4.5 @@ -80,20 +78,20 @@ jar - - install4 - package - - install-file - - - libs/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar - org.eclipse.platform - org.eclipse.equinox.launcher - 1.3.200.v20160318-1642 - jar - - + + + + + + + + + + + + + + @@ -106,11 +104,7 @@ - org.eclipse.platform:org.eclipse.equinox.launcher:1.3.200.v20160318-1642 - - - org.apache.felix:org.apache.felix.fileinstall:3.6.8 - true + org.eclipse.platform:org.eclipse.equinox.launcher:1.3.201 net.java.dev.jna:jna:4.2.0 @@ -161,14 +155,17 @@ org.eclipse.jetty:jetty-server:9.3.9.v20160517 - org.apache.felix:org.apache.felix.gogo.shell:0.10.0 + org.apache.felix:org.apache.felix.gogo.command:0.10.0.v201209301215 - org.apache.felix:org.apache.felix.gogo.runtime:0.10.0 + org.apache.felix:org.apache.felix.gogo.shell:0.10.0 - org.apache.felix:org.apache.felix.gogo.command:0.10.0.v201209301215 + org.apache.felix:org.apache.felix.gogo.runtime:0.10.0 + + + commons-io:commons-io:2.2 @@ -221,6 +218,9 @@ com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${fasterxml-jackson-core} + + com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${fasterxml-jackson-core} + com.fasterxml.jackson.datatype:jackson-datatype-joda:${fasterxml-jackson-core} diff --git a/server/-product/log4j2.xml b/server/-product/log4j2.xml deleted file mode 100644 index 6080b766..00000000 --- a/server/-product/log4j2.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - /opt/mediacube/log - ${logPath}/mediacube.log - ${logPath}/$${date:yyyy-MM}/mediacube-%d{MM-dd-yyyy}-%i.log.gz - ${logPath}/markered-mediacube.log - ${logPath}/$${date:yyyy-MM}/markered-mediacube-%d{MM-dd-yyyy}-%i.log.gz - ${logPath}/mediacube-err.log - ${logPath}/$${date:yyyy-MM}/mediacube-err-%d{MM-dd-yyyy}-%i.log.gz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/-product/mediacube.product b/server/-product/mediacube.product index 314bd6eb..56eb52f9 100644 --- a/server/-product/mediacube.product +++ b/server/-product/mediacube.product @@ -1,89 +1,18 @@ - + + /-product/production/configuration/config.ini - -consoleLog -console 5555 - - -Xms512m --Xmx1024m --Dfile.encoding=UTF-8 --agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 --Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory - -#System --Djetty.home=/opt/mediacube/configuration/jetty --Dlog4j.configurationFile=/opt/mediacube/configuration/log4j2.xml --Djobengine.jobsteps.root=/opt/mediacube/configuration/executors --Djobengine.jobtemplates.root=/opt/mediacube/configuration/jobtemplates --Djobengine.jobscheduling.config=/opt/mediacube/configuration/scheduledjobs.json --Dmediacube.auth.location=/opt/mediacube/configuration/mediacube-auth.properties - --Dorg.eclipse.epp.logging.aeri.skipReports=true --Declipse.ignoreApp=true --Dosgi.noShutdown=true --Djobengine.loglevel=INFO --Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml --Djava.io.tmpdir=/opt/mediacube/tmp - - #Database --Djobengine.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.db.user=db2admin --Djobengine.db.password=password --Djobengine.nosql.db.url=jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.nosql.db.user=db2admin --Djobengine.nosql.db.password=password --Djobengine.nosql.db.schema=test - -#Octopus --Djobengine.octopus.api.address=http://10.10.1.11/api/v1 --Djobengine.octopus.api.user=mam --Djobengine.octopus.api.password=napocska --Djobengine.octopus.rundowns.name=rundowns --Djobengine.octopus.storyfolders.name=storyfolders --Djobengine.octopus.stories.name=stories - -#Selenio --Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl --Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium - -#Nexio --Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; --Djobengine.nexio.db.user=sa --Djobengine.nexio.db.password=resolve --Dnexio.useMOSGateway=true --Dnexio.host=10.10.1.55 --Dnexio.disable=false - - -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts - - #Database --Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.db.user=db2admin --Djobengine.db.password=password --Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.nosql.db.user=db2admin --Djobengine.nosql.db.password=password --Djobengine.nosql.db.schema=test - -#Octopus --Djobengine.octopus.api.address=http://10.10.1.11/api/v1 --Djobengine.octopus.api.user=mam --Djobengine.octopus.api.password=napocska - -#Selenio --Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl --Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC_v4.zenium - -#Nexio --Dnexio.host=10.10.1.55 - + + + @@ -100,6 +29,7 @@ + @@ -127,8 +57,6 @@ - - @@ -142,7 +70,6 @@ - @@ -197,4 +124,11 @@ + + + + + + + diff --git a/server/-product/mediacube.sh b/server/-product/mediacube.sh deleted file mode 100644 index 6b2335b0..00000000 --- a/server/-product/mediacube.sh +++ /dev/null @@ -1 +0,0 @@ -./mediacube & \ No newline at end of file diff --git a/server/-product/mediacube1 b/server/-product/mediacube1 deleted file mode 100644 index e3b62eb8..00000000 --- a/server/-product/mediacube1 +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - -consoleLog -console - - #System --Dorg.eclipse.equinox.http.jetty.http.port=8080 --Dorg.eclipse.epp.logging.aeri.skipReports=true --Declipse.ignoreApp=true --Dosgi.noShutdown=true --Djetty.home=configuration/jetty --Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml --Dlog4j.configuration=./configuration/log4j.properties --Dlog4j.configurationFile=./configuration/log4j2.xml - -#JobEngine --Djobengine.loglevel=INFO --Djobengine.jobsteps.root=./configuration/executors --Djobengine.jobtemplates.root=./configuration/templates --Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.db.user=db2admin --Djobengine.db.password=password --Djobengine.octopus.api.address=http://10.10.1.21/api/v1 --Djobengine.octopus.api.user=mam --Djobengine.octopus.api.password=napocska --Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.nosql.db.user=db2admin --Djobengine.nosql.db.password=password --Djobengine.nosql.db.schema=test --Djobengine.rcc.host=localhost --Djobengine.rcc.defaultlowresprofile="MediaCube-H264" --Djobengine.transcoder.source=c:\_Movie\hires\ - - -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts - - - - - - - - - - - - org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/server/-product/mediacube2 b/server/-product/mediacube2 deleted file mode 100644 index e752e35b..00000000 --- a/server/-product/mediacube2 +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - -consoleLog -console - - #System --Dorg.eclipse.equinox.http.jetty.http.port=8080 --Dorg.eclipse.epp.logging.aeri.skipReports=true --Declipse.ignoreApp=true --Dosgi.noShutdown=true --Djetty.home=configuration/jetty --Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml --Dlog4j.configuration=./configuration/log4j.properties --Dlog4j.configurationFile=./configuration/log4j2.xml - -#JobEngine --Djobengine.loglevel=INFO --Djobengine.jobsteps.root=./configuration/executors --Djobengine.jobtemplates.root=./configuration/templates --Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.db.user=db2admin --Djobengine.db.password=password --Djobengine.octopus.api.address=http://10.10.1.21/api/v1 --Djobengine.octopus.api.user=mam --Djobengine.octopus.api.password=napocska --Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true; --Djobengine.nosql.db.user=db2admin --Djobengine.nosql.db.password=password --Djobengine.nosql.db.schema=test --Djobengine.rcc.host=localhost --Djobengine.rcc.defaultlowresprofile="MediaCube-H264" --Djobengine.transcoder.source=c:\_Movie\hires\ - - -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts - - - - - - - - - - - - - - - - org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/server/-product/pom.xml b/server/-product/pom.xml index 211fe116..50348368 100644 --- a/server/-product/pom.xml +++ b/server/-product/pom.xml @@ -33,227 +33,9 @@ materialize-products - - - - - - - - org.apache.maven.plugins - maven-resources-plugin - 2.7 - - - copy-resources-1-lnx - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration - - - ${basedir}/../-configuration - - dsm.opt - - - - ${basedir}/../user.jobengine.executors/config - - scheduledjobs.json - - - - ${basedir} - - log4j2.xml - - - - ${basedir}/../-configuration - - mediacube-auth.properties - - - - - - - copy-resources-2-lnx - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration/executors - - - ${basedir}/../user.jobengine.executors/config - - config.xml - - - - - - - copy-resources-3-lnx - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration/executors - - - ${basedir}/../user.jobengine.executors/bin/user/jobengine/server/steps - - - - - - copy-resources-4-lnx - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration/jobtemplates - - - ${basedir}/../user.jobengine.executors/jobtemplates - - - - - - copy-resources-5-lnx - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration/jetty/etc - - - ${basedir}/../-configuration/jetty-deploy/etc - - - - - - copy-resources-6-lnx - install - - copy-resources - - - ${project.build.directory}/products/MediaCube/linux/gtk/x86_64 - - - ${basedir}/../-configuration - - start-mediacube.sh - stop-mediacube.sh - - - - - - - - - - - - full - - - - org.codehaus.mojo - exec-maven-plugin - 1.5.0 - - - remote-deploy - deploy - - exec - - - ${project.build.directory} - winscp.com - - /command - "echo STARTING DEPLOY TO: ${remote.address}" - "open ${remote.address} -hostkey=""${remote.hostkey}""" - "call rm -rf ${remote.location}" - "call mkdir ${remote.location}" - "lcd ${local.location}" - "cd ${remote.location}" - "synchronize remote" - "mkdir log" - "mkdir tmp" - "call chmod +w tmp" - "call chmod +x mediacube" - "call chmod +x start-mediacube.sh" - "call chmod +x stop-mediacube.sh" - "exit" - - - - - - - - - - plugins - - - - org.codehaus.mojo - exec-maven-plugin - 1.5.0 - - - remote-deploy - deploy - - exec - - - ${project.build.directory} - winscp.com - - /command - "echo STARTING DEPLOY TO: ${remote.address}" - "open ${remote.address} -hostkey=""${remote.hostkey}""" - "lcd ${local.location}/plugins" - "cd ${remote.location}/plugins" - "synchronize remote" - "lcd ${local.location}/configuration" - "cd ${remote.location}/configuration" - "synchronize remote -filemask=config.ini" - "exit" - - - - - - - - - - - - ${project.build.directory}/products/MediaCube/linux/gtk/x86_64 - diff --git a/server/-product/pom.xml.210206 b/server/-product/pom.xml.210206 new file mode 100644 index 00000000..211fe116 --- /dev/null +++ b/server/-product/pom.xml.210206 @@ -0,0 +1,259 @@ + + + 4.0.0 + + ../-modules + user.jobengine + MediaCube + 1.0.0 + + + user.jobengine.product + eclipse-repository + + + + + org.eclipse.tycho + tycho-p2-repository-plugin + ${tycho.version} + + true + + + + org.eclipse.tycho + tycho-p2-director-plugin + ${tycho.version} + + + materialize-products + + materialize-products + + + + + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.7 + + + copy-resources-1-lnx + install + + copy-resources + + + ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration + + + ${basedir}/../-configuration + + dsm.opt + + + + ${basedir}/../user.jobengine.executors/config + + scheduledjobs.json + + + + ${basedir} + + log4j2.xml + + + + ${basedir}/../-configuration + + mediacube-auth.properties + + + + + + + copy-resources-2-lnx + install + + copy-resources + + + ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration/executors + + + ${basedir}/../user.jobengine.executors/config + + config.xml + + + + + + + copy-resources-3-lnx + install + + copy-resources + + + ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration/executors + + + ${basedir}/../user.jobengine.executors/bin/user/jobengine/server/steps + + + + + + copy-resources-4-lnx + install + + copy-resources + + + ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration/jobtemplates + + + ${basedir}/../user.jobengine.executors/jobtemplates + + + + + + copy-resources-5-lnx + install + + copy-resources + + + ${project.build.directory}/products/MediaCube/linux/gtk/x86_64/configuration/jetty/etc + + + ${basedir}/../-configuration/jetty-deploy/etc + + + + + + copy-resources-6-lnx + install + + copy-resources + + + ${project.build.directory}/products/MediaCube/linux/gtk/x86_64 + + + ${basedir}/../-configuration + + start-mediacube.sh + stop-mediacube.sh + + + + + + + + + + + + + + + full + + + + org.codehaus.mojo + exec-maven-plugin + 1.5.0 + + + remote-deploy + deploy + + exec + + + ${project.build.directory} + winscp.com + + /command + "echo STARTING DEPLOY TO: ${remote.address}" + "open ${remote.address} -hostkey=""${remote.hostkey}""" + "call rm -rf ${remote.location}" + "call mkdir ${remote.location}" + "lcd ${local.location}" + "cd ${remote.location}" + "synchronize remote" + "mkdir log" + "mkdir tmp" + "call chmod +w tmp" + "call chmod +x mediacube" + "call chmod +x start-mediacube.sh" + "call chmod +x stop-mediacube.sh" + "exit" + + + + + + + + + + plugins + + + + org.codehaus.mojo + exec-maven-plugin + 1.5.0 + + + remote-deploy + deploy + + exec + + + ${project.build.directory} + winscp.com + + /command + "echo STARTING DEPLOY TO: ${remote.address}" + "open ${remote.address} -hostkey=""${remote.hostkey}""" + "lcd ${local.location}/plugins" + "cd ${remote.location}/plugins" + "synchronize remote" + "lcd ${local.location}/configuration" + "cd ${remote.location}/configuration" + "synchronize remote -filemask=config.ini" + "exit" + + + + + + + + + + + + ${project.build.directory}/products/MediaCube/linux/gtk/x86_64 + + diff --git a/server/-product/production/HIRTV/configuration/config.ini b/server/-product/production/HIRTV/configuration/config.ini new file mode 100644 index 00000000..58957707 --- /dev/null +++ b/server/-product/production/HIRTV/configuration/config.ini @@ -0,0 +1,93 @@ +#2021-02-06 +osgi.bundles=reference\:file\:cglib_2.2.2.jar@4,\ +reference\:file\:com.fasterxml.jackson.core.jackson-annotations_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.core.jackson-core_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.core.jackson-databind_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.datatype.jackson-datatype-joda_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-base_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.dataformat.jackson-dataformat-yaml_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.module.jackson-module-jaxb-annotations_2.4.5.jar@4,\ +reference\:file\:com.ibm.db2.jcc_1.4.0.jar@4,\ +reference\:file\:com.ibm.nosql_4.19.26.jar@4,\ +reference\:file\:com.microsoft.sqlserver.sqljdbc_6.0.8112.100.jar@4,\ +reference\:file\:com.sun.jna_4.2.0.jar@4,\ +reference\:file\:groovy_3.0.3.jar@4,\ +reference\:file\:io.humble.video-arch-x86_64-pc-linux-gnu6_0.2.1.jar@4,\ +reference\:file\:io.humble.video-arch-x86_64-w64-mingw32_0.2.1.jar@4,\ +reference\:file\:io.humble.video-noarch_0.2.1.jar@4,\ +reference\:file\:javax.annotation-api_1.2.0.jar@4,\ +reference\:file\:javax.mail_1.5.0.b01.jar@4,\ +reference\:file\:javax.servlet-api_3.1.0.jar@4,\ +reference\:file\:javax.ws.rs-api_2.0.1.jar@4,\ +reference\:file\:jcifs_1.3.17.jar@4,\ +reference\:file\:joda-time_2.2.0.jar@4,\ +reference\:file\:junit_4.12.0.jar@4,\ +reference\:file\:org.apache.aries.spifly.dynamic.bundle_1.0.8.jar@4,\ +reference\:file\:org.apache.aries.util_1.0.0.jar@4,\ +reference\:file\:org.apache.commons.beanutils_1.8.3.jar@4,\ +reference\:file\:org.apache.commons.codec_1.6.0.v201305230611.jar@4,\ +reference\:file\:org.apache.commons.collections_3.2.2.v201511171945.jar@4,\ +reference\:file\:org.apache.commons.digester_3.2.0.jar@4,\ +reference\:file\:org.apache.commons.io_2.6.0.jar@4,\ +reference\:file\:org.apache.commons.lang_2.6.0.v201404270220.jar@4,\ +reference\:file\:org.apache.commons.net_3.6.0.jar@4,\ +reference\:file\:org.apache.felix.gogo.command_0.10.0.jar@4,\ +reference\:file\:org.apache.felix.gogo.runtime_0.10.0.v201209301036.jar@4,\ +reference\:file\:org.apache.felix.gogo.shell_0.10.0.v201212101605.jar@4,\ +reference\:file\:org.apache.httpcomponents.httpclient_4.5.2.v20161115-1643.jar@4,\ +reference\:file\:org.apache.httpcomponents.httpcore_4.4.4.v20161115-1643.jar@4,\ +reference\:file\:org.apache.logging.log4j.api_2.8.2.jar@1\:start,\ +reference\:file\:org.apache.logging.log4j.core_2.8.2.jar@4,\ +reference\:file\:org.apache.logging.log4j.slf4j-impl_2.8.2.jar@4,\ +reference\:file\:org.apache.servicemix.bundles.quartz_2.3.0.2.jar@4,\ +reference\:file\:org.eclipse.equinox.common_3.8.0.v20160509-1230.jar@2\:start,\ +reference\:file\:org.eclipse.equinox.console_1.1.200.v20150929-1405.jar@4,\ +reference\:file\:org.eclipse.equinox.ds_1.4.400.v20160226-2036.jar@1\:start,\ +reference\:file\:org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar@4,\ +reference\:file\:org.eclipse.equinox.util_1.0.500.v20130404-1337.jar@4,\ +reference\:file\:org.eclipse.jetty.client_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.deploy_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.http_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.io_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.osgi.boot_9.3.9.v20160517.jar@4\:start,\ +reference\:file\:org.eclipse.jetty.schemas_3.1.0.jar@4,\ +reference\:file\:org.eclipse.jetty.security_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.server_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.servlet_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.util_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.webapp_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.api_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.client_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.common_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.server_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.servlet_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.xml_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.osgi.services_3.2.100.v20100503.jar@4,\ +reference\:file\:org.hamcrest.core_1.3.0.v201303031735.jar@4,\ +reference\:file\:org.jboss.resteasy.client_3.0.11.Final.jar@4,\ +reference\:file\:org.jboss.resteasy.jaxb-provider_3.0.11.Final.jar@4,\ +reference\:file\:org.jboss.resteasy.jaxrs_3.0.11.Final.jar@4,\ +reference\:file\:org.jboss.resteasy.jaxrs-api_3.0.11.Final.jar@4,\ +reference\:file\:org.jmock_2.6.0.jar@4,\ +reference\:file\:org.jmock.junit4_2.6.0.jar@4,\ +reference\:file\:org.mybatis.mybatis_3.5.2.jar@4,\ +reference\:file\:org.objectweb.asm_5.1.0.v20160914-0701.jar@4,\ +reference\:file\:org.objectweb.asm.commons_5.0.1.v201404251740.jar@4,\ +reference\:file\:org.objectweb.asm.tree_5.1.0.v20160914-0701.jar@4,\ +reference\:file\:org.omnifaces_3.4.1.jar@4,\ +reference\:file\:org.slf4j.jcl_1.7.2.v20130115-1340.jar@4,\ +reference\:file\:slf4j.api_1.7.24.jar@4,\ +reference\:file\:slf4j.simple_1.7.2.jar@4,\ +reference\:file\:user.commons.log4j2_1.0.0.jar@4,\ +reference\:file\:user.commons.zk_8.0.3.jar@4,\ +reference\:file\:user.jobengine.osgi.commons_1.0.0.jar@4\:start,\ +reference\:file\:user.jobengine.osgi.db_1.0.0.jar@4,\ +reference\:file\:user.jobengine.osgi.server_1.0.0.jar@4,\ +reference\:file\:user.jobengine.osgi.services_1.0.0.jar@4,\ +reference\:file\:user.mediacube.gui_1.0.0.jar@4,\ +reference\:file\:user.mediacube.metadata_1.0.0.jar@4,\ +reference\:file\:user.tsm.client_1.2.0.jar@4 +equinox.use.ds=true +osgi.bundles.defaultStartLevel=4 +osgi.framework=file\:plugins/org.eclipse.osgi_3.11.2.v20161107-1947.jar diff --git a/server/-configuration/jetty/etc/user-jetty-http.xml b/server/-product/production/HIRTV/configuration/jetty/jetty-http.xml similarity index 100% rename from server/-configuration/jetty/etc/user-jetty-http.xml rename to server/-product/production/HIRTV/configuration/jetty/jetty-http.xml diff --git a/server/-configuration/jetty-deploy/etc/user-jetty-https.xml b/server/-product/production/HIRTV/configuration/jetty/jetty-https.xml similarity index 100% rename from server/-configuration/jetty-deploy/etc/user-jetty-https.xml rename to server/-product/production/HIRTV/configuration/jetty/jetty-https.xml diff --git a/server/-configuration/jetty-deploy/etc/user-jetty-ssl-context.xml b/server/-product/production/HIRTV/configuration/jetty/jetty-ssl-context.xml similarity index 95% rename from server/-configuration/jetty-deploy/etc/user-jetty-ssl-context.xml rename to server/-product/production/HIRTV/configuration/jetty/jetty-ssl-context.xml index 26309180..e1edaf05 100644 --- a/server/-configuration/jetty-deploy/etc/user-jetty-ssl-context.xml +++ b/server/-product/production/HIRTV/configuration/jetty/jetty-ssl-context.xml @@ -11,12 +11,12 @@ --> - / + / - / + / diff --git a/server/-configuration/jetty/etc/user-jetty-ssl.xml b/server/-product/production/HIRTV/configuration/jetty/jetty-ssl.xml similarity index 100% rename from server/-configuration/jetty/etc/user-jetty-ssl.xml rename to server/-product/production/HIRTV/configuration/jetty/jetty-ssl.xml diff --git a/server/-configuration/jetty-deploy/etc/user-jetty.xml b/server/-product/production/HIRTV/configuration/jetty/jetty.xml similarity index 100% rename from server/-configuration/jetty-deploy/etc/user-jetty.xml rename to server/-product/production/HIRTV/configuration/jetty/jetty.xml diff --git a/server/-configuration/jetty-deploy/etc/keystore b/server/-product/production/HIRTV/configuration/jetty/keystore similarity index 100% rename from server/-configuration/jetty-deploy/etc/keystore rename to server/-product/production/HIRTV/configuration/jetty/keystore diff --git a/server/-configuration/jetty-deploy/etc/localhost.jks b/server/-product/production/HIRTV/configuration/jetty/localhost.jks similarity index 100% rename from server/-configuration/jetty-deploy/etc/localhost.jks rename to server/-product/production/HIRTV/configuration/jetty/localhost.jks diff --git a/server/user.jobengine.executors/jobtemplates/archive-limited.xml b/server/-product/production/HIRTV/jobs/templates/archive-limited.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/archive-limited.xml rename to server/-product/production/HIRTV/jobs/templates/archive-limited.xml diff --git a/server/user.jobengine.executors/jobtemplates/archive-material.xml b/server/-product/production/HIRTV/jobs/templates/archive-material.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/archive-material.xml rename to server/-product/production/HIRTV/jobs/templates/archive-material.xml diff --git a/server/user.jobengine.executors/jobtemplates/archive-ondemand.xml b/server/-product/production/HIRTV/jobs/templates/archive-ondemand.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/archive-ondemand.xml rename to server/-product/production/HIRTV/jobs/templates/archive-ondemand.xml diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-recursive.xml b/server/-product/production/HIRTV/jobs/templates/archive-recursive.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/archive-recursive.xml rename to server/-product/production/HIRTV/jobs/templates/archive-recursive.xml diff --git a/server/user.jobengine.executors/jobtemplates/batch-retrieve-ondemand.xml b/server/-product/production/HIRTV/jobs/templates/batch-retrieve-ondemand.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/batch-retrieve-ondemand.xml rename to server/-product/production/HIRTV/jobs/templates/batch-retrieve-ondemand.xml diff --git a/server/user.jobengine.executors/jobtemplates/cancelable.xml b/server/-product/production/HIRTV/jobs/templates/cancelable.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/cancelable.xml rename to server/-product/production/HIRTV/jobs/templates/cancelable.xml diff --git a/server/user.jobengine.executors/jobtemplates/common-copy.xml b/server/-product/production/HIRTV/jobs/templates/common-copy.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/common-copy.xml rename to server/-product/production/HIRTV/jobs/templates/common-copy.xml diff --git a/server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-materials.xml b/server/-product/production/HIRTV/jobs/templates/copyforarchive-nexio-materials.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-materials.xml rename to server/-product/production/HIRTV/jobs/templates/copyforarchive-nexio-materials.xml diff --git a/server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-recordings.xml b/server/-product/production/HIRTV/jobs/templates/copyforarchive-nexio-recordings.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/copyforarchive-nexio-recordings.xml rename to server/-product/production/HIRTV/jobs/templates/copyforarchive-nexio-recordings.xml diff --git a/server/user.jobengine.executors/jobtemplates/create-lowres-ondemand.xml b/server/-product/production/HIRTV/jobs/templates/create-lowres-ondemand.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/create-lowres-ondemand.xml rename to server/-product/production/HIRTV/jobs/templates/create-lowres-ondemand.xml diff --git a/server/user.jobengine.executors/jobtemplates/delete-materials.xml b/server/-product/production/HIRTV/jobs/templates/delete-materials.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/delete-materials.xml rename to server/-product/production/HIRTV/jobs/templates/delete-materials.xml diff --git a/server/user.jobengine.executors/jobtemplates/delete-nexio-materials.xml b/server/-product/production/HIRTV/jobs/templates/delete-nexio-materials.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/delete-nexio-materials.xml rename to server/-product/production/HIRTV/jobs/templates/delete-nexio-materials.xml diff --git a/server/user.jobengine.executors/jobtemplates/delete-promo-materials.xml b/server/-product/production/HIRTV/jobs/templates/delete-promo-materials.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/delete-promo-materials.xml rename to server/-product/production/HIRTV/jobs/templates/delete-promo-materials.xml diff --git a/server/user.jobengine.executors/jobtemplates/duplicate-remover.xml b/server/-product/production/HIRTV/jobs/templates/duplicate-remover.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/duplicate-remover.xml rename to server/-product/production/HIRTV/jobs/templates/duplicate-remover.xml diff --git a/server/user.jobengine.executors/jobtemplates/fake-concurrent.xml b/server/-product/production/HIRTV/jobs/templates/fake-concurrent.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/fake-concurrent.xml rename to server/-product/production/HIRTV/jobs/templates/fake-concurrent.xml diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/fake-noparams.xml b/server/-product/production/HIRTV/jobs/templates/fake-noparams.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/fake-noparams.xml rename to server/-product/production/HIRTV/jobs/templates/fake-noparams.xml diff --git a/server/user.jobengine.executors/jobtemplates/fake-spawn.xml b/server/-product/production/HIRTV/jobs/templates/fake-spawn.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/fake-spawn.xml rename to server/-product/production/HIRTV/jobs/templates/fake-spawn.xml diff --git a/server/user.jobengine.executors/jobtemplates/fake.xml b/server/-product/production/HIRTV/jobs/templates/fake.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/fake.xml rename to server/-product/production/HIRTV/jobs/templates/fake.xml diff --git a/server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml b/server/-product/production/HIRTV/jobs/templates/fork-validate-and-archive.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml rename to server/-product/production/HIRTV/jobs/templates/fork-validate-and-archive.xml diff --git a/server/user.jobengine.executors/jobtemplates/fork-validate-and-restore.xml b/server/-product/production/HIRTV/jobs/templates/fork-validate-and-restore.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/fork-validate-and-restore.xml rename to server/-product/production/HIRTV/jobs/templates/fork-validate-and-restore.xml diff --git a/server/user.jobengine.executors/jobtemplates/generic-archive-checker.xml b/server/-product/production/HIRTV/jobs/templates/generic-archive-checker.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/generic-archive-checker.xml rename to server/-product/production/HIRTV/jobs/templates/generic-archive-checker.xml diff --git a/server/user.jobengine.executors/jobtemplates/harris-missingmaterial-checker.xml b/server/-product/production/HIRTV/jobs/templates/harris-missingmaterial-checker.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/harris-missingmaterial-checker.xml rename to server/-product/production/HIRTV/jobs/templates/harris-missingmaterial-checker.xml diff --git a/server/user.jobengine.executors/jobtemplates/import-statistics.xml b/server/-product/production/HIRTV/jobs/templates/import-statistics.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/import-statistics.xml rename to server/-product/production/HIRTV/jobs/templates/import-statistics.xml diff --git a/server/user.jobengine.executors/jobtemplates/migrate-hsm.xml b/server/-product/production/HIRTV/jobs/templates/migrate-hsm.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/migrate-hsm.xml rename to server/-product/production/HIRTV/jobs/templates/migrate-hsm.xml diff --git a/server/user.jobengine.executors/jobtemplates/nexio-archive-checker.xml b/server/-product/production/HIRTV/jobs/templates/nexio-archive-checker.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/nexio-archive-checker.xml rename to server/-product/production/HIRTV/jobs/templates/nexio-archive-checker.xml diff --git a/server/user.jobengine.executors/jobtemplates/peablebeach-missingmaterial-checker.xml b/server/-product/production/HIRTV/jobs/templates/peablebeach-missingmaterial-checker.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/peablebeach-missingmaterial-checker.xml rename to server/-product/production/HIRTV/jobs/templates/peablebeach-missingmaterial-checker.xml diff --git a/server/user.jobengine.executors/jobtemplates/register-user-restore.xml b/server/-product/production/HIRTV/jobs/templates/register-user-restore.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/register-user-restore.xml rename to server/-product/production/HIRTV/jobs/templates/register-user-restore.xml diff --git a/server/user.jobengine.executors/jobtemplates/register-vod-restore.xml b/server/-product/production/HIRTV/jobs/templates/register-vod-restore.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/register-vod-restore.xml rename to server/-product/production/HIRTV/jobs/templates/register-vod-restore.xml diff --git a/server/user.jobengine.executors/jobtemplates/retrieve-material.xml b/server/-product/production/HIRTV/jobs/templates/retrieve-material.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/retrieve-material.xml rename to server/-product/production/HIRTV/jobs/templates/retrieve-material.xml diff --git a/server/user.jobengine.executors/jobtemplates/retrieve-morpheus-missing-materials.xml b/server/-product/production/HIRTV/jobs/templates/retrieve-morpheus-missing-materials.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/retrieve-morpheus-missing-materials.xml rename to server/-product/production/HIRTV/jobs/templates/retrieve-morpheus-missing-materials.xml diff --git a/server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml b/server/-product/production/HIRTV/jobs/templates/retrieve-ondemand.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/retrieve-ondemand.xml rename to server/-product/production/HIRTV/jobs/templates/retrieve-ondemand.xml diff --git a/server/user.jobengine.executors/jobtemplates/retrieve-traffic-missing-materials.xml b/server/-product/production/HIRTV/jobs/templates/retrieve-traffic-missing-materials.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/retrieve-traffic-missing-materials.xml rename to server/-product/production/HIRTV/jobs/templates/retrieve-traffic-missing-materials.xml diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/retrieve.xml b/server/-product/production/HIRTV/jobs/templates/retrieve.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/retrieve.xml rename to server/-product/production/HIRTV/jobs/templates/retrieve.xml diff --git a/server/user.jobengine.executors/jobtemplates/submit-child.xml b/server/-product/production/HIRTV/jobs/templates/submit-child.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/submit-child.xml rename to server/-product/production/HIRTV/jobs/templates/submit-child.xml diff --git a/server/user.jobengine.executors/jobtemplates/sync-octopus.xml b/server/-product/production/HIRTV/jobs/templates/sync-octopus.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/sync-octopus.xml rename to server/-product/production/HIRTV/jobs/templates/sync-octopus.xml diff --git a/server/user.jobengine.executors/jobtemplates/sync-subtitles.xml b/server/-product/production/HIRTV/jobs/templates/sync-subtitles.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/sync-subtitles.xml rename to server/-product/production/HIRTV/jobs/templates/sync-subtitles.xml diff --git a/server/user.jobengine.executors/jobtemplates/sys-check-lowres-integrity.xml b/server/-product/production/HIRTV/jobs/templates/sys-check-lowres-integrity.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/sys-check-lowres-integrity.xml rename to server/-product/production/HIRTV/jobs/templates/sys-check-lowres-integrity.xml diff --git a/server/user.jobengine.executors/jobtemplates/sys-import-morpheus-missing-materials.xml b/server/-product/production/HIRTV/jobs/templates/sys-import-morpheus-missing-materials.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/sys-import-morpheus-missing-materials.xml rename to server/-product/production/HIRTV/jobs/templates/sys-import-morpheus-missing-materials.xml diff --git a/server/user.jobengine.executors/jobtemplates/sys-recreate-length.xml b/server/-product/production/HIRTV/jobs/templates/sys-recreate-length.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/sys-recreate-length.xml rename to server/-product/production/HIRTV/jobs/templates/sys-recreate-length.xml diff --git a/server/user.jobengine.executors/jobtemplates/sys-recreate-lowres.xml b/server/-product/production/HIRTV/jobs/templates/sys-recreate-lowres.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/sys-recreate-lowres.xml rename to server/-product/production/HIRTV/jobs/templates/sys-recreate-lowres.xml diff --git a/server/user.jobengine.executors/jobtemplates/sys-retrieve-missing-material.xml b/server/-product/production/HIRTV/jobs/templates/sys-retrieve-missing-material.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/sys-retrieve-missing-material.xml rename to server/-product/production/HIRTV/jobs/templates/sys-retrieve-missing-material.xml diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/test-fork-cancelable.xml b/server/-product/production/HIRTV/jobs/templates/test-fork-cancelable.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/test-fork-cancelable.xml rename to server/-product/production/HIRTV/jobs/templates/test-fork-cancelable.xml diff --git a/server/user.jobengine.executors/jobtemplates/test-multiparam.xml b/server/-product/production/HIRTV/jobs/templates/test-multiparam.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/test-multiparam.xml rename to server/-product/production/HIRTV/jobs/templates/test-multiparam.xml diff --git a/server/user.jobengine.executors/jobtemplates/validate-and-archive.xml b/server/-product/production/HIRTV/jobs/templates/validate-and-archive.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/validate-and-archive.xml rename to server/-product/production/HIRTV/jobs/templates/validate-and-archive.xml diff --git a/server/user.jobengine.executors/jobtemplates/validate-and-restore.xml b/server/-product/production/HIRTV/jobs/templates/validate-and-restore.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/validate-and-restore.xml rename to server/-product/production/HIRTV/jobs/templates/validate-and-restore.xml diff --git a/server/user.jobengine.executors/jobtemplates/validate-dir-mxf.xml b/server/-product/production/HIRTV/jobs/templates/validate-dir-mxf.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/validate-dir-mxf.xml rename to server/-product/production/HIRTV/jobs/templates/validate-dir-mxf.xml diff --git a/server/user.jobengine.executors/jobtemplates/worker-keepalive.xml b/server/-product/production/HIRTV/jobs/templates/worker-keepalive.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/worker-keepalive.xml rename to server/-product/production/HIRTV/jobs/templates/worker-keepalive.xml diff --git a/server/-product/production/HIRTV/mediacube.bat b/server/-product/production/HIRTV/mediacube.bat new file mode 100644 index 00000000..5e00b128 --- /dev/null +++ b/server/-product/production/HIRTV/mediacube.bat @@ -0,0 +1,40 @@ +:-Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,etc/user-jetty-http.xml,etc/user-jetty-https.xml ^ + + +@echo off +if exist tmp rmdir tmp /s /q +mkdir tmp +java ^ +-Dclean ^ +-Dorg.eclipse.epp.logging.aeri.skipReports=true ^ +-Declipse.ignoreApp=true ^ +-Dosgi.noShutdown=true ^ +-Dlog4j.configurationFile=configuration/log4j2.xml ^ +-Djobengine.maestro.config=configuration/maestro.json ^ +-Djobengine.mediacube.config=configuration/mediacube.json ^ +-Djetty.home=configuration/jetty ^ +-Djetty.etc.config.urls=jetty.xml,jetty-ssl.xml,jetty-ssl-context.xml,jetty-http.xml,jetty-https.xml ^ +-Djava.io.tmpdir=tmp ^ +-Djobengine.jobsteps.root=jobs/executors ^ +-Djobengine.jobtemplates.root=jobs/templates ^ +-Djobengine.jobscheduling.config=jobs/schedules.json ^ +-Djobengine.jobsteps.config=jobs/executors.xml ^ +-Djobengine.jobsteps.groovy.root=jobs/steps ^ +-Djobengine.db.url=jdbc:db2://10.11.1.90:50000/mc ^ +-Djobengine.db.user=db2admin ^ +-Djobengine.db.password=password ^ +-Djobengine.db.loginTimeout=3 ^ +-Djobengine.nosql.db.url=jdbc:db2://10.11.1.90:50000/mc ^ +-Djobengine.nosql.db.user=db2admin ^ +-Djobengine.nosql.db.password=password ^ +-Djobengine.nosql.db.schema=test ^ +-Djobengine.nosql.db.loginTimeout=3 ^ +-Dnexio.disable=true ^ +-Djobengine.scheduledexecution.disabled=true ^ +-Djobengine.randomize.archives=false ^ +-Dgui.jobs.alternate.selector=true ^ +-Dmediacube.simplesearch=true ^ +-jar plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar ^ +-Xms512m ^ +-Xmx1024m ^ +-console 5555 diff --git a/server/-product/production/MEDIAVIVANTIS/configuration/application.yaml b/server/-product/production/MEDIAVIVANTIS/configuration/application.yaml new file mode 100644 index 00000000..c584e2a4 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/configuration/application.yaml @@ -0,0 +1,63 @@ +datasource: + mediacube: + url: jdbc:db2://10.11.1.90:50000/mc + user: db2admin + password: password + external-indexer: false + simple-search: true + login-timeout: 3 + pool-size: 10 + mediacube-nosql: + url: jdbc:db2://10.11.1.90:50000/mc + user: db2admin + password: password + schema: test + login-timeout: 3 + nexio: + url: jdbc:db2://10.11.1.90:50000/mc + user: db2admin + password: password + hsm: + url: jdbc:db2://10.11.1.89:51500/tsmdb1 + user: tsminst1 + password: tsminst1 + planair: + url: jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; + user: MAM + password: VDani +services: + ffmpeg: + execurable-location: /opt/ffmpeg/ffmpeg + peablebeach: + template-root: configuration/soap + mediacube: + proxy-root: /opt + nexio: + host: 10.10.1.55 + collection-name: nexioclips + use-mos-gateway: true + disabled: true + octopus: + api: + address: http://10.10.1.11/api/v1 + user: mama + password: napocska + rundowns-collection-name: rundowns + stories-collection-name: stories + folders-collection-name: storyfolders +jobs: + nexio-track: false + randomize-archives: false + scheduled-execution: false + validate-transfers: false + copy-buffer-size: 32768 + scheduled-execution-disabled: true + randomize-archives: false +tsm: + randomize-archives: false + delimiter: / + node-name: JOBENGINE + fs-name: /JOBENGINE + alternate-fs-name: /JOBENGINE + hl-name: /JOBENGINE + \ No newline at end of file diff --git a/server/-product/production/MEDIAVIVANTIS/configuration/config.ini b/server/-product/production/MEDIAVIVANTIS/configuration/config.ini new file mode 100644 index 00000000..58957707 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/configuration/config.ini @@ -0,0 +1,93 @@ +#2021-02-06 +osgi.bundles=reference\:file\:cglib_2.2.2.jar@4,\ +reference\:file\:com.fasterxml.jackson.core.jackson-annotations_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.core.jackson-core_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.core.jackson-databind_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.datatype.jackson-datatype-joda_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-base_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.dataformat.jackson-dataformat-yaml_2.4.5.jar@4,\ +reference\:file\:com.fasterxml.jackson.module.jackson-module-jaxb-annotations_2.4.5.jar@4,\ +reference\:file\:com.ibm.db2.jcc_1.4.0.jar@4,\ +reference\:file\:com.ibm.nosql_4.19.26.jar@4,\ +reference\:file\:com.microsoft.sqlserver.sqljdbc_6.0.8112.100.jar@4,\ +reference\:file\:com.sun.jna_4.2.0.jar@4,\ +reference\:file\:groovy_3.0.3.jar@4,\ +reference\:file\:io.humble.video-arch-x86_64-pc-linux-gnu6_0.2.1.jar@4,\ +reference\:file\:io.humble.video-arch-x86_64-w64-mingw32_0.2.1.jar@4,\ +reference\:file\:io.humble.video-noarch_0.2.1.jar@4,\ +reference\:file\:javax.annotation-api_1.2.0.jar@4,\ +reference\:file\:javax.mail_1.5.0.b01.jar@4,\ +reference\:file\:javax.servlet-api_3.1.0.jar@4,\ +reference\:file\:javax.ws.rs-api_2.0.1.jar@4,\ +reference\:file\:jcifs_1.3.17.jar@4,\ +reference\:file\:joda-time_2.2.0.jar@4,\ +reference\:file\:junit_4.12.0.jar@4,\ +reference\:file\:org.apache.aries.spifly.dynamic.bundle_1.0.8.jar@4,\ +reference\:file\:org.apache.aries.util_1.0.0.jar@4,\ +reference\:file\:org.apache.commons.beanutils_1.8.3.jar@4,\ +reference\:file\:org.apache.commons.codec_1.6.0.v201305230611.jar@4,\ +reference\:file\:org.apache.commons.collections_3.2.2.v201511171945.jar@4,\ +reference\:file\:org.apache.commons.digester_3.2.0.jar@4,\ +reference\:file\:org.apache.commons.io_2.6.0.jar@4,\ +reference\:file\:org.apache.commons.lang_2.6.0.v201404270220.jar@4,\ +reference\:file\:org.apache.commons.net_3.6.0.jar@4,\ +reference\:file\:org.apache.felix.gogo.command_0.10.0.jar@4,\ +reference\:file\:org.apache.felix.gogo.runtime_0.10.0.v201209301036.jar@4,\ +reference\:file\:org.apache.felix.gogo.shell_0.10.0.v201212101605.jar@4,\ +reference\:file\:org.apache.httpcomponents.httpclient_4.5.2.v20161115-1643.jar@4,\ +reference\:file\:org.apache.httpcomponents.httpcore_4.4.4.v20161115-1643.jar@4,\ +reference\:file\:org.apache.logging.log4j.api_2.8.2.jar@1\:start,\ +reference\:file\:org.apache.logging.log4j.core_2.8.2.jar@4,\ +reference\:file\:org.apache.logging.log4j.slf4j-impl_2.8.2.jar@4,\ +reference\:file\:org.apache.servicemix.bundles.quartz_2.3.0.2.jar@4,\ +reference\:file\:org.eclipse.equinox.common_3.8.0.v20160509-1230.jar@2\:start,\ +reference\:file\:org.eclipse.equinox.console_1.1.200.v20150929-1405.jar@4,\ +reference\:file\:org.eclipse.equinox.ds_1.4.400.v20160226-2036.jar@1\:start,\ +reference\:file\:org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar@4,\ +reference\:file\:org.eclipse.equinox.util_1.0.500.v20130404-1337.jar@4,\ +reference\:file\:org.eclipse.jetty.client_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.deploy_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.http_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.io_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.osgi.boot_9.3.9.v20160517.jar@4\:start,\ +reference\:file\:org.eclipse.jetty.schemas_3.1.0.jar@4,\ +reference\:file\:org.eclipse.jetty.security_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.server_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.servlet_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.util_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.webapp_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.api_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.client_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.common_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.server_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.websocket.servlet_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.jetty.xml_9.3.9.v20160517.jar@4,\ +reference\:file\:org.eclipse.osgi.services_3.2.100.v20100503.jar@4,\ +reference\:file\:org.hamcrest.core_1.3.0.v201303031735.jar@4,\ +reference\:file\:org.jboss.resteasy.client_3.0.11.Final.jar@4,\ +reference\:file\:org.jboss.resteasy.jaxb-provider_3.0.11.Final.jar@4,\ +reference\:file\:org.jboss.resteasy.jaxrs_3.0.11.Final.jar@4,\ +reference\:file\:org.jboss.resteasy.jaxrs-api_3.0.11.Final.jar@4,\ +reference\:file\:org.jmock_2.6.0.jar@4,\ +reference\:file\:org.jmock.junit4_2.6.0.jar@4,\ +reference\:file\:org.mybatis.mybatis_3.5.2.jar@4,\ +reference\:file\:org.objectweb.asm_5.1.0.v20160914-0701.jar@4,\ +reference\:file\:org.objectweb.asm.commons_5.0.1.v201404251740.jar@4,\ +reference\:file\:org.objectweb.asm.tree_5.1.0.v20160914-0701.jar@4,\ +reference\:file\:org.omnifaces_3.4.1.jar@4,\ +reference\:file\:org.slf4j.jcl_1.7.2.v20130115-1340.jar@4,\ +reference\:file\:slf4j.api_1.7.24.jar@4,\ +reference\:file\:slf4j.simple_1.7.2.jar@4,\ +reference\:file\:user.commons.log4j2_1.0.0.jar@4,\ +reference\:file\:user.commons.zk_8.0.3.jar@4,\ +reference\:file\:user.jobengine.osgi.commons_1.0.0.jar@4\:start,\ +reference\:file\:user.jobengine.osgi.db_1.0.0.jar@4,\ +reference\:file\:user.jobengine.osgi.server_1.0.0.jar@4,\ +reference\:file\:user.jobengine.osgi.services_1.0.0.jar@4,\ +reference\:file\:user.mediacube.gui_1.0.0.jar@4,\ +reference\:file\:user.mediacube.metadata_1.0.0.jar@4,\ +reference\:file\:user.tsm.client_1.2.0.jar@4 +equinox.use.ds=true +osgi.bundles.defaultStartLevel=4 +osgi.framework=file\:plugins/org.eclipse.osgi_3.11.2.v20161107-1947.jar diff --git a/server/-configuration/jetty-deploy/etc/user-jetty-http.xml b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-http.xml similarity index 99% rename from server/-configuration/jetty-deploy/etc/user-jetty-http.xml rename to server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-http.xml index 319ae6cb..95b63984 100644 --- a/server/-configuration/jetty-deploy/etc/user-jetty-http.xml +++ b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-http.xml @@ -32,7 +32,7 @@ - + diff --git a/server/-configuration/jetty/etc/user-jetty-https.xml b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-https.xml similarity index 100% rename from server/-configuration/jetty/etc/user-jetty-https.xml rename to server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-https.xml diff --git a/server/-configuration/jetty/etc/user-jetty-ssl-context.xml b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-ssl-context.xml similarity index 95% rename from server/-configuration/jetty/etc/user-jetty-ssl-context.xml rename to server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-ssl-context.xml index 26309180..e1edaf05 100644 --- a/server/-configuration/jetty/etc/user-jetty-ssl-context.xml +++ b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-ssl-context.xml @@ -11,12 +11,12 @@ --> - / + / - / + / diff --git a/server/-configuration/jetty-deploy/etc/user-jetty-ssl.xml b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-ssl.xml similarity index 98% rename from server/-configuration/jetty-deploy/etc/user-jetty-ssl.xml rename to server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-ssl.xml index 365ea983..a079c1f6 100644 --- a/server/-configuration/jetty-deploy/etc/user-jetty-ssl.xml +++ b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty-ssl.xml @@ -27,7 +27,7 @@ - + diff --git a/server/-configuration/jetty/etc/user-jetty.xml b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty.xml similarity index 100% rename from server/-configuration/jetty/etc/user-jetty.xml rename to server/-product/production/MEDIAVIVANTIS/configuration/jetty/jetty.xml diff --git a/server/-configuration/jetty/etc/keystore b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/keystore similarity index 100% rename from server/-configuration/jetty/etc/keystore rename to server/-product/production/MEDIAVIVANTIS/configuration/jetty/keystore diff --git a/server/-configuration/jetty/etc/localhost.jks b/server/-product/production/MEDIAVIVANTIS/configuration/jetty/localhost.jks similarity index 100% rename from server/-configuration/jetty/etc/localhost.jks rename to server/-product/production/MEDIAVIVANTIS/configuration/jetty/localhost.jks diff --git a/server/-product/production/MEDIAVIVANTIS/configuration/log4j2.xml b/server/-product/production/MEDIAVIVANTIS/configuration/log4j2.xml new file mode 100644 index 00000000..e586e5b7 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/configuration/log4j2.xml @@ -0,0 +1,21 @@ + + + + log/mediacube.log + /opt/log/$${date:yyyy-MM}/mediacube-%d{MM-dd-yyyy}-%i.log.gz + /opt/log/mediacube-err.log + /opt/log/$${date:yyyy-MM}/mediacube-err-%d{MM-dd-yyyy}-%i.log.gz + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/-product/production/MEDIAVIVANTIS/configuration/maestro.json b/server/-product/production/MEDIAVIVANTIS/configuration/maestro.json new file mode 100644 index 00000000..aa7778a6 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/configuration/maestro.json @@ -0,0 +1,61 @@ +{ + "sourceStoreUri": { + "name": "Default", + "protocol": "LOCAL", + "uri": "/mnt/NLE", + "fileFilter": "*.mxf", + "showDirectories": true + }, + "alternateSourceStoreUris": + [ + { + "name": "NLE1", + "protocol": "LOCAL", + "uri": "/mnt/NLE/NLE1", + "fileFilter": "*.mxf", + "showDirectories": true + }, + { + "name": "NLE2", + "protocol": "LOCAL", + "uri": "/mnt/NLE/NLE2", + "fileFilter": "*.mxf", + "showDirectories": true + }, + { + "name": "NLE3", + "protocol": "LOCAL", + "uri": "/mnt/NLE/NLE3", + "fileFilter": "*.mxf", + "showDirectories": true + }, + { + "name": "NLE4", + "protocol": "LOCAL", + "uri": "/mnt/NLE/NLE4", + "fileFilter": "*.mxf", + "showDirectories": true + }, + { + "name": "POLC", + "protocol": "LOCAL", + "uri": "/mnt/POLC", + "fileFilter": "*.mxf", + "showDirectories": true + } + ], + "targets": + [ + { + "name": "FINISHED_SHOWS", + "killDateDays": 7, + "storeUri": { + "protocol": "LOCAL", + "uri": "/mnt/PROMISE/FINISHED_SHOWS" + } + } + ] +} + + + diff --git a/server/-product/production/MEDIAVIVANTIS/configuration/mediacube.json b/server/-product/production/MEDIAVIVANTIS/configuration/mediacube.json new file mode 100644 index 00000000..c01d31f8 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/configuration/mediacube.json @@ -0,0 +1,107 @@ +{ + "jobQueuePollInterval": 1000, + "topTypeFilters": [ + { + "name": "Hír bejátszó", + "color": "RED200", + "icon": "ic_language_black_18dp.png" + }, + { + "name": "Hír nyers", + "color": "RED100", + "icon": "ic_perm_camera_mic_black_18dp.png" + }, + { + "name": "Visszarögzített", + "color": "BROWN100", + "icon": "ic_group_work_black_18dp.png" + }, + { + "name": "Egyéb", + "color": "YELLOW200", + "icon": "ic_view_quilt_black_18dp.png" + } + ], + "bottomTypeFilters": [ + { + "name": "Műsor", + "color": "TEAL200", + "icon": "ic_theaters_black_18dp.png" + }, + { + "name": "Műsor nyers", + "color": "TEAL100", + "icon": "ic_invert_colors_black_18dp.png" + }, + { + "name": "Promo", + "color": "INDIGO200", + "icon": "ic_picture_in_picture_black_18dp.png" + }, + { + "name": "Promo nyers", + "color": "INDIGO100", + "icon": "ic_bug_report_black_18dp.png" + }, + { + "name": "Reklám", + "color": "BLUE200", + "icon": "ic_picture_in_picture_alt_black_18dp.png" + }, + { + "name": "Reklám nyers", + "color": "BLUE100", + "icon": "ic_settings_brightness_black_18dp.png" + } + ], + "authentication": { + "authEnabled": true, + "adHost": "intra.mediavivantis.hu", + "adNonSecurePort": 3268, + "adBaseDn": "DC=intra,DC=mediavivantis,DC=hu", + "adAdminMap": [ + "G_MV_U_MUSZAK", + "G_MV_U_INGEST" + ], + "adSubmitterMap": [ + "G_ECH_U_INFORMATIKUSOK", + "G_ECH_U_MUSZAKVEZETOK", + "ECH-ISILON-ADMINS" + ], + "adEditorMap": [ + "G_ECH_U_INFORMATIKUSOK", + "G_ECH_U_MUSZAKVEZETOK", + "ECH-ISILON-ADMINS" + ], + "localAccounts": [ + { + "user" : "user", + "password" : "5F4DCC3B5AA765D61D8327DEB882CF99", + "email" : null + }, + { + "user" : "lebony", + "password" : "4E25B117B14D86D7DCECB4E433CF932C", + "email" : null + }, + { + "user" : "root", + "password" : "5F4DCC3B5AA765D61D8327DEB882CF99", + "email" : "vasary@elgekko.net" + } + ], + "localAdmins": [ + "root", + "admin" + ], + "localSubmitters": [ + "lebony" + ], + "localEditors": [ + "editor" + ] + } +} + + + diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/EscortFiles.class b/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/EscortFiles.class new file mode 100644 index 0000000000000000000000000000000000000000..181784cfd04cd790b37b7b3bb752d45400ee9fcb GIT binary patch literal 14968 zcmbta349ynmH)p_$4KMx5j##IClH5Rz6D7LASDitk3@-&5IYG@+6LJg+X|9K%#5*3 zx1~3f-i6YJo^)wb+HM=5$Z|sn-E>R07u{ZL*_LM8ZcBH|9_{Y-SRniRzL}9nwoKUH z^2?88X5PH_zW=-5=o>G6`EdZ-*n|W|*gR>ddiaDkqGraE88vLE`mL%SHcT~Zgu9JV zO*eazDbmD5H=sQ5D?wzL^H1%X= zJW43<)G~${&zOhfsYx|}Ab(RG)%3(rGOZ4p@pP83tZ$$z))VWV=N5p%Z)=IfGDi6+k5+&^8)3M<>(-A;6#Q8yx5lpqk)oJ7H)UfPH-n6M^5^ADjT+NKm z5NaHvuI|CkgRuicF)p%>Kd>pgRAW?6X3Zp5Ah18y+uPMK)E&TO{3@ABb;V7UP}wtZ zu&-n2`26#Fg51~Fnn<+H%*@OXWJgl0D}eO`S+xbk5(LI?ZXhgk-ap+SCE=<5!k zfl#s0XxnJC-JDFN5<*Zi_rU<#2vVDMi%`)y z(BIP=>l|{PUPTDDIX4M`9iypaCTX@4JPnP93EoaEp~~2fYb9JmSpRbH_r){uaaC7v z9U_F_xN2H9A*^p`yrkiRAnZ_3gXM(E-egAYpG=Ra`cQl%rE6784Y9_>fgocKViNWeszs1Yn#okS zGoDg2iMXy{ANCW<##J*Wf@M@CtZ1;=6p;!>eG2+9K=8!5$$Sm5SmR*{HxTLsZ&RH% z!-L6mHl=bu>(TUd+>~(ugZ!LBgxZG13N{|*DjrsF1UC|-ana z!>b7XF~Oa%!R9Hn6=Wq)Ab1n;8G}GELV$aw6$r~MeTq*?kh$Ml>J!#jG$jugC9GUv z2%fw8IT7XIBzI4bsv@Tt5^f>X2x}*`aBQIPM1nzBxiAm! zo=m0^s$PakOi8%aal#@I3Z^kb2$-66Qo?e_^dj%u8J%PES_OZB*Ab*!c}^b~BW!Zx zvGn0(=osYxdxL^E;!Om9JeyTB2|}xzfh}sW1KH;ge5Pc)6?aH@n*&7AX$%E-;_U>_ zxM~ujCAhoIRV=WGQB=Y^2pa{Wg$Hrd)RQBVrW)op>u|1QybJG<@a{z#i9)L2y?7r% zwrp-0`(R09+p1kkoC8pSPIwA05{2qbPG~KpskDnGSA)MsP;9-_R7#sF9W^cocMv-q zz=sIbCgDE9s$!Hnwd~A*@K+AZM-+S%A0v22wd@RGxa7$#3B}4TL}Q-qQUC-+l{7^0 zt+I~QrzVnd5oa<8pH%Rdcz`Dj5r59ZiFq`dN~&jjWU+ocsy?mY6h33stpjmg&6utP zUQEvAe^$ZgkRep68Dmmc5A}EUXgoj(!8BLYa*i^Wjd;*>a7m{XJj5mOV!_FHj^hs> z;Su$v1%b3=BszgasBj=KB1OX-`R89NWFnG3L3HHWXQ@*K+qjx^Utu z=bsLq1jV^!5r>LFijDPaX7_Z`Fpd8QUPn1z-%#*Pe2Y+(H2Q3X9LA;URteYzo9`%i z6gh%lSB=S(NuZ;I@%x zPw=buakrE<#)80|XA*5Z8o)Dzbse|WZ{BEZu0MZ&Dy5~*-=CSOPoKYEuTPzS&{S_r z-rOc5i$Q`ks%1??Y1uN`eZ3G--Rr^79RMIPKFk5 z7K*2gU*Ml4{F2bXGud=_I-Lq<ePJe z)?ydVSHd95h5kmtKjU8r)fshafgHldSHdkS<9Ym>gnuQhyQJ<4{vH28SU#?rT?2hF z-YD{u#jSB=o!xIwZ5<6Kv~+k8Nwf^V$A3xqPr_xqrC*Xz!GGfqg%sl)jBt2KyA@fo zh_{XY&`g%sy;6^&W%v{RN5Y>8%S%01@B&^Wlv}>kZJn9WSVEa%0XAv03>S$c0-?su z-+rtR!@UH>P|ZR^5Fjt1c7C9%Z`ivxl1@hqqmeW7D~Tg~~`NAUvc_oBY{=e$1)WMQk~3w2UgqFHt3-YN1HZ-Yzu%ejW_CL-~*EEw*TlC!V5w6)-p|KDN%NY%=qQ0+$yDbFA zx-NG_?{Uw(7-WS_#z_-;yazS4nhb@e;sM*mW*j=Pk6AASaD}&D@=eXKr3%W<5$M zOSo4p{QHDmbrO7{hRpY7d}Nz{cR{u(NR_FZ z_DIy@)T-jQ6xz#I7QWGxW~eglqh5*jJEQ{8p$T1^;tLOj`lz2!9#13&C$m{yH4Gk; ztK6PgAdWU3E~5ihfg=a#| zLiLSGG(=95a;U%4F(4u4*3`~si+wC60!j!d@%qy_}%M%DL`1P5EJhKP?n{+0~@2JE6+im$=$g=a$tb`4j4> zNdFBsV8xS%J1%V{2*JVRcqVR6>M9|;V<@s%(e~2JhK8at-bHDJGNcg{U5zI?QYpLD zcbsd12FG^Gn4or9% zynV?T*kwrf>bn4~Z^RmVRur!vXR^);(la!~r$>5=LT{zF5&WiR6^SZm^ODrW?jS1D zophH(Zzm{D8sd}+o~Cz*ZR=4^@h*kl&9BRnMpsf-MS~ik_Y#8o)U@?SruWl565UN` z5sV7TA4pUUm=7FH|upZlQ3>m_4AM2re;)ArpM_#-|OGYGuYoK^fh{t_q>@g zjnMxJO4X7jelffRPudvgo%$<&iJ&C3sZ2_XC#-KVn|fb~QTTfWlL++vx|-H*Re73w zN}=!aH0MvKDb-X1^gTk&p$z9=Z))|{-TK$Qj;GciDD*?VE~_xLjuAskO`3MC^zz+0 zVVT9&*>5_6RHf=ENbfsyBcCv5W5Xq;!cs32Te^^59vwnwe&1q zkmzTG+L9y+{UiO{{w9_*Oui;;ZLmL5IW06-)Km@5G#qns;fzHdmFSm*<|5v1`W`d8 z;0>96LBCSy*YupVkI9HHz7546;vCT#)eMiB*>KO$fzA{U^{7nOpo16se^KbSyv~-H zTCX;x>YZ^z4bZ<5ylv^}F;4OC3jGKDj<=9@s1a7X>q_TDTpv_#nN%~QYLxG~Cg?vE z`Y-x#LRl(qn6XSko#tO4ybZC&7=Qdnh5kf;CIpSi5kq{1=BwD)5?_4i1%=krh5)_9 zm6}ecWCq40MuZJ6Ctvcc3iB{8p;92vGqyDkP+@`W_6fVZCAILtq*<69q7w5HE*Gg; zQ1?%!QU|nT##Hq}a~xm+{sA_gsn2L;y_Quok@^6W2~zz*HJh4=aJ?0Um2E8j6|0umGQx5pX@L?7zCyb=&2oj+ios$mHEB%9tcv!?^ekJYun@m3ji%Ii z=1`VU=sml{7rhEIuDe#!VkI`6)SOS|LF@4$JxN%(L?jS`nln)G`MZ>!oXD0mbbzqQ zor#t-63-@1r_60c@Jy#u65B+$mJ6|V4yGQ@82oc)c*yye>a6)Xwai#@d{P%HvToj6 zO00o!^(Edee$DxMC$XlY4P!~cF6tJ-1_z5n8Dlb=)pS!$bZ17jL^3n(qHHVL{>}5X z*LZ{4q&}+3td(7Cbe)HLqp&IZrgH651OR(7?-wh=a6;(+s8P_~`>yyfAS#xu%A zT&u9_ScFiKQKwvxTVMPyAvhXfJNW#hniEp_*0{ z9?-R{s+%(b)S?`ddw}gF_>-B0nlS@xAHg%D8WQVu#gY|iNB9Q| zU1s~yA+Z6%=2E&CVq?JHP~+)?VqY(_es%*l$w5Mmo&J(q*kZ>k1lz@i6n2Om=I-x! zXW_f%LcA?ITP0}WGfSZ0xgS$9+fRFBOt7O0&ah)VQ!XxCVwo3AXlaXY@!qYVO|g^l z{@5HNSnL)m;j*^vL45sIU}gPSrxbRs7r6vu%AF_NHV{vB{#%YxY)Y7be>b(xXJv>g z*H56@I1j7?!2_TYb@0Itf&_pefI7&o>oSB;?z*l(2vx4@WvJsnQ~^+jTG#y*sKYAP zbqIA>?YdrrI$Z9$UW+=cb6sD7I&5%VZ$uq7xvn>(4vntsCWO%9x^6`XVb}GQSd9R- zU@HjQ05pTZ|C92#`VmAQ5{KUjKn4SF4gBapySNJw|3!`cViK}91i6$e7c}aHM{`2 z;6*pe(1Tj+5fbVxE_gLw1Hg+q9LG%{)FOyDM!+ERwU8|}2A?=oZS`i~S$Kv$O@qVU z)p@9cd5q5svyO0s5U|2}0V((eOtnH3A&4|GV9zjMlHP>(<8A=;kZ}+07Sca} zdlyL`hgV1sH`!u@7PbN(%;EOtA|*U$aWan&yHv1DeiUsu<`N&q`|ZPr@o@o85T7V< z_#455_*G4L+~3mp=7 z1|NI?b~IJD<}u5KG~2i?voP&%aw*ZurA53UZ%Ynyp0hZc$2k|wD+I3${LoN`ELw33 zqR@pl+blUaZ$rLAcpeX_9r!BzV5q|t_#61)K`ScpHQWs^f_M^NU!?UkJR)qCd)k|t z^Z48QP}bDklE=5b?U#KXfJel+rOhN5ZiS2~RACy`xJ_u&WW8U|W_dxI<+e5q)p!cu zg$I8JaMQfNf20}2_e!AnIY@$EhlOI3SD3AtgVo>aIg9V-@xzl?bq3kt>K}VWfN~_q zXYmi`S{FiTDPJdGdOiHO9W{6ZF2@_O6>q}zc(dyO9fbpQ6b{gVp9nZ>(1xGlZuC;SmK=uXD9A8J#$( zB+XG3C-&!Q*}QwVp$x#=;Kdz~aVM7H?YIo@Km*>1EqD*w@m|F7KD-6*$GdTlK|SLo11=K`-7*t0)8yWZXq{v>IM4!<%UhT?QX6!xUXkYvD%&QdCdt zAfX+H=?aX1|2}va}@ljs!!2kW{_Kg_jfxy5MZdQ`Ze@DSRHEK@Oi4Rv5GJ zC|Kb!9Jj6T7;O{&3Oq(vi}3ehR@lP}1*e5Qc*cBC*u&2y3wubsdlAiIeEc#XE(L z7!kmFu@39#5FLiZ%|=J)M)(A&WxFNXS6+S*488@V zAPE=B5Tv7Y%!RzwWIQGMR3K)h(dIRIdR4^hu0J8KC_uiDuaH%jKa6N=4ZVhgc#{{W zP%a)8dJxNnFBdqRg&&Wj9OtkOPoNcFK|9W4FTN_UY8NRtR!FI_LQ0K^-iUXNF-njM z56ZEF#^4uNHPATjwh>amUPQa_x5*%ae607uyKDFQ8VUJ1=52yc{*UQ=(H6?h@EtL^*u!yAm#l z2Y*C`fOT;P%p;HwbJgzNqOT>72N(9)zeYKp!!rCvoYWd4stZ0{O%IATvm8G9EbazF zkUmGBw_8x2`nZ>0y2}^F&Cwma+hVS%>bI!J^Fp#UUpW5f>hS5W3i9>{&ju>(#+rLf z38sI54}Wwqtt|A>vfW1q`L7Ze`l6^BdG#Ivt_K{%)>g~3+5#>%>OJATb+Mxfcko6qdC$Xz3Pp6-thx=>j zOA&8t$eW|wNi>Rod^zH4K0}WWhkP~k#4P=F%N%{xgHtH$Z*CRg@(>6LcH;U%)!4*a zAo4;XKbDh(5Cw1r1<^z@c9Mb)D#u=0CJtm(jF>%{0WmTB^FBRBU#GtX!*VpzH|U!p zZ)~7%i7eQJ8hR9d_|O4K#EaE82f_Y;>m^)}5aiz|>@(kHJK9F)%-=b33U$3A^Zi}Z z9DSdx`9~x`ejYxxmlw_>#w@CZOe;`9E3tt>F8A0-KN4|WffYg%D~Cy7eG)FLK#-m; z=y3zjW&qZUfpY1wHcx*)A7^5iq&2vLE)!C%IcvR*SdgA6uMttX%l?3 z89{1r=`R=D+vm79{R92P<=&!YXAwxE8+e8y-qsxb^a=V!j{Yg)J44qD&(d%5w2?QP z)(WCINB>+y&*$jhPNK5e(_Gb-qu=M~553JHe-4MJB~Skokz7$yLoZtMUnCIng#tOc z$otqQ5jn$r!$Nwavpi&YM{TQAkHU=Fv3d^uKTv6y8Q=R)3)lw*}4Z;sWR!fIZ^ z&qabEFK?B+IkuuT$5w`d=ZbIetna~TJR&TgN4_xIoj@Hx&G1kwDya>tDU9`WC9b5a zu!FWBMq6>5wqb&ocrQtYd&@n6>KS|5{_Wug|c{*yUpV^E6w_>fuEt?q}=R z74Ts-J|Gr2e#9`&*3%Fq9LEieFTetL6dvKJR+lvb=_TxtSe3*eVb6;g7fsZ}MO45? zb~{VYN~}s0jV_7yT|^n=;zxY*Mf-q@JSrDF3PR>TlC(Wafsbuun^_~WtXcFZzk^5g zOE;Zit;0>TEZm!CTl!jZ?3(`88Wyc#J9DhPwT5-pux{&LdumuL$J)=Z{ll}YFXBDJ z`iDc_S#}`eYi;JPFvzWZB;x0P-5BzV7hP+xEl>dJL6G*Koc5xcVpv1_u!;8LO6tXR z)Q2wW$9@{XK{|jVWNopmY;}|9TlpgH2zwQKH3;PxWUpbz#T4JqZenqGa2+30+76~=$p8f#=(*h0o8rmay3wq;vJ;E+HNgoZ8Hwb@J|hNNUHy_N?{Gh$|B zaN0CoQo5ykX-k)M3+YDMCT-1<(m$Z5U;E$W(+UR%_>S<@9BAOD{N%L;7;n^ypu^c>SF9IBYbymF!> zXo=7z>~~dB<-BChu2^1ba3E>8)#r55t&~zlWfi>HU^QQH49~Q!YvMzNw!&Ilc;v3k$`nQW9kQab$) zv8M`7i~$CP@Qm%03{QBfK_(aLGO5+1-bK|=HbPp67aY4%PEIc@WfWrv89^^Qc22pj za58mqePthL#GfHJJEC&7V|ccc9k?LqrE2dB z$ws&8yGYP$Xt>^}l~>n%?sqn*&A_OC z{zQzEoD#y-<_@GX*f6{mKt|HDu(mkO(BX4-d z*@dz?qCA!JY$wJP7le(^R+Q`39}u2y6!U6?KhQz8h3EN{&I>|ny+Ose#EU}WWX`k8 z757xp$f;S|mq=l7{hlLC3xhQ&4W!Y`r>hS$W>M8hnNIpImQhj>^1|L3$1Wx3uU>Mh ze7NN6oSUqQU|^)~Zn9|3sbqhz+uPe8VMf?uJ9*{!>at|C=FkjuW>z?msu!!8GF=>7 z1E}BXYbl#RDEQNHMPq9wgrdfhsghElL>AMisVtgcjyqPq&yC1fr{xarRUUoXvkErJt9NeR(O zyW-^3G1LE&+fp|RR=yN>_@xx$hiuz(J;x|dC~wxzyHS45FLiz)Y+IqYY0cYnDl;B1 z(HEx~!`G~Z7{B7zLaWc?+LG|E`b29ttHzHTR=%j*?c=sRS1H$5yVgT>^?&H1FO>h^ zX4U0~->t7g&Fx{MSe!IHm2D66y0E#H(&~)i1L7y%B{6k}P5ZQNEz!Bi=JVZJ;v=>H zk7*AGO@+4JW$WZ!dROfZ`R~K`*$Mla2fMXJc6B$)J)Y1wKO7qQ^Kw{&L2#}3!L+e~ zF52j!o!!LQ&qj`rV4Q9)vLy(8H_d){WZ56&eu)D-9prz3gM6G2ZJg#A4xuql2ZuRA zGc6qDST#j?0i6hNQ~P`Cg!X{GsnF2miJ`=^i;O<0b!xBk$j~AaomyUhgAK!>p-`u` z$mz-9(8ygrxv#mq`5i94$z4gT_`ikff7s^zs-PwzG#`4${YQ`Z-04=NO>GAQgsqnKakg z%?Ki15(bT1!Nt0m-y5j7ADe(mxdBA-QzP&+-2(` zUpSvmTpvnYuU{Dqr6)tTm#NYfl)i%qo7h4pX}Z|S<{-l^nt&0$!dDR@4DvO;PE$PU zH|CmXJTx?5TRQR0dwjcz6N90V;YGfGllV|5o%m4@#i`J3&G%ldMb-N-E$pC!3_a{5 z$w-~|ZGrbDTIlA-TqYD?6hYo2snbV@p9H!5l%GKm@f(DAli%_C;OP(ikw4+LhOaYk K^B4X`_kRH2X=Eb+ literal 0 HcmV?d00001 diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/MetadataType.class b/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/MetadataType.class new file mode 100644 index 0000000000000000000000000000000000000000..ae205ad2fb1601301b1a51bf24ae9e7290ddb146 GIT binary patch literal 1320 zcmb7?YflqF6o%i^ZMzp%DCMGD6h)A>Tq+89X(bRuLoAnMfn?*SVHse_vP*WiB#l4D zzo6v#VYvhc5F7rP@t1 zRtRPy-w1=FfS@P1_?BRULQaj8rsnTLJq)Zq#?df-$8c1Q#nKa z6ulDer6u%97|2K%l<*)cVMxLwRl=}@5lzBqF8c#yD^2uTcDji^%g!`0XxZ5&hAdlc zV%V~^CPuAOjC}==LJ@$0lr*>o1tqyF{&b@!F*^Y;2FlRg;@}gh)lUwF(Imk zj!8@<@;PLrytj!l`-4)tu&cu5sxokn^2C=b8<*MW%7Ttr%q2NWNXh(0o=WF<@e}la OT?(&d&I+nBzWD?9Yb^x; literal 0 HcmV?d00001 diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/MetadataTypeDetector$MetadataType.class b/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/MetadataTypeDetector$MetadataType.class new file mode 100644 index 0000000000000000000000000000000000000000..488120eeabca17fe90ac9ba77367095c49b0c461 GIT binary patch literal 1554 zcmbu8TTj$L6vzLE?rtwsz~!Q=ct>H^%ZiG(U2y@?5EsxCNE)ApGC)ab$+Szd@x%BP zba}vNG(P*GjG3WAW8#C^zMT0@d(QmNzjJ>6`tlvX1I+5^Av|lvTvT_Wbslc{A+N?< z>~m3#6TTN$7kR=qSi)A?d;A4YxR*p?EW4>AN9fyO`>YzUaH~2Wwsr~qD}rrq`raZ- zxbRs(c;4*lm>R)OYrYZDZbUFsoOwa8m%Sv~YsF3yi8i5_;+ueZd^-v@xFG1Sc*uqC z5qjsBRu{+CW}2(>4x#a`Yh^~=3;fVerU}|ad5w^pi#E7{yamFbjUfyZ3ib4pk%{Js zT}~qWaI3aZUNb>BVR$H!ZjO~gkA|ZZ1kcaR}(gD zoFeo${g5xUcGtOBVe0`W6q}L9f;A?5$!gPrhCxCu+4f^XVV?yp9usCK%H5h{;V$m! zm?R8jnr_Dl-?ecc4+tg`g0;P9uT7|Atyx~*;a*Z($hh@qYeAZQ{8LdO5u#|d7K@EZfV2rolRyQEb{MWO8fNIs#HGvS z2k~3bK4@1T`q+m)^b>V;b=^tOP_RqqY4+V`pMB1~=iWd6`R#Y$CPtWm;9AR-PUeZd zA+0Ubk{MSz&!m%aJ-O><%F@#}bx&`+*p+$dNyD?9Fd@N-C;Brz)6}i4Ol9MVG(17? z!b)|auqcR^-jj9DF|Dl`!Lgiext?x$%X+gVBSZyaQV`5n8WA*sm=Yvvh55pR>Z3+2 zJ2zL%m9vdPt(Ywp^ATc#;fLjy*I%t&o4m9B^46=h?BweD%j>Vk1o4BiY+ecCN>Dpm zFmzB*tyRhur5RG1>i=shxkjbBRIfKGwH2jF2qF*tqS9l6kxu4LRJD}N6&5O`e4(ad zM+C7>?4x&*u@6d?3$=Q&vRLr@IV(sU)K0dy;)dFS-n*t{db5Jy_{6dxl(RQwA3-i^ zoa4M8Rx&NQ*xK2UPD9^lN_9xKp*NRx$5gnp81lAFS1?`r)R~wO49vHr>vj)}V0QfQ zC`^2G@|ix;Ooq8CxM(|D8GTnbwq?e!cXn*cZ4Y02zLq?*>1s@o5rj?mep9!e3Wkny zUyX8|8)2pe;~(3l#!WsKgy*Ft9n%n`KBb4-+zIo=fh*IlTH{N<;2qsFwxz2IyQ}e) zvWhhv{qbYdDC?edOuebNdm3LWPU~=0$KJ6OabF{+h-in%=GAIJW6lq+7@ob`a_gS$ zyimk~Mo|&*4pD9DhTOKBo6->k%uT_ux~CgY%ld9-ECxKMWf{6B3(q}ixu$IiE+4hI zhflkY+f+2Fd?$z)w&m%jm@QzSXvg_9&X(}hO~A=E2@-~y0AAb_6KTR!{QFKG;X z0rYSQ(Aoi9<_ZvHoQaP3F9JTdp8A#4Yr?;9Z7&r+{)SsVnAuCk2lv73UMfDY53+ly z_^Ex6-%G`l`(S=A6(4;MR7N1^7d1-^h!f@{{R}e55DA94z$q?~V2aaBlVpYw?s0|% zMk#TYCC;(J`L1Tx`G#KLTfd=jzvh2LDN*k9_LL9-U^G=q|3M-h?|;MMYhvl3|66;* zaw+}3wm2bRi~yI2ahVaW_R9_W%F@ literal 0 HcmV?d00001 diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep$1.class b/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep$1.class new file mode 100644 index 0000000000000000000000000000000000000000..77dd877a91858f5559d2d1bd943f71e39fead4c5 GIT binary patch literal 1303 zcma)*Pj3=Y6vclRuvnND+G_o;t;I?KJFRhtx@p>op=wIgjjI7}=rr)AnHh**%fxDQ z;RkTxM>1vxj8q|ER&Q?3J@4Fe&-?M~+jrm@PtzoXNd+jxkhM=l2_uMsZ z_)<73PQgzaxH<(p&b@Uar1reF&LiY3(p-&BOBVBFG9+2C$Z}0c79(h`?izj5?={sw zcA8xkmg`>2>7F>g8~u-psmL2)dy0TbVhg)fA$LCVdhgUR9c>Hc(ZG{7b7?Wvt&yGqSf9MxF$*mou_-LMrsZo-%@|dxSc^L3(m9z@7AyuRPk12-~w<#LL*qxcHBebefCfonR48lHOXG*5)mWU-U%wy@a|()vML z{ZNIU|0S#4v=6oII@S8$7t;uR*K}s8)Mjd%tT?iFKYq|NW%&KrRl_%36|9;u>hE=( zAkcs{ge1Zh68U_Ta>y@783z(T77JkkctL_BkSmohSS(d8$d|sb{4oYz2QqPkkYS%y zh#Mit4Q>L$EpCsf4oJk<#nLD8<80YC4vxtzX3?YZpr`v literal 0 HcmV?d00001 diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep$2.class b/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep$2.class new file mode 100644 index 0000000000000000000000000000000000000000..a4332459bdcd1338641639445e53a9694dedf417 GIT binary patch literal 1187 zcmb7DO>fgc5Pg%Fnz$|rZD`9^C=g1Lei&68kc_xQK?)?T)Koo`)5aO4TatCq2fXCRfks)lxnj`Nd?6T@h#h&J9 z#F3{BpK9-*)81!o!iYPDPs=+tEJEQ#jD$B3s_*S}PdG3(<_KFUP7n@a_xUg~A zK^A!zITQ%lN|KOoNyWSIu*=bb=nj~$*a`zNI24gg?vtREP$z6(pnrMCCoJexi2AWm zeeMyelL^ifZAvr0dgx#kH*8!d)MgjU#ZBBI%m+f%LuI6jIUV%KK?!R%?hwjF%cmU^N!6bz(wwR6{4F$J zgxyB^jr@OP?8nN;A^X)=Q?157$tSo?r8ue&gx0LF20|8uOQ1p_F)e@$fE*kU<^eoG zCXG0?jgN3^pK#@UnsXI^lfER?FR=)~1*Op?6af&fVR?cgCn&{@+6TC2Sa}OO`wo_M zhT92Vb_#D7OV~^CmQ(!V1P>_UKFT0G0I-70o{iFvgp3WcQA*BIGR}HR@F6MyEUco6 L&6F0U^Z@(>Fw8*1 literal 0 HcmV?d00001 diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep.class b/server/-product/production/MEDIAVIVANTIS/jobs/classes/user/jobengine/server/steps/TSMRestoreStep.class new file mode 100644 index 0000000000000000000000000000000000000000..59569e0978741e115419ff97d459bd0895ba460a GIT binary patch literal 9183 zcmb_h3wRvWb^ecbrP;^mVHq1Q#&|5-thAD~*cfAL{Xmv%kdbVol?5^+WOnyzHPY;i zGBYbI5okgZ0wgJM2nhj7abMJJ(>TVKEgm7MN}#k!n!eJsX_`LMhLqAa^aaKF?w#G$ zYIpTWzWVd`?abVB&pprooO|@zyU%?Yz;-$=p^6a6+RTcMnh9p4HG@TMW=$|FYCCM) zjt<28`kC#R7K=MbRO5VNw23Gt&Hb`)IUR zki-a5Mm1DHt@M^~PbH!~Jr2wCxfC&i-%+hJbBFltYVT8usQFTI%>Z*~B#vMyD(lJ6!MzzM4kho8f#0b9KNnJBEXD`9i z+%ib;c9|&_z-3r1VHIKHVoK+9k#RZJ5d3N8xRxMnY;IZ7Tz(L)kWq~qLVd4hu*2C* zf>{Gu*0leL=g5h zFJS+2`}UN7;${mRIFV%Ij%FIRgsTZFg<~``+H<6^BB43IAUsxB;FgHUs6%}KZD^OU zg%B=@pLzNmu#=|c@Hnt#L~#vaMbcub!;T&9x>?ipZq;Fgp5}5{%fIw2?5JFn2>sk( zJ*qk*1bHlXMz=a?6R3w!=dRC%W^LS2lVg4Ac+PdT2{vq6tYGrC<(r(JpHG(l9zuO` zgeAuYME1A>t*W4D%U}Szu~)*L`B9wDv7)3o=4iStV;^oHNSeK0SB){M%=EYq`w7=} zD#NBesb*A13C~$3tRz^58O+g?an({Yv!@+qF=h4zi`nf#bmO3e1BCU98 z*3wyvrIc~Y9A}n3**0HE%^1%*u7=EEmXgtITQkz_0rcQ7PsR6x9Pq6Of$=a88=Aj+( z4a0O)fwYA10_VC#pI7h$hGR{}f=D1GAxYR!;=3HKazS(F$Y2;IG^CjmXSS`GhKqws zRJ9yf20$2*p<$E|w3*Xsq`Ej<5$^y0c1)46a>aiEYZQ5bS zFb+$?`{xn4{AJj12sOi|l~EnSt_rYQ!G$g5f=ZYmte=;=86KjJY3k7dEyI$c3ps%) z36q4&OPrQUxDhSmZhRouc`zf*Ym=wB<&You;)4=?j<9KoBQ_08jx!k_!hHnKQ4R`M z&j*Easl=9809ky5W8Fsyk>*3o+tf1X!^a5HW?O0AY`1V856XB5A1C-6)3q_-vgQf~ z;{p6h89&dlwa#WvH?xzLCK?Xzx=+dQBfw+t(=vA8dj9P*GJ*(5_-q~}=a6?^Gcmt4 z-n2Dtf+oNb$h{p1?0ic#^Pco^$dzDdQ>pB4MSPN*%S#w8d<@ zSF;^v@RoM_A`se>CqFR33@5)wMEt3r&IH>6cpAUVP4Fv(=uc$=SHEAA@eF>QutH6x z;*RQMi&WUQmi<<+g2 zyoHMe@Y^^e;fwix)zHl7u%@#p@3(9jU&2{}C(Rr}YzYu3oF$H*$0!!WIZR79PiQP( zm2m+V-Q+&1TFh_=tMjQ*&gMamThGgQ0WT6Hi;e4Qk`cO#rRy3|tvGvsmKjM_Y@m7H zDEFwwYpUW6WZhjRBl0fg~;GG60=7)UdxkJ+}GW&!*Gz9Hf3rHIjM z<~w&A-z3~p?CM<9Rjft}w%-}|ylC#+7;o9X#k=u8A{<_ZiI>f|WstM}6B&PsKO^{( zs*@bij5J|Qu?_u zCX>vz`&m*O*F-+8(D^01pE;JsCOG8?p)swSiPDe$(R?3AXevFosD;Y)dW67ep`Rjb zTx3VSFz^zXtNVP`GOsk07h&Gs>7PGUuQ?O0`UQmQ=ys;As7T+I< z5mpsNf8l}@BX}})nh;sOb0z!>K`H52%4|ef!5d65+?l&IA1o_21*ewUFqLq@z7k*s za034(I4iIR%HA){)gbx9A>Ew zzl;_TSkUz3zQ=-i8~-Qaojj1wTb1!HE)l#2JK>bJH#y{yhzM&-Y?fD@3mzblM- z6MWood_qQ8+nlRmbG=Q$E&-CrFOjce`zZFy6yWV+b(%RnDSm=1Q!NLd`ZRO;nXWpT zn-xL4P4zN0&CcQ49lZ_Gz)2`!ydg;B;Bn_~LQCl!m&Ez*j?G78gYPg^6* zdHH0!kJb^|dieanP<2HNC))CNf2DBGQ!F;jEM8&TgZL4xmr0=wggS2Hx$!5VsiNoR zjY$0<+9*SU&qtdHt({Yfno^y_?5QcuUP{<7p?x7?iv%eW*GDac>x(Bl^AUH^>5h+D z3BAjiq?9sUc$z}AMaC|4_$W%~C>E>?-ItJUE8)m;WUIh;A@PE^jjokxJ6-2G*JYne z%PX6YFPxV?x}G~z8Ho4IwE_vo+p5_wIJ2kh^2pmoxNaHp=LS)Nvyi0SkA8~Dw40B8 zJOlAQjtP5Z+DA7O9z4`-RIE*0E?nsFf(p#@c<-Q+5;duDB}o@@~4|*yn%o9(IMWe74k<(uu+ztoSHpti$1JPQH$GIW~5#|sSMAa z8r2npO)w#%qw2G#bkT{n`>2<&wOe)6gle-=I4A&?61IwPG~Di^!zHm?)`Bb%%SV?P z%N6)86w5y9C&Y>qth@(WLaG76(Pg-+BIAX`;w_P#PpQCMt3X&e|IXgdt2ROIF$`vP z>8foro8aZO0UJQ@0I0zg{7)?asyL#GUq1rkH<mujSauKbZr$>lUC$tR1i)PfLMeyG4?#b~68idAN+y-n# zEvm%RHe4(AHefqy;l*`=C)LBtCn-5$yr7&Y`@}LprTVmqGZn#$3TF~_g5Q|9VL1OP zcsZu$45Yy$q)=KfBKCQ#J&O?6tg&+jT^>A-o}tE@FQD(GIXxTU1rUXVYp@Diu^!io zb62~33g;?9L&|Hj9$t#m-XP^?!qb1VXwk1>(l0v=XnJRTj2glaF~bJKX-{qXcq#wK-h)X@dm=V&>ltzz-|Pw2WzkwE!c-$=tLa* zaR<7<&EqGU?Ljb$*2L1+riy-2741b4O@ag$|_@b-Nzeu&pmE5baAs!MnSvILTFLc+NFpYl&Xl8_M3Sxyk% zfht}Yb1Csdcm+Ckw@%~D!&_cKHJ#ZqgC7$*s-MB;Q1uM{m+%!rhd1P%rmAVGX`7~+ z&pZx4e-EAsRnJfz;qgn~CZ0=Pfl5sRY16322>j3x#3-6DhHcQX6QkGJ8Q-p!rYUPN_`pgKoQo*CL!g$^ks6*JsXM7q-zO*%^*)3oQj zNb5(6iRXZHC3Okn2 + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/schedules.json b/server/-product/production/MEDIAVIVANTIS/jobs/schedules.json new file mode 100644 index 00000000..24f9e69b --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/schedules.json @@ -0,0 +1,169 @@ +{"joblist":[ + { + "active": false, + "executeimmediate": false, + "name" : "Rekurzív archiválás a POLC/FINISHED_SHOWS mappából", + "template": "archive-recursive.xml", + "cronexpression": "0 */1 * * * ?", + "parameters": [ + {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"}, + {"name": "killDateDays", "value": 1, "type": "java.lang.Integer"}, + {"name": "limit", "value": 1, "type": "java.lang.Integer"} + ] + }, + { + "active": false, + "executeimmediate": false, + "name" : "Párhuzamosított teszt folyamat", + "template": "fake-noparams.xml", + "cronexpression": "0 40 22 * * ?", + "parameters": [ {"name": "itemID", "value": 1, "type": "java.lang.Long"} ] + }, + { + "template": "cancelable.xml", + "parameters": [ {"name": "param", "value": 1, "type": "java.lang.Integer"} ] + }, + { + "active": false, + "executeimmediate": false, + "name" : "HSM migrálás", + "template": "migrate-hsm.xml", + "cronexpression": "0 0 */1 * * ?", + "parameters": [ + {"name": "sourceLocation", "value": "", "type": "java.lang.String"}, + {"name": "targetLocation", "value": "/mediacube/data/ARCHIVE", "type": "java.lang.String"} + ] + }, + { + "active": false, + "executeimmediate": true, + "name" : "Limitált archiválás az PROMISE/ARCHIVE mappából", + "template": "archive-limited.xml", + "cronexpression": "0 */10 * * * ?", + "parameters": [ + {"name": "sourcePath", "value": "/mnt/PROMISE/ARCHIVE", "type": "java.lang.String"}, + {"name": "globalSourcePath", "value": "\\\\10.11.1.100\\PROMISE\\ARCHIVE", "type": "java.lang.String"}, + {"name": "transcoderTargetPath", "value": "/mnt/PROMISE/TRANSCODER/FFASTRANSCODER/Out", "type": "java.lang.String"}, + {"name": "killDateDays", "value": -1, "type": "java.lang.Integer"}, + {"name": "limit", "value": 10, "type": "java.lang.Integer"} + ] + }, + { + "active": false, + "executeimmediate": true, + "name" : "Limitált archiválás a /mediacube/data/ARCHIVE mappából", + "template": "archive-limited.xml", + "cronexpression": "0 */10 * * * ?", + "parameters": [ + {"name": "sourcePath", "value": "/mediacube/data/ARCHIVE", "type": "java.lang.String"}, + {"name": "globalSourcePath", "value": "\\\\10.11.1.90\\data\\ARCHIVE", "type": "java.lang.String"}, + {"name": "transcoderTargetPath", "value": "/mnt/PROMISE/TRANSCODER/FFASTRANSCODER/Out", "type": "java.lang.String"}, + {"name": "killDateDays", "value": -1, "type": "java.lang.Integer"}, + {"name": "limit", "value": 1000, "type": "java.lang.Integer"} + ] + }, + { + "active": true, + "executeimmediate": true, + "name" : "Lejárt /mediacube/data/ARCHIVE anyagok törlése", + "template": "delete-materials.xml", + "cronexpression": "0 */10 * * * ?", + "parameters": [ + {"name": "sourcePath", "value": "/mediacube/data/ARCHIVE", "type": "java.lang.String"} + ] + }, + { + "active": false, + "executeimmediate": true, + "name" : "Lejárt /mediacube/data/OMARCHIVE anyagok törlése", + "template": "delete-materials.xml", + "cronexpression": "0 */10 * * * ?", + "parameters": [ + {"name": "sourcePath", "value": "/mediacube/data/OMARCHIVE", "type": "java.lang.String"} + ] + }, + { + "active": true, + "executeimmediate": true, + "name" : "Lejárt /PROMISE/ARCHIVE anyagok törlése", + "template": "delete-materials.xml", + "cronexpression": "0 */10 * * * ?", + "parameters": [ + {"name": "sourcePath", "value": "/mnt/PROMISE/ARCHIVE", "type": "java.lang.String"} + ] + }, + { + "active": false, + "executeimmediate": false, + "name" : "Lejárt /POLC/FINISHED_SHOWS anyagok törlése", + "template": "delete-materials.xml", + "cronexpression": "0 * 11 * * ?", + "parameters": [ + {"name": "sourcePath", "value": "/mnt/POLC/FINISHED_SHOWS", "type": "java.lang.String"} + ] + }, + { + "active": true, + "executeimmediate": true, + "name" : "Proxy generálás", + "template": "sys-recreate-lowres.xml", + "cronexpression": "0 */1 * * * ?", + "parameters": [ + {"name": "globalRetrievePath", "value": "file://10.11.1.90/data", "type": "java.lang.String"}, + {"name": "localRetrievePath", "value": "/mediacube/data", "type": "java.lang.String"}, + {"name": "localHiresPath", "value": "/mediacube/data", "type": "java.lang.String" }, + {"name": "globalHiresPath", "value": "\\\\10.11.1.90\\data", "type": "java.lang.String" }, + {"name": "localLowresPath", "value": "/mediacube/data/TRANSCODER_OUT", "type": "java.lang.String" }, + {"name": "transcoderAddress", "value": "http://10.11.1.111:65445/api/json/v1/", "type": "java.lang.String"}, + {"name": "transcoderTemplateName", "value": "MP4", "type": "java.lang.String"} + ] + }, + { + "name" : "SYS: batch-retrieve-ondemand", + "template": "batch-retrieve-ondemand.xml", + "active": false, + "executeimmediate": false + }, + { + "name" : "SYS: retrieve-ondemand", + "template": "retrieve-ondemand.xml", + "active": false, + "executeimmediate": false, + "parameters": [ + {"name": "globalRetrievePath", "value": "file://10.11.1.100", "type": "java.lang.String"}, + {"name": "localRetrievePath", "value": "/mnt/PROMISE/", "type": "java.lang.String"}, + {"name": "materialOutputFolder", "value": "PLAYOUT_NLE", "type": "java.lang.String"}, + {"name": "promoOutputFolder", "value": "PROMO_NLE", "type": "java.lang.String"}, + {"name": "advertisementOutputFolder", "value": "REKLAM_NLE", "type": "java.lang.String"}, + {"name": "octopusOutputFolder", "value": "OCTOPUS", "type": "java.lang.String"}, + {"name": "genericOutputFolder", "value": "ARCHIVE_RESTORE", "type": "java.lang.String"}, + {"name": "onlineOutputFolder", "value": "ONLINE", "type": "java.lang.String"}, + {"name": "killDateDays", "value": 7, "type": "java.lang.Integer"}, + {"name": "nexioAgency", "value": "ARCHIVE_RESTORE", "type": "java.lang.String"}, + {"name": "nexioPort", "value": 2098, "type": "java.lang.Integer"}, + {"name": "nexioUserName", "value": "administrator", "type": "java.lang.String"}, + {"name": "nexioPassword", "value": "system", "type": "java.lang.String"} + ] + }, + { + "name" : "SYS: common-copy", + "template": "common-copy.xml", + "active": false, + "executeimmediate": false + }, + { + "template": "create-lowres-ondemand.xml", + "active": false, + "executeimmediate": false, + "parameters": [ + {"name": "globalRetrievePath", "value": "file://10.11.1.90/data", "type": "java.lang.String"}, + {"name": "localRetrievePath", "value": "/mediacube/data", "type": "java.lang.String"}, + {"name": "localHiresPath", "value": "/mediacube/data", "type": "java.lang.String" }, + {"name": "globalHiresPath", "value": "\\\\10.11.1.90\\data", "type": "java.lang.String" }, + {"name": "localLowresPath", "value": "/mediacube/data/TRANSCODER_OUT", "type": "java.lang.String" }, + {"name": "transcoderAddress", "value": "http://10.11.1.111:65445/api/json/v1/", "type": "java.lang.String"}, + {"name": "transcoderTemplateName", "value": "MP4", "type": "java.lang.String"} + ] + }, + +]} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveListBuilderStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveListBuilderStep.java new file mode 100644 index 00000000..b2321829 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveListBuilderStep.java @@ -0,0 +1,167 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +/** + * Az archivalhato mediak listazasa MediaFileWrapper objektumokban. A listazott media allomanyokat megjeloli .catched signal allomannyal, hogy a legkozelebbi + * listazas figyelmen kivul hagyja. + * + * @author robi + */ +public class ArchiveListBuilderStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + // private static final String UTF8 = "utf-8"; + private static final String STATUSFOLDER = ".STATUS"; + private static final String JSONEXT = ".json"; + private static final String CATCHEDEXT = ".catched"; + + public static final String ITEM_TITLE = "itemTitle"; + public static final String ITEM_HOUSEID = "itemHouseId"; + public static final String ITEM_DESCRIPTION = "itemDescription"; + public static final String MEDIA_HOUSEID = "mediaHouseId"; + public static final String MEDIA_TITLE = "mediaTitle"; + public static final String MEDIA_DESCRIPTION = "mediaDescription"; + public static final String MEDIA_TYPE = "mediaType"; + private static final String DURATION = "duration"; + private static final String EXISTING_MEDIAID = "existingMediaId"; + private static final String TAGS = "tags"; + + private Marker marker; + + private ArchiveItem createArchiveItem(Path jsonFilePath, Path mediaFilePath, Path catchedFilePath) { + ArchiveItem result = null; + try { + result = ArchiveItem.fromFile(jsonFilePath); + result.setMediaFile(mediaFilePath.toString()); + result.setCatchedFile(catchedFilePath.toString()); + } catch (Exception e) { + logger.catching(e); + } + + return result; + } + + private void createCatchedFile(Path catchedFilePath) { + try { + Files.createFile(catchedFilePath); + //Files.write(catchedFilePath, CATCHED.getBytes(UTF8), StandardOpenOption.CREATE); + } catch (Exception e) { + logger.catching(e); + } + } + + @StepEntry + public Object[] execute(String sourcePath, int limit, IJobEngine jobEngine, IJobRuntime jobRuntime) { + marker = jobRuntime.getSessionMarker(); + List archiveList = new LinkedList(); + DirectoryStream directoryStream = null; + try { + DirectoryStream stream = Files.newDirectoryStream(Paths.get(sourcePath)); + for (Path p : stream) { + processPathItem(p, archiveList); + } + } catch (Exception e) { + logger.catching(e); + logger.error(marker, "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", e.getMessage()); + } finally { + if (directoryStream != null) { + try { + directoryStream.close(); + } catch (IOException e) { + } + } + } + + if (limit > 0 && archiveList.size() > limit) { + archiveList = archiveList.subList(0, limit); + logger.info(marker, "A folyamat alkalmazza a beállított {} limitet.", limit); + } + + if (archiveList.size() == 0) + logger.info(marker, "Nincs archiválandó anyag."); + else + logger.info(marker, "Az archiváló folyamat {} új anyagot érzékelt.", archiveList == null ? 0 : archiveList.size()); + + for (ArchiveItem archiveItem : archiveList) { + createCatchedFile(Paths.get(archiveItem.getCatchedFile())); + } + + return new Object[] { archiveList }; + } + + private boolean processPathItem(Path mediaFilePath, final List archiveList) { + File mediaFile = mediaFilePath.toFile(); + + // if (mediaFile.length() > 0) + // return false; + + if (mediaFile.isDirectory()) { + return false; + } + + Path dotStorePath = Paths.get(mediaFilePath.getParent().toString(), STATUSFOLDER); + Path catchedFilePath = Paths.get(dotStorePath.toString(), mediaFile.getName() + CATCHEDEXT); + File catchedFile = catchedFilePath.toFile(); + if (catchedFile.exists()) { + logger.warn("{} file is already catched.", mediaFile.getName()); + return false; + } + + Path jsonFilePath = Paths.get(dotStorePath.toString(), mediaFile.getName() + JSONEXT); + File jsonFile = jsonFilePath.toFile(); + if (!jsonFile.exists()) { + logger.warn("{} has no json metadata.", mediaFile.getName()); + return false; + } + + ArchiveItem archiveItem = createArchiveItem(jsonFilePath, mediaFilePath, catchedFilePath); + + if (archiveItem == null) { + logger.warn("{} has no metadata specified.", mediaFile.getName()); + return false; + } + + if (StringUtils.isBlank(archiveItem.getItemHouseId())) { + logger.warn("{} has no Item HouseID specified in metadata.", mediaFile.getName()); + return false; + } + + if (StringUtils.isBlank(archiveItem.getItemTitle())) { + logger.warn("{} has no Item Title specified in metadata.", mediaFile.getName()); + return false; + } + + if (StringUtils.isBlank(archiveItem.getMediaHouseId())) { + logger.warn("{} has no Media HouseID specified in metadata.", mediaFile.getName()); + return false; + } + + if (StringUtils.isBlank(archiveItem.getMediaTitle())) { + logger.warn("{} has no Media Title specified in metadata.", mediaFile.getName()); + return false; + } + + //A tenyleges archivalast vesszuk elore + if (mediaFile.length() == 0) + archiveList.add(archiveItem); + else + archiveList.add(0, archiveItem); + //createCatchedFile(catchedFilePath); + return true; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveMaterialSubmitStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveMaterialSubmitStep.java new file mode 100644 index 00000000..166a200e --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveMaterialSubmitStep.java @@ -0,0 +1,52 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.commons.ListUtils; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class ArchiveMaterialSubmitStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private static final String JOBTEMPLATE = "archive-material.xml"; + private static final String KILL_DATE_DAYS = "killDateDays"; + private static final String ARCHIVE = "Archiválás"; + private static final String ARCHIVE_ITEM = "archiveItem"; + private Marker marker; + + @StepEntry + public Object[] execute(List archiveList, int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = jobRuntime.getSessionMarker(); + if (archiveList == null || archiveList.size() == 0) + return null; + + if (jobRuntime.forkPrepare()) { + for (int i = 0; i < archiveList.size(); i++) { + ArchiveItem archiveItem = archiveList.get(i); + try { + IJobRuntime runtime = jobEngine.submit(jobRuntime, null, JOBTEMPLATE, ARCHIVE, + ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays)); + setProgress((i + 1) * 100 / archiveList.size()); + //TODO kivezetni a submit hibaüzenetet + if (runtime == null) + throw new Exception("Submit returned null runtime"); + } catch (Exception e) { + logger.catching(e); + String fileName = new File(archiveItem.getMediaFile()).getName(); + logger.error(marker, "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", fileName, e.getMessage()); + if (!archiveItem.removeCatchedFile()) + logger.error(marker, "Az '{}' állomány .catched jelző állománya nem törölhető.", fileName); + throw e; + } + } + } + jobRuntime.forkWaitComplete(); + return null; + } + +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveRecursive.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveRecursive.java new file mode 100644 index 00000000..6a65d5fa --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/ArchiveRecursive.java @@ -0,0 +1,291 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.BasicFileAttributes; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.ibm.nosql.json.api.BasicDBObject; + +import user.commons.JobStatus; +import user.commons.ListUtils; +import user.commons.mediatool.MediaInfo; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; +import user.mediacube.metadata.interfaces.IMetadata; +import user.mediacube.metadata.interfaces.IMetadataProvider; +import user.mediacube.metadata.interfaces.IMetadataProviderFactory; +import user.mediacube.metadata.interfaces.MetadataProviderType; +import user.mediacube.metadata.interfaces.MetadataType; +import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions; + +public class ArchiveRecursive extends JobStep implements FileVisitor { + private static final Logger logger = LogManager.getLogger(); + private static final String JOBTEMPLATE = "archive-material.xml"; + private static final String ITEM_TITLE = "itemTitle"; + private static final String ITEM_HOUSEID = "itemHouseId"; + private static final String MEDIA_HOUSEID = "mediaHouseId"; + private static final String MEDIA_TITLE = "mediaTitle"; + private static final String MEDIA_DESCRIPTION = "mediaDescription"; + private static final String MEDIA_TYPE = "mediaType"; + private static final String ARCHIVE = "Archiválás"; + private static final String ARCHIVE_ITEM = "archiveItem"; + private static final String KILL_DATE_DAYS = "killDateDays"; + private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd"); + + private List skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", "VASAROLT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER); + private int limit; + private int submitted; + private int killDateDays; + + private boolean canReadMediaInfo(Path mediaFilePath) { + boolean result = false; + try { + MediaInfo mi = new MediaInfo(mediaFilePath); + mi.process(); + result = true; + } catch (Exception e) { + logger.warn(getSessionMarker(), e.getMessage()); + } + return result; + } + + private void checkArchiveItem(ArchiveItem archiveItem, Path mediaPath) throws Exception { + if (archiveItem == null) + throw new Exception(mediaPath + " has no metadata specified."); + + if (StringUtils.isBlank(archiveItem.getItemHouseId())) + throw new Exception(mediaPath + " has no Item HouseID specified in metadata."); + + if (StringUtils.isBlank(archiveItem.getItemTitle())) + throw new Exception(mediaPath + " has no Item Title specified in metadata."); + + if (StringUtils.isBlank(archiveItem.getMediaHouseId())) + throw new Exception(mediaPath + " has no Media HouseID specified in metadata."); + + if (StringUtils.isBlank(archiveItem.getMediaTitle())) + throw new Exception(mediaPath + " has no Media Title specified in metadata."); + } + + private ArchiveItem createArchiveItem(Path filePath) throws Exception { + ArchiveItem result = null; + + String fileName = filePath.getFileName().toString(); + String mediaHouseId = FilenameUtils.removeExtension(fileName); + try { + result = getPlanAirMetadata(mediaHouseId); + } catch (Exception e) { + + logger.error("PlanAir metadata error", e); + //nem latja a drivert pl. + throw e; + } + + if (result == null) { + result = new ArchiveItem(); + BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class); + result.setItemHouseId(df.format(attr.lastModifiedTime().toMillis())); + result.setItemTitle(filePath.getParent().toString()); + result.setMediaHouseId(mediaHouseId); + result.setMediaTitle(fileName); + //TODO kesobb kivenni + //result.setMediaDescription("/OMARCHIVE"); + result.setMediaType("Generic"); + } + + result.setMediaFile(filePath.toString()); + return result; + } + + @StepEntry + public Object[] execute(String sourcePath, int killDateDays, int limit) throws Exception { + this.killDateDays = killDateDays; + this.limit = limit; + try { + if (getJobRuntime().forkPrepare()) { + Files.walkFileTree(Paths.get(sourcePath), this); + } + } catch (Exception e) { + logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage()); + } finally { + if (submitted > 0) + getJobRuntime().forkWaitComplete(); + else + getJobRuntime().cancelForkPrepare(); + + } + return null; + } + + private ArchiveItem getPlanAirMetadata(String mediaHouseId) throws Exception { + PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions(); + opt.setSearch(mediaHouseId); + opt.setType(MetadataType.Material); + + BasicDBObject json = null; + List data = null; + + IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class); + IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR); + + ArchiveItem result = null; + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + else { + opt.setType(MetadataType.Promo); + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + else { + opt.setType(MetadataType.AD); + data = planairProvider.list(opt); + if (data.size() != 0) + json = data.get(0).asJSON(); + } + } + if (json != null) { + result = new ArchiveItem(); + result.setItemHouseId(json.getString(ITEM_HOUSEID)); + result.setItemTitle(json.getString(ITEM_TITLE)); + result.setMediaHouseId(json.getString(MEDIA_HOUSEID)); + result.setMediaTitle(json.getString(MEDIA_TITLE)); + result.setMediaDescription(json.getString(MEDIA_DESCRIPTION)); + result.setMediaType(json.getString(MEDIA_TYPE)); + } + return result; + } + + private boolean handleArchiveConflict(Path mediaPath) throws Exception { + boolean result = false; + String sourceFileName = mediaPath.getFileName().toString(); + if (getManager().isMediaFileExists(sourceFileName)) { + EscortFiles.createMediaCatch(mediaPath); + result = true; + + // try { + // Path parent = sourcePath.getParent(); + // Path conflictPath = Paths.get(parent.toString(), CONFLICT); + // File folder = conflictPath.toFile(); + // if (!folder.exists() || !folder.isDirectory()) { + // Set perms = PosixFilePermissions.fromString("rwxrwxrwx"); + // FileAttribute> attr = PosixFilePermissions.asFileAttribute(perms); + // try { + // Files.createDirectories(conflictPath, attr); + // } catch (Exception e) { + // try { + // Files.createDirectory(conflictPath); + // } catch (Exception e1) { + // logger.catching(e); + // throw e; + // } + // } + // } + // + // Path conflictFile = Paths.get(conflictPath.toString(), sourceFileName); + // if (conflictFile.toFile().exists()) + // conflictFile = Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime()); + // Files.move(sourcePath, conflictFile); + // result = true; + // } catch (Exception e1) { + // logger.error(getSessionMarker(), "Hiba az '{}' állomány mappába mozgatásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage()); + // } + } + + return result; + } + + @Override + public FileVisitResult postVisitDirectory(Path paramT, IOException paramIOException) throws IOException { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException { + Path dirName = dir.getFileName(); + logger.info("PreVisit {}", dir); + + if (skipPathNames.contains(dirName.toString())) + return FileVisitResult.SKIP_SUBTREE; + else + logger.info("PreVisit {}", dir); + + return FileVisitResult.CONTINUE; + } + + private boolean processPathItem(Path mediaPath) throws Exception { + if (submitted == limit) + return false; + + // if (!"Transfered".equals(mediaPath.getParent().getFileName().toString())) + // return false; + + if (mediaPath.getFileName().toString().startsWith(".")) + return false; + + File mediaFile = mediaPath.toFile(); + if (mediaFile.isDirectory()) + return false; + + if (EscortFiles.isMediaCatched(mediaPath)) + return false; + + if (handleArchiveConflict(mediaPath)) + return false; + + if (!canReadMediaInfo(mediaPath)) + return false; + + ArchiveItem archiveItem = createArchiveItem(mediaPath); + + try { + checkArchiveItem(archiveItem, mediaPath); + submitted++; + + Map parameters = ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays); + IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> { + if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) + EscortFiles.removeMediaCatch(mediaPath); + }, JOBTEMPLATE, ARCHIVE, 1, IJobEngine.DEFAULT_OWNER, parameters); + if (runtime == null) + throw new Exception("Submit returned null runtime"); + runtime.setRelated(mediaPath.toString()); + EscortFiles.createMediaCatch(mediaPath); + } catch (Exception e) { + String fileName = new File(archiveItem.getMediaFile()).getName(); + logger.error(getSessionMarker(), "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", fileName, e.getMessage()); + } + + return true; + } + + @Override + public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException { + //logger.info("Will archived {}", filePath); + try { + processPathItem(filePath); + } catch (Exception e) { + logger.catching(e); + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(Path filePath, IOException paramIOException) throws IOException { + logger.info("Error archive {}", filePath); + return FileVisitResult.CONTINUE; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/BatchRetrieveForkStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/BatchRetrieveForkStep.java new file mode 100644 index 00000000..15cf36c1 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/BatchRetrieveForkStep.java @@ -0,0 +1,76 @@ +package user.jobengine.server.steps; + +import java.util.List; +import java.util.Map; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.MediaCubeFinishMarker; +import user.commons.MediaCubeMarker; +import user.jobengine.db.ArchivedMedia; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; +import user.jobengine.server.scheduler.ScheduledJob; + +public class BatchRetrieveForkStep extends JobStep { + private static final String TARGET_PATH_TYPE = "targetPathType"; + private static final Logger logger = LogManager.getLogger(); + private static final String CHILD_TEMPLATE = "retrieve-ondemand.xml"; + private static final String ARCHIVEDMEDIA = "archivedMedia"; + private static final String RECIPIENT = "successRecipient"; + private static final String HOUSEID = "houseId"; + private MediaCubeMarker marker; + + @StepEntry + public Object[] execute(List basket, String houseId, String recipient, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime) + throws Exception { + marker = (MediaCubeMarker) jobRuntime.getSessionMarker(); + + //session szinten csak a finishMarker cimzettje az erdekes, es ezt a cimet pluszban hasznalja a konfigban megadott cimmel + //a finishMarker orokli a cim bellitast a sessionMarkertol + marker.setTo(recipient); + + ((MediaCubeMarker) jobRuntime.getFinishMarker()).setTo(recipient); + + if (basket == null || basket.size() == 0) + return null; + setProgress(10); + + MediaCubeMarker mailMarker = new MediaCubeMarker(recipient); + mailMarker.setSessionName("Archívum viszatöltés"); + mailMarker.setSessionID(houseId); + logger.info(mailMarker, "A visszatöltések elindultak az alábbi állományokra:"); + + if (jobRuntime.forkPrepare()) { + for (ArchivedMedia archivedMedia : basket) { + logger.info(mailMarker, archivedMedia.getMedia().getMediaFilesName()); + submit(archivedMedia, recipient, houseId, targetPathType, jobEngine, jobRuntime); + } + } + setProgress(50); + logger.info(new MediaCubeFinishMarker(mailMarker), "A visszatöltések végeztével megerősítő üzenetet küldünk."); + jobRuntime.forkWaitComplete(); + setProgress(100); + return null; + } + + public void submit(ArchivedMedia archivedMedia, String recipient, String houseId, String targetPathType, IJobEngine jobEngine, IJobRuntime jobRuntime) + throws Exception { + try { + ScheduledJob scheduledJob = jobEngine.getScheduledJob(CHILD_TEMPLATE); + Map parameters = scheduledJob.getJobParameters(); + parameters.put(ARCHIVEDMEDIA, archivedMedia); + parameters.put(HOUSEID, houseId); + parameters.put(RECIPIENT, recipient); + parameters.put(TARGET_PATH_TYPE, targetPathType); + IJobRuntime child = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, String.format("Visszatöltés %s részére", recipient), parameters); + ((MediaCubeMarker) child.getSessionMarker()).setTo(recipient); + } catch (Exception e) { + logger.catching(e); + logger.error(marker, "Hiba a kötegelt visszatöltésben. A rendszer üzenete: {}", e.getMessage()); + } + + } + +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/CancelableStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/CancelableStep.java new file mode 100644 index 00000000..7fc1a4cc --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/CancelableStep.java @@ -0,0 +1,66 @@ +package user.jobengine.server.steps; + +import org.apache.commons.net.ftp.FTPClient; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +import user.commons.StoreUri; +import user.commons.remotestore.FtpDirectoryLister; +import user.commons.remotestore.RemoteStoreProtocol; + +public class CancelableStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + int count = 10; + + @StepEntry + public Object[] execute(int param) throws Exception { + try { + logger.info("{}", EscortFiles.DOT_CATCHED); + + getJobRuntime().setRelated("TESZT1"); + + // ftpTest(); + + Marker marker = MarkerManager.getMarker("MEDIAPROFILE"); + + for (int i = 0; i < count; i++) { + if (getJobRuntime().isWaitingCancel()) + break; + Thread.sleep(500); + int progress = (i + 1) * 100 / count; + setProgress(progress); + logger.info(marker, "{}", i); + } + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + return null; + } + + void ftpTest() throws Exception { + StoreUri source = null; + StoreUri target = null; + try { + source = getManager().getStoreUri("MEDIACUBE_UPLOADS", RemoteStoreProtocol.LOCAL); + target = getManager().getStoreUri("NEXIO1", RemoteStoreProtocol.FTP); + source.addProgressListener(e -> setProgress(e.getProgress())); + logger.info("Uploading file PART_TEST.mxf"); + source.transferFrom(target, "PART_TEST.mxf", "PART_TEST.mxf"); + FTPClient client = ((FtpDirectoryLister) target.getLister()).connect(); + logger.info("Renaming file PART_TEST.mxf to RENAME_TEST.mxf"); + client.rename("PART_TEST.mxf", "RENAME_TEST.mxf"); + } catch (Exception e) { + logger.catching(e); + } finally { + if (target != null) + target.cleanUp(); + if (source != null) + source.cleanUp(); + } + + } + +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/CleanupMountedLocationStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/CleanupMountedLocationStep.java new file mode 100644 index 00000000..4e6f10d1 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/CleanupMountedLocationStep.java @@ -0,0 +1,316 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.commons.RemoteFile; +import user.commons.StoreUri; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.Store; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class CleanupMountedLocationStep extends JobStep implements FileVisitor { + + private static final Logger logger = LogManager.getLogger(); + private static final String PROJECTFOLDER = "PROJECT"; + private static final String DATEFORMAT = "yyyyMMdd"; + private static final String DOT = "."; + private static final String STATUSFOLDER = ".STATUS"; + private static final String EWC2EXT = ".ewc2"; + private static final String XMPEXT = ".xmp"; + private static final String CATCHEDEXT = ".catched"; + private static final String KILLDATEEXT = ".killdate"; + private static final String JSONEXT = ".json"; + + private static boolean isEmpty(final Path directory) throws IOException { + try (DirectoryStream dirStream = Files.newDirectoryStream(directory)) { + final int[] count = new int[] { 0 }; + final int[] specialCount = new int[] { 0 }; + dirStream.forEach(p -> { + count[0]++; + // if (p.getFileName().toString().toLowerCase().equals(PROJECTFOLDER.toLowerCase())) + // specialCount[0]++; + if (p.getFileName().toString().toLowerCase().equals(STATUSFOLDER.toLowerCase())) + specialCount[0]++; + + }); + if (specialCount[0] == count[0]) + return true; + } + return false; + } + + private Marker marker; + + final int[] allCount = new int[] { 0 }; + final int[] currentCount = new int[] { 0 }; + + private Path sourcePath; + private SimpleDateFormat dateFormat; + private StoreUri tsmStoreUri; + + private Date checkExpiration(List killDateFiles) { + Date killDate = null; + for (Path killDateFile : killDateFiles) { + Date currentKillDate = getKillDate(killDateFile); + if (currentKillDate == null) + continue; + if ((killDate != null && currentKillDate.after(killDate)) || killDate == null) + killDate = currentKillDate; + } + return new Date().after(killDate) ? killDate : null; + } + + @StepEntry + public Object[] execute(String sourceFolder, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = getSessionMarker(); + sourcePath = Paths.get(sourceFolder); + DirectoryStream directoryStream = null; + if (StringUtils.isBlank(sourcePath.toString())) { + logger.error(marker, "A folyamat 'sourcePath' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'sourceFolder' input parameter missing."); + } + + if (!sourcePath.toFile().exists() || !sourcePath.toFile().isDirectory()) { + logger.error(marker, "A {} mappa nem létezik.", sourceFolder); + throw new NullPointerException(String.format("Directory %s not exists.", sourceFolder)); + } + + Store tsmStore = getManager().getSystemStore(false); + if (tsmStore == null) + throw new NullPointerException("A TSM bejegyzés nem található!"); + + tsmStoreUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM); + if (tsmStoreUri == null) + throw new NullPointerException("A TSM forrás elérése nem található!"); + + try { + setProgress(1); + dateFormat = new SimpleDateFormat(DATEFORMAT); + + Files.walkFileTree(sourcePath, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + allCount[0]++; + return super.visitFile(file, attrs); + } + }); + Files.walkFileTree(sourcePath, this); + } catch (Exception e) { + logger.catching(e); + logger.error(marker, "Hiba a '{}' mappa feldolgozásában. A rendszer hibaüzenete: {}", sourcePath, e.getMessage()); + throw e; + } finally { + if (directoryStream != null) { + try { + directoryStream.close(); + } catch (IOException e) { + } + } + } + return null; + } + + private Date getKillDate(Path killDateFile) { + String fileName = killDateFile.getFileName().toString(); + int end = fileName.lastIndexOf(DOT); + if (end < 1) + return null; + int start = fileName.lastIndexOf(DOT, end - 1); + if (start < 0) + return null; + String strKillDate = fileName.substring(start + 1, end); + Date result = null; + if (StringUtils.isNumeric(strKillDate)) { + try { + result = dateFormat.parse(strKillDate); + } catch (ParseException e) { + logger.error(marker, "A {} fájl 'killdate' állománya hibás formátumú, a {} karaktersorozat nem konvertálható dátummá.", fileName, strKillDate); + return null; + } + } else + logger.error(marker, "A {} fájl 'killdate' állománya hibás formátumú, az dátum helyett ez áll: '{}'.", fileName, strKillDate); + return result; + } + + private List getKillDateFiles(Path filePath) { + String killDateFilePattern = String.format("%s.*%s", filePath.getFileName().toString(), KILLDATEEXT); + List result = new ArrayList<>(); + Path statusPath = null; + try { + statusPath = Paths.get(filePath.getParent().toString(), STATUSFOLDER); + } catch (Exception e) { + logger.catching(e); + return null; + } + File statusPathFile = statusPath.toFile(); + if (statusPathFile.exists() && statusPathFile.isDirectory()) { + try (DirectoryStream stream = Files.newDirectoryStream(statusPath, killDateFilePattern)) { + stream.forEach(p -> result.add(p)); + } catch (Exception e) { + logger.catching(e); + } + } + Collections.sort(result); + return result; + } + + private boolean isArchived(Path filePath) { + boolean result = false; + String name = filePath.getFileName().toString(); + String[] tsmName = new String[] { null }; + String query = String.format("SELECT relativepath FROM MEDIAFILE WHERE houseid = '%s'", name); + getManager().executeQuery(query, rs -> { + tsmName[0] = rs.getString("relativepath"); + return false; + }, null); + + if (tsmName[0] != null) { + try { + RemoteFile remoteFile = tsmStoreUri.getRemoteFile(tsmName[0]); + result = remoteFile != null; + } catch (Exception e) { + logger.error(e.getMessage()); + } finally { + tsmStoreUri.cleanUp(); + } + } + return result; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + if (!dir.equals(sourcePath) && isEmpty(dir)) { + if (!removeExistingSpecialDirectory(dir, PROJECTFOLDER)) + return FileVisitResult.CONTINUE; + if (!removeExistingSpecialDirectory(dir, STATUSFOLDER)) + return FileVisitResult.CONTINUE; + if (removeFile(dir)) + logger.info(marker, "A {} üres mappa törlése sikeres.", dir); + + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + + //A .-al kezdodo mappakat kihagyjuk + if (dir.getFileName().toString().startsWith(".")) + return FileVisitResult.SKIP_SUBTREE; + + return FileVisitResult.CONTINUE; + } + + private void processPathItem(Path filePath) { + currentCount[0]++; + + if (filePath.getFileName().toString().startsWith(".")) + return; + + int progress = currentCount[0] * 100 / allCount[0]; + setProgress(progress); + + logger.info("Checking {}", filePath); + List killDateFiles = getKillDateFiles(filePath); + if (killDateFiles == null || killDateFiles.size() == 0) { + logger.warn(marker, "A {} fájlhoz nem található 'killdate' állomány.", filePath); + return; + } + + if (killDateFiles.size() != 1) + logger.warn(marker, "A {} fájlhoz több 'killdate' állomány található, a legújabb dátum határozza meg a törlés időpontját.", filePath); + + Date killDate = checkExpiration(killDateFiles); + if (killDate == null) + return; + + if (!isArchived(filePath)) { + logger.error(marker, "A(z) {} anyag törlésre van kijelölve, de nem található az archívumban.", filePath); + return; + } + + if (removeFiles(filePath, killDateFiles)) + logger.info(marker, "A {} fájl és kapcsolódó állományai a {} killdate bejegyzés alapján sikeresen törlődtek.", filePath.getFileName(), + dateFormat.format(killDate)); + else + logger.warn(marker, "A {} fájl és kapcsolódó állományai a {} killdate bejegyzés alapján csak részlegesen vagy egyáltalán nem törlődtek.", + filePath.getFileName(), dateFormat.format(killDate)); + } + + private boolean removeExistingSpecialDirectory(Path dir, String folderName) throws IOException { + File projectPath = Paths.get(dir.toString(), folderName).toFile(); + if (projectPath.exists() && projectPath.isDirectory()) { + FileUtils.deleteDirectory(projectPath); + if (projectPath.exists()) { + logger.warn(marker, "A {} alatti {} mappa törlése nem sikerült.", dir, folderName); + return false; + } + } + return true; + } + + private boolean removeFile(Path filePath) { + boolean result = false; + try { + //logger.error("REMOVE {}", filePath); + File file = filePath.toFile(); + if (file.exists()) + result = file.delete(); + } catch (Exception e) { + logger.error(marker, "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", filePath, e.getMessage()); + } + return result; + } + + private boolean removeFiles(Path filePath, List killDateFiles) { + if (!removeFile(filePath)) + return false; + + removeFile(Paths.get(filePath.toString() + EWC2EXT)); + removeFile(Paths.get(filePath.toString() + XMPEXT)); + removeFile(Paths.get(filePath.getParent().toString(), STATUSFOLDER, filePath.getFileName().toString() + CATCHEDEXT)); + removeFile(Paths.get(filePath.getParent().toString(), STATUSFOLDER, filePath.getFileName().toString() + JSONEXT)); + + boolean result = true; + for (Path killDateFile : killDateFiles) { + if (!removeFile(killDateFile)) + result = false; + } + + return result; + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + processPathItem(file); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(Path file, IOException e) throws IOException { + logger.error(marker, "A {} fájl nem érhető el. A rendszer hibaüzenete: {}", file.toString(), e.getMessage()); + return FileVisitResult.CONTINUE; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateArchiveItemStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateArchiveItemStep.java new file mode 100644 index 00000000..b169edf5 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateArchiveItemStep.java @@ -0,0 +1,45 @@ +package user.jobengine.server.steps; + +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; + +import user.commons.nosql.NoSQLUtils; +import user.jobengine.db.Media; +import user.jobengine.db.Store; + +public class CreateArchiveItemStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + + @StepEntry + public Object[] execute(Media mediaCubeMedia, String localHiresPath) throws Exception { + DB db = NoSQLUtils.getNoSQLDB(); + DBCollection collection = db.getCollection("missing_lowres"); + Store highResStore = getManager().getSystemStore(false); + + ArchiveItem archiveItem = null; + try { + if (mediaCubeMedia.getMediaFilesCount() != 1) + throw new Exception("Expected media count is 1, found " + mediaCubeMedia.getMediaFilesCount()); + if (mediaCubeMedia.getMediaFiles().get(0).getStoreId() != highResStore.getId()) + throw new Exception("Expected media store is a high-res store"); + + String name = mediaCubeMedia.getMediaFileRealName(); + archiveItem = new ArchiveItem(); + archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString()); + collection.save(new BasicDBObject("name", name)); + } catch (Exception e) { + logger.catching(e); + logger.info(getMarker(), e.getMessage()); + throw e; + } finally { + setProgress(100); + } + return new Object[] { archiveItem }; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateMissingLowresStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateMissingLowresStep.java new file mode 100644 index 00000000..5a1ddc5f --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/CreateMissingLowresStep.java @@ -0,0 +1,80 @@ +package user.jobengine.server.steps; + +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; + +import user.commons.MediaCubeMarker; +import user.commons.MediaCubeUndoMarker; +import user.commons.nosql.NoSQLUtils; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Media; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class CreateMissingLowresStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private MediaCubeMarker marker; + + @StepEntry + public Object[] execute(String localHiresPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + Object[] result = new Object[] { null, null, "%s", null, 0, true }; + marker = (MediaCubeMarker) jobRuntime.getSessionMarker(); + DB db = NoSQLUtils.getNoSQLDB(); + DBCollection collection = db.getCollection("missing_lowres"); + IItemManager manager = jobEngine.getItemManager(); + Media media = getFirstUntranscodedMedia(manager, collection); + + try { + if (media == null) { + logger.info(new MediaCubeUndoMarker(marker.getSessionID()), "Nincs feldolgozandó hiány."); + // throw new Exception("Nincs feldolgozandó hiány."); + cancel(); + return null; + } + + String name = media.getMediaFileRealName(); + result[0] = media; + ArchiveItem archiveItem = new ArchiveItem(); + archiveItem.setMediaFile(Paths.get(localHiresPath, name).toString()); + result[1] = archiveItem; + collection.save(new BasicDBObject("name", name)); + logger.info(marker, "Hiányzó lowres mediaId: {}", media.getId()); + + } catch (Exception e) { + logger.catching(e); + logger.info(marker, e.getMessage()); + throw e; + } finally { + setProgress(100); + } + return result; + } + + private Media getFirstUntranscodedMedia(IItemManager manager, DBCollection collection) { + Media[] result = new Media[] { null }; + String query = "SELECT mediaid FROM VW_MISSING_PROXY_IDS WHERE HOUSEID like 'M%' or HOUSEID like 'P%' or HOUSEID like 'R%' ORDER BY modified DESC FETCH FIRST ROW ONLY"; + manager.executeQuery(query, rs -> { + try { + long mediaId = rs.getLong(1); + Media media = manager.getMedia(mediaId); + //a nevgeneralas miatt az eredeti MediaFilesName nem jo, a pontos nev kell nekunk + String name = media.getMediaFileRealName(); + long existing = collection.find(new BasicDBObject("name", name)).count(); + if (existing > 0) + return true; + + result[0] = media; + } catch (Exception e) { + logger.error(e); + } + return false; + }, null); + return result[0]; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/FileCopyStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/FileCopyStep.java new file mode 100644 index 00000000..c4172550 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/FileCopyStep.java @@ -0,0 +1,95 @@ +package user.jobengine.server.steps; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.commons.StoreUri; +import user.commons.remotestore.IProgressEventListener; +import user.commons.remotestore.ProgressEvent; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.IItemManager; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class FileCopyStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private IItemManager manager; + private Marker marker; + + private void check(String sourceProtocol, String sourcePath, String sourceFileName, String targetProtocol, String targetPath, String targetFileName, + IJobEngine jobEngine, IJobRuntime jobRuntime) { + if (jobEngine == null) { + logger.error(marker, "A folyamatkezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing JobEngine reference."); + } + manager = jobEngine.getItemManager(); + if (manager == null) { + logger.error(marker, "Az adatbáziskezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing ItemManager reference."); + } + if (sourceProtocol == null) { + logger.error(marker, "A forrás protokol bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'sourceProtocol' input parameter missing."); + } + if (sourcePath == null) { + logger.error(marker, "A forrás fájl elérés bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'sourcePath' input parameter missing."); + } + if (sourceFileName == null) { + logger.error(marker, "A forrás fájlnév bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'sourceFileName' input parameter missing."); + } + if (targetProtocol == null) { + logger.error(marker, "A cél protokol bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'targetProtocol' input parameter missing."); + } + if (targetPath == null) { + logger.error(marker, "A cél fájl elérés bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing."); + } + if (targetFileName == null) { + logger.error(marker, "A cél fájlnév bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'targetFileName' input parameter missing."); + } + } + + @StepEntry + public Object[] execute(String sourceProtocol, String sourcePath, String sourceFileName, String targetProtocol, String targetPath, String targetFileName, + int killDateDays, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = jobRuntime.getSessionMarker(); + + check(sourceProtocol, sourcePath, sourceFileName, targetProtocol, targetPath, targetFileName, jobEngine, jobRuntime); + + StoreUri source = null; + StoreUri target = null; + + try { + source = manager.createStoreUri(Enum.valueOf(RemoteStoreProtocol.class, sourceProtocol), sourcePath); + target = manager.createStoreUri(Enum.valueOf(RemoteStoreProtocol.class, targetProtocol), targetPath); + source.addProgressListener(new IProgressEventListener() { + @Override + public void progressChanged(ProgressEvent evt) { + jobRuntime.incrementProgress(evt.getProgress()); + } + }); + + source.transferFrom(target, sourceFileName, targetFileName); + if (killDateDays > -1) + EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker); + + } catch (Exception e) { + logger.catching(e); + throw e; + } finally { + if (source != null) { + source.cleanUp(); + } + if (target != null) { + target.cleanUp(); + } + } + + return null; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/HSMMigrateStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/HSMMigrateStep.java new file mode 100644 index 00000000..6b85f1d7 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/HSMMigrateStep.java @@ -0,0 +1,401 @@ +package user.jobengine.server.steps; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.BasicFileAttributes; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.io.FilenameUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import com.ibm.nosql.json.api.BasicDBObject; +import com.ibm.nosql.json.api.DB; +import com.ibm.nosql.json.api.DBCollection; +import com.ibm.nosql.json.api.QueryBuilder; + +import user.commons.IEntityBase; +import user.commons.MediaCubeMarker; +import user.commons.nosql.NoSQLUtils; +import user.jobengine.db.IItemManager; +import user.jobengine.db.MediaFile; +import user.jobengine.db.MediaFileDAO; +import user.mediacube.metadata.interfaces.IMetadata; +import user.mediacube.metadata.interfaces.IMetadataProvider; +import user.mediacube.metadata.interfaces.IMetadataProviderFactory; +import user.mediacube.metadata.interfaces.MetadataProviderType; +import user.mediacube.metadata.interfaces.MetadataType; +import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions; + +public class HSMMigrateStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private static final String MXFEXT = ".mxf"; + private static final String MOVEXT = ".mov"; + private Marker marker = null; + private IMetadataProvider hsmProvider; + private Map tapeContents = new LinkedHashMap<>(); + private DBCollection excludes; + private DBCollection fileHistory; + private DBCollection volumeHistory; + private DB db; + private IMetadataProvider planairProvider; + private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd"); + + private void cleanupHistory() { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (fileHistory == null) + fileHistory = db.getCollection("hsm_migrate_file_history"); + if (volumeHistory == null) + volumeHistory = db.getCollection("hsm_migrate_volume_history"); + fileHistory.drop(); + volumeHistory.drop(); + } + + private BasicDBObject createMetadata(String volumeName, String fileName) throws Exception { + + Path filePath = Paths.get(fileName); + String mediaHouseId = FilenameUtils.removeExtension(filePath.getFileName().toString()); + BasicDBObject result = null; + try { + result = getPlanAirMetadata(mediaHouseId); + } catch (Exception e) { + + logger.error("PlanAir metadata error", e); + //nem latja a drivert pl. + //throw e; + } + + if (result == null) { + result = new BasicDBObject(); + BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class); + result.put("itemHouseId", df.format(attr.lastModifiedTime().toMillis())); + result.put("itemTitle", filePath.getParent().toString()); + result.put("mediaHouseId", mediaHouseId); + result.put("mediaTitle", fileName); + result.put("mediaDescription", volumeName); + result.put("mediaType", "Generic"); + } + result.put("userName", "mediacube"); + return result; + } + + @SuppressWarnings("serial") + @StepEntry + public Object[] execute(String sourceLocation, String targetLocation) throws Exception { + marker = getJobRuntime().getSessionMarker(); + //remove from prod + //cleanupHistory(); + hsmProvider = getMetadataProvider(MetadataProviderType.HSM); + if (hsmProvider == null) + throw new NullPointerException("No HSM metadata provider available"); + planairProvider = getMetadataProvider(MetadataProviderType.PLANAIR); + if (planairProvider == null) + throw new NullPointerException("No PLANAIR metadata provider available"); + Path targetPath = Paths.get(targetLocation); + try { + List volumes = hsmProvider.list(new BasicDBObject()); + for (IMetadata volume : volumes) { + String volumeName = volume.getTitle(); + + BasicDBObject historyResult = queryVolumeHistory(volumeName); + if (historyResult != null) { + logger.info(marker, "A kazetta már feldolgozásra került: {}", volumeName); + continue; + } + logger.info(marker, "A kazetta feldolgozása elindul: {}", volumeName); + List contents = getContents(volumeName); + int p = 0; + boolean oneSuccess = false; + boolean hasError = false; + for (IMetadata content : contents) { + BasicDBObject c = content.asJSON(); + String hsmFileName = c.getString("fileName"); + long contentFileSize = NoSQLUtils.asLong(c, "fileSize"); + if (!tapeContents.containsKey(hsmFileName)) { + tapeContents.put(hsmFileName, c); + Path sourceFilePath = Paths.get(sourceLocation, hsmFileName); + if (contentFileSize < Files.getFileStore(targetPath).getUsableSpace()) { + Path targetFilePath = Paths.get(targetLocation, sourceFilePath.getFileName().toString()); + + try { + if (processHSMFile(volumeName, hsmFileName, sourceFilePath, targetFilePath)) { + oneSuccess = true; + } + } catch (Exception e) { + hasError = true; + } + } + } + setProgress(p++ * 100 / contents.size()); + + if (getJobRuntime().isWaitingCancel()) { + logger.info("Job canceled by user"); + //ne mentsuk a szalagot meg + return null; + } + + } + + if (oneSuccess && !hasError) { + saveVolumeHistory(volumeName); + String subject = "A kazetta eltávolítható a HSM rendszerből: " + volumeName; + logger.info(new MediaCubeMarker() { + { + setSubject(subject); + } + }, subject); + } + + //ha mar sikerult valamit archivalni kilepunk + if (oneSuccess) + break; + } + } catch (Exception e) { + logger.error(marker, "Hiba a migráció során. A rendszer hibaüzenete: {}", e.getMessage()); + throw e; + } + + return null; + } + + private List getContents(String volumeName) throws Exception { + List contents = null; + contents = hsmProvider.list(new BasicDBObject("volumeName", volumeName)); + return contents; + } + + protected IMetadataProvider getMetadataProvider(MetadataProviderType type) { + IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class); + if (factory == null) + return null; + return factory.getProvider(type); + } + + private BasicDBObject getPlanAirMetadata(String mediaHouseId) throws Exception { + PlanAirMetadataListOptions opt = new PlanAirMetadataListOptions(); + opt.setSearch(mediaHouseId); + + List result = null; + opt.setType(MetadataType.Material); + result = planairProvider.list(opt); + if (result.size() != 0) + return result.get(0).asJSON(); + + opt.setType(MetadataType.Promo); + result = planairProvider.list(opt); + if (result.size() != 0) + return result.get(0).asJSON(); + + opt.setType(MetadataType.AD); + result = planairProvider.list(opt); + if (result.size() != 0) + return result.get(0).asJSON(); + + return null; + } + + //true if need copy + public boolean prepareCopy(String hsmFileName, Path source, Path target) throws IOException { + boolean result = true; + BasicDBObject excludeResult = queryExclude(hsmFileName); + if (excludeResult != null) { + logger.warn(marker, "Kivételként megjelölt: {}", hsmFileName); + return false; + } + + File sourceFile = source.toFile(); + File targetFile = target.toFile(); + + if (!sourceFile.exists()) { + logger.warn(marker, "A forrás nem elérhető: {}", source); + return false; + } + + // BasicDBObject historyResult = queryFileHistory(contentFileName); + // if (historyResult != null) + // return false; + + // if (!mediaFile.getName().toLowerCase().endsWith(MOVEXT.toLowerCase()) && !mediaFile.getName().toLowerCase().endsWith(MXFEXT.toLowerCase())) + // return; + // logger.info("Start copy from {} to {}", sourceFilePath, targetFilePath); + + boolean targetExists = targetFile.exists(); + + long targetLength = targetFile.length(); + long sourceLength = sourceFile.length(); + + if (targetLength == sourceLength) { + logger.warn(marker, "A fájl már fel van dolgozva: {}, {} -> {}", source, sourceLength, targetLength); + return false; + } + + if (targetLength > sourceLength) { + logger.warn(marker, "A célfájl nagyobb, törlöm: {}", target); + Files.delete(target); + targetLength = 0; + targetExists = false; + } + + if (targetExists) { + logger.warn(marker, "A fájl már létezik, a másolás folytatódik: {}, {} -> {}", target, sourceLength, targetLength); + } else + logger.warn(marker, "Migrálás: {}, {} -> {}", source, sourceLength, targetLength); + + return result; + } + + private boolean processHSMFile(String volumeName, String hsmFileName, Path sourceFilePath, Path targetFilePath) throws Exception { + int repeat = 4; + boolean successCopy = false; + + IItemManager manager = getManager(); + MediaFileDAO mfDAO = (MediaFileDAO) manager.getBaseDAO(MediaFile.class); + List mediaFiles = mfDAO.getByHouseId(sourceFilePath.getFileName().toString()); + if (mediaFiles != null && mediaFiles.size() > 0) { + logger.warn(marker, "Már archivált: {}", hsmFileName); + return false; + } + + if (prepareCopy(hsmFileName, sourceFilePath, targetFilePath)) { + while (repeat > 0) { + try { + resumeableCopy(sourceFilePath, targetFilePath); + repeat = 0; + successCopy = true; + } catch (Exception e) { + if (Files.exists(targetFilePath) && targetFilePath.toFile().length() == 0) + Files.delete(targetFilePath); + //logger.warn(marker, "Hiba a másolás során: {} ({})", sourceFilePath, e.getMessage()); + repeat--; + } + } + } + String metadataFileName = sourceFilePath.getFileName() + EscortFiles.DOT_JSON; + Path metadataPath = Paths.get(targetFilePath.getParent().toString(), EscortFiles.STATUSFOLDER, metadataFileName); + boolean createMetadata = Files.exists(targetFilePath) && !Files.exists(metadataPath); + + if (successCopy || createMetadata) { + String metadata = null; + try { + metadata = createMetadata(volumeName, hsmFileName).toPrettyString(""); + EscortFiles.createMetadata(targetFilePath.getParent().toString(), targetFilePath.getFileName().toString(), metadata); + //saveFileHistory(contentFileName); + + } catch (Exception e) { + logger.error(marker, "Metadata error", e); + return false; + } + return true; + } + + logger.error(marker, "A fájl másolása nem lehetséges: {}", sourceFilePath); + return false; + } + + public BasicDBObject queryExclude(String fileName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (excludes == null) + excludes = db.getCollection("hsm_migrate_exclude"); + Path filePath = Paths.get(fileName); + String pureFileName = FilenameUtils.removeExtension(filePath.getFileName().toString()); + QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(fileName, pureFileName)); + BasicDBObject exceptionResult = NoSQLUtils.asSingle(excludes.find(qb.get())); + return exceptionResult; + } + + public BasicDBObject queryFileHistory(String fileName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (fileHistory == null) + fileHistory = db.getCollection("hsm_migrate_file_history"); + QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(fileName)); + BasicDBObject historyResult = NoSQLUtils.asSingle(fileHistory.find(qb.get())); + return historyResult; + } + + public BasicDBObject queryVolumeHistory(String volumeName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (volumeHistory == null) + volumeHistory = db.getCollection("hsm_migrate_volume_history"); + QueryBuilder qb = QueryBuilder.start("name").in(Arrays.asList(volumeName)); + BasicDBObject historyResult = NoSQLUtils.asSingle(volumeHistory.find(qb.get())); + return historyResult; + } + + public void resumeableCopy(Path source, Path target) throws Exception { + File sourceFile = source.toFile(); + File targetFile = target.toFile(); + boolean targetExists = targetFile.exists(); + + long targetLength = targetFile.length(); + long sourceLength = sourceFile.length(); + + try (InputStream in = new BufferedInputStream(new FileInputStream(sourceFile)); + OutputStream out = new BufferedOutputStream(new FileOutputStream(targetFile, targetExists))) { + + byte[] buffer = new byte[128 * 1024]; + int lengthRead; + + if (targetExists) + in.skip(targetLength); + + while ((lengthRead = in.read(buffer)) > 0) { + out.write(buffer, 0, lengthRead); + out.flush(); + targetLength = targetFile.length(); + if (targetLength > sourceLength) { + throw new Exception("Hiba! A fájl túl nagy lett."); + } + + if (getJobRuntime().isWaitingCancel()) { + break; + } + } + + targetLength = targetFile.length(); + sourceLength = sourceFile.length(); + if (targetLength != sourceLength) { + throw new Exception("Hiba! A fájl mérete nem egyezik."); + } + } + } + + private void saveFileHistory(String fileName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (fileHistory == null) + fileHistory = db.getCollection("hsm_migrate_file_history"); + BasicDBObject item = new BasicDBObject(); + item.put("name", fileName); + fileHistory.save(item); + + } + + private void saveVolumeHistory(String volumeName) { + if (db == null) + db = NoSQLUtils.getNoSQLDB(); + if (volumeHistory == null) + volumeHistory = db.getCollection("hsm_migrate_volume_history"); + BasicDBObject item = new BasicDBObject(); + item.put("name", volumeName); + volumeHistory.save(item); + + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/MXFCutterStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MXFCutterStep.java new file mode 100644 index 00000000..58a5944d --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MXFCutterStep.java @@ -0,0 +1,129 @@ +package user.jobengine.server.steps; + +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.commons.RemoteFile; +import user.commons.StoreUri; +import user.commons.remotestore.IProgressEventListener; +import user.commons.remotestore.ProgressEvent; +import user.commons.remotestore.RemoteStoreProtocol; +//import user.jobengine.db.Media; +import user.jobengine.db.ArchivedMedia; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Store; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class MXFCutterStep extends JobStep { + private static final String TARGETNAMEPATTERN = "-ARCH-%s"; + private static final Logger logger = LogManager.getLogger(); + private IItemManager manager; + private StoreUri tempTargetUri; + private StoreUri tempSourceUri; + private String sourceFileName; + private Marker marker; + private int nexioPort; + private String nexioUserName, nexioPassword; + private String nexioHost; + + protected void checkTargetPath(String targetPath) { + if (StringUtils.isBlank(targetPath)) { + logger.error(marker, "A folyamat 'targetPath' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing."); + } + } + + protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException { + StoreUri result = null; + result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + result.setPortNumber(nexioPort); + result.setUserName(nexioUserName); + result.setPassword(nexioPassword); + + return result; + } + + @StepEntry + public Object[] execute(ArchivedMedia archivedMedia, String targetPath, String houseId, String successRecipient, int killDateDays, boolean useNexioTarget, + String nexioAgency, int nexioPort, String nexioUserName, String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + this.nexioPort = nexioPort; + this.nexioUserName = nexioUserName; + this.nexioPassword = nexioPassword; + nexioHost = System.getProperty("nexio.host"); + marker = jobRuntime.getSessionMarker(); + + if (useNexioTarget && archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) { + setAndCheck(archivedMedia, houseId, targetPath, useNexioTarget, jobEngine); + + final IJobRuntime runtime = jobRuntime; + sourceFileName = houseId + TARGETNAMEPATTERN; + tempSourceUri.addProgressListener(new IProgressEventListener() { + @Override + public void progressChanged(ProgressEvent evt) { + runtime.incrementProgress(evt.getProgress()); + } + }); + + RemoteFile result = tempSourceUri.transferFrom(tempTargetUri, sourceFileName, sourceFileName); + + EscortFiles.setNEXIOKillDate(killDateDays, houseId, nexioAgency, tempTargetUri); + + logger.info("A {} videó kivágva {}s - {}s", sourceFileName, archivedMedia.getTcIn(), archivedMedia.getTcOut()); + } + + return null; + } + + // private String getSourceFileName(ArchivedMedia archivedMedia, Store + // store) { + // List mediaFiles = archivedMedia.getMedia().getMediaFiles(); + // if (mediaFiles == null) + // return null; + // for (MediaFile mediaFile : mediaFiles) { + // if (mediaFile.getStore().getId() == store.getId()) + // return mediaFile.getRelativePath(); + // } + // return null; + // } + + private void setAndCheck(ArchivedMedia archivedMedia, String houseId, String targetPath, boolean useNexioTarget, IJobEngine jobEngine) { + if (jobEngine == null) { + logger.error(marker, "A folyamatkezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing JobEngine reference."); + } + manager = jobEngine.getItemManager(); + if (manager == null) { + logger.error(marker, "Az adatbáziskezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing ItemManager reference."); + } + if (archivedMedia == null) { + logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + checkTargetPath(targetPath); + if (StringUtils.isBlank(houseId)) { + logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'houseId' input parameter missing."); + } + Store tsmStore = manager.getSystemStore(false); + if (tsmStore == null) { + logger.error(marker, "A TSM rendszer beállítás nem elérhető."); + throw new NullPointerException("System is not configured properly, missing TSM Store."); + } + + tempSourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, targetPath); + if (tempSourceUri == null) { + logger.error(marker, "A TSM rendszer beállítás paraméterei nem elérhetőek."); + throw new NullPointerException("System is not configured properly, missing TSM StoreUri."); + } + tempTargetUri = createTargetUri(manager, targetPath); + // sourceFileName = getSourceFileName(archivedMedia, tsmStore); + if (sourceFileName == null) { + logger.error(marker, "Adatbázis bejegyzés hiba, a visszatöltendő fájl neve nem található."); + throw new NullPointerException("Database error, missing MediaFile 'relativePath'."); + } + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/MediaToolStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MediaToolStep.java new file mode 100644 index 00000000..c0c56f68 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MediaToolStep.java @@ -0,0 +1,41 @@ +package user.jobengine.server.steps; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.commons.mediatool.MediaInfo; +import user.jobengine.db.Media; + +public class MediaToolStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private Marker marker; + + @StepEntry + public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia) throws Exception { + marker = getSessionMarker(); + + //TODO ez most minden esetben ujranezi + // if (mediaCubeMedia.getLength() > 0) + // return null; + + Path filePath = Paths.get(archiveItem.getMediaFile()); + MediaInfo mi = new MediaInfo(filePath); + try { + mi.process(); + long frames = mi.getFrames(); + if (frames > 0) { + mediaCubeMedia.setLength(frames); + getManager().modify(mediaCubeMedia); + } + } catch (Exception e) { + logger.catching(e); + logger.error(marker, "A '{}' média analizálása sikertelen. A rendszer üzenete: {}", filePath, e.getMessage()); + } + return null; + } + +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataTransformStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataTransformStep.java new file mode 100644 index 00000000..d1938203 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/MetadataTransformStep.java @@ -0,0 +1,168 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.Date; +import java.util.Set; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import com.ibm.nosql.json.api.BasicDBList; + +import user.jobengine.db.Item; +import user.jobengine.db.ItemManager; +import user.jobengine.db.ItemType; +import user.jobengine.db.Media; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +/** + * Itemek es mediak krealasa a ArchiveItem objektum alapjan. + * + * @author robi + */ +public class MetadataTransformStep extends JobStep { + private static final String CONFLICT = ".CONFLICT"; + private static final Logger logger = LogManager.getLogger(); + private static final String ITEM_MANAGER_IS_NULL = "ItemManager is null"; + public static final String DEFAULT_MEDIATYPE = "Generic"; + private ItemManager itemManager; + + private Marker marker;; + + private void addTags(ArchiveItem archiveItem, Media mediaCubeMedia) { + BasicDBList tags = archiveItem.getTags(); + if (tags != null) { + for (Object tag : tags) { + + try { + String tagText = String.valueOf(tag); + itemManager.addMediaTag(tagText, mediaCubeMedia.getId()); + System.out.println(); + + } catch (Exception e) { + logger.catching(e); + } + } + } + } + + private void checkDuplicates(ArchiveItem archiveItem, String sourceFileName) throws Exception { + if (itemManager.isMediaFileExists(sourceFileName)) { + try { + Path sourcePath = Paths.get(archiveItem.getMediaFile()); + Path parent = sourcePath.getParent(); + Path conflictPath = Paths.get(parent.toString(), CONFLICT); + File folder = conflictPath.toFile(); + if (!folder.exists() || !folder.isDirectory()) { + Set perms = PosixFilePermissions.fromString("rwxrwxrwx"); + FileAttribute> attr = PosixFilePermissions.asFileAttribute(perms); + try { + Files.createDirectories(conflictPath, attr); + } catch (Exception e) { + try { + Files.createDirectory(conflictPath); + } catch (Exception e1) { + logger.catching(e); + throw e; + } + } + } + + Files.move(sourcePath, Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime())); + } catch (Exception e1) { + logger.catching(e1); + logger.error(marker, "Hiba az '{}' állomány mappába másolásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage()); + } + throw new Exception("Az '" + sourceFileName + "' állomány már megtalálható az archívumban, archiválása nem lehetséges."); + } + } + + private Item createItem(ArchiveItem archiveItem) { + Item mediaCubeItem = getExistingItem(archiveItem.getItemHouseId(), archiveItem.getItemTitle()); + if (mediaCubeItem == null) + mediaCubeItem = itemManager.createItem(DEFAULT_MEDIATYPE, archiveItem.getItemTitle(), archiveItem.getItemDescription(), + archiveItem.getItemHouseId()); + return mediaCubeItem; + } + + private Media createMedia(ArchiveItem archiveItem, Item mediaCubeItem, String mediaType) { + Media mediaCubeMedia; + mediaCubeMedia = itemManager.createMedia(mediaType, archiveItem.getMediaTitle(), archiveItem.getMediaDescription(), archiveItem.getMediaHouseId()); + mediaCubeMedia.setLength(archiveItem.getDuration()); + mediaCubeItem.appendMedia(mediaCubeMedia); + + return mediaCubeMedia; + } + + @StepEntry + public Object[] execute(ArchiveItem archiveItem, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = jobRuntime.getSessionMarker(); + Media mediaCubeMedia = null; + itemManager = (ItemManager) jobEngine.getItemManager(); + if (itemManager == null) + throw new NullPointerException(ITEM_MANAGER_IS_NULL); + try { + File sourceMediaFile = new File(archiveItem.getMediaFile()); + String sourceFileName = sourceMediaFile.getName(); + checkDuplicates(archiveItem, sourceFileName); + Item mediaCubeItem = createItem(archiveItem); + jobRuntime.incrementProgress(50); + String mediaType = getCreateType(archiveItem); + mediaCubeMedia = createMedia(archiveItem, mediaCubeItem, mediaType); + //ha itemid 0 akkor merge, egyebkent media insert + + if (mediaCubeItem.getId() == 0) + itemManager.mergeItemStructure(mediaCubeItem); + else { + mediaCubeMedia.setItemId(mediaCubeItem.getId()); + mediaCubeMedia.add(); + } + + addTags(archiveItem, mediaCubeMedia); + + } catch (Exception e) { + logger.catching(e); + String fileName = new File(archiveItem.getMediaFile()).getName(); + logger.error(marker, "Az '{}' állomány nem archiválható, mert a metaadat transzformáció sikertelen. A rendszer üzenete: {}", fileName, + e.getMessage()); + if (!archiveItem.removeCatchedFile()) + logger.error(marker, "Az '{}' állomány .catched jelző állománya nem törölhető.", fileName); + throw e; + } finally { + jobRuntime.incrementProgress(100); + } + return new Object[] { mediaCubeMedia }; + } + + private String getCreateType(ArchiveItem archiveItem) { + String mediaType = archiveItem.getMediaType(); + if (mediaType == null || mediaType.length() == 0) + mediaType = DEFAULT_MEDIATYPE; + else { + ItemType mediaItemType = itemManager.getItemType(mediaType); + if (mediaItemType == null) + itemManager.createItemType(mediaType, mediaType).add(); + } + return mediaType; + } + + private Item getExistingItem(String itemHouseId, String itemTitle) { + Item[] result = new Item[] { null }; + String sql = String.format("select id from item where houseid='%s' and title='%s'", itemHouseId, itemTitle); + itemManager.executeQuery(sql, rs -> { + long id = rs.getLong("id"); + result[0] = itemManager.getItem(id); + return true; + }, null); + return result[0]; + } + +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/OutputPathAndNameSelectorStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/OutputPathAndNameSelectorStep.java new file mode 100644 index 00000000..7148df4c --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/OutputPathAndNameSelectorStep.java @@ -0,0 +1,151 @@ +package user.jobengine.server.steps; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; + +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.jobengine.db.ArchivedMedia; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class OutputPathAndNameSelectorStep extends JobStep { + + private static final String TARGETNAMEPATTERN = "-ARCH-%s"; + + private static final Logger logger = LogManager.getLogger(); + + private Marker marker; + + private void check(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, + String octopusOutputFolder, String genericOutputFolder, String houseId, String targetPathType) { + if (StringUtils.isBlank(localRetrievePath)) { + logger.error(marker, "A folyamat 'localRetrievePath' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'localRetrievePath' input parameter missing."); + } + if (StringUtils.isBlank(materialOutputFolder)) { + logger.error(marker, "A folyamat 'materialOutputFolder' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'materialOutputFolder' input parameter missing."); + } + if (StringUtils.isBlank(promoOutputFolder)) { + logger.error(marker, "A folyamat 'promoOutputFolder' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'promoOutputFolder' input parameter missing."); + } + if (StringUtils.isBlank(advertisementOutputFolder)) { + logger.error(marker, "A folyamat 'advertisementOutputFolder' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'advertisementOutputFolder' input parameter missing."); + } + if (StringUtils.isBlank(octopusOutputFolder)) { + logger.error(marker, "A folyamat 'octopusOutputFolder' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'octopusOutputFolder' input parameter missing."); + } + if (StringUtils.isBlank(genericOutputFolder)) { + logger.error(marker, "A folyamat 'genericOutputFolder' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'genericOutputFolder' input parameter missing."); + } + if (StringUtils.isBlank(houseId)) { + logger.error(marker, "A folyamat 'houseId' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'houseId' input parameter missing."); + } + if (StringUtils.isBlank(targetPathType)) { + logger.error(marker, "A folyamat 'targetPathType' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'targetPathType' input parameter missing."); + } + } + + @StepEntry + public Object[] execute(String localRetrievePath, String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, + String octopusOutputFolder, String genericOutputFolder, String onlineOutputFolder, String houseId, String targetPathType, + ArchivedMedia archivedMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = jobRuntime.getSessionMarker(); + check(localRetrievePath, materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, houseId, + targetPathType); + Object[] result = null; + switch (Integer.parseInt(targetPathType)) { + case 0: + String outputFolder = getFolderById(materialOutputFolder, promoOutputFolder, advertisementOutputFolder, octopusOutputFolder, genericOutputFolder, + houseId, archivedMedia); + result = localTargetInit(localRetrievePath, outputFolder, houseId, jobRuntime); + break; + case 1: + result = localTargetInit(localRetrievePath, onlineOutputFolder, houseId, jobRuntime); + break; + case 2: + + if (archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) + result = new Object[] { genericOutputFolder, houseId, true }; + else + result = new Object[] { null, houseId, true }; + break; + } + return result; + } + + private String getFolderById(String materialOutputFolder, String promoOutputFolder, String advertisementOutputFolder, String octopusOutputFolder, + String genericOutputFolder, String houseId, ArchivedMedia archivedMedia) throws Exception { + String id = houseId.toUpperCase(); + MetadataType mdType = MetadataTypeDetector.GuessMetadataType(id); + String result = null; + + //a groovy nem latja enumnak, hanem az objektum tulajdonsaganak + switch (mdType.toString()) { + case "OctopusPlaceholder": + case "OctopusStory": + result = octopusOutputFolder; + break; + case "TrafficMaterial": + result = materialOutputFolder; + break; + case "TrafficPromo": + result = promoOutputFolder; + break; + case "TrafficAD": + result = advertisementOutputFolder; + break; + case "Generic": + result = genericOutputFolder; + break; + } + return result; + } + + private String getPossiblePath(String id, Path targetPath) throws IOException { + String[] result = new String[] { targetPath.toString() }; + FileVisitor matcherVisitor = new SimpleFileVisitor() { + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + String dirName = dir.getFileName().toString(); + if (dirName.startsWith(id + "-") || dirName.equals(id)) { + result[0] = dir.toString(); + return FileVisitResult.TERMINATE; + } + return FileVisitResult.CONTINUE; + } + }; + Files.walkFileTree(targetPath.getParent(), matcherVisitor); + return result[0]; + } + + private Object[] localTargetInit(String localRetrievePath, String outputFolder, String houseId, IJobRuntime jobRuntime) throws IOException { + String id = houseId.toUpperCase(); + String targetPath = getPossiblePath(id, Paths.get(localRetrievePath, outputFolder, id)).toString(); + String targetNamePattern = houseId + TARGETNAMEPATTERN; + try { + EscortFiles.ensureUNCFolder(Paths.get(targetPath)); + } catch (Exception e) { + logger.error(jobRuntime.getSessionMarker(), "A cél mappa '{}' nem létezik és nem hozható létre. A rendszer hibaüzenete: {}", targetPath, + e.getMessage()); + throw e; + } + return new Object[] { targetPath, targetNamePattern, false }; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMBackupStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMBackupStep.java new file mode 100644 index 00000000..60adc661 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMBackupStep.java @@ -0,0 +1,207 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.attribute.BasicFileAttributes; +import java.sql.Timestamp; +import java.util.Date; +import java.util.List; + +import org.apache.commons.lang.RandomStringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.message.Message; +import org.apache.logging.log4j.message.ParameterizedMessage; + +import user.commons.RemoteFile; +import user.commons.StoreUri; +import user.commons.mediatool.Timecode; +import user.commons.mediatool.Timecode.Type; +import user.commons.remotestore.IProgressEventListener; +import user.commons.remotestore.IStatusEventListener; +import user.commons.remotestore.ProgressEvent; +import user.commons.remotestore.RemoteStoreProtocol; +import user.commons.remotestore.StatusEvent; +import user.jobengine.db.FileType; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Media; +import user.jobengine.db.MediaFile; +import user.jobengine.db.Store; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; +import user.jobengine.server.JobEngineException; + +public class TSMBackupStep extends JobStep { + private static final String MXFEXT = ".MXF"; + private static final Logger logger = LogManager.getLogger(); + private IItemManager manager; + private File sourceMediaFile; + private Store tsmStore; + private StoreUri targetUri; + private FileType fileType; + private Marker marker; + + @StepEntry + public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, int killDateDays) throws Exception { + marker = getSessionMarker(); + + File sourceMediaFile = new File(archiveItem.getMediaFile()); + String sourceFileName = sourceMediaFile.getName(); + Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL); + String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length()); + getJobRuntime().setDescription(details); + try { + + setAndCheck(archiveItem, mediaCubeMedia, getEngine()); + + //TODO mxf helyett az osszes kiterjesztest!!!!! + //A dupla ellenorzes a napon beluli ismetlesek miatt kell + long existingMediaId = archiveItem.getExistingMediaId(); + if (sourceMediaFile.length() == 0 && existingMediaId == 0) { + existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, "")); + if (existingMediaId == 0) + existingMediaId = -1; + } + + if (existingMediaId == 0) + existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, "")); + + boolean randomizeName = Boolean.parseBoolean(System.getProperty("jobengine.randomize.archives", "false")); + + String targetFileName; + if (randomizeName) { + // a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA + //veletlenszeru neveket adunk! + targetFileName = String.format("%s-%s", RandomStringUtils.randomAlphanumeric(8), sourceFileName); + } else + targetFileName = sourceFileName; + + if (existingMediaId == 0) { + StoreUri sourceUri = manager.createStoreUri(RemoteStoreProtocol.LOCAL, sourceMediaFile.getParent().toString()); + + final IJobRuntime runtime = getJobRuntime(); + sourceUri.addProgressListener(new IProgressEventListener() { + @Override + public void progressChanged(ProgressEvent evt) { + runtime.incrementProgress(evt.getProgress()); + } + }); + sourceUri.addStatusListener(new IStatusEventListener() { + @Override + public void statusChanged(StatusEvent evt) { + evt.setCancel(!canContinue()); + } + }); + + RemoteFile remoteFile = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName); + } + + if (existingMediaId > 0) + logger.info(marker, "Az '{}' TSM mentése nem szükséges, mert már megtalálható az archívumban.", sourceFileName); + + //Fel kell szabadítani, hogy a kovetkezo archivalaskor is nekifusson + if (existingMediaId == -1) { + logger.info(marker, "Az '{}' mentése jelenleg nem lehetséges, mert a szükséges metaadat még nem található meg az archívumban.", sourceFileName); + if (!archiveItem.removeCatchedFile()) + logger.error(marker, + "Az '{}' állomány .catched jelző állománya nem törölhető. Az újabb archiválási kísérlethez annak kézi eltávolítása szükséges!", + sourceMediaFile.getName()); + mediaCubeMedia.remove(); + } else { + saveMetadata(mediaCubeMedia, sourceMediaFile, targetFileName, existingMediaId); + logger.info(marker, "Az '{}' archiválása sikeres.", sourceFileName); + if (killDateDays != 0) + EscortFiles.createUNCKillDate(sourceMediaFile.getParent(), sourceFileName, killDateDays, marker); + } + + } catch (Exception e) { + logger.catching(e); + Message m = new ParameterizedMessage("Az '{}' állomány archiválása sikertelen. A rendszer hibaüzenete: {}", details, e.getMessage()); + logger.error(marker, m); + if (!archiveItem.removeCatchedFile()) + logger.error(marker, + "Az '{}' állomány .catched jelző állománya nem törölhető. Az újabb archiválási kísérlethez annak kézi eltávolítása szükséges!", + sourceMediaFile.getName()); + throw new Exception(m.getFormattedMessage()); + } + return null; + } + + private void saveMetadata(Media mediaCubeMedia, File sourceFile, String targetFileName, long existingMediaId) { + + if (existingMediaId == 0) { + MediaFile mediaFile = manager.createMediaFile(targetFileName, fileType, tsmStore, mediaCubeMedia); + mediaFile.setHouseId(sourceFile.getName()); + mediaFile.add(); + } else { + Media existingMedia = manager.getMedia(existingMediaId); + List mediaFiles = existingMedia.getMediaFiles(); + if (mediaFiles != null) { + for (MediaFile mf : mediaFiles) { + mf.setPersister(manager); + mf.setId(0); + mf.setMedia(mediaCubeMedia); + mf.add(); + } + } + } + mediaCubeMedia.setPersister(manager); + + try { + BasicFileAttributes attr = Files.readAttributes(sourceFile.toPath(), BasicFileAttributes.class); + mediaCubeMedia.setArchived(new Timestamp(attr.creationTime().toMillis())); + } catch (IOException e) { + logger.catching(e); + mediaCubeMedia.setArchived(new Timestamp(new Date().getTime())); + } + + mediaCubeMedia.modify(); + } + + private void setAndCheck(ArchiveItem archiveItem, Media mediaCubeMedia, IJobEngine jobEngine) throws JobEngineException, IOException { + if (jobEngine == null) { + logger.error(marker, "Az folyamatkezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing JobEngine reference."); + } + manager = jobEngine.getItemManager(); + if (manager == null) { + logger.error(marker, "Az adatbáziskezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing ItemManager reference."); + } + if (archiveItem == null) { + logger.error(marker, "A folyamat 'archiveItem' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, missing 'archiveItem' input parameter."); + } + sourceMediaFile = new File(archiveItem.getMediaFile()); + if (sourceMediaFile == null) { + logger.error(marker, "A folyamat 'archiveItem' bemeneti paraméter 'mediaFile' értéke üres."); + throw new NullPointerException("System is not configured properly, missing 'mediaFile' value in 'archiveItem' input parameter."); + } + if (!sourceMediaFile.exists()) { + logger.error(marker, "Az {} állomány nem létezik vagy nem érhető el.", sourceMediaFile.getName()); + throw new IOException(String.format("Input file {} not exists or unreachable.", sourceMediaFile.getName())); + } + tsmStore = manager.getSystemStore(false); + if (tsmStore == null) { + logger.error(marker, "A TSM rendszer beállítás nem elérhető."); + throw new NullPointerException("System is not configured properly, missing TSM Store."); + } + targetUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM); + if (targetUri == null) { + logger.error(marker, "A TSM rendszer beállítás paraméterei nem elérhetőek."); + throw new NullPointerException("System is not configured properly, missing TSM StoreUri."); + } + fileType = manager.getFileType("High-res"); + if (fileType == null) { + logger.error(marker, "Adatbázis bejegyzés hiba, a 'High-res' FileType nem található."); + throw new NullPointerException("System is not configured properly, missing 'High-res' FileType."); + } + if (mediaCubeMedia == null) { + logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMExtendedRetrieveStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMExtendedRetrieveStep.java new file mode 100644 index 00000000..0074883c --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMExtendedRetrieveStep.java @@ -0,0 +1,85 @@ +package user.jobengine.server.steps; + +import user.commons.StoreUri; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.ArchivedMedia; +import user.jobengine.db.IItemManager; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class TSMExtendedRetrieveStep extends TSMRestoreStep { + private boolean useNexioTarget; + private int nexioPort; + private String nexioUserName, nexioPassword; + private String nexioHost; + private String nexioAgency; + + @Override + protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws Exception { + if (useNexioTarget) { + EscortFiles.setNEXIOKillDate(killDateDays, targetFileName, nexioAgency, targetUri); + } else { + super.afterRestore(targetUri, targetPath, killDateDays, targetFileName); + } + } + + @Override + protected void beforeRestore(StoreUri targetURI, String targetName) throws Exception { + String newTargetName = targetName; + if (targetName.contains(".")) + newTargetName = targetName.substring(0, targetName.lastIndexOf('.')); + if (useNexioTarget) + if (targetURI.fileExists(newTargetName + ".mxf")) + throw new Exception(String.format("%s-The newly created file name is existed.", getClass().getSimpleName())); + } + + @Override + protected void checkTargetPath(String targetPath) { + if (!useNexioTarget) + super.checkTargetPath(targetPath); + } + + @Override + protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException { + StoreUri result = null; + if (useNexioTarget) { + nexioHost = System.getProperty("nexio.host"); + if (nexioHost == null) { + throw new NullPointerException("Missing system property on 'nexio.host' name"); + } + result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + result.setPortNumber(nexioPort); + result.setUserName(nexioUserName); + result.setPassword(nexioPassword); + } else + result = super.createTargetUri(manager, targetPath); + return result; + } + + @StepEntry + public Object[] execute(ArchivedMedia archivedMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays, + String localRetrievePath, String globalRetrievePath, boolean useNexioTarget, String nexioAgency, int nexioPort, String nexioUserName, + String nexioPassword, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + this.useNexioTarget = useNexioTarget; + this.nexioAgency = nexioAgency; + this.nexioPort = nexioPort; + this.nexioUserName = nexioUserName; + this.nexioPassword = nexioPassword; + if (nexioPort == 0) { + throw new NullPointerException("System is not configured properly, 'nexioPort' input parameter missing."); + } + if (nexioUserName == null) { + throw new NullPointerException("System is not configured properly, 'nexioUserName' input parameter missing."); + } + if (nexioPassword == null) { + throw new NullPointerException("System is not configured properly, 'nexioPassword' input parameter missing."); + } + if (nexioAgency == null) { + throw new NullPointerException("System is not configured properly, 'nexioAgency' input parameter missing."); + } + + return super.execute(archivedMedia.getMedia(), targetPath, targetNamePattern, successRecipient, killDateDays, localRetrievePath, globalRetrievePath, + jobEngine, jobRuntime); + } + +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMRestoreStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMRestoreStep.java new file mode 100644 index 00000000..5b410055 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMRestoreStep.java @@ -0,0 +1,159 @@ +package user.jobengine.server.steps; + +import java.io.IOException; +import java.nio.file.Paths; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.message.Message; + +import user.commons.LogUtils; +import user.commons.RemoteFile; +import user.commons.StoreUri; +import user.commons.mediatool.Timecode; +import user.commons.mediatool.Timecode.Type; +import user.commons.remotestore.IProgressEventListener; +import user.commons.remotestore.IStatusEventListener; +import user.commons.remotestore.ProgressEvent; +import user.commons.remotestore.RemoteStoreProtocol; +import user.commons.remotestore.StatusEvent; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Media; +import user.jobengine.db.MediaFile; +import user.jobengine.db.Store; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class TSMRestoreStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private IItemManager manager; + private StoreUri targetUri; + private StoreUri sourceUri; + private String sourceFileName; + private Marker marker; + + protected void afterRestore(StoreUri targetUri, String targetPath, int killDateDays, String targetFileName) throws IOException, Exception { + if (killDateDays > 0) + EscortFiles.createUNCKillDate(targetPath, targetFileName, killDateDays, marker); + } + + protected void beforeRestore(StoreUri targetURI, String targetFileName) throws Exception { + } + + protected void checkTargetPath(String targetPath) { + if (StringUtils.isBlank(targetPath)) { + logger.error(marker, "A folyamat 'targetPath' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'targetPath' input parameter missing."); + } + } + + protected StoreUri createTargetUri(IItemManager manager, String targetPath) { + return manager.createStoreUri(RemoteStoreProtocol.LOCAL, targetPath); + } + + @StepEntry + public Object[] execute(Media mediaCubeMedia, String targetPath, String targetNamePattern, String successRecipient, int killDateDays, + String localRetrievePath, String globalRetrievePath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = jobRuntime.getSessionMarker(); + setAndCheck(mediaCubeMedia, targetPath, targetNamePattern, localRetrievePath, globalRetrievePath, jobEngine); + String targetFileName = String.format(targetNamePattern, sourceFileName); + Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL); + try { + String details = String.format("%s (%s)", sourceFileName, timecode.toString()); + jobRuntime.setDescription(details); + beforeRestore(targetUri, targetNamePattern); + final IJobRuntime runtime = jobRuntime; + sourceUri.addProgressListener(new IProgressEventListener() { + @Override + public void progressChanged(ProgressEvent evt) { + runtime.incrementProgress(evt.getProgress()); + } + }); + sourceUri.addStatusListener(new IStatusEventListener() { + @Override + public void statusChanged(StatusEvent evt) { + evt.setCancel(!canContinue()); + } + }); + RemoteFile result = sourceUri.transferFrom(targetUri, sourceFileName, targetFileName); + + String globalTargetPath = Paths.get(targetPath, targetFileName).getParent().toString().replace(Paths.get(localRetrievePath).toString(), + globalRetrievePath); + + logger.info(marker, + "Az '{}' állomány visszatöltése sikeres volt '{}' néven. A célmappa a ide kattintva nyitható meg.", + sourceFileName, targetFileName, globalTargetPath); + afterRestore(targetUri, targetPath, killDateDays, targetFileName); + + } catch (Exception e) { + Message msg = LogUtils.format("Az '{}' állomány visszatöltése sikertelen. A rendszer hibaüzenete: {}", sourceFileName, e.getMessage()); + logger.error(marker, msg); + // logger.error(jobRuntime.marker, msg); + logger.catching(e); + throw e; + } + + return null; + } + + private String getSourceFileName(Media mediaCubeMedia, Store store) { + List mediaFiles = mediaCubeMedia.getMediaFiles(); + if (mediaFiles == null) + return null; + for (MediaFile mediaFile : mediaFiles) { + if (mediaFile.getStore().getId() == store.getId()) + return mediaFile.getRelativePath(); + } + return null; + } + + private void setAndCheck(Media mediaCubeMedia, String targetPath, String targetNamePattern, String localRetrievePath, String globalRetrievePath, + IJobEngine jobEngine) { + if (jobEngine == null) { + logger.error(marker, "Az folyamatkezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing JobEngine reference."); + } + manager = jobEngine.getItemManager(); + if (manager == null) { + logger.error(marker, "Az adatbáziskezelő réteg nem elérhető."); + throw new NullPointerException("Internal error, missing ItemManager reference."); + } + if (mediaCubeMedia == null) { + logger.error(marker, "A folyamat 'mediaCubeMedia' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'mediaCubeMedia' input parameter missing."); + } + checkTargetPath(targetPath); + if (StringUtils.isBlank(targetNamePattern)) { + logger.error(marker, "A folyamat 'targetNamePattern' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'targetNamePattern' input parameter missing."); + } + Store tsmStore = manager.getSystemStore(false); + if (tsmStore == null) { + logger.error(marker, "A TSM rendszer beállítás nem elérhető."); + throw new NullPointerException("System is not configured properly, missing TSM Store."); + } + sourceUri = tsmStore.getSourceStoreUri(RemoteStoreProtocol.TSM); + if (sourceUri == null) { + logger.error(marker, "A TSM rendszer beállítás paraméterei nem elérhetőek."); + throw new NullPointerException("System is not configured properly, missing TSM StoreUri."); + } + targetUri = createTargetUri(manager, targetPath); + sourceFileName = getSourceFileName(mediaCubeMedia, tsmStore); + if (sourceFileName == null) { + logger.error(marker, "Adatbázis bejegyzés hiba, a visszatöltendő fájl neve nem található."); + throw new NullPointerException("Database error, missing MediaFile 'relativePath'."); + } + + if (StringUtils.isBlank(localRetrievePath)) { + logger.error(marker, "A folyamat 'localRetrievePath' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'localRetrievePath' input parameter missing."); + } + if (StringUtils.isBlank(globalRetrievePath)) { + logger.error(marker, "A folyamat 'globalRetrievePath' bemeneti paramétere üres."); + throw new NullPointerException("System is not configured properly, 'globalRetrievePath' input parameter missing."); + } + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMSimpleRestoreStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMSimpleRestoreStep.java new file mode 100644 index 00000000..ba63212c --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TSMSimpleRestoreStep.java @@ -0,0 +1,57 @@ +package user.jobengine.server.steps; + +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.StoreUri; +import user.commons.mediatool.Timecode; +import user.commons.mediatool.Timecode.Type; +import user.commons.remotestore.IProgressEventListener; +import user.commons.remotestore.IStatusEventListener; +import user.commons.remotestore.ProgressEvent; +import user.commons.remotestore.RemoteStoreProtocol; +import user.commons.remotestore.StatusEvent; +import user.jobengine.db.Media; +import user.jobengine.db.MediaFile; +import user.jobengine.db.Store; + +public class TSMSimpleRestoreStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + + @StepEntry + public Object[] execute(long mediaId, String targetPath) throws Exception { + String fileName = null; + try { + Media media = getManager().getMedia(mediaId); + MediaFile mediaFile = getManager().getSystemMediaFile(media); + fileName = mediaFile.getRelativePath(); + Timecode timecode = new Timecode(media.getLength(), Type.PAL); + getJobRuntime().setDescription(String.format("%s (%s)", fileName, timecode.toString())); + Store tsmStore = getManager().getSystemStore(false); + StoreUri sourceStoreUri = getManager().getStoreUri(tsmStore.getName(), RemoteStoreProtocol.TSM); + sourceStoreUri.addProgressListener(new IProgressEventListener() { + @Override + public void progressChanged(ProgressEvent evt) { + setProgress(evt.getProgress()); + } + }); + sourceStoreUri.addStatusListener(new IStatusEventListener() { + @Override + public void statusChanged(StatusEvent evt) { + evt.setCancel(!canContinue()); + } + }); + StoreUri targetStoreUri = getManager().createStoreUri(RemoteStoreProtocol.LOCAL, targetPath); + sourceStoreUri.transferFrom(targetStoreUri, fileName, fileName + ".part"); + Files.move(Paths.get(targetPath, fileName + ".part"), Paths.get(targetPath, fileName)); + } catch (Exception e) { + logger.error("Az '{}' állomány visszatöltése sikertelen. A rendszer üzenete: {}", fileName, e.getMessage()); + throw e; + } + + return null; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/TestForkCancelableStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TestForkCancelableStep.java new file mode 100644 index 00000000..28e66d3f --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TestForkCancelableStep.java @@ -0,0 +1,37 @@ +package user.jobengine.server.steps; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.IJob; +import user.commons.JobStatus; +import user.commons.ListUtils; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class TestForkCancelableStep extends JobStep { + private static final String CHILD_TEMPLATE = "cancelable.xml"; + private static final Logger logger = LogManager.getLogger(); + int count = 5; + + @StepEntry + public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + jobRuntime.forkPrepare(); + for (int i = 0; i < count; i++) { + if (getJobRuntime().isWaitingCancel()) + break; + //jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i)); + // IJobRuntime runtime = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, "JOB " + i, ListUtils.asMap("param", i)); + IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> { + if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) + logger.info("Cleanup occured because status is {} {}", e.getStatus(), ((IJob) e.getSource()).getId()); + }, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i)); + + runtime.setRelated("TEST" + runtime.getId()); + } + + jobRuntime.forkWaitComplete(); + logger.info("Done"); + return null; + } +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/TranscodeFFAStranStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TranscodeFFAStranStep.java new file mode 100644 index 00000000..a73ff663 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/TranscodeFFAStranStep.java @@ -0,0 +1,151 @@ +package user.jobengine.server.steps; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.commons.io.FilenameUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.message.Message; +import org.apache.logging.log4j.message.ParameterizedMessage; + +import user.commons.FFAStransAPI; +import user.commons.IFFAStransAPI; +import user.commons.StoreUri; +import user.commons.mediatool.Timecode; +import user.commons.mediatool.Timecode.Type; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.FileType; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Media; +import user.jobengine.db.Store; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class TranscodeFFAStranStep extends JobStep { + private static final int POLL_INTERVALL = 3000; + private static final String MP4EXT = ".MP4"; + private static final String MXFEXT = ".MXF"; + private static final String LOWRES_FILETYPE = "Low-res"; + private static final Logger logger = LogManager.getLogger("TranscodeFFAStranStep"); + private IItemManager manager; + private Store store; + private FileType fileType; + private Media mediaCubeMedia; + private Marker marker; + + @StepEntry + public Object[] execute(ArchiveItem archiveItem, Media mediaCubeMedia, String transcoderAddress, String transcoderTemplateName, + String globalHiresSourcePath, String localLowresTargetPath, boolean deleteSource, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + + this.marker = jobRuntime.getSessionMarker(); + this.manager = jobEngine.getItemManager(); + this.store = check(manager.getCurrentLowresStore(), "lowres Store"); + this.fileType = check(manager.getFileType(LOWRES_FILETYPE), "lowres FileType"); + this.mediaCubeMedia = check(mediaCubeMedia, "mediaCubeMedia"); + check(archiveItem, "archiveItem"); + check(transcoderAddress, "transcoderAddress"); + check(transcoderTemplateName, "transcoderTemplateName"); + check(globalHiresSourcePath, "globalHiresSourcePath"); + check(localLowresTargetPath, "localLowresTargetPath"); + + File sourceMediaFile = new File(archiveItem.getMediaFile()); + logger.info("Transcoding {}", archiveItem.getMediaFile()); + String sourceFileName = sourceMediaFile.getName(); + Timecode timecode = new Timecode(mediaCubeMedia.getLength(), Type.PAL); + + String details = String.format("%s (%s, %d bytes)", sourceFileName, timecode.toString(), sourceMediaFile.length()); + + StoreUri storeUri = store.getTargetStoreUri(RemoteStoreProtocol.LOCAL); + if (storeUri == null) + throw new Exception("Can not detect proxy folder."); + + String webPath = storeUri.toString(true); + + Path targetPath = null; + try { + String targetFileName = FilenameUtils.removeExtension(sourceFileName) + MP4EXT; + targetPath = Paths.get(localLowresTargetPath, targetFileName); + if (!targetPath.toFile().exists()) { + // jobRuntime.setDescription(String.format("%s: %s", jobRuntime.getDescription(), details)); + jobRuntime.setDescription(String.format("%s transzkódolása", details)); + String sourceFile = Paths.get(globalHiresSourcePath, sourceFileName).toString(); + IFFAStransAPI api = new FFAStransAPI(transcoderAddress, p -> { + if (p <= 100) + jobRuntime.incrementProgress(p); + }); + + api.submit(transcoderTemplateName, sourceFile); + api.monitor(POLL_INTERVALL); + } + + //a sikeres transzkod utan nem mindig van ott egybol a fajl + long started = System.currentTimeMillis(); + while (!targetPath.toFile().exists()) { + long current = System.currentTimeMillis(); + //max 5 perc varakozas + if (current - started > 5 * 60 * 1000) + throw new Exception("Transcode job target file access timed out"); + Thread.sleep(POLL_INTERVALL); + } + + postprocess(targetPath, webPath); + + } catch (Exception e) { + logger.catching(e); + Message m = new ParameterizedMessage("{} átkódolás hiba: {}", sourceFileName, e.getMessage()); + logger.error(marker, m); + throw new Exception(m.getFormattedMessage()); + } finally { + try { + if (deleteSource && sourceMediaFile != null && sourceMediaFile.exists()) + sourceMediaFile.delete(); + } catch (Exception e) { + logger.catching(e); + } + try { + if (deleteSource && targetPath != null && targetPath.toFile().exists()) + Files.delete(targetPath); + } catch (Exception e) { + logger.catching(e); + } + } + return null; + } + + private void postprocess(Path transcodedFilePath, String webPath) throws IOException { + Path lowresPath = null; + try { + String transcodedFileName = transcodedFilePath.getFileName().toString(); + String targetPath = null; + if (transcodedFileName.indexOf(".") > 2) { + Path subdir = Paths.get(transcodedFileName.substring(0, 1), transcodedFileName.substring(1, 2), transcodedFileName.substring(2, 3)); + EscortFiles.ensureUNCFolder(webPath, subdir.toString()); + targetPath = Paths.get(subdir.toString(), transcodedFileName).toString(); + } else { + targetPath = transcodedFileName; + } + lowresPath = Paths.get(webPath, targetPath); + int version = 1; + while (lowresPath.toFile().exists()) { + String fileName = transcodedFileName + version + MP4EXT; + lowresPath = Paths.get(lowresPath.toString().replace(transcodedFileName, fileName)); + targetPath = targetPath.replace(transcodedFileName, fileName); + transcodedFileName = fileName; + version++; + } + + Files.move(transcodedFilePath, lowresPath); + manager.createMediaFile(targetPath, fileType, store, mediaCubeMedia).add(); + } catch (IOException e) { + logger.catching(e); + logger.error(marker, "A '{}' állomány mozgatása a '{}' helyre nem sikerült.", transcodedFilePath, lowresPath); + throw e; + } + } + +} diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/steps/UpdateGhostMediaDataStep.java b/server/-product/production/MEDIAVIVANTIS/jobs/steps/UpdateGhostMediaDataStep.java new file mode 100644 index 00000000..e59008d1 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/steps/UpdateGhostMediaDataStep.java @@ -0,0 +1,88 @@ +package user.jobengine.server.steps; + +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; + +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.IItemManager; +import user.jobengine.db.Media; +import user.jobengine.db.MediaFile; +import user.jobengine.db.Store; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; +import user.jobengine.server.steps.MetadataTypeDetector.MetadataType; + +public class UpdateGhostMediaDataStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private Marker marker; + + @StepEntry + public Object[] execute(Media mediaCubeMedia, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { + marker = jobRuntime.getSessionMarker(); + + IItemManager manager = jobEngine.getItemManager(); + //Refresh from db + List mediaFiles = manager.getMedia(mediaCubeMedia.getId()).getMediaFiles(); + if (mediaFiles != null && mediaFiles.size() == 2) { + MediaFile lowres = null; + MediaFile highres = null; + + for (MediaFile mf : mediaFiles) { + if (mf.getStore().getSourceStoreUri(RemoteStoreProtocol.HTTP) != null) + lowres = mf; + else + highres = mf; + } + + if (highres == null) { + logger.info(marker, "Nincs highres mediaId: {}", mediaCubeMedia.getId()); + return null; + } + if (lowres == null) { + logger.info(marker, "Nincs lowres mediaId: {}", mediaCubeMedia.getId()); + return null; + } + + String id = MetadataTypeDetector.truncateExtension(highres.getRelativePath()); + id = MetadataTypeDetector.truncateVersion(id); + boolean detect = MetadataTypeDetector.GuessMetadataType(id) == MetadataType.OctopusPlaceholder + || MetadataTypeDetector.GuessMetadataType(id) == MetadataType.OctopusStory; + if (!detect) { + logger.info(marker, "Nem bejátszó mediaId: {}, file: {}", mediaCubeMedia.getId(), highres.getRelativePath()); + return null; + } + + Store highresStore = manager.getSystemStore(false); + final long sourceMediaId = lowres.getId(); + final long highresMediaFileId = highres.getId(); + final String highresRealtivePath = highres.getRelativePath(); + + manager.executeQuery("SELECT mediaid FROM mediafile WHERE relativepath=? and storeid=? and id!=?", rs -> { + long mediaId = rs.getLong(1); + Media media = manager.getMedia(mediaId); + if (media.getMediaFilesCount() == 1) { + logger.info(marker, "Hiányzó szellem lowres hozzáadása {} alapján", media.getId()); + + MediaFile mf = (MediaFile) manager.get(MediaFile.class, sourceMediaId); + mf.setMedia(media); + mf.setId(0); + manager.add(mf); + media.setLength(mediaCubeMedia.getLength()); + manager.modify(media); + } + return true; + }, st -> { + st.setString(1, highresRealtivePath); + st.setLong(2, highresStore.getId()); + st.setLong(3, highresMediaFileId); + }); + + } + + return null; + } + +} diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-limited.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-limited.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/archive-limited.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-limited.xml diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-material.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-material.xml similarity index 78% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/archive-material.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-material.xml index 0898657b..973ac9fa 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-material.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-material.xml @@ -10,7 +10,7 @@ - + @@ -22,7 +22,7 @@ - + @@ -32,7 +32,7 @@ - + diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-ondemand.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-ondemand.xml similarity index 79% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/archive-ondemand.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-ondemand.xml index 9ef32997..22665b33 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/archive-ondemand.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-ondemand.xml @@ -11,7 +11,7 @@ - + @@ -27,7 +27,7 @@ - + diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-recursive.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-recursive.xml new file mode 100644 index 00000000..02b97884 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/archive-recursive.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/batch-retrieve-ondemand.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/batch-retrieve-ondemand.xml similarity index 87% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/batch-retrieve-ondemand.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/batch-retrieve-ondemand.xml index c1170b02..20332cf0 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/batch-retrieve-ondemand.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/batch-retrieve-ondemand.xml @@ -9,7 +9,7 @@ - + diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/cancelable.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/cancelable.xml similarity index 53% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/cancelable.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/cancelable.xml index 15e21ce1..2be289b3 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/cancelable.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/cancelable.xml @@ -4,9 +4,6 @@ - - - @@ -15,18 +12,6 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/common-copy.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/common-copy.xml similarity index 90% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/common-copy.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/common-copy.xml index 52c5b3f7..7abb6fcf 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/common-copy.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/common-copy.xml @@ -12,7 +12,7 @@ - + diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/create-lowres-ondemand.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/create-lowres-ondemand.xml similarity index 84% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/create-lowres-ondemand.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/create-lowres-ondemand.xml index db6e88ff..f7922734 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/create-lowres-ondemand.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/create-lowres-ondemand.xml @@ -20,7 +20,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -95,7 +95,7 @@ - + diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/delete-materials.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/delete-materials.xml similarity index 77% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/delete-materials.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/delete-materials.xml index 29a18e00..365fe19c 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/delete-materials.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/delete-materials.xml @@ -6,7 +6,7 @@ - + diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/migrate-hsm.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/migrate-hsm.xml similarity index 82% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/migrate-hsm.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/migrate-hsm.xml index 650f125d..faec8724 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/migrate-hsm.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/migrate-hsm.xml @@ -7,7 +7,7 @@ - + diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/retrieve-ondemand.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/retrieve-ondemand.xml similarity index 90% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/retrieve-ondemand.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/retrieve-ondemand.xml index f42cde97..b58d8fdf 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/retrieve-ondemand.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/retrieve-ondemand.xml @@ -27,7 +27,7 @@ - + @@ -72,7 +72,7 @@ - + @@ -112,7 +112,7 @@ - + diff --git a/server/-product/production/MEDIAVIVANTIS/jobs/templates/retrieve.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/retrieve.xml new file mode 100644 index 00000000..e12fd950 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/retrieve.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/sys-recreate-lowres.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/sys-recreate-lowres.xml similarity index 84% rename from server/user.jobengine.executors/jobtemplates/mediavivantis/sys-recreate-lowres.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/sys-recreate-lowres.xml index 92c90084..9ef84b31 100644 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/sys-recreate-lowres.xml +++ b/server/-product/production/MEDIAVIVANTIS/jobs/templates/sys-recreate-lowres.xml @@ -20,7 +20,7 @@ - + @@ -47,7 +47,7 @@ - + @@ -72,7 +72,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -107,7 +107,7 @@ - + diff --git a/server/user.jobengine.executors/jobtemplates/test-fork-cancelable.xml b/server/-product/production/MEDIAVIVANTIS/jobs/templates/test-fork-cancelable.xml similarity index 100% rename from server/user.jobengine.executors/jobtemplates/test-fork-cancelable.xml rename to server/-product/production/MEDIAVIVANTIS/jobs/templates/test-fork-cancelable.xml diff --git a/server/-product/production/MEDIAVIVANTIS/mediacube.bat b/server/-product/production/MEDIAVIVANTIS/mediacube.bat new file mode 100644 index 00000000..a56d0950 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/mediacube.bat @@ -0,0 +1,16 @@ +@echo off +if exist tmp rmdir tmp /s /q +mkdir tmp +java ^ +-Dclean ^ +-Dorg.eclipse.epp.logging.aeri.skipReports=true ^ +-Declipse.ignoreApp=true ^ +-Dosgi.noShutdown=true ^ +-Dlog4j.configurationFile=configuration/log4j2.xml ^ +-Djetty.home=configuration/jetty ^ +-Djetty.etc.config.urls=jetty.xml,jetty-ssl.xml,jetty-ssl-context.xml,jetty-http.xml,jetty-https.xml ^ +-Djava.io.tmpdir=tmp ^ +-jar plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar ^ +-Xms512m ^ +-Xmx1024m ^ +-console 5555 diff --git a/server/-product/production/MEDIAVIVANTIS/mediacube.sh b/server/-product/production/MEDIAVIVANTIS/mediacube.sh new file mode 100644 index 00000000..b70ef743 --- /dev/null +++ b/server/-product/production/MEDIAVIVANTIS/mediacube.sh @@ -0,0 +1,24 @@ +rm -fr tmp/* +rm -fr configuration/org.eclipse.osgi +export DSMI_CONFIG=/opt/mediacube/configuration/dsm.opt +export DSMI_DIR=/opt/tivoli/tsm/client/api/bin64 +export DSMI_LOG=/opt/mediacube/log +export DSM_DIR=/opt/tivoli/tsm/client/api/bin64 +export LD_LIBRARY_PATH=/opt/tivoli/tsm/client/ba/bin:/opt/tivoli/tsm/client/api/bin64:/opt/mediacube +export LIBPATH=/opt/tivoli/tsm/client/ba/bin:/opt/tivoli/tsm/client/api/bin64 +export SHLIB_PATH=/opt/tivoli/tsm/client/ba/bin:/opt/tivoli/tsm/client/api/bin64 +export TZ=NFT-1DFT,M3.5.0,M10.5.0 +export PATH=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/bin:$PATH +java \ +-Dclean \ +-Dorg.eclipse.epp.logging.aeri.skipReports=true \ +-Declipse.ignoreApp=true \ +-Dosgi.noShutdown=true \ +-Dlog4j.configurationFile=configuration/log4j2.xml \ +-Djetty.home=configuration/jetty \ +-Djetty.etc.config.urls=jetty.xml,jetty-ssl.xml,jetty-ssl-context.xml,jetty-http.xml,jetty-https.xml \ +-Djava.io.tmpdir=tmp \ +-jar plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar \ +-Xms512m \ +-Xmx1024m \ +-console 5555 diff --git a/server/-product/test-deploy-main-plugins.bat b/server/-product/test-deploy-main-plugins.bat deleted file mode 100644 index b0d5d5ae..00000000 --- a/server/-product/test-deploy-main-plugins.bat +++ /dev/null @@ -1,12 +0,0 @@ -winscp.com /command - - "echo STARTING DEPLOY TO: ${remote.address}" - "open ${remote.address} -hostkey=""${remote.hostkey}""" - "lcd ${local.location}/plugins" - "cd ${remote.location}/plugins" - "synchronize remote" - "lcd ${local.location}/configuration" - "cd ${remote.location}/configuration" - "synchronize remote -filemask=config.ini" - "exit" - diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/RescueNEXIOMaterials.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/RescueNEXIOMaterials.java index 50ff8757..0c9655b7 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/RescueNEXIOMaterials.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/RescueNEXIOMaterials.java @@ -22,6 +22,7 @@ import com.ibm.nosql.json.api.DBObject; import user.commons.CalendarUtils; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.nosql.NoSQLUtils; import user.commons.octopus.IOctopusAPI; import user.commons.octopus.OctopusAPI; @@ -39,10 +40,8 @@ public class RescueNEXIOMaterials { private static final String UTF_8 = "utf-8"; private static final String JSON_EXT = ".json"; private static final String XML_EXT = ".xml"; - private static final String DURATION = "duration"; private static final String MXFEXT = ".MXF"; - private static final String NEXIOCLIPS = "nexioclips"; - private static final String LONGNAMEID = "longnameid"; + private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); private static final String ID = "id"; private static final String MEDIATYPE = "Hír bejátszó"; private OctopusAPI octopusAPI; @@ -222,15 +221,14 @@ public class RescueNEXIOMaterials { logger.error(systemMarker, "Az adatbáziskezelő réteg nem elérhető."); throw new NullPointerException("Internal error, missing ItemManager reference."); } - String nexioHost = System.getProperty("nexio.host"); - if (StringUtils.isBlank(nexioHost)) { + if (StringUtils.isBlank(NEXIO_HOST)) { logger.error(systemMarker, "A 'nexio.host' rendszer paraméter nem található."); throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing."); } this.nexioKillDateDays = nexioKillDateDays; this.nexioAgency = nexioAgency; - sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST); sourceUri.setPortNumber(nexioPort); sourceUri.setUserName(nexioUserName); sourceUri.setPassword(nexioPassword); diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java index cccf6a20..f078e65d 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java @@ -6,9 +6,6 @@ import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import java.lang.management.ManagementFactory; -import java.lang.management.ThreadInfo; -import java.lang.management.ThreadMXBean; import java.lang.reflect.Method; import java.nio.file.DirectoryStream; import java.nio.file.FileStore; @@ -54,6 +51,8 @@ import com.ibm.nosql.json.api.BasicDBObject; import groovy.lang.GroovyClassLoader; import user.commons.RemoteFile; import user.commons.StoreUri; +import user.commons.configuration.IConfiguration; +import user.commons.configuration.SystemConfiguration; import user.commons.mediaarea.StreamKind; import user.commons.mediatool.Timecode; import user.commons.mediatool.Timecode.Type; @@ -1204,14 +1203,25 @@ public class SmallTests { @Test public void test99998() throws Exception { - ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); - - for (Long threadID : threadMXBean.getAllThreadIds()) { - ThreadInfo info = threadMXBean.getThreadInfo(threadID); - System.out.println("Thread name: " + info.getThreadName()); - System.out.println("Thread State: " + info.getThreadState()); - long cpuTime = threadMXBean.getThreadCpuTime(threadID); - System.out.println(String.format("CPU time: %.2f %%", cpuTime == 0 ? cpuTime : cpuTime * 100 / 1000000000d)); - } + System.setProperty("user.dir", "c:/_workspace/USER/MediaCube/deploy/"); + IConfiguration conf = SystemConfiguration.getInstance(); + + String za = conf.value("z.a"); + System.out.println(za); + + int zb = conf.value("z.b"); + System.out.println(zb); + + int zc = conf.value("z.c", 2); + System.out.println(zc); + + String zc1 = conf.value("z.c", "2"); + System.out.println(zc1); + + int zc2 = conf.value("z.d", 100); + System.out.println(zc2); + + List k = conf.value("k"); + List l = conf.value("l"); } } diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java index c5f9aa44..90a275c7 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/Support.java @@ -29,7 +29,6 @@ import com.ibm.nosql.json.api.DBCursor; import com.ibm.nosql.json.api.QueryBuilder; import user.commons.ListUtils; -import user.commons.logging.LogUtils; import user.commons.nosql.NoSQLUtils; import user.jobengine.db.IItemManager; import user.jobengine.db.Item; @@ -65,10 +64,9 @@ public class Support { // System.setProperty("jobengine.nosql.db.user", "db2admin"); // System.setProperty("jobengine.nosql.db.password", "password"); System.setProperty("nexio.host", "10.10.1.55"); - System.setProperty(ItemManager.DBURL, "jdbc:db2://10.228.212.42:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty(ItemManager.DBUSERNAME, "blobtest"); - System.setProperty(ItemManager.DBPASSWORD, "blobtest"); - System.setProperty(LogUtils.LOGLEVEL, "INFO"); + // System.setProperty(ItemManager.DBURL, "jdbc:db2://10.228.212.42:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty(ItemManager.DBUSERNAME, "blobtest"); + // System.setProperty(ItemManager.DBPASSWORD, "blobtest"); // System.setProperty(ItemManager.DBURL, manager = new ItemManager(); diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportAttachLowres.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportAttachLowres.java index a31ee538..1896a98b 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportAttachLowres.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportAttachLowres.java @@ -23,12 +23,12 @@ public class SupportAttachLowres { @BeforeClass static public void setUpConnection() { - System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty("jobengine.nosql.db.user", "db2admin"); - System.setProperty("jobengine.nosql.db.password", "password"); - System.setProperty(ItemManager.DBURL, "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty(ItemManager.DBUSERNAME, "db2admin"); - System.setProperty(ItemManager.DBPASSWORD, "password"); + // System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty("jobengine.nosql.db.user", "db2admin"); + // System.setProperty("jobengine.nosql.db.password", "password"); + // System.setProperty(ItemManager.DBURL, "jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty(ItemManager.DBUSERNAME, "db2admin"); + // System.setProperty(ItemManager.DBPASSWORD, "password"); manager = new ItemManager(); manager.connect(); } diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCheckItem.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCheckItem.java index e26ca596..af14c948 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCheckItem.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SupportCheckItem.java @@ -9,7 +9,6 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import user.commons.logging.LogUtils; import user.jobengine.db.IItemManager; import user.jobengine.db.IResultSetConsumer; import user.jobengine.db.IStatementDecorator; @@ -80,17 +79,16 @@ public class SupportCheckItem { // System.setProperty("jobengine.octopus.rundowns.name", "test_rundowns"); // System.setProperty("jobengine.octopus.stories.name", "test_stories"); // System.setProperty("jobengine.octopus.storyfolders.name", "test_storyfolders"); - System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); - System.setProperty("jobengine.octopus.stories.name", "stories180620"); - System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); - - System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty("jobengine.nosql.db.user", "db2admin"); - System.setProperty("jobengine.nosql.db.password", "password"); - System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty(ItemManager.DBUSERNAME, "db2admin"); - System.setProperty(ItemManager.DBPASSWORD, "password"); - System.setProperty(LogUtils.LOGLEVEL, "INFO"); + // System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); + // System.setProperty("jobengine.octopus.stories.name", "stories180620"); + // System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); + // + // System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty("jobengine.nosql.db.user", "db2admin"); + // System.setProperty("jobengine.nosql.db.password", "password"); + // System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty(ItemManager.DBUSERNAME, "db2admin"); + // System.setProperty(ItemManager.DBPASSWORD, "password"); // System.setProperty(ItemManager.DBURL, manager = new ItemManager(); diff --git a/server/hu.user.mediacube.executors.tests/src/log4j2-test.xml b/server/hu.user.mediacube.executors.tests/src/log4j2-test.xml new file mode 100644 index 00000000..ad428dc7 --- /dev/null +++ b/server/hu.user.mediacube.executors.tests/src/log4j2-test.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.commons.log4j2/log4j2-test.xml b/server/user.commons.log4j2/log4j2-test.xml new file mode 100644 index 00000000..ad428dc7 --- /dev/null +++ b/server/user.commons.log4j2/log4j2-test.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/.classpath b/server/user.jobengine.executors/.classpath index ce35eee7..fcb22981 100644 --- a/server/user.jobengine.executors/.classpath +++ b/server/user.jobengine.executors/.classpath @@ -1,7 +1,6 @@ - diff --git a/server/user.jobengine.executors/amc/user/jobengine/server/steps/FileValidatorStep.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/FileValidatorStep.java index e8662e49..90d77f0d 100644 --- a/server/user.jobengine.executors/amc/user/jobengine/server/steps/FileValidatorStep.java +++ b/server/user.jobengine.executors/amc/user/jobengine/server/steps/FileValidatorStep.java @@ -19,7 +19,6 @@ import user.jobengine.db.Media; public class FileValidatorStep extends JobStep { private static final String COLORSPACE = "COLORSPACE"; private static final Logger logger = LogManager.getLogger(); - private static final String testSimulate = System.getProperty("test.simulate"); @StepEntry public Object[] execute(StoreUri sourceStoreUri, String fileName, long expectedFrameNumber, long expectedSize, String exceptedColorSpace, String escortFile) diff --git a/server/user.jobengine.executors/amc/user/jobengine/server/steps/HarrisMissingMaterialCheckerStep.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/HarrisMissingMaterialCheckerStep.java index 9f683503..4f00ae29 100644 --- a/server/user.jobengine.executors/amc/user/jobengine/server/steps/HarrisMissingMaterialCheckerStep.java +++ b/server/user.jobengine.executors/amc/user/jobengine/server/steps/HarrisMissingMaterialCheckerStep.java @@ -23,10 +23,9 @@ import user.jobengine.db.Media; public class HarrisMissingMaterialCheckerStep extends JobStep { private static final Logger logger = LogManager.getLogger(HarrisMissingMaterialCheckerStep.class); - private static final String lineFormat = System.getProperty("harris.vic.lineformat", - "A TTTTTTTT LLLLLLLLLLL MMMMMMMMMMMMMMMMMMMMMMM X DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"); - private static final String validTypeCodes = System.getProperty("harris.vic.validtypecodes", "SPACE,E"); - private static final String appendExtension = System.getProperty("missingmaterial.appendextension", ".mxf"); + private static final String lineFormat = "A TTTTTTTT LLLLLLLLLLL MMMMMMMMMMMMMMMMMMMMMMM X DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"; + private static final String validTypeCodes = "SPACE,E"; + private static final String appendExtension = ".mxf"; @StepEntry public Object[] execute(BasicDBList vicFiles, String escortStoreName, String targetStoreName, String targetProtocol) throws Exception { diff --git a/server/user.jobengine.executors/amc/user/jobengine/server/steps/PBQuery.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/PBQuery.java index 458b1375..9c28fe31 100644 --- a/server/user.jobengine.executors/amc/user/jobengine/server/steps/PBQuery.java +++ b/server/user.jobengine.executors/amc/user/jobengine/server/steps/PBQuery.java @@ -40,6 +40,8 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; +import user.commons.configuration.SystemConfiguration; + public class PBQuery { public class MMMedia { private final String name; @@ -65,8 +67,7 @@ public class PBQuery { private static final int SOCKET_TIMEOUT = 5000; public static final String GETMEDIAUSAGEBYUTRANGE = "/getMediaUsageByUTRange"; public static final String GETCUSTOMVIEW = "/getCustomView"; - - public static final String SOAP_TEMPLATE_ROOT = System.getProperty("jobengine.soap.template.root", "/opt/mediacube/configuration/soap"); + public static final String SOAP_TEMPLATE_ROOT = SystemConfiguration.getInstance().value("services.peablebeach.template-root", "configuration/soap"); private static Document toDocument(String xml) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); diff --git a/server/user.jobengine.executors/amc/user/jobengine/server/steps/PeableBeachMissingMaterialCheckerStep.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/PeableBeachMissingMaterialCheckerStep.java index 74a80b51..dc0d039a 100644 --- a/server/user.jobengine.executors/amc/user/jobengine/server/steps/PeableBeachMissingMaterialCheckerStep.java +++ b/server/user.jobengine.executors/amc/user/jobengine/server/steps/PeableBeachMissingMaterialCheckerStep.java @@ -26,7 +26,7 @@ import user.jobengine.server.steps.PBQuery.MMMedia; public class PeableBeachMissingMaterialCheckerStep extends JobStep { private static final Logger logger = LogManager.getLogger(); - private static final String appendExtension = System.getProperty("missingmaterial.appendextension", ".mxf"); + private static final String appendExtension = ".mxf"; @StepEntry public Object[] execute(String escortStoreName, BasicDBList lookupStoreNames, String targetStoreName, String targetProtocol, String primaryEndPoint, @@ -63,7 +63,7 @@ public class PeableBeachMissingMaterialCheckerStep extends JobStep { } /* if (1 == 1) { - + logger.info(getMarker(), "Kikapcsolva"); return null; } diff --git a/server/user.jobengine.executors/amc/user/jobengine/server/steps/RegisterUserRestoreStep.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/RegisterUserRestoreStep.java index ba23e3f6..a8d4a069 100644 --- a/server/user.jobengine.executors/amc/user/jobengine/server/steps/RegisterUserRestoreStep.java +++ b/server/user.jobengine.executors/amc/user/jobengine/server/steps/RegisterUserRestoreStep.java @@ -15,7 +15,7 @@ import user.jobengine.db.Media; public class RegisterUserRestoreStep extends JobStep { private static final Logger logger = LogManager.getLogger(); - private static final String appendExtension = System.getProperty("missingmaterial.appendextension", ".mxf"); + private static final String appendExtension = ".mxf"; @StepEntry public Object[] execute(String escortStoreName, String targetStoreName, List basket, String recipient) throws Exception { diff --git a/server/user.jobengine.executors/amc/user/jobengine/server/steps/RegisterVODRestoreStep.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/RegisterVODRestoreStep.java index a7cb11f6..845744cc 100644 --- a/server/user.jobengine.executors/amc/user/jobengine/server/steps/RegisterVODRestoreStep.java +++ b/server/user.jobengine.executors/amc/user/jobengine/server/steps/RegisterVODRestoreStep.java @@ -16,7 +16,7 @@ import user.jobengine.db.Media; public class RegisterVODRestoreStep extends JobStep { private static final Logger logger = LogManager.getLogger(); - private static final String appendExtension = System.getProperty("missingmaterial.appendextension", ".mxf"); + private static final String appendExtension = ".mxf"; @StepEntry public Object[] execute(String targetStoreName, BasicDBList basket) throws Exception { @@ -48,12 +48,12 @@ public class RegisterVODRestoreStep extends JobStep { String relativeTargetPath = item.getString("path"); Media media = getManager().getMedia(mediaTitle); - + if (media == null) { logger.error("Media {} is not available", mediaTitle); return; } - + String fileName = media.getTitle(); if (StringUtils.isNotBlank(appendExtension)) fileName += appendExtension; diff --git a/server/user.jobengine.executors/amc/user/jobengine/server/steps/TransferStep.java b/server/user.jobengine.executors/amc/user/jobengine/server/steps/TransferStep.java index d285f70d..ae46a938 100644 --- a/server/user.jobengine.executors/amc/user/jobengine/server/steps/TransferStep.java +++ b/server/user.jobengine.executors/amc/user/jobengine/server/steps/TransferStep.java @@ -15,7 +15,6 @@ import user.jobengine.db.Store; public class TransferStep extends JobStep { private static final String DOT_PART = ".part"; private static final Logger logger = LogManager.getLogger(); - private static final boolean simulateTransferToTSM = Boolean.parseBoolean(System.getProperty("test.simulate.transfer.tsm", "false")); protected StoreUri targetStoreUri; @StepEntry @@ -30,12 +29,6 @@ public class TransferStep extends JobStep { String description = String.format("%s -> %s : %s", sourceStore.getName(), targetStore.getName(), sourceFileName); getJobRuntime().setDescription(description); - //logger.info(getSessionMarker(), String.valueOf(isSimulateTSMWrite(sourceStoreUri, targetStoreUri))); - if (isSimulateTSMWrite(sourceStoreUri, targetStoreUri)) { - logger.info(getMarker(), "Skipping real TSM write of {} from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri); - return null; - } - sourceStoreUri.addProgressListener(e -> setProgress(e.getProgress())); this.targetStoreUri = getTargetStoreUri(); @@ -71,10 +64,6 @@ public class TransferStep extends JobStep { return DOT_PART; } - private boolean isSimulateTSMWrite(StoreUri sourceStoreUri, StoreUri targetStoreUri) { - return simulateTransferToTSM && (RemoteStoreProtocol.TSM.equals(targetStoreUri.getProtocol())); - } - private void tryCopy(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { String currentTargetFileName = targetFileName; diff --git a/server/user.jobengine.executors/config/config-mv.xml b/server/user.jobengine.executors/config/config-mv.xml deleted file mode 100644 index 18c392dd..00000000 --- a/server/user.jobengine.executors/config/config-mv.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/fake-concurrent.xml b/server/user.jobengine.executors/jobtemplates/mediavivantis/fake-concurrent.xml deleted file mode 100644 index 88995ffb..00000000 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/fake-concurrent.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/fake-spawn.xml b/server/user.jobengine.executors/jobtemplates/mediavivantis/fake-spawn.xml deleted file mode 100644 index 4a7fb850..00000000 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/fake-spawn.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/mediavivantis/fake.xml b/server/user.jobengine.executors/jobtemplates/mediavivantis/fake.xml deleted file mode 100644 index 1eb2ea44..00000000 --- a/server/user.jobengine.executors/jobtemplates/mediavivantis/fake.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/user.jobengine.executors/obsolate/obsolate/DeleteMaterialsStep.java b/server/user.jobengine.executors/obsolate/obsolate/DeleteMaterialsStep.java deleted file mode 100644 index 4e6d2217..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/DeleteMaterialsStep.java +++ /dev/null @@ -1,106 +0,0 @@ -package obsolate; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -import org.apache.commons.lang.StringUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import user.commons.RemoteFile; -import user.commons.StoreUri; -import user.commons.remotestore.RemoteStoreProtocol; -import user.jobengine.db.IItemManager; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class DeleteMaterialsStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - private static final String STATUSFOLDER = ".STATUS"; - private static final String KILLDATE = ".killdate"; - private static final String MXFFILTER = "*.mxf"; - private StoreUri sourceUri; - - @StepEntry - public Object[] execute(String sourceFolder, String userName, String password, IJobEngine jobEngine, IJobRuntime jobRuntime) { - if (StringUtils.isBlank(sourceFolder)) { - logger.error(getMarker(), "A folyamat 'sourceFolder' bemeneti paramétere üres."); - throw new NullPointerException("System is not configured properly, 'sourceFolder' input parameter missing."); - } - - IItemManager manager = jobEngine.getItemManager(); - sourceUri = manager.createStoreUri(RemoteStoreProtocol.SMB, sourceFolder); - sourceUri.setUserName(userName); - sourceUri.setPassword(password); - try { - sourceUri.getRemoteFiles(MXFFILTER, f -> processPathItem(f)); - } catch (Exception e) { - logger.error(getMarker(), "Általános folyamat hiba. A rendszer hibaüzenete: {}", e.getMessage()); - } - return null; - } - - private boolean processPathItem(RemoteFile remoteFile) { - //KILLDATE - String killDateFileName = String.format("%s.*%s", remoteFile.getName(), KILLDATE); - logger.debug("Checking {}", killDateFileName); - List remoteKillDateFiles = null; - try { - sourceUri.setCurrentPath(STATUSFOLDER); - remoteKillDateFiles = sourceUri.getRemoteFiles(killDateFileName); - } catch (Exception e) { - //logger.error(getMarker(), "A {} fájl 'killdate' állományai nem kérdezhetőek le. A rendszer hibaüzenete: {}", remoteFile.getName(), e.getMessage()); - return true; - } - - if (remoteKillDateFiles == null || remoteKillDateFiles.size() == 0) - return true; - - if (remoteKillDateFiles.size() != 1) { - logger.error(getMarker(), "A {} fájlhoz több 'killdate' állomány található, így nem eldönthető törölhető e.", remoteFile.getName()); - return true; - } - RemoteFile killDateFile = remoteKillDateFiles.get(0); - String strKillDate = killDateFile.getName().toLowerCase().replace(remoteFile.getName().toLowerCase() + ".", "").replace(KILLDATE.toLowerCase(), ""); - if (!StringUtils.isNumeric(strKillDate)) { - logger.error(getMarker(), "A {} fájl 'killdate' állománya hibás formátumú, az dátum helyett ez áll: '{}'.", remoteFile.getName(), strKillDate); - return true; - } - - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); - Date killDate = null; - try { - killDate = dateFormat.parse(strKillDate); - } catch (ParseException e) { - logger.error(getMarker(), "A {} fájl 'killdate' állománya hibás formátumú, a {} karaktersorozat nem konvertálható dátummá.", remoteFile.getName(), - strKillDate); - return true; - } - - if (killDate.after(new Date())) - return true; - - try { - sourceUri.setCurrentPath(null); - sourceUri.delete(remoteFile); - } catch (Exception e) { - logger.error(getMarker(), "A {} fájl nem törölhető. A rendszer hibaüzenete: {}", remoteFile.getName(), e.getMessage()); - return true; - } - - try { - sourceUri.setCurrentPath(STATUSFOLDER); - sourceUri.delete(killDateFile); - } catch (Exception e) { - logger.error(getMarker(), "A {} 'killdate' állománya nem törölhető. A rendszer hibaüzenete: {}", killDateFile.getName(), e.getMessage()); - } - - logger.info(getMarker(), "A {} fájl törlése a {} killdate alapján sikeresen megtörtént.", remoteFile.getName(), killDateFile.getName()); - - return true; - } -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/DownloadStep.java b/server/user.jobengine.executors/obsolate/obsolate/DownloadStep.java deleted file mode 100644 index f1b3e57e..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/DownloadStep.java +++ /dev/null @@ -1,73 +0,0 @@ -package obsolate; - -import java.util.UUID; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import user.commons.RemoteFile; -import user.commons.StoreUri; -import user.commons.remotestore.IProgressEventListener; -import user.commons.remotestore.IStatusEventListener; -import user.commons.remotestore.ProgressEvent; -import user.commons.remotestore.RemoteStoreProtocol; -import user.commons.remotestore.StatusEvent; -import user.jobengine.db.IItemManager; -import user.jobengine.db.Store; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.JobEngineException; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class DownloadStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - - StoreUri sourceUri = null; - - @StepEntry - public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, IJobEngine jobEngine, - IJobRuntime jobRuntime) throws Exception { - RemoteFile result = null; - final IJobRuntime runtime = jobRuntime; - IItemManager manager = jobEngine.getItemManager(); - Store systemStore = manager.getSystemStore(false); - - if (sourceStoreUri.getStoreId() == systemStore.getId()) { - logger.info("File is available on system store: " + sourceFileName); - sourceUri = systemStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL); - result = sourceUri.getRemoteFile(sourceFileName); - if (result == null) - throw new JobEngineException("RemoteFile is null"); - runtime.incrementProgress(100); - } else { - sourceUri = sourceStoreUri; - StoreUri target = systemStore.getTargetStoreUri(RemoteStoreProtocol.LOCAL); - if (target == null) - throw new JobEngineException("Target StoreUri is null"); - - sourceUri.addProgressListener(new IProgressEventListener() { - @Override - public void progressChanged(ProgressEvent evt) { - runtime.incrementProgress(evt.getProgress()); - logger.info("Progress:" + evt.getProgress()); - } - }); - sourceUri.addStatusListener(new IStatusEventListener() { - @Override - public void statusChanged(StatusEvent evt) { - evt.setCancel(!canContinue()); - } - }); - - result = sourceUri.transferFrom(target, sourceFileName, UUID.randomUUID().toString()); - } - return new Object[] { result }; - } - - @Override - public void cleanup() { - if (sourceUri != null) - sourceUri.clearListeners(); - } -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/GetItemSourcesStep.java b/server/user.jobengine.executors/obsolate/obsolate/GetItemSourcesStep.java deleted file mode 100644 index 3896c3bc..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/GetItemSourcesStep.java +++ /dev/null @@ -1,43 +0,0 @@ -package obsolate; - -import java.util.ArrayList; -import java.util.List; - -import user.commons.ItemSource; -import user.jobengine.db.IItemManager; -import user.jobengine.db.Scene; -import user.jobengine.db.SceneContent; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class GetItemSourcesStep extends JobStep { - - @StepEntry - public Object[] execute(List sourceFileName, long sceneId, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - List result = new ArrayList(); - final IJobRuntime runtime = jobRuntime; - IItemManager manager = jobEngine.getItemManager(); - if (manager != null && sceneId != 0 && sourceFileName == null) { - Scene scene = (Scene) manager.get(Scene.class, sceneId); - if (scene != null) { - for (SceneContent sceneContent : scene.getSceneContents()) { - ItemSource itemSource = new ItemSource(); - // itemSource.setName(sceneContent.getShot().getMedia().getMediaFiles().get(0).getRelativePath()); - itemSource.setId(sceneContent.getShot().getInPoint()); - itemSource.setId(sceneContent.getShot().getOutPoint()); - result.add(itemSource); - } - } - } else { - if (sourceFileName != null) { - ItemSource itemSource = new ItemSource(); - // itemSource.setName(sourceFileName); - result.add(itemSource); - } - } - runtime.incrementProgress(100); - return new Object[] { result }; - } -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/ImportWriteDataToDBStep.java b/server/user.jobengine.executors/obsolate/obsolate/ImportWriteDataToDBStep.java deleted file mode 100644 index 1647717f..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/ImportWriteDataToDBStep.java +++ /dev/null @@ -1,52 +0,0 @@ -package obsolate; - -import java.util.List; - -import user.jobengine.db.FileType; -import user.jobengine.db.IItemManager; -import user.jobengine.db.Item; -import user.jobengine.db.Media; -import user.jobengine.db.MediaFile; -import user.jobengine.db.Store; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class ImportWriteDataToDBStep extends JobStep { - - @StepEntry - public Object[] execute(Item item, List medias, IJobEngine jobEngine) { - try { - IItemManager manager = jobEngine.getItemManager(); - if (manager != null) { - configure(manager, item, medias); - item.add(); - } - } catch (Exception e) { - e.printStackTrace(); - } - Object[] result = new Object[]{ item }; - return result; - } - - private void configure(IItemManager manager, Item item, List medias) { - Store store = manager.getStore("Arch�vum gyorst�r"); - item.setMedias(medias); - if (medias != null) { - for (Media media : medias) { - FileType fileType = manager.getFileType(media.getTitle()); - if (fileType == null) - fileType = manager.getFileType("bin�ris"); - List files = media.getMediaFiles(); - for (MediaFile file: files) { - file.setFileType(fileType); - file.setStoreId(store.getId()); - String relativePath = file.getRelativePath(); - String name = relativePath.substring(relativePath.lastIndexOf('\\') + 1); - file.setRelativePath(item.getHouseId()+ "/" + name); - } - } - } - } - -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/MediaDBWriterStep.java b/server/user.jobengine.executors/obsolate/obsolate/MediaDBWriterStep.java deleted file mode 100644 index 619e5908..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/MediaDBWriterStep.java +++ /dev/null @@ -1,31 +0,0 @@ -package obsolate; - -import java.util.List; - -import user.jobengine.db.IItemManager; -import user.jobengine.db.Media; -import user.jobengine.db.MediaFile; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.JobEngineException; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class MediaDBWriterStep extends JobStep { - - @StepEntry - public Object[] execute(long itemId, Media media, List mediaFiles, IJobEngine jobEngine) throws Exception { - if (itemId == 0) - throw new JobEngineException("Item ID can't be 0."); - if (media == null) - throw new JobEngineException("Media can't be null."); - - IItemManager manager = jobEngine.getItemManager(); - media.setPersister(manager); - media.setItemId(itemId); - media.setMediaFiles(mediaFiles); - media.setIsPartialEnabled(true); - media.add(); - return null; - } - -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/MediaDownloadStep.java b/server/user.jobengine.executors/obsolate/obsolate/MediaDownloadStep.java deleted file mode 100644 index 97fc9c2f..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/MediaDownloadStep.java +++ /dev/null @@ -1,74 +0,0 @@ -package obsolate; - -import java.util.UUID; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import user.commons.RemoteFile; -import user.commons.StoreUri; -import user.commons.remotestore.IProgressEventListener; -import user.commons.remotestore.IStatusEventListener; -import user.commons.remotestore.ProgressEvent; -import user.commons.remotestore.RemoteStoreProtocol; -import user.commons.remotestore.StatusEvent; -import user.jobengine.db.IItemManager; -import user.jobengine.db.MediaFile; -import user.jobengine.db.Store; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.JobEngineException; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class MediaDownloadStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - - StoreUri sourceUri = null; - - @StepEntry - public Object[] execute(MediaFile mediaFile, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - RemoteFile result = null; - final IJobRuntime runtime = jobRuntime; - IItemManager manager = jobEngine.getItemManager(); - Store systemStore = manager.getSystemStore(false); - - if (mediaFile.getStore().getId() == systemStore.getId()) { - logger.info("File is available on system store"); - sourceUri = systemStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL); - result = sourceUri.getRemoteFile(mediaFile.getRelativePath()); - if (result == null) - throw new JobEngineException("RemoteFile is null"); - runtime.incrementProgress(100); - } else { - sourceUri = mediaFile.getStore().getSourceStoreUri(RemoteStoreProtocol.FTP); - result = sourceUri.getRemoteFile(mediaFile.getRelativePath()); - StoreUri target = systemStore.getTargetStoreUri(RemoteStoreProtocol.LOCAL); - if (target == null) - throw new JobEngineException("Target StoreUri is null"); - - sourceUri.addProgressListener(new IProgressEventListener() { - @Override - public void progressChanged(ProgressEvent evt) { - runtime.incrementProgress(evt.getProgress()); - logger.info("Progress:" + evt.getProgress()); - } - }); - sourceUri.addStatusListener(new IStatusEventListener() { - @Override - public void statusChanged(StatusEvent evt) { - evt.setCancel(!canContinue()); - } - }); - - result = sourceUri.transferFrom(target, result, UUID.randomUUID().toString()); - } - return new Object[] { result }; - } - - @Override - public void cleanup() { - if (sourceUri != null) - sourceUri.clearListeners(); - } -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/MediaUploadStep.java b/server/user.jobengine.executors/obsolate/obsolate/MediaUploadStep.java deleted file mode 100644 index fad502d8..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/MediaUploadStep.java +++ /dev/null @@ -1,77 +0,0 @@ -package obsolate; - -import java.util.List; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import user.commons.RemoteFile; -import user.commons.StoreUri; -import user.commons.remotestore.IProgressEventListener; -import user.commons.remotestore.IStatusEventListener; -import user.commons.remotestore.ProgressEvent; -import user.commons.remotestore.RemoteStoreProtocol; -import user.commons.remotestore.StatusEvent; -import user.jobengine.db.IItemManager; -import user.jobengine.db.MediaFile; -import user.jobengine.db.Store; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class MediaUploadStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - - StoreUri sourceUri = null; - - @StepEntry - public Object[] execute(StoreUri targetUri, List mediaFiles, IJobEngine jobEngine, - IJobRuntime jobRuntime) throws Exception { - IItemManager manager = jobEngine.getItemManager(); - Store lowresStore = manager.getSystemStore(true); - MediaFile currentMediaFile = null; - if (mediaFiles != null) { - for (MediaFile mediaFile : mediaFiles) { - if (mediaFile.getStoreId() == lowresStore.getId()) { - currentMediaFile = mediaFile; - break; - } - - } - } - - if (currentMediaFile != null) { - Store sourceStore = currentMediaFile.getStore(); - sourceUri = sourceStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL); - if (sourceUri == null) - sourceUri = sourceStore.getSourceStoreUri(RemoteStoreProtocol.FTP); - if (sourceUri != null) { - final IJobRuntime runtime = jobRuntime; - sourceUri.addProgressListener(new IProgressEventListener() { - @Override - public void progressChanged(ProgressEvent evt) { - runtime.incrementProgress(evt.getProgress()); - logger.info("Progress:" + evt.getProgress()); - } - }); - sourceUri.addStatusListener(new IStatusEventListener() { - @Override - public void statusChanged(StatusEvent evt) { - evt.setCancel(!canContinue()); - } - }); - - RemoteFile remoteFile = sourceUri.getRemoteFile(currentMediaFile.getRelativePath()); - sourceUri.transferFrom(targetUri, remoteFile, currentMediaFile.getRelativePath()); - } - } - return null; - } - - @Override - public void cleanup() { - if (sourceUri != null) - sourceUri.clearListeners(); - } -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/NexioDataMinerStep.java b/server/user.jobengine.executors/obsolate/obsolate/NexioDataMinerStep.java deleted file mode 100644 index 7998934d..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/NexioDataMinerStep.java +++ /dev/null @@ -1,45 +0,0 @@ -package obsolate; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import user.commons.nexio.NexioDataMiner; -import user.commons.remotestore.IProgressEventListener; -import user.commons.remotestore.ProgressEvent; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class NexioDataMinerStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - private IProgressEventListener progressListener; - - @StepEntry - public Object[] execute(IJobEngine jobEngine, final IJobRuntime jobRuntime) { - NexioDataMiner dataMiner = null; - try { - progressListener = createListener(jobRuntime); - dataMiner = new NexioDataMiner(); - dataMiner.addProgressListener(progressListener); - dataMiner.run(); - } catch (Exception e) { - logger.error(e); - } finally { - if (dataMiner != null) - dataMiner.removeProgressListener(progressListener); - } - return null; - } - - private IProgressEventListener createListener(final IJobRuntime jobRuntime) { - return new IProgressEventListener() { - @Override - public void progressChanged(ProgressEvent evt) { - logger.info("Progress changed to " + evt.getProgress() + "%"); - jobRuntime.incrementProgress(evt.getProgress()); - } - }; - } - -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/SetArchivedStep.java b/server/user.jobengine.executors/obsolate/obsolate/SetArchivedStep.java deleted file mode 100644 index df5a96ae..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/SetArchivedStep.java +++ /dev/null @@ -1,50 +0,0 @@ -package obsolate; - -import java.sql.Timestamp; -import java.util.Date; -import java.util.List; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import user.jobengine.db.IItemManager; -import user.jobengine.db.Media; -import user.jobengine.db.MediaFile; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.JobEngineException; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class SetArchivedStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - - @StepEntry - public Object[] execute(Media media, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - if (media == null) - throw new JobEngineException("Missing Media parameter."); - IItemManager manager = jobEngine.getItemManager(); - if (manager == null) - throw new JobEngineException("Missing ItemManager."); - List mediaFiles = media.getMediaFiles(); - if (mediaFiles == null || mediaFiles.size() != 1) - throw new JobEngineException("Missing media file(s) from Media record."); - MediaFile mediaFile = null; - for (MediaFile mf : mediaFiles) { - //StoreUri storeUri = mf.getStore().getTargetStoreUri(RemoteStoreProtocol.TSM); - if (mf.getId() > 0) - continue; - mediaFile = mf; - } - if (mediaFile == null) - throw new JobEngineException("Missing archived media file with empty ID from Media record."); - - mediaFile.add(); - - media.setPersister(manager); - media.setArchived(new Timestamp(new Date().getTime())); - media.modify(); - logger.info("Media {} is archived at {}", mediaFile.getRelativePath(), media.getArchived()); - return null; - } -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/TSMBackupStep_orig.java b/server/user.jobengine.executors/obsolate/obsolate/TSMBackupStep_orig.java deleted file mode 100644 index fab52af5..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/TSMBackupStep_orig.java +++ /dev/null @@ -1,160 +0,0 @@ -package obsolate; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import user.commons.RemoteFile; -import user.commons.StoreUri; -import user.commons.remotestore.IProgressEventListener; -import user.commons.remotestore.IStatusEventListener; -import user.commons.remotestore.ProgressEvent; -import user.commons.remotestore.RemoteStoreProtocol; -import user.commons.remotestore.StatusEvent; -import user.jobengine.db.IItemManager; -import user.jobengine.db.Media; -import user.jobengine.db.MediaFile; -import user.jobengine.db.Store; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class TSMBackupStep_orig extends JobStep { - // @StepEntry - // public Object[] execute(Media media, IJobEngine jobEngine, - // IJobRuntime jobRuntime) throws Exception { - // TSMClient tsm = null; - // tsm = new TSMClient("JobEngine"); - // tsm.connect(null, null); - // log_info("Connected to TSM"); - // try { - // log_info("Trying register filespace"); - // tsm.registerFilespace(File.separator + "JOBENGINE", "JOBENGINE", - // 'C', "JOBENGINE", 10L * 1024L * 1024L * 1024L, 0); - // } catch (Exception e) { - // log_info(e.getMessage()); - // } - // - // IItemManager manager = jobEngine.getItemManager(); - // final IJobRuntime runtime = jobRuntime; - // - // Store systemStore = manager.getSystemStore(false); - // Store mfStore = null; - // MediaFile mediaFile = null; - // for (MediaFile mf : media.getMediaFiles()) { - // mediaFile = mf; - // mfStore = mf.getStore(); - // if (mfStore.getId() == systemStore.getId()) - // break; - // } - // - // if (mediaFile == null) - // throw new Exception("Can not find HIRES media file"); - // if (mfStore == null) - // throw new Exception("Can not find HIRES store"); - // - // String path = mediaFile.getRelativePath(); - // int pos = path.lastIndexOf("/"); - // String fileName = pos > -1 ? path.substring(pos, path.length() - pos) - // : path; - // - // try { - // TSMBackupFileObject backupObject = new TSMBackupFileObject( - // File.separator + "JOBENGINE", File.separator + "JOBENGINE", - // File.separator + fileName); - // StoreUri uri = mfStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL); - // // TODO RemoteFile konverzi�, MediaFile-ba be�p�teni - // - // String sourceFilePath = DirectoryUtils.combine(uri.getFullPath(), - // fileName); - // final File file = new File(sourceFilePath); - // if (!file.exists()) - // throw new Exception("File not exists: " + sourceFilePath); - // final long fileSize = file.length(); - // log_info("Saving: " + sourceFilePath + ", size:" + fileSize); - // backupObject.setLocalFilePath(sourceFilePath); - // backupObject.setListener(new TSMObjectListener() { - // private long transferredBytes; - // private int lastProgress; - // - // public void bytesWorked(long bytes) { - // transferredBytes += bytes; - // int progress = fileSize == 0 ? 100 - // : (int) (transferredBytes * 100 / fileSize); - // if (progress > lastProgress + 4) { - // log_info("incrementProgress: " + progress); - // runtime.incrementProgress(progress); - // lastProgress = progress; - // } - // } - // }); - // runtime.incrementProgress(100); - // tsm.send(backupObject); - // } catch (Exception e) { - // throw new Exception(e); - // } finally { - // tsm.disconnect(); - // log_info("Disconnected"); - // } - // return null; - // } - - private static final Logger logger = LogManager.getLogger(); - - @StepEntry - public Object[] execute(Media media, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - - RemoteFile result = null; - final IJobRuntime runtime = jobRuntime; - IItemManager manager = jobEngine.getItemManager(); - Store systemStore = manager.getSystemStore(false); - Store mfStore = null; - MediaFile mediaFile = null; - for (MediaFile mf : media.getMediaFiles()) { - mediaFile = mf; - mfStore = mf.getStore(); - if (mfStore.getId() == systemStore.getId()) - break; - } - - if (mediaFile == null) - throw new Exception("Can not find HIRES media file"); - if (mfStore == null) - throw new Exception("Can not find HIRES store"); - - String path = mediaFile.getRelativePath(); - logger.info("Relative path is: " + path); - if (path == null) - throw new Exception("Path is null!"); - int pos = path.lastIndexOf("/"); - // String sourceFileName = pos > -1 ? path.substring(pos, path.length() - // - pos) : path; - String sourceFileName = pos > -1 ? path.substring(pos + 1, path.length()) : path; - logger.info("SourceFileName is: " + sourceFileName); - if (sourceFileName == null) - throw new NullPointerException("Source FileName is null"); - - StoreUri sourceUri = mfStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL); - StoreUri target = new StoreUri(); - target.setProtocol(RemoteStoreProtocol.TSM); - logger.info("Target is: " + target.getProtocol()); - sourceUri.addProgressListener(new IProgressEventListener() { - @Override - public void progressChanged(ProgressEvent evt) { - runtime.incrementProgress(evt.getProgress()); - } - }); - sourceUri.addStatusListener(new IStatusEventListener() { - @Override - public void statusChanged(StatusEvent evt) { - evt.setCancel(!canContinue()); - } - }); - result = sourceUri.transferFrom(target, sourceFileName, sourceFileName); - return new Object[] { result }; - } - - @Override - public void cleanup() { - } -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/TemplateStep.java b/server/user.jobengine.executors/obsolate/obsolate/TemplateStep.java deleted file mode 100644 index 806e6d09..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/TemplateStep.java +++ /dev/null @@ -1,19 +0,0 @@ -package obsolate; - -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class TemplateStep extends JobStep { - - @StepEntry - public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) { - try { - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - -} diff --git a/server/user.jobengine.executors/obsolate/obsolate/TranscodeStep.java b/server/user.jobengine.executors/obsolate/obsolate/TranscodeStep.java deleted file mode 100644 index 7dc01602..00000000 --- a/server/user.jobengine.executors/obsolate/obsolate/TranscodeStep.java +++ /dev/null @@ -1,133 +0,0 @@ -package obsolate; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.apache.commons.lang.StringUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import user.commons.FileTypeInfo; -import user.commons.FileTypeUtils; -import user.commons.ItemSource; -import user.commons.RemoteFile; -import user.commons.StoreUri; -import user.commons.rcc.RCCClient; -import user.commons.rcc.RCCJob; -import user.commons.remotestore.DirectoryUtils; -import user.commons.remotestore.RemoteStoreProtocol; -import user.jobengine.db.FileType; -import user.jobengine.db.IItemManager; -import user.jobengine.db.MediaFile; -import user.jobengine.db.Store; -import user.jobengine.server.IJobEngine; -import user.jobengine.server.IJobRuntime; -import user.jobengine.server.JobEngineException; -import user.jobengine.server.steps.JobStep; -import user.jobengine.server.steps.StepEntry; - -public class TranscodeStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - private static final String RCC_HOST = "jobengine.rcc.host"; - private static final String RCC_LOWRES_PROFILE = "jobengine.rcc.defaultlowresprofile"; - - @StepEntry - public Object[] execute(RemoteFile file, String transcoderProfile, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - if (file == null) - throw new JobEngineException("RemoteFile is null"); - - String transcoderHost = System.getProperty(RCC_HOST); - RCCClient client = new RCCClient(transcoderHost); - String guid = client.getProfileId(transcoderProfile); - if (guid == null) { - logger.info("Transcoder profile not exists: " + transcoderProfile + ", using default"); - String profile = System.getProperty(RCC_LOWRES_PROFILE); - logger.info("Profile : " + profile); - profile = StringUtils.strip(profile, "\""); - if (profile == null) - throw new JobEngineException("System default lowres profile is not configured (missing argument jobengine.rcc.defaultlowresprofile)"); - guid = client.getProfileId(profile); - if (guid == null) - throw new JobEngineException("Default profile not exists on remote host: " + "\"" + profile + "\""); - } - logger.info("Profile ok."); - IItemManager manager = jobEngine.getItemManager(); - Store systemStore = manager.getSystemStore(false); - Store lowresSystemStore = manager.getSystemStore(true); - logger.info("Stores ok."); - FileTypeInfo fti = FileTypeUtils.get(file.getExtension()); - logger.info("Filetype ok."); - - List mediaFiles = new ArrayList(); - MediaFile hires = new MediaFile(); - hires.setStore(systemStore); - hires.setRelativePath(file.getName()); - - FileType fileType = manager.getFileType(fti.getName()); - hires.setFileType(fileType); - mediaFiles.add(hires); - - if (fti.canTranscode()) { - logger.info("Can transcode ok."); - - StoreUri sourceStoreUri = systemStore.getSourceStoreUri(RemoteStoreProtocol.LOCAL); - if (sourceStoreUri == null) - throw new NullPointerException("Source store is not available."); - logger.info("Source store: " + sourceStoreUri.toString(true)); - - StoreUri targetStoreUri = lowresSystemStore.getTargetStoreUri(RemoteStoreProtocol.LOCAL); - if (targetStoreUri == null) - throw new NullPointerException("Target store is not available."); - logger.info("Target store: " + targetStoreUri.toString(true)); - - String filePath = DirectoryUtils.combine(sourceStoreUri.toString(true), file.getName(), true, false); - logger.info("Source file: " + filePath); - - // For temporary use only!!! - List itemSources = new ArrayList(); - ItemSource itemSource = new ItemSource(); - itemSource.setName(filePath); - itemSources.add(itemSource); - // - - RCCJob job = new RCCJob(client, (new Date()).toString(), null, 0); - if (!job.submit(itemSources, targetStoreUri.toString(true), guid)) - throw new JobEngineException("Can not submit job."); - - while (canContinue()) { - job.refresh(); - if (!job.isRunning()) { - if (job.isSuccess()) { - jobRuntime.incrementProgress(100); - - MediaFile lores = new MediaFile(); - lores.setStore(lowresSystemStore); - lores.setFileType(fileType); - RemoteFile targetFile = job.getTargetFile(); - String name = targetFile.getName(); - name = DirectoryUtils.checkSlash("\\", name, false, false); - if (targetFile != null) - lores.setRelativePath(name); - mediaFiles.add(lores); - } else { - String message = String.format("Job status is %s. Error details: %s", job.getStatus(), job.getErrorMessage()); - throw new JobEngineException(message); - } - break; - } - logger.info(job.getProgress()); - jobRuntime.incrementProgress(job.getProgress()); - Thread.sleep(2000); - } - - if (!canContinue()) - job.cancel(); - } else { - logger.info("Can not find transcode information for file type: " + file.getExtension()); - jobRuntime.incrementProgress(100); - } - - return new Object[] { mediaFiles }; - } -} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java index 9979d22e..f20291fd 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java @@ -17,6 +17,9 @@ public class CancelableStep extends JobStep { @StepEntry public Object[] execute(int param) throws Exception { try { + + Marker marker = MarkerManager.getMarker("MEDIAPROFILE"); + logger.info(marker, "{}", EscortFiles.DOT_CATCHED); getJobRuntime().setRelated("TESZT" + param); // ftpTest(); @@ -26,8 +29,6 @@ public class CancelableStep extends JobStep { // if (param == 1) // throw new Exception("Error teszt"); - Marker marker = MarkerManager.getMarker("MEDIAPROFILE"); - for (int i = 0; i < count; i++) { if (getJobRuntime().isWaitingCancel()) break; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/Cmd.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/Cmd.java index 797dc12f..96e23807 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/Cmd.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/Cmd.java @@ -8,11 +8,15 @@ import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import user.commons.configuration.SystemConfiguration; + public class Cmd { interface IResponseCallback { void onResponse(String line); } + private static final String FFMPEG_EXECUTABLE = SystemConfiguration.getInstance().value("services.ffmpeg.executable-location"); + private static final Logger log = LogManager.getLogger(); public static ProcessBuilder create(String... args) { @@ -72,7 +76,7 @@ public class Cmd { } public static String getFFMpegExecutable() { - return System.getProperty("jobengine.ffmpeg.location"); + return FFMPEG_EXECUTABLE; } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java index 008369b1..4a4a5cf2 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIOMaterialsStep.java @@ -26,6 +26,7 @@ import com.ibm.nosql.json.api.DBObject; import user.commons.CalendarUtils; import user.commons.ListUtils; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.nosql.NoSQLUtils; import user.commons.octopus.IOctopusAPI; import user.commons.octopus.OctopusAPI; @@ -48,6 +49,7 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { private static final String ARCHIVEDRUNDOWNS = "archivedrundowns"; private static final String ID = "id"; private static final String MEDIATYPE = "Hír bejátszó"; + private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); private OctopusAPI octopusAPI; private IItemManager manager; @@ -372,8 +374,8 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { logger.error(systemMarker, "Az adatbáziskezelő réteg nem elérhető."); throw new NullPointerException("Internal error, missing ItemManager reference."); } - String nexioHost = System.getProperty("nexio.host"); - if (StringUtils.isBlank(nexioHost)) { + + if (StringUtils.isBlank(NEXIO_HOST)) { logger.error(systemMarker, "A 'nexio.host' rendszer paraméter nem található."); throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing."); } @@ -386,7 +388,7 @@ public class CopyForArchiveNEXIOMaterialsStep extends JobStep { check(nexioAgency, "nexioAgency"); this.nexioAgency = nexioAgency; - sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST); sourceUri.setPortNumber(nexioPort); sourceUri.setUserName(nexioUserName); sourceUri.setPassword(nexioPassword); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java index 5424fd36..5413fc5c 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CopyForArchiveNEXIORecordingsStep.java @@ -29,6 +29,7 @@ import com.ibm.nosql.json.api.QueryBuilder; import user.commons.CalendarUtils; import user.commons.ListUtils; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.nexio.NexioDispatcher; import user.commons.nosql.NoSQLUtils; import user.commons.octopus.IOctopusAPI; @@ -56,6 +57,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { private static final String RECORDDATE = "recorddate"; private static final SimpleDateFormat startTimeformat = new SimpleDateFormat(STARTTIME_FORMAT); private static final SimpleDateFormat rundownDateformat = new SimpleDateFormat(RUNDOWNDATE_FORMAT); + private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); private OctopusAPI octopusAPI; private IItemManager manager; @@ -230,9 +232,9 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { return null; } } - + RundownArchive item2 = null; - + try { item2 = processRundow(rundown, clipName, duration); } catch (Exception e) { @@ -241,7 +243,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { e.getMessage()); return null; } - + result.setItemTitle(result.getItemTitle() + " + NAPIAKT"); StoryArchive storyArchive = result.getStoryArchives().get(0); StoryArchive storyArchive2 = item2.getStoryArchives().get(0); @@ -329,8 +331,8 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { logger.error(systemMarker, "Az adatbáziskezelő réteg nem elérhető."); throw new NullPointerException("Internal error, missing ItemManager reference."); } - String nexioHost = System.getProperty("nexio.host"); - if (StringUtils.isBlank(nexioHost)) { + + if (StringUtils.isBlank(NEXIO_HOST)) { logger.error(systemMarker, "A 'nexio.host' rendszer paraméter nem található."); throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing."); } @@ -348,7 +350,7 @@ public class CopyForArchiveNEXIORecordingsStep extends JobStep { check(nexioAgency, "nexioAgency"); this.nexioAgency = nexioAgency; - sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST); sourceUri.setPortNumber(nexioPort); sourceUri.setUserName(nexioUserName); sourceUri.setPassword(nexioPassword); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteNEXIOMaterialsStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteNEXIOMaterialsStep.java index db1693a7..cad3d110 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteNEXIOMaterialsStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/DeleteNEXIOMaterialsStep.java @@ -19,6 +19,7 @@ import com.ibm.nosql.json.api.QueryBuilder; import user.commons.ListUtils; import user.commons.RemoteFile; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.nosql.NoSQLUtils; import user.commons.remotestore.RemoteStoreProtocol; import user.jobengine.db.IItemManager; @@ -31,6 +32,7 @@ public class DeleteNEXIOMaterialsStep extends JobStep { private static final String KILLDATE = "killdate"; private static final String LONGNAMEID = "longnameid"; private static final String EXTAGENCY = "extagency"; + private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); private StoreUri sourceUri; private IJobRuntime jobRuntime; @@ -53,8 +55,7 @@ public class DeleteNEXIOMaterialsStep extends JobStep { public Object[] execute(int port, String userName, String password, String filterAgencies, int gracePeriodDays, boolean notificationOnly, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { this.jobRuntime = jobRuntime; - String nexioHost = System.getProperty("nexio.host"); - if (StringUtils.isBlank(nexioHost)) { + if (StringUtils.isBlank(NEXIO_HOST)) { logger.error(jobRuntime.getSessionMarker(), "A 'nexio.host' rendszer paraméter nem található."); throw new NullPointerException("System is not configured properly, 'nexio.host' startup parameter missing."); } @@ -82,7 +83,7 @@ public class DeleteNEXIOMaterialsStep extends JobStep { return null; IItemManager manager = jobEngine.getItemManager(); - sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST); sourceUri.setPortNumber(port); sourceUri.setUserName(userName); sourceUri.setPassword(password); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/DownloadRecordingFromNexioStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/DownloadRecordingFromNexioStep.java index c764a8a6..1a892e50 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/DownloadRecordingFromNexioStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/DownloadRecordingFromNexioStep.java @@ -16,6 +16,7 @@ import com.ibm.nosql.json.api.DBCollection; import user.commons.RemoteFile; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.nosql.NoSQLUtils; import user.commons.remotestore.IProgressEventListener; import user.commons.remotestore.IStatusEventListener; @@ -31,9 +32,10 @@ public class DownloadRecordingFromNexioStep extends JobStep { private static final String NEXIOCLIPS = "nexioclips"; private static final String LONGNAMEID = "longnameid"; private static final String DURATION = "duration"; - private static final Logger logger = LogManager.getLogger(); + private String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); + private IItemManager manager; private StoreUri targetUri; private StoreUri sourceUri; @@ -147,8 +149,7 @@ public class DownloadRecordingFromNexioStep extends JobStep { check(targetFileName, "targetFileName"); check(targetPath, "targetPath"); - String nexioHost = System.getProperty("nexio.host"); - if (StringUtils.isBlank(nexioHost)) { + if (StringUtils.isBlank(NEXIO_HOST)) { logger.error(marker, "A 'nexio.host' rendszer paraméter nem található."); throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing."); } @@ -156,7 +157,7 @@ public class DownloadRecordingFromNexioStep extends JobStep { check(nexioUserName, "nexioUserName"); check(nexioPassword, "nexioPassword"); - sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + sourceUri = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST); sourceUri.setPortNumber(nexioPort); sourceUri.setUserName(nexioUserName); sourceUri.setPassword(nexioPassword); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java index 58a5944d..db327dff 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MXFCutterStep.java @@ -7,6 +7,7 @@ import org.apache.logging.log4j.Marker; import user.commons.RemoteFile; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.remotestore.IProgressEventListener; import user.commons.remotestore.ProgressEvent; import user.commons.remotestore.RemoteStoreProtocol; @@ -20,6 +21,7 @@ import user.jobengine.server.IJobRuntime; public class MXFCutterStep extends JobStep { private static final String TARGETNAMEPATTERN = "-ARCH-%s"; private static final Logger logger = LogManager.getLogger(); + private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); private IItemManager manager; private StoreUri tempTargetUri; private StoreUri tempSourceUri; @@ -27,7 +29,6 @@ public class MXFCutterStep extends JobStep { private Marker marker; private int nexioPort; private String nexioUserName, nexioPassword; - private String nexioHost; protected void checkTargetPath(String targetPath) { if (StringUtils.isBlank(targetPath)) { @@ -38,7 +39,7 @@ public class MXFCutterStep extends JobStep { protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException { StoreUri result = null; - result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + result = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST); result.setPortNumber(nexioPort); result.setUserName(nexioUserName); result.setPassword(nexioPassword); @@ -52,7 +53,6 @@ public class MXFCutterStep extends JobStep { this.nexioPort = nexioPort; this.nexioUserName = nexioUserName; this.nexioPassword = nexioPassword; - nexioHost = System.getProperty("nexio.host"); marker = jobRuntime.getSessionMarker(); if (useNexioTarget && archivedMedia.getTcIn() != null && archivedMedia.getTcOut() != null) { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java index a2ce97bd..a35cb7da 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMiner.java @@ -32,6 +32,7 @@ import com.ibm.nosql.json.api.DBCursor; import user.commons.CalendarUtils; import user.commons.ListUtils; +import user.commons.configuration.SystemConfiguration; import user.commons.nosql.NoSQLUtils; import user.commons.octopus.IOctopusAPI; import user.commons.remotestore.IProgressEventListener; @@ -64,10 +65,11 @@ public class OctopusDataMiner { private static final String MOSLABEL = "MOS: "; private static final Object STORY = "Story"; + private static String OCTOPUS_API_ADDRESS = SystemConfiguration.getInstance().value("services.octopus.api.address"); + private static String OCTOPUS_API_USER = SystemConfiguration.getInstance().value("services.octopus.api.user"); + private static String OCTOPUS_API_PASSWORD = SystemConfiguration.getInstance().value("services.octopus.api.password"); private DB db; private ResteasyWebTarget webTarget; - private String apiUser; - private String apiPwd; private HashSet storyIDs = new HashSet<>(); private HashSet folderIDs = new HashSet<>(); private HashSet rundownIDs = new HashSet<>(); @@ -82,19 +84,12 @@ public class OctopusDataMiner { private Calendar zeroDate = CalendarUtils.createCalendar(2017, 11, 4); private int objectCount; private int currentObjectIndex; - private boolean disableWrite = false; public OctopusDataMiner() { db = NoSQLUtils.getNoSQLDB(); - - String apiAddress = System.getProperty("jobengine.octopus.api.address"); - apiUser = System.getProperty("jobengine.octopus.api.user"); - apiPwd = System.getProperty("jobengine.octopus.api.password"); - - // ResteasyClient client = new ResteasyClientBuilder().register(JacksonJsonProvider.class).build(); ResteasyClient client = new ResteasyClientBuilder().build(); - webTarget = client.target(apiAddress).register(new BasicAuthentication(apiUser, apiPwd)); + webTarget = client.target(OCTOPUS_API_ADDRESS).register(new BasicAuthentication(OCTOPUS_API_USER, OCTOPUS_API_PASSWORD)); } public void addProgressListener(IProgressEventListener listener) { @@ -429,7 +424,7 @@ public class OctopusDataMiner { private Builder query(String path, String fields) { ResteasyWebTarget target = webTarget.path(path).queryParam(FIELDS, fields); - Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd); + Builder result = target.request().header(OCTOPUS_DEVICE_ID, OCTOPUS_API_USER).header(OCTOPUS_DEVICE_NAME, OCTOPUS_API_PASSWORD); return result; } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMinerStable.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMinerStable.java deleted file mode 100644 index 74969aef..00000000 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/OctopusDataMinerStable.java +++ /dev/null @@ -1,848 +0,0 @@ -package user.jobengine.server.steps; - -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import javax.swing.event.EventListenerList; -import javax.ws.rs.client.Entity; -import javax.ws.rs.client.Invocation.Builder; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.jboss.resteasy.client.jaxrs.BasicAuthentication; -import org.jboss.resteasy.client.jaxrs.ResteasyClient; -import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; -import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; -import org.joda.time.DateTime; - -import com.ibm.nosql.json.JSONUtil; -import com.ibm.nosql.json.api.BasicDBList; -import com.ibm.nosql.json.api.BasicDBObject; -import com.ibm.nosql.json.api.DB; -import com.ibm.nosql.json.api.DBCollection; -import com.ibm.nosql.json.api.DBCursor; -import com.ibm.nosql.json.api.QueryBuilder; -import com.ibm.nosql.json.api.WriteResult; - -import user.commons.CalendarUtils; -import user.commons.ListUtils; -import user.commons.nosql.NoSQLUtils; -import user.commons.octopus.IOctopusAPI; -import user.commons.remotestore.IProgressEventListener; -import user.commons.remotestore.ProgressEvent; - -public class OctopusDataMinerStable { - private static final String ARCHIVED = "archived"; - private static final String FILTER = "filter"; - private static final String _TMP = "_tmp"; - private static final Logger logger = LogManager.getLogger(); - private static final String LINEFEED = "\r\n"; - private static final String SIMPLE_LINEFEED = "\n"; - private static final String SAVING_STORY_ID = "Saving story {}"; - // private static final String SAVING_RUNDOWN = "Saving rundown : {} {}"; - // private static final String CHECKING_RUNDOWN = "Checking Rundown {} ({}/{})"; - private static final String FIELDS_STORYFOLDER_STORIES = "stories,Story.modified,Story.name,Story.id,Story.mosObjects,Story.script,Story.type,Story.format,Story.customColumns,CustomColumn.label,CustomColumn.value"; - private static final String FIELDS_RUNDOWN_STORIES = "slugs,Slug.story,Slug.position,Story.name,Story.id,Story.modified,Story.mosObjects,Story.script,Story.type,Story.format,Story.customColumns,CustomColumn.label,CustomColumn.value"; - private static final String FIELDS_RUNDOWN = "id,name,modified,scheduledStart,channel,Channel.name,rundownType,RundownType.name"; - private static final String FIELDS_RUNDOWN_STORYIDS = "id,slugs,Slug.storyId,Slug.position"; - private static final String FIELDS_STORYFOLDER = "id,name,modified"; - private static final String FIELDS_STORYFOLDER_STORYIDS = "id,stories,Story.id"; - private static final String RUNDOWN = "Rundown"; - private static final String OCTOPUS_DEVICE_NAME = "Octopus-Device-Name"; - private static final String OCTOPUS_DEVICE_ID = "Octopus-Device-Id"; - private static final String FIELDS = "fields"; - private static final String CHECKING_STORY_FOLDER = "Checking StoryFolder %s (%d/%d)"; - private static final String EXIT = "Exit"; - private static final String RESULT = "result"; - private static final String STORY_FOLDER = "StoryFolder"; - private static final String ENTER = "Enter"; - private static final String FINISHED = "Finished"; - private static final String STARTING = "Starting"; - private static final String MOSOBJECT = "Bejátszó: "; - - private DB db; - private ResteasyWebTarget webTarget; - private String apiUser; - private String apiPwd; - private HashSet storyIDs = new HashSet<>(); - private HashSet folderIDs = new HashSet<>(); - private HashSet rundownIDs = new HashSet<>(); - private EventListenerList progressListenerList; - private ProgressEvent progressEvent = new ProgressEvent(this, 0); - private Map storyRundowns; - private Map storyStoryFolders; - private Map currentRundowns; - private Map currentFolder; - private Map currentStories; - private String RUNDOWN_COLLECTION; - private String FOLDER_COLLECTION; - private String STORY_COLLECTION; - private boolean includeArchived; - private Calendar zeroDate = CalendarUtils.createCalendar(2017, 11, 4); - - public OctopusDataMinerStable() { - db = NoSQLUtils.getNoSQLDB(); - - String apiAddress = System.getProperty("jobengine.octopus.api.address"); - apiUser = System.getProperty("jobengine.octopus.api.user"); - apiPwd = System.getProperty("jobengine.octopus.api.password"); - - // ResteasyClient client = new ResteasyClientBuilder().register(JacksonJsonProvider.class).build(); - ResteasyClient client = new ResteasyClientBuilder().build(); - webTarget = client.target(apiAddress).register(new BasicAuthentication(apiUser, apiPwd)); - } - - public void addProgressListener(IProgressEventListener listener) { - if (progressListenerList == null) - progressListenerList = new EventListenerList(); - progressListenerList.add(IProgressEventListener.class, listener); - } - - private Map buildFolderReferences(BasicDBList storyFolders) { - Map result = new HashMap<>(); - List storyFolderList = NoSQLUtils.asList(storyFolders); - for (BasicDBObject storyFolder : storyFolderList) { - if (storyFolder == null || !storyFolder.containsKey(IOctopusAPI.ID)) - continue; - BasicDBObject storyFolderWithStoryIds = queryStoryFolder(storyFolder, FIELDS_STORYFOLDER_STORYIDS); - long storyFolderId = storyFolderWithStoryIds.getLong(IOctopusAPI.ID); - List stories = NoSQLUtils.asList(storyFolderWithStoryIds, IOctopusAPI.STORIES); - if (stories == null) - continue; - if (!folderIDs.contains(storyFolderId)) - folderIDs.add(storyFolderId); - long position = 1; - for (BasicDBObject story : stories) { - long storyId = story.getLong(IOctopusAPI.ID); - - BasicDBList references = result.get(storyId); - if (references == null) { - references = new BasicDBList(); - result.put(storyId, references); - } - references.add(new BasicDBObject(IOctopusAPI.ID, storyFolderId).append(IOctopusAPI.POSITION, position++)); - } - } - return result; - } - - private Map buildRundownReferences(BasicDBList rundowns) { - Map result = new HashMap<>(); - List rundownsList = NoSQLUtils.asList(rundowns); - for (BasicDBObject rundown : rundownsList) { - if (rundown == null || !rundown.containsKey(IOctopusAPI.ID)) - continue; - BasicDBObject rundownWithStoryids = queryRundown(rundown, FIELDS_RUNDOWN_STORYIDS); - long rundownId = rundownWithStoryids.getLong(IOctopusAPI.ID); - List slugs = NoSQLUtils.asList(rundownWithStoryids, IOctopusAPI.SLUGS); - if (slugs == null) - continue; - - if (!rundownIDs.contains(rundownId)) - rundownIDs.add(rundownId); - - for (BasicDBObject slug : slugs) { - if (!slug.containsKey(IOctopusAPI.STORYID)) - continue; - long storyId = slug.getLong(IOctopusAPI.STORYID); - BasicDBList references = result.get(storyId); - if (references == null) { - references = new BasicDBList(); - result.put(storyId, references); - } - long position = slug.getLong(IOctopusAPI.POSITION); - if (slug.containsKey(IOctopusAPI.POSITION)) - position = slug.getLong(IOctopusAPI.POSITION); - references.add(new BasicDBObject(IOctopusAPI.ID, rundownId).append(IOctopusAPI.POSITION, position)); - } - } - return result; - } - - public void clear() { - db.getCollection(RUNDOWN_COLLECTION).remove(); - db.getCollection(STORY_COLLECTION).remove(); - db.getCollection(FOLDER_COLLECTION).remove(); - db.getCollection(IOctopusAPI.TIME_COLLECTION_NAME).remove(); - } - - private String concatParentsToStoryFolder(BasicDBObject actual, String name) { - - String fields = "name,id,parent"; - Response response = query("StoryFolder/" + actual.getLong("id"), fields).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - BasicDBObject res = (BasicDBObject) resultObject.get("result"); - BasicDBObject parent = (BasicDBObject) res.get("parent"); - if (parent == null || parent.isEmpty()) - return name; - String parentName = parent.getString(IOctopusAPI.NAME); - String actualName = actual.getString(IOctopusAPI.NAME); - String newName = String.format("%s/%s", parentName, actualName); - return concatParentsToStoryFolder(parent, newName); - } - - private void deleteDiff(Set oldIDs, Set newIDs, String collectionName) { - if (oldIDs == null || oldIDs.size() == 0) - return; - if (newIDs != null && newIDs.size() > 0) - oldIDs.removeAll(newIDs); - DBCollection collection = db.getCollection(collectionName); - for (long id : oldIDs) { - logger.info("Deleting {} from {}", id, collectionName); - collection.remove(new BasicDBObject(IOctopusAPI.ID, id)); - } - } - - private void deleteOrphanRundowns() { - try { - DBCollection collection = db.getCollection(RUNDOWN_COLLECTION); - BasicDBObject query = (BasicDBObject) QueryBuilder.start().put(IOctopusAPI.ID).notIn(storyRundowns.keySet().toArray()).get(); - WriteResult res = collection.remove(query); - logger.trace(String.format("Deleted orphan rundowns: %d", res.getN())); - } catch (Exception e) { - logger.error(e); - } - } - - private void deleteOrphanStories() { - try { - DBCollection collection = db.getCollection(STORY_COLLECTION); - BasicDBObject query = (BasicDBObject) QueryBuilder.start().put("id").notIn(storyIDs.toArray()).get(); - WriteResult res = collection.remove(query); - logger.trace(String.format("Deleted orphan stories: %d", res.getN())); - } catch (Exception e) { - logger.error(e); - } - } - - private void deleteOrphanStoryFolders() { - try { - DBCollection collection = db.getCollection(RUNDOWN_COLLECTION); - BasicDBObject query = (BasicDBObject) QueryBuilder.start().put(IOctopusAPI.ID).notIn(storyStoryFolders.keySet().toArray()).get(); - WriteResult res = collection.remove(query); - logger.trace(String.format("Deleted orphan rundowns: %d", res.getN())); - } catch (Exception e) { - logger.error(e); - } - } - - private void ensureIndexes() { - DBCollection collection = db.getCollection(FOLDER_COLLECTION); - if (collection.count() == 0) - collection.ensureIndex(IOctopusAPI.ID); - collection = db.getCollection(RUNDOWN_COLLECTION); - if (collection.count() == 0) { - collection.ensureIndex(IOctopusAPI.ID); - collection.ensureIndex(IOctopusAPI.SCHEDULED_START); - } - collection = db.getCollection(STORY_COLLECTION); - if (collection.count() == 0) - collection.ensureIndex(IOctopusAPI.ID); - } - - public void execute(boolean includeArchived) throws Exception { - this.includeArchived = includeArchived; - logger.trace(STARTING); - - // String MAIN_RUNDOWN_COLLECTION = IOctopusAPI.RUNDOWN_COLLECTION; - // String MAIN_FOLDER_COLLECTION = IOctopusAPI.FOLDER_COLLECTION; - // String MAIN_STORY_COLLECTION = IOctopusAPI.STORY_COLLECTION; - - // RUNDOWN_COLLECTION = MAIN_RUNDOWN_COLLECTION + _TMP; - // FOLDER_COLLECTION = MAIN_FOLDER_COLLECTION + _TMP; - // STORY_COLLECTION = MAIN_STORY_COLLECTION + _TMP; - // - // try { - // db.getCollection(RUNDOWN_COLLECTION).drop(); - // db.getCollection(FOLDER_COLLECTION).drop(); - // db.getCollection(STORY_COLLECTION).drop(); - // } catch (Exception e) { - // logger.catching(e); - // throw e; - // } - - RUNDOWN_COLLECTION = IOctopusAPI.RUNDOWN_COLLECTION; - FOLDER_COLLECTION = IOctopusAPI.FOLDER_COLLECTION; - STORY_COLLECTION = IOctopusAPI.STORY_COLLECTION; - - //current = korábbi szinkronizálás - currentRundowns = getCurrentIDs(RUNDOWN_COLLECTION); - currentFolder = getCurrentIDs(FOLDER_COLLECTION); - currentStories = getCurrentIDs(STORY_COLLECTION); - - BasicDBList rundowns = null; - BasicDBList storyFolders = null; - try { - rundowns = queryBuildRefRundowns(); - storyFolders = queryBuildRefFolders(); - } catch (Exception e) { - logger.catching(e); - throw e; - } - - processRundowns(rundowns); - processStoryFolders(storyFolders); - - deleteDiff(currentRundowns.keySet(), rundownIDs, RUNDOWN_COLLECTION); - deleteDiff(currentFolder.keySet(), folderIDs, FOLDER_COLLECTION); - deleteDiff(currentStories.keySet(), storyIDs, STORY_COLLECTION); - // deleteOrphanRundowns(); - // deleteOrphanStoryFolders(); - // deleteOrphanStories(); - - //a sorrend fontos ! - // updateDiff(MAIN_STORY_COLLECTION, STORY_COLLECTION, IOctopusAPI.ID); - // updateDiff(MAIN_RUNDOWN_COLLECTION, RUNDOWN_COLLECTION, IOctopusAPI.ID); - // updateDiff(MAIN_FOLDER_COLLECTION, FOLDER_COLLECTION, IOctopusAPI.ID); - // - // updateDeleteDiff(MAIN_RUNDOWN_COLLECTION, RUNDOWN_COLLECTION, IOctopusAPI.ID); - // updateDeleteDiff(MAIN_FOLDER_COLLECTION, FOLDER_COLLECTION, IOctopusAPI.ID); - // updateDeleteDiff(MAIN_STORY_COLLECTION, STORY_COLLECTION, IOctopusAPI.ID); - - // try { - // db.getCollection(RUNDOWN_COLLECTION).rename(MAIN_RUNDOWN_COLLECTION, true); - // db.getCollection(FOLDER_COLLECTION).rename(MAIN_FOLDER_COLLECTION, true); - // db.getCollection(STORY_COLLECTION).rename(MAIN_STORY_COLLECTION, true); - // } catch (Exception e) { - // logger.catching(e); - // throw e; - // } - - // logger.info("Activate"); - - // try { - // long ts = new Date().getTime(); - // db.getCollection(RUNDOWN_COLLECTION).exportFile(String.format("/opt/mediacube-test/log/%s-%s.js", RUNDOWN_COLLECTION, ts)); - // db.getCollection(FOLDER_COLLECTION).exportFile(String.format("/opt/mediacube-test/log/%s-%s.js", FOLDER_COLLECTION, ts)); - // db.getCollection(STORY_COLLECTION).exportFile(String.format("/opt/mediacube-test/log/%s-%s.js", STORY_COLLECTION, ts)); - // } catch (Exception e) { - // logger.catching(e); - // throw e; - // } - - logger.trace(FINISHED); - //throw new Exception("Mérés"); - } - - private String extractContent(BasicDBObject content) { - String scriptContent = ""; - if (!content.containsKey(IOctopusAPI.TYPE)) - return scriptContent; - String type = content.getString(IOctopusAPI.TYPE); - switch (type) { - case IOctopusAPI.TEXT: { - if (content.containsKey(IOctopusAPI.TEXT)) { - String text = content.getString(IOctopusAPI.TEXT); - if (text != null) - scriptContent += String.format("%s%s", text.replaceAll(SIMPLE_LINEFEED, LINEFEED), LINEFEED); - } - break; - } - case IOctopusAPI.MOS: { - BasicDBObject mosObject = NoSQLUtils.asDBObject(content, IOctopusAPI.OBJECT); - if (mosObject != null && !mosObject.isEmpty()) { - if (mosObject.containsKey(IOctopusAPI.OBJ_ID)) { - String objID = mosObject.getString(IOctopusAPI.OBJ_ID); - scriptContent += String.format("%s %s%s", MOSOBJECT, objID, LINEFEED); - } - } - break; - } - default: { - if (content.containsKey(IOctopusAPI.CONTENT)) { - List innerContents = NoSQLUtils.asList(content, IOctopusAPI.CONTENT); - if (innerContents != null) { - for (BasicDBObject actualInnerContent : innerContents) { - if (actualInnerContent != null && actualInnerContent.isEmpty()) - scriptContent += extractContent(actualInnerContent); - } - } - } - break; - } - } - return scriptContent; - } - - private String extractCustomColumnValue(String columnName, BasicDBObject story) { - List customColumns = NoSQLUtils.asList(story, IOctopusAPI.CUSTOM_COLUMNS); - if (customColumns == null) - return null; - String result = null; - for (BasicDBObject customColumn : customColumns) { - if (!customColumn.containsKey(IOctopusAPI.LABEL)) - continue; - String currentName = customColumn.getString(IOctopusAPI.LABEL); - if (currentName == null) - continue; - if (!currentName.toLowerCase().equals(columnName.toLowerCase())) - continue; - if (!customColumn.containsKey(IOctopusAPI.VALUE)) - continue; - result = customColumn.getString(IOctopusAPI.VALUE); - break; - } - return result; - } - - private BasicDBList extractRelevantMOSObjects(BasicDBObject story) { - List mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS); - if (mosObjects == null) - return null; - BasicDBList result = null; - for (BasicDBObject mosObject : mosObjects) { - if (!mosObject.containsKey(IOctopusAPI.MOS_ID)) - continue; - String mosId = mosObject.getString(IOctopusAPI.MOS_ID); - if (!IOctopusAPI.NEXIO_MOS.equals(mosId)) - continue; - if (result == null) - result = new BasicDBList(); - result.add(mosObject); - } - return result; - } - - private String extractScriptContent(BasicDBObject story) { - BasicDBObject script = NoSQLUtils.asDBObject(story, IOctopusAPI.SCRIPT); - if (script == null || script.isEmpty()) - return null; - - List body = NoSQLUtils.asList(script, IOctopusAPI.BODY); - if (body == null || body.size() == 0) - return null; - - StringBuilder sb = new StringBuilder(); - - for (BasicDBObject bodyItem : body) { - if (bodyItem.containsKey(IOctopusAPI.LABEL)) { - sb.append(bodyItem.getString(IOctopusAPI.LABEL)); - sb.append(LINEFEED); - } - List contents = NoSQLUtils.asList(bodyItem, IOctopusAPI.CONTENT); - if (contents == null) - continue; - for (BasicDBObject content : contents) { - sb.append(extractContent(content)); - } - } - return sb.length() == 0 ? null : sb.toString(); - } - - private void fireProgressEvent(ProgressEvent evt) { - logger.debug("Progress changed to " + evt.getProgress() + "%"); - if (progressListenerList == null) - return; - Object[] listeners = progressListenerList.getListenerList(); - for (int i = 0; i < listeners.length; i += 2) { - if (listeners[i] == IProgressEventListener.class) - ((IProgressEventListener) listeners[i + 1]).progressChanged(evt); - } - } - - public Map getCurrentIDs(String name) { - Map result = new HashMap<>(); - - DBCursor cursor = db.getCollection(name).find(new BasicDBObject(), new BasicDBObject(IOctopusAPI.ID, 1)); - if (cursor.hasNext()) { - List objects = ListUtils.cast(cursor.toArray()); - for (BasicDBObject obj : objects) { - if (obj == null) - continue; - long id = NoSQLUtils.asLong(obj, IOctopusAPI.ID); - if (id == 0) - continue; - Object _id = obj.getID(); - if (_id == null) - continue; - result.put(id, _id); - } - } - return result; - } - - private void processRundowns(BasicDBList rundowns) throws Exception { - if (rundowns == null || rundowns.size() == 0) { - progressEvent.setProgress(50); - fireProgressEvent(progressEvent); - } else { - logger.info("Process rundowns"); - try { - storeRundowns(rundowns, null); - } catch (Exception e) { - logger.catching(e); - throw e; - } - } - } - - private void processStoryFolders(BasicDBList storyFolders) throws Exception { - if (storyFolders == null || storyFolders.size() == 0) { - progressEvent.setProgress(100); - fireProgressEvent(progressEvent); - } else { - logger.info("Process story folders"); - try { - storeStoryFolders(storyFolders, null); - } catch (Exception e) { - logger.catching(e); - throw e; - } - } - } - - private Builder query(String path, String fields) { - ResteasyWebTarget target = webTarget.path(path).queryParam(FIELDS, fields); - Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd); - return result; - } - - private BasicDBList queryBuildRefFolders() { - BasicDBList storyFolders; - logger.info("Fetch story folders"); - storyFolders = queryStoryFolders(); - logger.info("Fetch folder story references"); - storyStoryFolders = buildFolderReferences(storyFolders); - return storyFolders; - } - - private BasicDBList queryBuildRefRundowns() { - BasicDBList rundowns; - logger.info("Fetch rundowns"); - rundowns = queryRundowns(); - logger.info("Fetch rundown story references"); - storyRundowns = buildRundownReferences(rundowns); - return rundowns; - } - - private BasicDBObject queryRundown(BasicDBObject rundown, String fields) { - logger.trace(ENTER); - BasicDBObject result = null; - long id = NoSQLUtils.asLong(rundown, IOctopusAPI.ID); - Response response = query(String.format("%s/%d", RUNDOWN, id), fields).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject == null) - logger.error("Rundown {} {} is not available", id, rundown.getString(IOctopusAPI.NAME)); - else - result = NoSQLUtils.asDBObject(resultObject, RESULT); - logger.trace(EXIT); - return result; - } - - private BasicDBList queryRundowns() { - logger.trace(ENTER); - BasicDBList result = null; - Builder query = query(RUNDOWN, FIELDS_RUNDOWN); - Response response = null; - if (includeArchived) { - response = query.post(Entity.entity(new BasicDBObject(FILTER, new BasicDBObject(ARCHIVED, true)).toString(), MediaType.APPLICATION_JSON)); - } else - response = query.get(); - - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject != null) - result = NoSQLUtils.asDBList(resultObject, RESULT); - logger.trace(EXIT); - return result; - } - - private BasicDBObject queryStoryFolder(BasicDBObject storyFolder, String fields) { - logger.trace(ENTER); - BasicDBObject result = null; - long id = NoSQLUtils.asLong(storyFolder, IOctopusAPI.ID); - Response response = query(String.format("%s/%d", STORY_FOLDER, id), fields).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject == null) - logger.error("StoryFolder {} {} is not available", id, storyFolder.getString(IOctopusAPI.NAME)); - else - result = NoSQLUtils.asDBObject(resultObject, RESULT); - logger.trace(EXIT); - return result; - } - - private BasicDBList queryStoryFolders() { - logger.trace(ENTER); - BasicDBList result = null; - Response response = query(STORY_FOLDER, FIELDS_STORYFOLDER).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject != null) - result = NoSQLUtils.asDBList(resultObject, RESULT); - - // /* teszt */ - // List list = NoSQLUtils.asList(result); - // for (BasicDBObject actual : list) { - // String fullName = concatParentsToStoryFolder(actual, actual.getString(IOctopusAPI.NAME)); - // //logger.info("Checking StoryFolder {}", fullName); - // actual.remove(IOctopusAPI.NAME); - // actual.append(IOctopusAPI.NAME, fullName); - // } - // - logger.trace(EXIT); - return result; - } - - public void removeProgressListener(IProgressEventListener listener) { - progressListenerList.remove(IProgressEventListener.class, listener); - } - - void setObjectID(Map current, long id, BasicDBObject objectToSave) { - Object _id = current.get(id); - if (_id == null) - return; - objectToSave.put(IOctopusAPI._ID, _id); - } - - private void storeRundown(BasicDBObject rundown) { - logger.trace(ENTER); - String name = rundown.containsKey(IOctopusAPI.NAME) ? rundown.getString(IOctopusAPI.NAME) : null; - logger.debug("Storing rundown {} {}", name, rundown.get(IOctopusAPI.SCHEDULED_START)); - BasicDBObject rundownWithStories = queryRundown(rundown, FIELDS_RUNDOWN_STORIES); - if (rundownWithStories != null) { - Date scheduledStart = toDate(rundown, IOctopusAPI.SCHEDULED_START); - if (scheduledStart != null && scheduledStart.after(zeroDate.getTime())) { - BasicDBList stories = NoSQLUtils.asDBList(rundownWithStories, IOctopusAPI.SLUGS); - if (stories != null) - storeRundownStories(stories); - rundown.put(IOctopusAPI.SCHEDULED_START, toDate(rundown, IOctopusAPI.SCHEDULED_START)); - rundown.put(IOctopusAPI.MODIFIED, toDate(rundown, IOctopusAPI.MODIFIED)); - DBCollection collection = db.getCollection(RUNDOWN_COLLECTION); - long rundownID = NoSQLUtils.asLong(rundown, IOctopusAPI.ID); - setObjectID(currentRundowns, rundownID, rundown); - collection.save(rundown); - } - } - logger.trace(EXIT); - } - - private void storeRundowns(BasicDBList rundowns, Date lastUpdateTime) { - logger.trace(ENTER); - List rundownsList = NoSQLUtils.asList(rundowns); - int idx = 1; - for (BasicDBObject rundown : rundownsList) { - //logger.info(CHECKING_RUNDOWN, rundown.getLong(IOctopusAPI.ID), rundownsList.size(), idx); - storeRundown(rundown); - int progress = idx * 50 / rundownsList.size(); - if (progress - progressEvent.getProgress() > 0) { - progressEvent.setProgress(progress); - fireProgressEvent(progressEvent); - } - - idx++; - } - logger.trace(EXIT); - } - - private void storeRundownStories(BasicDBList slugs) { - logger.trace(ENTER); - List slugsList = NoSQLUtils.asList(slugs); - for (BasicDBObject slug : slugsList) { - if (slug.containsKey(IOctopusAPI.STORY)) - storeStory((BasicDBObject) slug.get(IOctopusAPI.STORY)); - } - logger.trace(EXIT); - } - - private void storeStory(BasicDBObject story) { - logger.trace(ENTER); - if (!story.containsKey(IOctopusAPI.ID)) { - logger.error("Missing id in story {}", story.toPrettyString(null)); - return; - } - long storyID = story.getLong(IOctopusAPI.ID); - boolean isContains = storyIDs.contains(storyID); - if (isContains) - return; - storyIDs.add(storyID); - story.put(IOctopusAPI.MODIFIED, toDate(story, IOctopusAPI.MODIFIED)); - BasicDBList rundownRef = storyRundowns.get(storyID); - BasicDBList storyFolderRef = storyStoryFolders.get(storyID); - BasicDBList modifiedMOS = extractRelevantMOSObjects(story); - - DBCollection collection = db.getCollection(STORY_COLLECTION); - - if (rundownRef != null) - story.put(IOctopusAPI.REF_RUNDOWN, rundownRef); - if (storyFolderRef != null) - story.put(IOctopusAPI.REF_STORYFOLDER, storyFolderRef); - String scriptContent = extractScriptContent(story); - story.put(IOctopusAPI.SCRIPT_CONTENT, scriptContent); - if (modifiedMOS == null || modifiedMOS.isEmpty()) { - if (story.containsKey(IOctopusAPI.MOS_OBJECTS)) - story.remove(IOctopusAPI.MOS_OBJECTS); - } else - story.put(IOctopusAPI.MOS_OBJECTS, modifiedMOS); - - String parentStoryId = extractCustomColumnValue(IOctopusAPI.PARENT_STORY_ID, story); - if (parentStoryId == null) { - logger.warn("Missing {} in story", IOctopusAPI.PARENT_STORY_ID, story.toPrettyString(null)); - story.append(IOctopusAPI.PARENT_STORY_ID, storyID); - } else - story.append(IOctopusAPI.PARENT_STORY_ID, parentStoryId); - logger.debug(SAVING_STORY_ID, storyID); - setObjectID(currentStories, storyID, story); - collection.save(story); - logger.trace(EXIT); - } - - private void storeStoryFolder(BasicDBObject storyFolder, Date lastUpdateTime) { - logger.trace(ENTER); - BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolder, FIELDS_STORYFOLDER_STORIES); - if (storyFoldersWithStories != null) { - BasicDBList stories = NoSQLUtils.asDBList(storyFoldersWithStories, IOctopusAPI.STORIES); - if (stories != null) - storeStoryFolderStories(stories); - storyFolder.put(IOctopusAPI.MODIFIED, toDate(storyFolder, IOctopusAPI.MODIFIED)); - DBCollection collection = db.getCollection(FOLDER_COLLECTION); - String name = storyFolder.getString(IOctopusAPI.NAME); - logger.debug("Storing story folder {}", name); - long folderID = NoSQLUtils.asLong(storyFolder, IOctopusAPI.ID); - setObjectID(currentFolder, folderID, storyFolder); - collection.save(storyFolder); - } - logger.trace(EXIT); - } - - private void storeStoryFolders(BasicDBList storyFolders, Date lastUpdateTime) { - logger.trace(ENTER); - List storyFolderList = NoSQLUtils.asList(storyFolders); - int idx = 1; - for (BasicDBObject storyFolder : storyFolderList) { - logger.debug(String.format(CHECKING_STORY_FOLDER, storyFolder.getLong(IOctopusAPI.ID), storyFolderList.size(), idx)); - storeStoryFolder(storyFolder, lastUpdateTime); - int progress = 50 + (idx * 50 / storyFolderList.size()); - if (progress - progressEvent.getProgress() > 0) { - progressEvent.setProgress(progress); - fireProgressEvent(progressEvent); - } - idx++; - } - logger.trace(EXIT); - } - - private void storeStoryFolderStories(BasicDBList stories) { - logger.trace(ENTER); - List list = NoSQLUtils.asList(stories); - for (BasicDBObject story : list) - storeStory(story); - logger.trace(EXIT); - } - - private Date toDate(BasicDBObject obj, String name) { - Date result = null; - if (obj.containsKey(name)) { - String dt = obj.getString(name); - if (dt != null) { - // create jodatime from date - DateTime jdt = new DateTime(dt); - result = jdt.toDate(); - } - } - return result; - } - - private void updateDeleteDiff(String oldCollectionName, String newCollectionName, String idFieldName) { - DBCollection oldCollection = db.getCollection(oldCollectionName); - DBCollection newCollection = db.getCollection(newCollectionName); - DBCursor oldCollectionCursor = oldCollection.find(new BasicDBObject(), new BasicDBObject(idFieldName, 1)); - if (!oldCollectionCursor.hasNext()) { - logger.error("{} collection is empty", newCollectionName); - return; - } - List oldItems = ListUtils.cast(oldCollectionCursor.toArray()); - - DBCursor newCollectionCursor = newCollection.find(); - ConcurrentHashMap newItems = null; - if (newCollectionCursor.hasNext()) { - List newList = ListUtils.cast(newCollectionCursor.toArray()); - newItems = ListUtils.map(newList, item -> item.getLong(IOctopusAPI.ID)); - } - if (newItems == null) - newItems = new ConcurrentHashMap<>(); - - for (BasicDBObject oldItem : oldItems) { - if (oldItem == null) { - logger.error("Item is null"); - continue; - } - if (!oldItem.containsKey(idFieldName)) { - logger.error("{} is null", idFieldName); - continue; - } - long id = oldItem.getLong(idFieldName); - BasicDBObject newItem = newItems.get(id); - if (newItem == null) { - //remove - logger.info("Deleting {}", oldItem.toPrettyString(null)); - oldCollection.remove(new BasicDBObject(idFieldName, id)); - } - } - } - - private void updateDiff(String oldCollectionName, String newCollectionName, String idFieldName) { - DBCollection oldCollection = db.getCollection(oldCollectionName); - DBCollection newCollection = db.getCollection(newCollectionName); - DBCursor newCollectionCursor = newCollection.find(); - if (!newCollectionCursor.hasNext()) { - logger.error("{} collection is empty", newCollectionName); - return; - } - - List newItems = ListUtils.cast(newCollectionCursor.toArray()); - - DBCursor oldCollectionCursor = oldCollection.find(); - ConcurrentHashMap oldItems = null; - if (oldCollectionCursor.hasNext()) { - List oldList = ListUtils.cast(oldCollectionCursor.toArray()); - oldItems = ListUtils.map(oldList, item -> item.getLong(IOctopusAPI.ID)); - } - if (oldItems == null) - oldItems = new ConcurrentHashMap<>(); - for (BasicDBObject newItem : newItems) { - if (newItem == null) { - logger.error("Item is null"); - continue; - } - if (!newItem.containsKey(idFieldName)) { - logger.error("{} is null", idFieldName); - continue; - } - long id = newItem.getLong(idFieldName); - BasicDBObject oldItem = oldItems.get(id); - boolean save = false; - if (oldItem == null) { - //save - save = true; - } else { - //compare - Object oldDbId = oldItem.getID(); - newItem.remove(IOctopusAPI._ID); - oldItem.remove(IOctopusAPI._ID); - - if (!newItem.equals(oldItem)) { - //save - newItem.put(IOctopusAPI._ID, oldDbId); - save = true; - } - } - - if (save) { - logger.info("Saving to {} item {}", oldCollectionName, id); - oldCollection.save(newItem); - } - } - } - -} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java index 60adc661..3f6f5f0c 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMBackupStep.java @@ -17,6 +17,7 @@ import org.apache.logging.log4j.message.ParameterizedMessage; import user.commons.RemoteFile; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.mediatool.Timecode; import user.commons.mediatool.Timecode.Type; import user.commons.remotestore.IProgressEventListener; @@ -36,6 +37,7 @@ import user.jobengine.server.JobEngineException; public class TSMBackupStep extends JobStep { private static final String MXFEXT = ".MXF"; private static final Logger logger = LogManager.getLogger(); + private static boolean RANDOMIZE_ARCHIVES = SystemConfiguration.getInstance().value("tsm.randomize-archives"); private IItemManager manager; private File sourceMediaFile; private Store tsmStore; @@ -68,10 +70,8 @@ public class TSMBackupStep extends JobStep { if (existingMediaId == 0) existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, "")); - boolean randomizeName = Boolean.parseBoolean(System.getProperty("jobengine.randomize.archives", "false")); - String targetFileName; - if (randomizeName) { + if (RANDOMIZE_ARCHIVES) { // a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA //veletlenszeru neveket adunk! targetFileName = String.format("%s-%s", RandomStringUtils.randomAlphanumeric(8), sourceFileName); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java index 0074883c..49368387 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMExtendedRetrieveStep.java @@ -1,6 +1,7 @@ package user.jobengine.server.steps; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.remotestore.RemoteStoreProtocol; import user.jobengine.db.ArchivedMedia; import user.jobengine.db.IItemManager; @@ -8,6 +9,8 @@ import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; public class TSMExtendedRetrieveStep extends TSMRestoreStep { + private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); + private boolean useNexioTarget; private int nexioPort; private String nexioUserName, nexioPassword; @@ -43,11 +46,10 @@ public class TSMExtendedRetrieveStep extends TSMRestoreStep { protected StoreUri createTargetUri(IItemManager manager, String targetPath) throws NullPointerException { StoreUri result = null; if (useNexioTarget) { - nexioHost = System.getProperty("nexio.host"); - if (nexioHost == null) { + if (NEXIO_HOST == null) { throw new NullPointerException("Missing system property on 'nexio.host' name"); } - result = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + result = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST); result.setPortNumber(nexioPort); result.setUserName(nexioUserName); result.setPassword(nexioPassword); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMWriterStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMWriterStep.java index d933b2b7..47dd8f47 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMWriterStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMWriterStep.java @@ -17,6 +17,7 @@ import org.apache.logging.log4j.message.ParameterizedMessage; import user.commons.RemoteFile; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.remotestore.IProgressEventListener; import user.commons.remotestore.IStatusEventListener; import user.commons.remotestore.ProgressEvent; @@ -34,6 +35,7 @@ import user.jobengine.server.JobEngineException; public class TSMWriterStep extends JobStep { private static final String MXFEXT = ".MXF"; private static final Logger logger = LogManager.getLogger(); + private static boolean RANDOMIZE_ARCHIVES = SystemConfiguration.getInstance().value("tsm.randomize-archives"); private IItemManager manager; private File sourceMediaFile; private Store tsmStore; @@ -66,10 +68,8 @@ public class TSMWriterStep extends JobStep { if (existingMediaId == 0) existingMediaId = ItemManagerExtensions.getExistingRundownMedia(manager, sourceFileName.replace(MXFEXT, "")); - boolean randomizeName = Boolean.parseBoolean(System.getProperty("jobengine.randomize.archives", "false")); - String targetFileName; - if (randomizeName) { + if (RANDOMIZE_ARCHIVES) { // a-z, A-Z, 0-9. For example: WRMcpIk7, s57JwCVA //veletlenszeru neveket adunk! targetFileName = String.format("%s-%s", RandomStringUtils.randomAlphanumeric(8), sourceFileName); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java index a4b82c9b..8c6f1835 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeSELENIOStep.java @@ -19,6 +19,7 @@ import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.ParameterizedMessage; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.remotestore.RemoteStoreProtocol; import user.commons.selenio.wsclient.AudioSource; import user.commons.selenio.wsclient.Clip; @@ -46,10 +47,12 @@ public class TranscodeSELENIOStep extends JobStep { private static final String MXFEXT = ".MXF"; private static final String LOWRES_FILETYPE = "Low-res"; private static final Logger logger = LogManager.getLogger(); + private static String SELENIO_API_ADDRESS = SystemConfiguration.getInstance().value("services.selnio.api.address", + "http://10.10.1.71:44000/TranscodeMgrWS?wsdl"); + private static String SELENIO_API_PROJECTFILE = SystemConfiguration.getInstance().value("services.selnio.api.projevt-file", + "\\\\10.10.1.71\\Data\\Blueprints\\MP4_H264_AAC.zenium"); private final List showStoppers = Arrays.asList(State.CANCELLED, State.COMPLETE, State.FAILED); private TranscodeMgrWS transcoder = null; - private String address = null; //"http://10.10.1.71:44000/TranscodeMgrWS?wsdl"; - private String projectFilePath = null; //"\\\\10.10.1.71\\Data\\Blueprints\\MP4_H264_AAC_v4.zenium"; private IItemManager manager; private Store store; private FileType fileType; @@ -113,7 +116,7 @@ public class TranscodeSELENIOStep extends JobStep { Path inputPath = Paths.get(globalSourcePath, sourceFileName); String sourceFilePath = inputPath.toString(); - TranscodeRequest transcodeRequest = buildTranscodeRequest(projectFilePath, sourceFilePath); + TranscodeRequest transcodeRequest = buildTranscodeRequest(SELENIO_API_PROJECTFILE, sourceFilePath); TranscodeTask transcodeTask = transcoder.submitTranscodeTask(transcodeRequest); if (transcodeTask == null) @@ -205,15 +208,12 @@ public class TranscodeSELENIOStep extends JobStep { } private void setAndCheck(String globalSourcePath, String transcoderTargetPath, IJobEngine jobEngine) throws Exception { - address = System.getProperty("jobengine.selenio.address"); - if (StringUtils.isBlank(address)) + if (StringUtils.isBlank(SELENIO_API_ADDRESS)) throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing."); - projectFilePath = System.getProperty("jobengine.selenio.projectfilepath"); - if (StringUtils.isBlank(projectFilePath)) + if (StringUtils.isBlank(SELENIO_API_PROJECTFILE)) throw new NullPointerException("System is not configured properly, 'jobengine.selenio.projectfilepath' startup parameter missing."); - TranscodeMgrWSService service = new TranscodeMgrWSService(new URL(address), - new QName("http://ws.server.mediamanager.digitalrapids.ca/", "TranscodeMgrWSService")); + TranscodeMgrWSService service = new TranscodeMgrWSService(new URL(SELENIO_API_ADDRESS), new QName("http://ws.server.mediamanager.digitalrapids.ca/", "TranscodeMgrWSService")); transcoder = service.getTranscodeMgrWSPort(); if (StringUtils.isBlank(globalSourcePath)) diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeStep.java index 1b1cda90..64018f37 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TranscodeStep.java @@ -1,19 +1,19 @@ package user.jobengine.server.steps; +import user.commons.configuration.SystemConfiguration; import user.jobengine.db.Media; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; public class TranscodeStep extends JobStep { + private static int TRANSCODER_VERSION = SystemConfiguration.getInstance().value("services.transcoder.version"); + private static String TRANSCODER_API_ADDRESS = SystemConfiguration.getInstance().value("services.transcoder.api.address"); + private static String TRANSCODER_API_TEMPLATE = SystemConfiguration.getInstance().value("services.transcoder.api.template"); + @StepEntry public Object[] execute(String globalSourcePath, ArchiveItem archiveItem, Media mediaCubeMedia, String transcoderTargetPath, IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - int version = 0; - try { - version = Integer.parseInt(System.getProperty("jobengine.transcoder.version")); - } catch (Exception e) { - } - switch (version) { + switch (TRANSCODER_VERSION) { case 0: { TranscodeSELENIOStep selenioStep = new TranscodeSELENIOStep(); selenioStep.execute(globalSourcePath, archiveItem, mediaCubeMedia, transcoderTargetPath, jobEngine, jobRuntime); @@ -21,9 +21,7 @@ public class TranscodeStep extends JobStep { } case 1: { TranscodeFFAStranStep ffaStransStep = new TranscodeFFAStranStep(); - String transcoderAddress = System.getProperty("jobengine.transcoder.address"); - String transcoderTemplateName = System.getProperty("jobengine.transcoder.template"); - ffaStransStep.execute(archiveItem, mediaCubeMedia, transcoderAddress, transcoderTemplateName, globalSourcePath, transcoderTargetPath, false, + ffaStransStep.execute(archiveItem, mediaCubeMedia, TRANSCODER_API_ADDRESS, TRANSCODER_API_TEMPLATE, globalSourcePath, transcoderTargetPath, false, jobEngine, jobRuntime); break; } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/UploadRecordingToNexioStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/UploadRecordingToNexioStep.java index 7d9d6795..b1e91baf 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/UploadRecordingToNexioStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/UploadRecordingToNexioStep.java @@ -14,6 +14,7 @@ import com.ibm.nosql.json.api.DB; import user.commons.RemoteFile; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.commons.nosql.NoSQLUtils; import user.commons.remotestore.IProgressEventListener; import user.commons.remotestore.IStatusEventListener; @@ -26,6 +27,7 @@ import user.jobengine.server.IJobRuntime; public class UploadRecordingToNexioStep extends JobStep { private static final Logger logger = LogManager.getLogger(); + private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); private IItemManager manager; private DB db; @@ -89,8 +91,8 @@ public class UploadRecordingToNexioStep extends JobStep { logger.catching(e); if (!archiveItem.removeCatchedFile()) logger.error(getMarker(), "A {} állomány .catched jelző állománya nem törölhető.", new File(archiveItem.getMediaFile()).getName()); - Message m = new ParameterizedMessage("Az '{}' állomány feltöltése '{}' néven sikertelen. A rendszer hibaüzenete: {}", sourceFile, targetFileName, - e.getMessage()); + Message m = new ParameterizedMessage("Az '{}' állomány feltöltése '{}' néven sikertelen. A rendszer hibaüzenete: {}", sourceFile, targetFileName, e + .getMessage()); logger.error(marker, m); throw new Exception(m.getFormattedMessage()); } @@ -116,8 +118,7 @@ public class UploadRecordingToNexioStep extends JobStep { check(targetFileName, "targetFileName"); - String nexioHost = System.getProperty("nexio.host"); - if (StringUtils.isBlank(nexioHost)) { + if (StringUtils.isBlank(NEXIO_HOST)) { logger.error(marker, "A 'nexio.host' rendszer paraméter nem található."); throw new NullPointerException("System is not configured properly, 'jobengine.selenio.address' startup parameter missing."); } @@ -125,7 +126,7 @@ public class UploadRecordingToNexioStep extends JobStep { check(nexioUserName, "nexioUserName"); check(nexioPassword, "nexioPassword"); - targetUri = manager.createStoreUri(RemoteStoreProtocol.FTP, nexioHost); + targetUri = manager.createStoreUri(RemoteStoreProtocol.FTP, NEXIO_HOST); targetUri.setRootPath("LXF"); targetUri.setPortNumber(nexioPort); targetUri.setUserName(nexioUserName); diff --git a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF index f59caf2a..88c2d932 100644 --- a/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.commons/META-INF/MANIFEST.MF @@ -7,6 +7,7 @@ Import-Package: com.fasterxml.jackson.annotation;version="2.4.5", com.fasterxml.jackson.core;version="2.4.5", com.fasterxml.jackson.databind;version="2.4.5", com.fasterxml.jackson.databind.util;version="2.4.5", + com.fasterxml.jackson.dataformat.yaml;version="2.4.5", com.fasterxml.jackson.datatype.joda;version="2.4.5", com.fasterxml.jackson.jaxrs.json;version="2.4.5", com.sun.jna, @@ -23,10 +24,11 @@ Import-Package: com.fasterxml.jackson.annotation;version="2.4.5", org.osgi.framework;version="1.5.0" DynamicImport-Package: * Bundle-ClassPath: . -Service-Component: OSGI-INF/nexioAPI.xml, OSGI-INF/octopusAPI.xml +Service-Component: OSGI-INF/nexioAPI.xml, OSGI-INF/octopusAPI.xml, OSGI-INF/systemConfiguration.xml Export-Package: user.commons, user.commons.cluster, user.commons.config, + user.commons.configuration, user.commons.ftp, user.commons.harris, user.commons.logging, diff --git a/server/user.jobengine.osgi.commons/OSGI-INF/systemConfiguration.xml b/server/user.jobengine.osgi.commons/OSGI-INF/systemConfiguration.xml new file mode 100644 index 00000000..b5ae2d0f --- /dev/null +++ b/server/user.jobengine.osgi.commons/OSGI-INF/systemConfiguration.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/server/user.jobengine.osgi.commons/src/user/commons/FFAStransAPI.java b/server/user.jobengine.osgi.commons/src/user/commons/FFAStransAPI.java index 5da3b357..e857b2e7 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/FFAStransAPI.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/FFAStransAPI.java @@ -1,10 +1,7 @@ package user.commons; import java.io.File; -import java.io.IOException; import java.nio.file.Files; -import java.nio.file.LinkOption; -import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.concurrent.Executors; @@ -29,17 +26,6 @@ import user.commons.nosql.NoSQLUtils; public class FFAStransAPI implements IFFAStransAPI { - static { - try { - Path config = Paths.get(System.getProperty("user.dir"), "../-configuration/log4j2-test.xml"); - String configLocation = config.toRealPath(LinkOption.NOFOLLOW_LINKS).toString(); - System.setProperty("log4j.configurationFile", configLocation); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - private static final Logger logger = LogManager.getLogger(); public static void main(String[] args) throws Exception { diff --git a/server/user.jobengine.osgi.commons/src/user/commons/MediaCubeDataSourceFactory.java b/server/user.jobengine.osgi.commons/src/user/commons/MediaCubeDataSourceFactory.java index cb8f28fd..f98d7317 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/MediaCubeDataSourceFactory.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/MediaCubeDataSourceFactory.java @@ -7,74 +7,49 @@ import org.apache.logging.log4j.Logger; import com.ibm.db2.jcc.DB2SimpleDataSource; +import user.commons.configuration.IConfiguration; +import user.commons.configuration.SystemConfiguration; + public class MediaCubeDataSourceFactory { private static Logger logger = LogManager.getLogger(); - private static DB2SimpleDataSource dataSource; - private static DB2SimpleDataSource noSQLDataSource; - private static String DBURL = "jobengine.db.url"; - private static String DBUSERNAME = "jobengine.db.user"; - private static String DBPASSWORD = "jobengine.db.password"; - private static String DBLOGINTIMEOUT = "jobengine.db.loginTimeout"; - private static String NOSQLURL = "jobengine.nosql.db.url"; - private static String NOSQLUSERNAME = "jobengine.nosql.db.user"; - private static String NOSQLPASSWORD = "jobengine.nosql.db.password"; - private static String NOSQLLOGINTIMEOUT = "jobengine.nosql.db.loginTimeout"; - // Url = System.getProperty("jobengine.nosql.db.url"); - // User = System.getProperty("jobengine.nosql.db.user"); - // Pass = System.getProperty("jobengine.nosql.db.password"); + private static DataSource dataSource; + private static DataSource noSQLDataSource; public static DataSource getDatasource() { - if (dataSource == null) { - try { - String[] dbUri = System.getProperty(DBURL).split("/"); - dataSource = new DB2SimpleDataSource(); - dataSource.setDriverType(4); - dataSource.setRetrieveMessagesFromServerOnGetMessage(true); - dataSource.setDatabaseName(dbUri[dbUri.length - 1]); - dataSource.setServerName(dbUri[2].substring(0, dbUri[2].lastIndexOf(":"))); - dataSource.setUser(System.getProperty(DBUSERNAME)); - dataSource.setPassword(System.getProperty(DBPASSWORD)); - dataSource.setPortNumber(Integer.parseInt(dbUri[2].substring(dbUri[2].lastIndexOf(":") + 1))); - String timeout = System.getProperty(DBLOGINTIMEOUT); - if (timeout == null) - dataSource.setLoginTimeout(1); - else - dataSource.setLoginTimeout(Integer.parseInt(timeout)); - // Connection connection = dataSource.getConnection(); - // System.out.println(connection); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - + if (dataSource == null) + dataSource = getDatasource("datasource.mediacube"); return dataSource; } - public static DataSource getNoSQLDatasource() { - if (noSQLDataSource == null) { - try { - String[] dbUri = System.getProperty(NOSQLURL).split("/"); - noSQLDataSource = new DB2SimpleDataSource(); - noSQLDataSource.setDriverType(4); - noSQLDataSource.setRetrieveMessagesFromServerOnGetMessage(true); - noSQLDataSource.setDatabaseName(dbUri[dbUri.length - 1]); - noSQLDataSource.setServerName(dbUri[2].substring(0, dbUri[2].lastIndexOf(":"))); - noSQLDataSource.setUser(System.getProperty(NOSQLUSERNAME)); - noSQLDataSource.setPassword(System.getProperty(NOSQLPASSWORD)); - noSQLDataSource.setPortNumber(Integer.parseInt(dbUri[2].substring(dbUri[2].lastIndexOf(":") + 1))); - String timeout = System.getProperty(NOSQLLOGINTIMEOUT); - if (timeout == null) - noSQLDataSource.setLoginTimeout(3); - else - noSQLDataSource.setLoginTimeout(Integer.parseInt(timeout)); - // Connection connection = dataSource.getConnection(); - // System.out.println(connection); - } catch (Exception e) { - logger.error(e); - } + private static DataSource getDatasource(String fqn) { + DB2SimpleDataSource result = null; + try { + IConfiguration conf = SystemConfiguration.getInstance(); + String url = conf.value(fqn + ".url"); + String[] dbUri = url.split("/"); + result = new DB2SimpleDataSource(); + result.setDriverType(4); + result.setRetrieveMessagesFromServerOnGetMessage(true); + result.setDatabaseName(dbUri[dbUri.length - 1]); + result.setServerName(dbUri[2].substring(0, dbUri[2].lastIndexOf(":"))); + result.setUser(conf.value(fqn + ".user")); + result.setPassword(conf.value(fqn + ".password")); + result.setPortNumber(Integer.parseInt(dbUri[2].substring(dbUri[2].lastIndexOf(":") + 1))); + result.setLoginTimeout(conf.value(fqn + ".login-timeout", 3)); + } catch (Exception e) { + logger.error(e); } + return result; + } + + public static DataSource getNoSQLDatasource() { + if (noSQLDataSource == null) + noSQLDataSource = getDatasource("datasource.mediacube-nosql"); return noSQLDataSource; } + + public static int getPoolSize() { + return SystemConfiguration.getInstance().value("datasource.mediacube.pool-size", 10); + } } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java b/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java index 985dcc49..4bfc04d1 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java @@ -14,6 +14,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import user.commons.configuration.SystemConfiguration; import user.commons.remotestore.DeliveryMethod; import user.commons.remotestore.DirectoryUtils; import user.commons.remotestore.IDirectoryLister; @@ -27,9 +28,9 @@ import user.commons.remotestore.StatusEvent; @SuppressWarnings("serial") public class StoreUri extends EntityBase implements Serializable { private final static Logger logger = LogManager.getLogger(); - private static final String validateTransfers = System.getProperty("jobengine.validateTransfers", "false"); + private static final boolean VALIDATETRANSFERS = SystemConfiguration.getInstance().value("jobs.validate-transfers", false); - private final int BUFFER_SIZE = 32768; + private final int BUFFER_SIZE = SystemConfiguration.getInstance().value("jobs.copy-buffer-size", 32768); private String uri = null; private long storeId = 0; private boolean isStream = false; @@ -85,14 +86,7 @@ public class StoreUri extends EntityBase implements Serializable { RemoteFile result = null; long uploadedBytes = 0; int byteCount = 0; - byte[] buffer = null; - - try { - String bufferSizeProperty = System.getProperty("mediacube.copybuffer.size"); - buffer = new byte[Integer.parseInt(bufferSizeProperty)]; - } catch (Exception e) { - buffer = new byte[BUFFER_SIZE]; - } + byte[] buffer = new byte[BUFFER_SIZE]; result = new RemoteFile(); String targetFileName = targetName; @@ -161,7 +155,7 @@ public class StoreUri extends EntityBase implements Serializable { } result.setSize(uploadedBytes); - if ("true".equals(validateTransfers)) { + if ("true".equals(VALIDATETRANSFERS)) { //validate try { RemoteFile remoteFile = outputLister.get(targetFileName); diff --git a/server/user.jobengine.osgi.commons/src/user/commons/config/JSONConfig.java b/server/user.jobengine.osgi.commons/src/user/commons/config/JSONConfig.java index 0cc342a4..153e9681 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/config/JSONConfig.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/config/JSONConfig.java @@ -1,6 +1,5 @@ package user.commons.config; -import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; @@ -18,28 +17,22 @@ public class JSONConfig { private static ObjectMapper objectMapper = createMapper(); public static ObjectMapper createMapper() { - return new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .registerModule(new JodaModule()).setSerializationInclusion(Include.NON_NULL); + return new ObjectMapper().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .registerModule(new JodaModule()) + .setSerializationInclusion(Include.NON_NULL); } - public static T read(String locationProperty, Class type) throws Exception { + public static T read(String configFilePath, Class type) throws Exception { T result = null; - String configPath = System.getProperty(locationProperty); - if (configPath == null || "".equals(configPath)) - throw new Exception("Missing system property: " + locationProperty); - File configFile = new File(configPath); - if (configFile.exists()) { - String json = new String(Files.readAllBytes(Paths.get(configFile.getAbsolutePath()))); - - try { - result = objectMapper.readValue(json.getBytes(), type); - - } catch (Exception e) { - logger.error(e); - throw e; - } - } else { - logger.error("Missing '{}' configuration file: {}", configPath, configFile.getAbsolutePath()); + + try { + String json = new String(Files.readAllBytes(Paths.get(configFilePath))); + result = objectMapper.readValue(json.getBytes(), type); + + } catch (Exception e) { + logger.error(e); + throw e; } return result; diff --git a/server/user.jobengine.osgi.commons/src/user/commons/configuration/IConfiguration.java b/server/user.jobengine.osgi.commons/src/user/commons/configuration/IConfiguration.java new file mode 100644 index 00000000..90aebf29 --- /dev/null +++ b/server/user.jobengine.osgi.commons/src/user/commons/configuration/IConfiguration.java @@ -0,0 +1,15 @@ +package user.commons.configuration; + +import java.io.FileNotFoundException; + +public interface IConfiguration { + + String getConfig(String relativeConfigName) throws FileNotFoundException; + + void load(String file) throws Exception; + + T value(String fqn); + + T value(String fqn, T defValue); + +} diff --git a/server/user.jobengine.osgi.commons/src/user/commons/configuration/SystemConfiguration.java b/server/user.jobengine.osgi.commons/src/user/commons/configuration/SystemConfiguration.java new file mode 100644 index 00000000..42ef1c54 --- /dev/null +++ b/server/user.jobengine.osgi.commons/src/user/commons/configuration/SystemConfiguration.java @@ -0,0 +1,88 @@ +package user.commons.configuration; + +import java.io.FileNotFoundException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; + +public class SystemConfiguration implements IConfiguration { + private static Logger logger = LogManager.getLogger(); + + static IConfiguration currentInstance = null; + + static public IConfiguration getInstance() { + if (currentInstance == null) + currentInstance = new SystemConfiguration(); + return currentInstance; + } + + private Map settings; + + public SystemConfiguration() { + try { + load(getConfig("configuration/application.yaml")); + } catch (Exception e) { + logger.catching(e); + } + currentInstance = this; + } + + @Override + public String getConfig(String relativeConfigName) throws FileNotFoundException { + Path result = Paths.get(System.getProperty("user.dir", ""), relativeConfigName); + if (result.toFile().exists()) + return result.toString(); + result = Paths.get(System.getProperty("system.config.root", ""), relativeConfigName); + if (result.toFile().exists()) + return result.toString(); + throw new FileNotFoundException("Cant find configuration file " + relativeConfigName); + } + + @SuppressWarnings("unchecked") + @Override + public void load(String file) throws Exception { + logger.info("Loading system configuration {}", file); + if (file != null) { + String yaml = new String(Files.readAllBytes(Paths.get(file))); + settings = new ObjectMapper(new YAMLFactory()).readValue(yaml, HashMap.class); + } + } + + @SuppressWarnings("unchecked") + @Override + public T value(String fqn) { + T result = null; + String[] tokens = fqn.split("\\."); + Map parent = settings; + for (int i = 0; i < tokens.length - 1; i++) { + parent = (Map) parent.get(tokens[i]); + } + if (parent != null) + result = (T) parent.get(tokens[tokens.length - 1]); + return result; + } + + @Override + public T value(String fqn, T defValue) { + T result = null; + try { + + result = value(fqn); + if (!result.getClass().isAssignableFrom(defValue.getClass())) + throw new ClassCastException(result.getClass() + " ? " + defValue.getClass()); + } catch (Exception e) { + logger.error("{} read error. {}", fqn, e.getMessage()); + result = defValue; + } + return result; + } + +} diff --git a/server/user.jobengine.osgi.commons/src/user/commons/logging/LogUtils.java b/server/user.jobengine.osgi.commons/src/user/commons/logging/LogUtils.java index 52453a50..d7b83382 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/logging/LogUtils.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/logging/LogUtils.java @@ -10,45 +10,4 @@ public class LogUtils { return memoryAppender; } - // public static Logger getLogger(Class clazz) { - // Logger result = null; - // try { - // Logger root = Logger.getRootLogger(); - // - // // Configure and watch - // String configFilePath = System.getProperty(LOGCONFIG); - // if (!configured && !StringUtils.isEmpty(configFilePath)) { - // File configFile = new File(configFilePath); - // if (configFile.exists()) { - // PropertyConfigurator.configureAndWatch(configFile.getAbsolutePath(), 3000); - // configured = true; - // } - // } - // - // // Check if root logger configured - // if (!configured && System.getProperty(LOGLEVEL) != null) { - // root.setLevel(Level.toLevel(System.getProperty(LOGLEVEL))); - // if (!root.getAllAppenders().hasMoreElements()) { - // root.addAppender(new ConsoleAppender(new PatternLayout("%p %c# %m%n"))); - // } - // root.info("Logging to console"); - // configured = true; - // } - // - // // create logger - // result = Logger.getLogger(clazz); - // result.addAppender(memoryAppender); - // - // } catch (Exception e) { - // e.printStackTrace(); - // } - // - // return result; - // } - // - // public static void logProperties() { - // Logger logger = LogUtils.getLogger(LogUtils.class); - // for (Object key : System.getProperties().keySet()) - // logger.info(key + "," + System.getProperties().get(key)); - // } } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDataMiner.java b/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDataMiner.java index 01d515c1..42280e75 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDataMiner.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDataMiner.java @@ -27,6 +27,7 @@ import com.ibm.nosql.json.api.DBCollection; import com.ibm.nosql.json.api.DBCursor; import user.commons.ListUtils; +import user.commons.configuration.SystemConfiguration; import user.commons.nosql.NoSQLUtils; import user.commons.remotestore.IProgressEventListener; import user.commons.remotestore.ProgressEvent; @@ -34,11 +35,7 @@ import user.commons.remotestore.ProgressEvent; public class NexioDataMiner implements Runnable, INexioChangeListener { private static final Logger logger = LogManager.getLogger(); private static final String SQLSERVER_JDBC_SQL_SERVER_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - private static final String JOBENGINE_NEXIO_DB_PASSWORD = "jobengine.nexio.db.password"; - private static final String JOBENGINE_NEXIO_DB_USER = "jobengine.nexio.db.user"; - private static final String JOBENGINE_NEXIO_DB_URL = "jobengine.nexio.db.url"; private static final String DURATION = "duration"; - private static final String START = "start"; private static final String MODIFIEDTIMESTAMP = "modifiedtimestamp"; private static final String EXTAGENCY = "extagency"; private static final String RECORDDATE = "recorddate"; @@ -50,9 +47,9 @@ public class NexioDataMiner implements Runnable, INexioChangeListener { private static final String RECORDTIMESTAMP = "recordtimestamp"; private static String url, user, pass; static { - url = System.getProperty(JOBENGINE_NEXIO_DB_URL); - user = System.getProperty(JOBENGINE_NEXIO_DB_USER); - pass = System.getProperty(JOBENGINE_NEXIO_DB_PASSWORD); + url = SystemConfiguration.getInstance().value("datasource.nexio.url"); + user = SystemConfiguration.getInstance().value("datasource.nexio.user"); + pass = SystemConfiguration.getInstance().value("datasource.nexio.password"); } private static Connection getSQLConnection() throws ClassNotFoundException, SQLException { diff --git a/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java b/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java index 3d00baab..98097f88 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/nexio/NexioDispatcher.java @@ -10,6 +10,7 @@ import com.ibm.nosql.json.api.DB; import com.ibm.nosql.json.api.DBCollection; import user.commons.MediaCubeMarker; +import user.commons.configuration.SystemConfiguration; import user.commons.nexio.api.Clip; import user.commons.nexio.api.ClipEvent; import user.commons.nexio.api.ClipEventListener; @@ -33,8 +34,6 @@ public class NexioDispatcher implements ClipEventListener { private static final Logger logger = LogManager.getLogger(); - private static final String NEXIO_USE_MOS_GATEWAY = "nexio.useMOSGateway"; - private static final String NEXIO_DISABLE = "nexio.disable"; private static final String ID = "id"; private static final String VIDEO_FORMAT = "videoformat"; private static final String VIDEO_BITRATE = "videobitrate"; @@ -44,7 +43,11 @@ public class NexioDispatcher implements ClipEventListener { private static final String EXTAGENCY = "extagency"; private static final String RECORDDATE = "recorddate"; private static final String LONGNAMEID = "longnameid"; - public static final String CLIP_COLLECTION_NAME = System.getProperty("jobengine.nexio.name"); + public static final String CLIP_COLLECTION_NAME = SystemConfiguration.getInstance().value("services.nexio.collection-name"); + private static String NEXIO_HOST = SystemConfiguration.getInstance().value("services.nexio.host"); + private static boolean disabled = SystemConfiguration.getInstance().value("services.nexio.disabled", true); + private static boolean[] useMOSGateways = new boolean[] { SystemConfiguration.getInstance().value("services.nexio.use-mos-gateway") }; + static private final byte[] GET_SPECIAL_ID_ATTRIBUTES_REQ = { (byte) 0xC8, (byte) 0x84 }; static private final char[] hexArray = "0123456789ABCDEF".toCharArray(); @@ -87,18 +90,14 @@ public class NexioDispatcher implements ClipEventListener { private INexioChangeListener nexioChangeListener; private DB db; - private String NEXIO_HOST = System.getProperty("nexio.host"); private Controller controller = null; - private boolean disabled; - private Thread worker; private MediaListener mediaListener; public NexioDispatcher() { this.db = NoSQLUtils.getNoSQLDB(); - disabled = Boolean.parseBoolean(System.getProperty(NEXIO_DISABLE, "false")); // Runtime.getRuntime().addShutdownHook(new Thread() { // @Override @@ -235,12 +234,11 @@ public class NexioDispatcher implements ClipEventListener { } private void innerStartup() { - boolean[] useMOSGateway = { Boolean.parseBoolean(System.getProperty(NEXIO_USE_MOS_GATEWAY)) }; worker = new Thread(() -> { try { logger.info("Initial clip import started"); - if (useMOSGateway[0]) { + if (useMOSGateways[0]) { NexioDataMiner dm = new NexioDataMiner(); dm.transferClips(); } else { @@ -307,14 +305,14 @@ public class NexioDispatcher implements ClipEventListener { } /* - + int c = connection.read(buffer, 0, 2); //2 bytes hosszan az idokozben hozzaadott id-k szamossaga if (c < 2) { throw new ProtocolException("c, 2, 2"); } //MSB, LSB - + return nofIds; */ return ret; diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java index 83ae7876..00d3861f 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/octopus/IOctopusAPI.java @@ -6,10 +6,12 @@ import java.util.List; import com.ibm.nosql.json.api.BasicDBObject; import com.ibm.nosql.json.api.DBObject; +import user.commons.configuration.SystemConfiguration; + public interface IOctopusAPI { - static final String RUNDOWN_COLLECTION = System.getProperty("jobengine.octopus.rundowns.name", "rundowns"); - static final String STORY_COLLECTION = System.getProperty("jobengine.octopus.stories.name", "stories"); - static final String FOLDER_COLLECTION = System.getProperty("jobengine.octopus.storyfolders.name", "storyfolders"); + static final String RUNDOWN_COLLECTION = SystemConfiguration.getInstance().value("services.octopus.rundowns-collection-name"); + static final String STORY_COLLECTION = SystemConfiguration.getInstance().value("services.octopus.stories-collection-name"); + static final String FOLDER_COLLECTION = SystemConfiguration.getInstance().value("services.octopus.folders-collection-name"); static final String TIME_COLLECTION_NAME = "time"; static final String SCRIPT_CONTENT = "script_content"; static final String RUNDOWN_TYPE = "rundownType"; diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner1.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner1.java deleted file mode 100644 index 62ba7b56..00000000 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner1.java +++ /dev/null @@ -1,905 +0,0 @@ -package user.commons.octopus; - -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.swing.event.EventListenerList; -import javax.ws.rs.client.Entity; -import javax.ws.rs.client.Invocation.Builder; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.jboss.resteasy.client.jaxrs.BasicAuthentication; -import org.jboss.resteasy.client.jaxrs.ResteasyClient; -import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; -import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; -import org.joda.time.DateTime; - -import com.ibm.nosql.json.JSONUtil; -import com.ibm.nosql.json.api.BasicDBList; -import com.ibm.nosql.json.api.BasicDBObject; -import com.ibm.nosql.json.api.DB; -import com.ibm.nosql.json.api.DBCollection; -import com.ibm.nosql.json.api.DBCursor; -import com.ibm.nosql.json.api.DBObject; -import com.ibm.nosql.json.api.QueryBuilder; -import com.ibm.nosql.json.api.WriteResult; - -import user.commons.ListUtils; -import user.commons.nosql.NoSQLUtils; -import user.commons.remotestore.IProgressEventListener; -import user.commons.remotestore.ProgressEvent; - -public class OctopusDataMiner1 implements Runnable { - private static final String _TMP = "_tmp"; - private static final Logger logger = LogManager.getLogger(); - private static final String LINEFEED = "\r\n"; - private static final String SIMPLE_LINEFEED = "\n"; - private static final String SAVING_STORY_ID = "Saving story {}"; - // private static final String SAVING_RUNDOWN = "Saving rundown : {} {}"; - // private static final String CHECKING_RUNDOWN = "Checking Rundown {} ({}/{})"; - private static final String FIELDS_STORYFOLDER_STORIES = "stories,Story.modified,Story.name,Story.id,Story.mosObjects,Story.script,Story.type,Story.format,Story.customColumns,CustomColumn.label,CustomColumn.value"; - private static final String FIELDS_RUNDOWN_STORIES = "slugs,Slug.story,Slug.position,Story.name,Story.id,Story.modified,Story.mosObjects,Story.script,Story.type,Story.format,Story.customColumns,CustomColumn.label,CustomColumn.value"; - private static final String FIELDS_RUNDOWN_STORYIDS = "id,name,modified,scheduledStart,channel,Channel.name,rundownType,RundownType.name,slugs,Slug.storyId,Slug.position"; - private static final String FIELDS_STORY_FOLDER_LIST = "id,name,modified,stories,Story.id"; - private static final String RUNDOWN = "Rundown"; - private static final String OCTOPUS_DEVICE_NAME = "Octopus-Device-Name"; - private static final String OCTOPUS_DEVICE_ID = "Octopus-Device-Id"; - private static final String FIELDS = "fields"; - private static final String CHECKING_STORY_FOLDER = "Checking StoryFolder %s (%d/%d)"; - private static final String EXIT = "Exit"; - private static final String RESULT = "result"; - private static final String STORY_FOLDER = "StoryFolder"; - private static final String ENTER = "Enter"; - private static final String FINISHED = "Finished"; - private static final String STARTING = "Starting"; - private static final String MOSOBJECT = "Bejátszó: "; - - private DB db; - private ResteasyWebTarget webTarget; - private String apiUser; - private String apiPwd; - private HashSet storyIDs = new HashSet<>(); - private EventListenerList progressListenerList; - private ProgressEvent progressEvent = new ProgressEvent(this, 0); - private Map storyRundowns; - private Map storyStoryFolders; - private Map storedStoryRundowns; - private Map storedStoryStoryFolders; - private Map storedStoryMosObjects; - private String RUNDOWN_COLLECTION = IOctopusAPI.RUNDOWN_COLLECTION; - private String FOLDER_COLLECTION = IOctopusAPI.FOLDER_COLLECTION; - private String STORY_COLLECTION = IOctopusAPI.STORY_COLLECTION; - - private Map newRundowns = new HashMap<>(); - private Map newStoryFolders = new HashMap<>(); - private Map newStories = new HashMap<>(); - - public OctopusDataMiner1() { - db = NoSQLUtils.getNoSQLDB(); - - String apiAddress = System.getProperty("jobengine.octopus.api.address"); - apiUser = System.getProperty("jobengine.octopus.api.user"); - apiPwd = System.getProperty("jobengine.octopus.api.password"); - - // ResteasyClient client = new ResteasyClientBuilder().register(JacksonJsonProvider.class).build(); - ResteasyClient client = new ResteasyClientBuilder().build(); - webTarget = client.target(apiAddress).register(new BasicAuthentication(apiUser, apiPwd)); - } - - public void addProgressListener(IProgressEventListener listener) { - if (progressListenerList == null) - progressListenerList = new EventListenerList(); - progressListenerList.add(IProgressEventListener.class, listener); - } - - private Map buildFolderReferences(BasicDBList storyFolders) { - Map result = new HashMap<>(); - List storyFolderList = NoSQLUtils.asList(storyFolders); - for (BasicDBObject storyFolder : storyFolderList) { - long storyFolderId = storyFolder.getLong(IOctopusAPI.ID); - List stories = NoSQLUtils.asList(storyFolder, IOctopusAPI.STORIES); - if (stories == null) - continue; - long position = 1; - for (BasicDBObject story : stories) { - long storyId = story.getLong(IOctopusAPI.ID); - BasicDBList references = result.get(storyId); - if (references == null) { - references = new BasicDBList(); - result.put(storyId, references); - } - references.add(new BasicDBObject(IOctopusAPI.ID, storyFolderId).append(IOctopusAPI.POSITION, position++)); - } - } - return result; - } - - private Map buildRundownReferences(BasicDBList rundowns) { - Map result = new HashMap<>(); - List rundownsList = NoSQLUtils.asList(rundowns); - for (BasicDBObject rundown : rundownsList) { - if (!rundown.containsKey(IOctopusAPI.ID)) - continue; - long rundownId = rundown.getLong(IOctopusAPI.ID); - List slugs = NoSQLUtils.asList(rundown, IOctopusAPI.SLUGS); - if (slugs == null) - continue; - for (BasicDBObject slug : slugs) { - if (!slug.containsKey(IOctopusAPI.STORYID)) - continue; - long storyId = slug.getLong(IOctopusAPI.STORYID); - BasicDBList references = result.get(storyId); - if (references == null) { - references = new BasicDBList(); - result.put(storyId, references); - } - long position = slug.getLong(IOctopusAPI.POSITION); - if (slug.containsKey(IOctopusAPI.POSITION)) - position = slug.getLong(IOctopusAPI.POSITION); - references.add(new BasicDBObject(IOctopusAPI.ID, rundownId).append(IOctopusAPI.POSITION, position)); - } - } - return result; - } - - private void buildStoriesReferences() { - DBCollection collection = db.getCollection(STORY_COLLECTION); - DBCursor cursor = collection.find(null, new BasicDBObject(IOctopusAPI.ID, 1).append(IOctopusAPI.REF_RUNDOWN, 1).append(IOctopusAPI.REF_STORYFOLDER, 1) - .append(IOctopusAPI.MOS_OBJECTS, 1)); - //DBCursor find = collection.find(QueryBuilder.start(ID).greaterThan(0).get()); - try { - - while (cursor.hasNext()) { - BasicDBObject story = (BasicDBObject) cursor.next(); - long storyId = story.getLong(IOctopusAPI.ID); - BasicDBList rundownRef = NoSQLUtils.asDBList(story, IOctopusAPI.REF_RUNDOWN); - if (rundownRef != null) { - if (storedStoryRundowns == null) - storedStoryRundowns = new HashMap<>(); - storedStoryRundowns.put(storyId, rundownRef); - } - BasicDBList storyFolderRef = NoSQLUtils.asDBList(story, IOctopusAPI.REF_STORYFOLDER); - if (storyFolderRef != null) { - if (storedStoryStoryFolders == null) - storedStoryStoryFolders = new HashMap<>(); - storedStoryStoryFolders.put(storyId, storyFolderRef); - } - - BasicDBList storyMosObjects = NoSQLUtils.asDBList(story, IOctopusAPI.MOS_OBJECTS); - if (storyMosObjects != null) { - if (storedStoryMosObjects == null) - storedStoryMosObjects = new HashMap<>(); - storedStoryMosObjects.put(storyId, storyMosObjects); - } - } - } catch (Exception e) { - logger.catching(e); - throw e; - } finally { - - } - } - - public void clear() { - db.getCollection(RUNDOWN_COLLECTION).remove(); - db.getCollection(STORY_COLLECTION).remove(); - db.getCollection(FOLDER_COLLECTION).remove(); - db.getCollection(IOctopusAPI.TIME_COLLECTION_NAME).remove(); - } - - private String concatParentsToStoryFolder(BasicDBObject actual, String name) { - - String fields = "name,id,parent"; - Response response = query("StoryFolder/" + actual.getLong("id"), fields).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - BasicDBObject res = (BasicDBObject) resultObject.get("result"); - BasicDBObject parent = (BasicDBObject) res.get("parent"); - if (parent == null || parent.isEmpty()) - return name; - String parentName = parent.getString(IOctopusAPI.NAME); - String actualName = actual.getString(IOctopusAPI.NAME); - String newName = String.format("%s/%s", parentName, actualName); - return concatParentsToStoryFolder(parent, newName); - } - - private void deleteDiff(String oldCollectionName, String newCollectionName, String idFieldName) { - DBCollection oldCollection = db.getCollection(oldCollectionName); - DBCollection newCollection = db.getCollection(newCollectionName); - DBCursor oldCollectionCursor = oldCollection.find(new BasicDBObject(), new BasicDBObject(idFieldName, 1)); - if (!oldCollectionCursor.hasNext()) { - logger.error("{} collection is empty", newCollectionName); - return; - } - List oldItems = ListUtils.cast(oldCollectionCursor.toArray()); - - DBCursor newCollectionCursor = newCollection.find(); - ConcurrentHashMap newItems = null; - if (newCollectionCursor.hasNext()) { - List newList = ListUtils.cast(newCollectionCursor.toArray()); - newItems = ListUtils.map(newList, item -> item.getLong(IOctopusAPI.ID)); - } - if (newItems == null) - newItems = new ConcurrentHashMap<>(); - - for (BasicDBObject oldItem : oldItems) { - if (oldItem == null) { - logger.error("Item is null"); - continue; - } - if (!oldItem.containsKey(idFieldName)) { - logger.error("{} is null", idFieldName); - continue; - } - long id = oldItem.getLong(idFieldName); - BasicDBObject newItem = newItems.get(id); - if (newItem == null) { - //remove - logger.info("Deleting {}", oldItem.toPrettyString(null)); - oldCollection.remove(new BasicDBObject(idFieldName, id)); - } - } - } - - private void deleteOrphanStories() { - try { - DBCollection collection = db.getCollection(STORY_COLLECTION); - BasicDBObject query = (BasicDBObject) QueryBuilder.start().put("id").notIn(storyIDs.toArray()).get(); - WriteResult res = collection.remove(query); - logger.trace(String.format("Deleted orphan stories: %d", res.getN())); - } catch (Exception e) { - logger.error(e); - } - } - - private void ensureIndexes() { - DBCollection collection = db.getCollection(FOLDER_COLLECTION); - if (collection.count() == 0) - collection.ensureIndex(IOctopusAPI.ID); - collection = db.getCollection(RUNDOWN_COLLECTION); - if (collection.count() == 0) { - collection.ensureIndex(IOctopusAPI.ID); - collection.ensureIndex(IOctopusAPI.SCHEDULED_START); - } - collection = db.getCollection(STORY_COLLECTION); - if (collection.count() == 0) - collection.ensureIndex(IOctopusAPI.ID); - } - - public void execute() throws Exception { - logger.trace(STARTING); - //{"filter" :{ "archived" : true }} - Response response = query(RUNDOWN, "id,name,modified,scheduledStart,channel,Channel.name,rundownType,RundownType.name") - .post(Entity.entity(new BasicDBObject("filter", new BasicDBObject("archived", true)).toPrettyString(null), MediaType.APPLICATION_JSON)); - String json = response.readEntity(String.class); - - RUNDOWN_COLLECTION = IOctopusAPI.RUNDOWN_COLLECTION + _TMP; - FOLDER_COLLECTION = IOctopusAPI.FOLDER_COLLECTION + _TMP; - STORY_COLLECTION = IOctopusAPI.STORY_COLLECTION + _TMP; - - try { - db.getCollection(RUNDOWN_COLLECTION).drop(); - db.getCollection(FOLDER_COLLECTION).drop(); - db.getCollection(STORY_COLLECTION).drop(); - } catch (Exception e) { - logger.catching(e); - throw e; - } - - BasicDBList rundowns = null; - BasicDBList storyFolders = null; - - try { - rundowns = queryBuildRefRundowns(); - storyFolders = queryBuildRefFolders(); - } catch (Exception e) { - logger.catching(e); - throw e; - } - - processRundowns(rundowns); - processStoryFolders(storyFolders); - - //a sorrend fontos ! - updateDiff(IOctopusAPI.STORY_COLLECTION, STORY_COLLECTION, IOctopusAPI.ID); - updateDiff(IOctopusAPI.RUNDOWN_COLLECTION, RUNDOWN_COLLECTION, IOctopusAPI.ID); - updateDiff(IOctopusAPI.FOLDER_COLLECTION, FOLDER_COLLECTION, IOctopusAPI.ID); - deleteDiff(IOctopusAPI.RUNDOWN_COLLECTION, RUNDOWN_COLLECTION, IOctopusAPI.ID); - //deleteDiff(IOctopusAPI.FOLDER_COLLECTION, FOLDER_COLLECTION, IOctopusAPI.ID); - deleteDiff(IOctopusAPI.STORY_COLLECTION, STORY_COLLECTION, IOctopusAPI.ID); - - //setLastUpdateTime(new Date()); - logger.info("Activate"); - - // db.getCollection(RUNDOWN_COLLECTION).rename(IOctopusAPI.RUNDOWN_COLLECTION, true); - // db.getCollection(FOLDER_COLLECTION).rename(IOctopusAPI.FOLDER_COLLECTION, true); - // db.getCollection(STORY_COLLECTION).rename(IOctopusAPI.STORY_COLLECTION, true); - logger.trace(FINISHED); - - } - - public void executetest() { - // ResteasyWebTarget target = webTarget.path(RUNDOWN); - // Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd); - // Response r = result.get(); - // String x = r.readEntity(String.class); - // logger.info(x); - // return; - } - - private String extractContent(BasicDBObject content) { - String scriptContent = ""; - if (!content.containsKey(IOctopusAPI.TYPE)) - return scriptContent; - String type = content.getString(IOctopusAPI.TYPE); - switch (type) { - case IOctopusAPI.TEXT: { - if (content.containsKey(IOctopusAPI.TEXT)) { - String text = content.getString(IOctopusAPI.TEXT); - if (text != null) - scriptContent += String.format("%s%s", text.replaceAll(SIMPLE_LINEFEED, LINEFEED), LINEFEED); - } - break; - } - case IOctopusAPI.MOS: { - BasicDBObject mosObject = NoSQLUtils.asDBObject(content, IOctopusAPI.OBJECT); - if (mosObject != null && !mosObject.isEmpty()) { - if (mosObject.containsKey(IOctopusAPI.OBJ_ID)) { - String objID = mosObject.getString(IOctopusAPI.OBJ_ID); - scriptContent += String.format("%s %s%s", MOSOBJECT, objID, LINEFEED); - } - } - break; - } - default: { - if (content.containsKey(IOctopusAPI.CONTENT)) { - List innerContents = NoSQLUtils.asList(content, IOctopusAPI.CONTENT); - if (innerContents != null) { - for (BasicDBObject actualInnerContent : innerContents) { - if (actualInnerContent != null && actualInnerContent.isEmpty()) - scriptContent += extractContent(actualInnerContent); - } - } - } - break; - } - } - return scriptContent; - } - - private String extractCustomColumnValue(String columnName, BasicDBObject story) { - List customColumns = NoSQLUtils.asList(story, IOctopusAPI.CUSTOM_COLUMNS); - if (customColumns == null) - return null; - String result = null; - for (BasicDBObject customColumn : customColumns) { - if (!customColumn.containsKey(IOctopusAPI.LABEL)) - continue; - String currentName = customColumn.getString(IOctopusAPI.LABEL); - if (currentName == null) - continue; - if (!currentName.toLowerCase().equals(columnName.toLowerCase())) - continue; - if (!customColumn.containsKey(IOctopusAPI.VALUE)) - continue; - result = customColumn.getString(IOctopusAPI.VALUE); - break; - } - return result; - } - - private BasicDBList extractRelevantMOSObjects(BasicDBObject story) { - List mosObjects = NoSQLUtils.asList(story, IOctopusAPI.MOS_OBJECTS); - if (mosObjects == null) - return null; - BasicDBList result = null; - for (BasicDBObject mosObject : mosObjects) { - if (!mosObject.containsKey(IOctopusAPI.MOS_ID)) - continue; - String mosId = mosObject.getString(IOctopusAPI.MOS_ID); - if (!IOctopusAPI.NEXIO_MOS.equals(mosId)) - continue; - if (result == null) - result = new BasicDBList(); - result.add(mosObject); - } - return result; - } - - private String extractScriptContent(BasicDBObject story) { - BasicDBObject script = NoSQLUtils.asDBObject(story, IOctopusAPI.SCRIPT); - if (script == null || script.isEmpty()) - return null; - - List body = NoSQLUtils.asList(script, IOctopusAPI.BODY); - if (body == null || body.size() == 0) - return null; - - StringBuilder sb = new StringBuilder(); - - for (BasicDBObject bodyItem : body) { - if (bodyItem.containsKey(IOctopusAPI.LABEL)) { - sb.append(bodyItem.getString(IOctopusAPI.LABEL)); - sb.append(LINEFEED); - } - List contents = NoSQLUtils.asList(bodyItem, IOctopusAPI.CONTENT); - if (contents == null) - continue; - for (BasicDBObject content : contents) { - sb.append(extractContent(content)); - } - } - return sb.length() == 0 ? null : sb.toString(); - } - - private void fireProgressEvent(ProgressEvent evt) { - logger.debug("Progress changed to " + evt.getProgress() + "%"); - if (progressListenerList == null) - return; - Object[] listeners = progressListenerList.getListenerList(); - for (int i = 0; i < listeners.length; i += 2) { - if (listeners[i] == IProgressEventListener.class) - ((IProgressEventListener) listeners[i + 1]).progressChanged(evt); - } - } - - private Date getLastUpdateTime() { - Date result = null; - DBCollection collection = db.getCollection(IOctopusAPI.TIME_COLLECTION_NAME); - DBObject timeObject = collection.findOne(); - if (timeObject != null) - result = (Date) timeObject.get(IOctopusAPI.LASTUPDATE_TIME); - return result; - } - - // private boolean isModified(Date date, BasicDBObject object, String name) { - // Date actualModifiedString = toDate(object, name); - // if (actualModifiedString == null) - // logger.trace(ACTUAL_MODIFIED_STRING_IS_NULL); - // int result = date.compareTo(actualModifiedString); - // return result <= 0; - // } - - private boolean isModified(Date date, BasicDBObject object) { - if (date == null) - return true; - Date modified = (Date) object.get(IOctopusAPI.MODIFIED); - int result = date.compareTo(modified); - return result <= 0; - } - - private void processRundowns(BasicDBList rundowns) throws Exception { - if (rundowns == null || rundowns.size() == 0) { - progressEvent.setProgress(50); - fireProgressEvent(progressEvent); - } else { - logger.info("Process rundowns"); - try { - storeRundowns(rundowns, null); - } catch (Exception e) { - logger.catching(e); - throw e; - } - } - } - - private void processStoryFolders(BasicDBList storyFolders) throws Exception { - if (storyFolders == null || storyFolders.size() == 0) { - progressEvent.setProgress(100); - fireProgressEvent(progressEvent); - } else { - logger.info("Process story folders"); - try { - storeStoryFolders(storyFolders, null); - } catch (Exception e) { - logger.catching(e); - throw e; - } - } - } - - private Builder query(String path, String fields) { - //logger.info("Class loader {}", getClass().getClassLoader()); - // try { - // //TODO kell e? - // ResteasyDeployment deployment = new ResteasyDeployment(); - // deployment.start(); - // } catch (Exception e) { - // logger.catching(e); - // } - ResteasyWebTarget target = webTarget.path(path).queryParam(FIELDS, fields); - Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd); - return result; - } - - private BasicDBList queryBuildRefFolders() { - BasicDBList storyFolders; - logger.info("Fetch story folders"); - storyFolders = queryStoryFolders(); - logger.info("Fetch folder story references"); - storyStoryFolders = buildFolderReferences(storyFolders); - return storyFolders; - } - - private BasicDBList queryBuildRefRundowns() { - BasicDBList rundowns; - logger.info("Fetch rundowns"); - rundowns = queryRundowns(); - logger.info("Fetch rundown story references"); - storyRundowns = buildRundownReferences(rundowns); - return rundowns; - } - - private BasicDBObject queryRundown(BasicDBObject rundown) { - logger.trace(ENTER); - BasicDBObject result = null; - long id = NoSQLUtils.asLong(rundown, IOctopusAPI.ID); - Response response = query(String.format("%s/", RUNDOWN) + id, FIELDS_RUNDOWN_STORIES).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject == null) - logger.error("Rundown {} {} is not available", id, rundown.getString(IOctopusAPI.NAME)); - else - result = NoSQLUtils.asDBObject(resultObject, RESULT); - logger.trace(EXIT); - return result; - } - - private BasicDBList queryRundowns() { - logger.trace(ENTER); - BasicDBList result = null; - Response response = query(RUNDOWN, FIELDS_RUNDOWN_STORYIDS).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject != null) - result = NoSQLUtils.asDBList(resultObject, RESULT); - logger.trace(EXIT); - return result; - } - - private BasicDBObject queryStoryFolder(BasicDBObject storyFolder) { - logger.trace(ENTER); - BasicDBObject result = null; - long id = NoSQLUtils.asLong(storyFolder, IOctopusAPI.ID); - Response response = query(String.format("%s/", STORY_FOLDER) + id, FIELDS_STORYFOLDER_STORIES).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject == null) - logger.error("StoryFolder {} {} is not available", id, storyFolder.getString(IOctopusAPI.NAME)); - else - result = NoSQLUtils.asDBObject(resultObject, RESULT); - logger.trace(EXIT); - return result; - } - - private BasicDBList queryStoryFolders() { - logger.trace(ENTER); - BasicDBList result = null; - Response response = query(STORY_FOLDER, FIELDS_STORY_FOLDER_LIST).get(); - String json = response.readEntity(String.class); - BasicDBObject resultObject = (BasicDBObject) JSONUtil.jsonToDbObject(json); - if (resultObject != null) - result = NoSQLUtils.asDBList(resultObject, RESULT); - - /* teszt */ - List list = NoSQLUtils.asList(result); - for (BasicDBObject actual : list) { - String fullName = concatParentsToStoryFolder(actual, actual.getString(IOctopusAPI.NAME)); - //logger.info("Checking StoryFolder {}", fullName); - actual.remove(IOctopusAPI.NAME); - actual.append(IOctopusAPI.NAME, fullName); - } - - logger.trace(EXIT); - return result; - } - - public void removeProgressListener(IProgressEventListener listener) { - progressListenerList.remove(IProgressEventListener.class, listener); - } - - @Override - public void run() { - logger.trace(STARTING); - try { - ensureIndexes(); - Date lastUpdateTime = getLastUpdateTime(); - - buildStoriesReferences(); - - BasicDBList rundowns = queryRundowns(); - storyRundowns = buildRundownReferences(rundowns); - BasicDBList storyFolders = queryStoryFolders(); - storyStoryFolders = buildFolderReferences(storyFolders); - - if (rundowns == null || rundowns.size() == 0) { - progressEvent.setProgress(50); - fireProgressEvent(progressEvent); - } else { - storeRundowns(rundowns, lastUpdateTime); - } - - if (storyFolders == null || storyFolders.size() == 0) { - progressEvent.setProgress(100); - fireProgressEvent(progressEvent); - } else { - storeStoryFolders(storyFolders, lastUpdateTime); - } - deleteOrphanStories(); - setLastUpdateTime(new Date()); - } catch (Exception e) { - logger.catching(e); - throw e; - } - logger.trace(FINISHED); - } - - public void run(boolean forceFull) { - if (forceFull) { - clear(); - } - run(); - // if (forceFull) { - // RUNDOWN_COLLECTION_NAME = "rundowns"; - // STORY_COLLECTION_NAME = "stories"; - // STORY_FOLDER_COLLECTION_NAME = "storyfolders"; - // TIME_COLLECTION_NAME = "octopusSyncTime"; - // db.getCollection("rundowns_tmp").rename(RUNDOWN_COLLECTION_NAME, true); - // db.getCollection("stories_tmp").rename(STORY_COLLECTION_NAME, true); - // db.getCollection("storyfolders_tmp").rename(STORY_FOLDER_COLLECTION_NAME, true); - // db.getCollection("octopusSyncTime_tmp").rename(TIME_COLLECTION_NAME, true); - // //clear(); - // } - - //TODO reset collection names - } - - public void setLastUpdateTime(Date lastUpdateTime) { - DBCollection collection = db.getCollection(OctopusAPI.TIME_COLLECTION_NAME); - DBObject timeObject = collection.findOne(); - if (timeObject == null) - timeObject = new BasicDBObject(); - timeObject.put(IOctopusAPI.LASTUPDATE_TIME, lastUpdateTime); - - collection.save(timeObject); - } - - private void storeRundown(BasicDBObject rundown, Date lastUpdateTime) { - logger.trace(ENTER); - String name = rundown.containsKey(IOctopusAPI.NAME) ? rundown.getString(IOctopusAPI.NAME) : null; - logger.debug("Storing rundown {} {}", name, rundown.get(IOctopusAPI.SCHEDULED_START)); - BasicDBObject rundownWithStories = queryRundown(rundown); - if (rundownWithStories != null) { - BasicDBList stories = NoSQLUtils.asDBList(rundownWithStories, IOctopusAPI.SLUGS); - if (stories != null) - storeRundownStories(stories, lastUpdateTime); - rundown.put(IOctopusAPI.SCHEDULED_START, toDate(rundown, IOctopusAPI.SCHEDULED_START)); - rundown.put(IOctopusAPI.MODIFIED, toDate(rundown, IOctopusAPI.MODIFIED)); - DBCollection collection = db.getCollection(RUNDOWN_COLLECTION); - if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, rundown))) { - //logger.debug(SAVING_RUNDOWN, rundownID, name); - collection.save(rundown); - } - } - logger.trace(EXIT); - } - - private void storeRundowns(BasicDBList rundowns, Date lastUpdateTime) { - logger.trace(ENTER); - List rundownsList = NoSQLUtils.asList(rundowns); - int idx = 1; - for (BasicDBObject rundown : rundownsList) { - //logger.info(CHECKING_RUNDOWN, rundown.getLong(IOctopusAPI.ID), rundownsList.size(), idx); - storeRundown(rundown, lastUpdateTime); - int progress = idx * 50 / rundownsList.size(); - if (progress - progressEvent.getProgress() > 0) { - progressEvent.setProgress(progress); - fireProgressEvent(progressEvent); - } - - idx++; - } - logger.trace(EXIT); - } - - private void storeRundownStories(BasicDBList slugs, Date lastUpdateTime) { - logger.trace(ENTER); - List slugsList = NoSQLUtils.asList(slugs); - for (BasicDBObject slug : slugsList) { - if (slug.containsKey(IOctopusAPI.STORY)) - storeStory((BasicDBObject) slug.get(IOctopusAPI.STORY), lastUpdateTime); - } - logger.trace(EXIT); - } - - private void storeStory(BasicDBObject story, Date lastUpdateTime) { - logger.trace(ENTER); - if (!story.containsKey(IOctopusAPI.ID)) { - logger.error("Missing id in story {}", story.toPrettyString(null)); - return; - } - long storyID = story.getLong(IOctopusAPI.ID); - boolean isContains = storyIDs.contains(storyID); - if (isContains) - return; - storyIDs.add(storyID); - story.put(IOctopusAPI.MODIFIED, toDate(story, IOctopusAPI.MODIFIED)); - BasicDBList rundownRef = storyRundowns.get(storyID); - BasicDBList storyFolderRef = storyStoryFolders.get(storyID); - BasicDBList modifiedMOS = extractRelevantMOSObjects(story); - - if (lastUpdateTime != null) { - rundownRef = (rundownRef == null) ? new BasicDBList() : rundownRef; - storyFolderRef = (storyFolderRef == null) ? new BasicDBList() : storyFolderRef; - modifiedMOS = (modifiedMOS == null) ? new BasicDBList() : modifiedMOS; - - boolean uptodate = true; - if (!isModified(lastUpdateTime, story)) { - BasicDBList storedRundownRef = storedStoryRundowns.get(storyID); - storedRundownRef = (storedRundownRef == null) ? new BasicDBList() : storedRundownRef; - uptodate = storedRundownRef.equals(rundownRef); - - if (uptodate) { - BasicDBList storedStoryFolderRef = storedStoryStoryFolders.get(storyID); - storedStoryFolderRef = (storedStoryFolderRef == null) ? new BasicDBList() : storedStoryFolderRef; - uptodate = storedStoryFolderRef.equals(storyFolderRef); - } - - if (uptodate) { - BasicDBList storedMOS = storedStoryMosObjects.get(storyID); - storedMOS = (storedMOS == null) ? new BasicDBList() : storedMOS; - uptodate = storedMOS.equals(modifiedMOS); - } - - if (uptodate) - return; - } - } - - DBCollection collection = db.getCollection(STORY_COLLECTION); - if (lastUpdateTime != null) { - BasicDBObject orig = (BasicDBObject) collection.findOne(new BasicDBObject(IOctopusAPI.ID, storyID), new BasicDBObject(IOctopusAPI.ID, 1)); - if (orig != null) - story.put("_id", orig.getID()); - } - if (rundownRef != null) - story.put(IOctopusAPI.REF_RUNDOWN, rundownRef); - if (storyFolderRef != null) - story.put(IOctopusAPI.REF_STORYFOLDER, storyFolderRef); - String scriptContent = extractScriptContent(story); - story.put(IOctopusAPI.SCRIPT_CONTENT, scriptContent); - if (modifiedMOS == null || modifiedMOS.isEmpty()) { - if (story.containsKey(IOctopusAPI.MOS_OBJECTS)) - story.remove(IOctopusAPI.MOS_OBJECTS); - } else - story.put(IOctopusAPI.MOS_OBJECTS, modifiedMOS); - - String parentStoryId = extractCustomColumnValue(IOctopusAPI.PARENT_STORY_ID, story); - if (parentStoryId == null) { - logger.warn("Missing {} in story", IOctopusAPI.PARENT_STORY_ID, story.toPrettyString(null)); - story.append(IOctopusAPI.PARENT_STORY_ID, storyID); - } else - story.append(IOctopusAPI.PARENT_STORY_ID, parentStoryId); - logger.debug(SAVING_STORY_ID, storyID); - collection.save(story); - logger.trace(EXIT); - } - - private void storeStoryFolder(BasicDBObject storyFolder, Date lastUpdateTime) { - logger.trace(ENTER); - BasicDBObject storyFoldersWithStories = queryStoryFolder(storyFolder); - if (storyFoldersWithStories != null) { - BasicDBList stories = NoSQLUtils.asDBList(storyFoldersWithStories, IOctopusAPI.STORIES); - if (stories != null) - storeStoryFolderStories(stories, lastUpdateTime); - storyFolder.put(IOctopusAPI.MODIFIED, toDate(storyFolder, IOctopusAPI.MODIFIED)); - DBCollection collection = db.getCollection(FOLDER_COLLECTION); - if (lastUpdateTime == null || (lastUpdateTime != null && isModified(lastUpdateTime, storyFolder))) { - String name = storyFolder.getString(IOctopusAPI.NAME); - logger.debug("Storing story folder {}", name); - collection.save(storyFolder); - } - } - logger.trace(EXIT); - } - - private void storeStoryFolders(BasicDBList storyFolders, Date lastUpdateTime) { - logger.trace(ENTER); - List storyFolderList = NoSQLUtils.asList(storyFolders); - int idx = 1; - for (BasicDBObject storyFolder : storyFolderList) { - logger.debug(String.format(CHECKING_STORY_FOLDER, storyFolder.getLong(IOctopusAPI.ID), storyFolderList.size(), idx)); - storeStoryFolder(storyFolder, lastUpdateTime); - int progress = 50 + (idx * 50 / storyFolderList.size()); - if (progress - progressEvent.getProgress() > 0) { - progressEvent.setProgress(progress); - fireProgressEvent(progressEvent); - } - idx++; - } - logger.trace(EXIT); - } - - private void storeStoryFolderStories(BasicDBList stories, Date lastUpdateTime) { - logger.trace(ENTER); - List list = NoSQLUtils.asList(stories); - for (BasicDBObject story : list) - storeStory(story, lastUpdateTime); - logger.trace(EXIT); - } - - private Date toDate(BasicDBObject obj, String name) { - Date result = null; - if (obj.containsKey(name)) { - String dt = obj.getString(name); - if (dt != null) { - // create jodatime from date - DateTime jdt = new DateTime(dt); - result = jdt.toDate(); - } - } - return result; - } - - private void updateDiff(String oldCollectionName, String newCollectionName, String idFieldName) { - DBCollection oldCollection = db.getCollection(oldCollectionName); - DBCollection newCollection = db.getCollection(newCollectionName); - DBCursor newCollectionCursor = newCollection.find(); - if (!newCollectionCursor.hasNext()) { - logger.error("{} collection is empty", newCollectionName); - return; - } - - List newItems = ListUtils.cast(newCollectionCursor.toArray()); - - DBCursor oldCollectionCursor = oldCollection.find(); - ConcurrentHashMap oldItems = null; - if (oldCollectionCursor.hasNext()) { - List oldList = ListUtils.cast(oldCollectionCursor.toArray()); - oldItems = ListUtils.map(oldList, item -> item.getLong(IOctopusAPI.ID)); - } - if (oldItems == null) - oldItems = new ConcurrentHashMap<>(); - for (BasicDBObject newItem : newItems) { - if (newItem == null) { - logger.error("Item is null"); - continue; - } - if (!newItem.containsKey(idFieldName)) { - logger.error("{} is null", idFieldName); - continue; - } - long id = newItem.getLong(idFieldName); - BasicDBObject oldItem = oldItems.get(id); - boolean save = false; - if (oldItem == null) { - //save - save = true; - } else { - //compare - Object oldDbId = oldItem.getID(); - newItem.remove(IOctopusAPI._ID); - oldItem.remove(IOctopusAPI._ID); - - if (!newItem.equals(oldItem)) { - //save - newItem.put(IOctopusAPI._ID, oldDbId); - save = true; - } - } - - if (save) { - logger.info("Saving to {} item {}", oldCollectionName, id); - oldCollection.save(newItem); - } - } - } - -} diff --git a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.java b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.java index 60513a3f..09d07147 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.java @@ -12,16 +12,17 @@ import org.apache.logging.log4j.Logger; import user.commons.IRemoteFileListCallback; import user.commons.RemoteFile; import user.commons.StoreUri; +import user.commons.configuration.SystemConfiguration; import user.tsm.client.TSMBackupFileObject; import user.tsm.client.TSMBufferedClient; public class TSMLister implements IDirectoryLister { - private static final String DELIMITER = System.getProperty("tsm.delimiter", "/"); - private static final String NODENAME = System.getProperty("tsm.nodename", "JOBENGINE"); - private static final String FSNAME = System.getProperty("tsm.fsname", "/JOBENGINE"); - private static final String ALTERNATE_FSNAME = System.getProperty("tsm.fsname.alternate"); - private static final String HLNAME = System.getProperty("tsm.hlname", "/JOBENGINE"); + private static final String DELIMITER = SystemConfiguration.getInstance().value("tsm.delimiter"); + private static final String NODENAME = SystemConfiguration.getInstance().value("tsm.node-name"); + private static final String FSNAME = SystemConfiguration.getInstance().value("tsm.fs-name"); + private static final String ALTERNATE_FSNAME = SystemConfiguration.getInstance().value("tsm.alternate-fs-name"); + private static final String HLNAME = SystemConfiguration.getInstance().value("tsm.hl-name"); private static final Logger logger = LogManager.getLogger(); private TSMBufferedClient client; private StoreUri storeUri; diff --git a/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java b/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java index 2f1298c3..77a02fa1 100644 --- a/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java +++ b/server/user.jobengine.osgi.commons/test/user/common/octopus/test/OctopusDataMinerTest.java @@ -45,7 +45,6 @@ import user.commons.ListUtils; import user.commons.nosql.NoSQLUtils; import user.commons.octopus.IOctopusAPI; import user.commons.octopus.OctopusAPI; -import user.commons.octopus.OctopusDataMiner1; public class OctopusDataMinerTest { @@ -71,40 +70,6 @@ public class OctopusDataMinerTest { } - private OctopusDataMiner1 sut; - - @Test - public void integrationExecute() throws Exception { - // fixture - sut = new OctopusDataMiner1(); - // Exercise - sut.execute(); - } - - // @Test - // public void integrationTestClear() { - // // fixture - // sut = new OctopusDataMiner1(); - // // Exercise - // sut.clear(); - // } - - // @Test - // public void integrationTestWithClear() { - // // fixture - // sut = new OctopusDataMiner1(); - // sut.clear(); - // - // // Exercise - // sut.run(); - // } - - @Test - public void run() { - sut = new OctopusDataMiner1(); - sut.run(); - } - @Test public void test() throws SQLException { IOctopusAPI api = new OctopusAPI(); diff --git a/server/user.jobengine.osgi.db/OSGI-INF/component.xml b/server/user.jobengine.osgi.db/OSGI-INF/component.xml index 81791494..9248a6e9 100644 --- a/server/user.jobengine.osgi.db/OSGI-INF/component.xml +++ b/server/user.jobengine.osgi.db/OSGI-INF/component.xml @@ -5,7 +5,5 @@ deactivate="deactivate"> - + diff --git a/server/user.jobengine.osgi.db/src/user/commons/pool/ConnectionPool.java b/server/user.jobengine.osgi.db/src/user/commons/pool/ConnectionPool.java deleted file mode 100644 index ca1203d2..00000000 --- a/server/user.jobengine.osgi.db/src/user/commons/pool/ConnectionPool.java +++ /dev/null @@ -1,74 +0,0 @@ -package user.commons.pool; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -/** - * Adatb�zis kapcsolat er�forr�s kezel�. - * - */ -public class ConnectionPool extends ResourcePool { - public ConnectionPool(ConnectionPoolProperties properties) { - super(properties); - } - - @Override - public Connection borrowObject() { - return (Connection) super.borrowObject(); - } - - @Override - protected boolean checkObject(Object resourceObject) { - Connection connection = (Connection) resourceObject; - boolean closed = false; - try { - closed = connection.isClosed(); - } catch (SQLException e) { - } - return closed; - } - - @Override - protected Connection createObject() { - ConnectionPoolProperties cpp = (ConnectionPoolProperties) this.getProperties(); - Connection connection = null; - try { - Class.forName(cpp.getDriverName()); - DriverManager.setLoginTimeout(cpp.getTimeout()); - connection = DriverManager.getConnection(cpp.getUrl(), cpp.getUserName(), cpp.getPassword()); - connection.setAutoCommit(cpp.getAutoCommit()); - } catch (Exception e) { - throw new PoolException(e.getMessage()); - } - return connection; - } - - public void lendObject(Connection connection) { - super.lendObject(connection); - } - - @Override - protected void releaseObject(Object resourceObject) { - validateObject(resourceObject); - Connection connection = (Connection) resourceObject; - try { - if (connection == null) - return; - if (connection.isClosed() == false) { - connection.close(); - } - connection = null; - } catch (Exception e) { - throw new PoolException(e.getMessage()); - } - } - - @Override - protected boolean validateObject(Object resourceObject) { - return (resourceObject instanceof Connection); - // if (!(resourceObject instanceof Connection)) { - // throw new IllegalArgumentException("Only Connection class is acceptable."); - // } - } -} diff --git a/server/user.jobengine.osgi.db/src/user/commons/pool/ConnectionPoolProperties.java b/server/user.jobengine.osgi.db/src/user/commons/pool/ConnectionPoolProperties.java deleted file mode 100644 index 969e8fc0..00000000 --- a/server/user.jobengine.osgi.db/src/user/commons/pool/ConnectionPoolProperties.java +++ /dev/null @@ -1,79 +0,0 @@ -package user.commons.pool; - -import user.commons.CommonsProperties; - -public class ConnectionPoolProperties extends CommonsProperties { - static public final String AUTOCOMMIT = "AutoCommit"; - static public final String DRIVERNAME = "DriverName"; - static public final String PASSWORD = "password"; - static public final String TIMEOUT = "Timeout"; - static public final String URL = "ConnectionUrl"; - static public final String USERNAME = "user"; - - static public final String TRACELEVEL = "traceLevel"; - static public final String TRACEFILE = "traceFile"; - static public final String TRACEFILEAPPEND = "traceFileAppend"; - - static public final String TRACELEVEL_FOR_TRACE_SQL_STATEMENT = Integer.toString(com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTION_CALLS); - - public ConnectionPoolProperties(String driver, String url, String userName, String password, boolean autoCommit, int timeout) { - this(driver, url, userName, password, autoCommit, timeout, Integer.toString(com.ibm.db2.jcc.DB2BaseDataSource.TRACE_NONE), "/tmp/jobengine_sqlj_trace.log", "true"); - } - - public ConnectionPoolProperties(String driver, String url, String userName, String password, boolean autoCommit, int timeout, String traceLevel, String traceFile, String traceFileAppend) { - CommonsProperties.checkParameter(DRIVERNAME, driver); - CommonsProperties.checkParameter(URL, url); - CommonsProperties.checkParameter(USERNAME, userName); - CommonsProperties.checkParameter(PASSWORD, password); - CommonsProperties.checkParameter(AUTOCOMMIT, autoCommit); - CommonsProperties.checkParameter(TIMEOUT, timeout); - CommonsProperties.checkParameter(TRACELEVEL, traceLevel); - CommonsProperties.checkParameter(TRACEFILE, traceFile); - CommonsProperties.checkParameter(TRACEFILEAPPEND, traceFileAppend); - super.add(DRIVERNAME, driver); - super.add(URL, url); - super.add(USERNAME, userName); - super.add(PASSWORD, password); - super.add(AUTOCOMMIT, autoCommit); - super.add(TIMEOUT, timeout); - super.add(TRACELEVEL, traceLevel); - super.add(TRACEFILE, traceFile); - super.add(TRACEFILEAPPEND, traceFileAppend); - } - - public boolean getAutoCommit(){ - return getBool(AUTOCOMMIT); - } - - public String getDriverName(){ - return getString(DRIVERNAME); - } - - public String getPassword(){ - return getString(PASSWORD); - } - - public int getTimeout() { - return getInt(TIMEOUT); - } - - public String getUrl(){ - return getString(URL); - } - - public String getUserName(){ - return getString(USERNAME); - } - - public String getTraceLevel(){ - return getString(TRACELEVEL); - } - - public String getTraceFile(){ - return getString(TRACEFILE); - } - - public String getTraceFileAppend(){ - return getString(TRACEFILEAPPEND); - } -} diff --git a/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java b/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java index 26501d2c..36ab9d9d 100644 --- a/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java +++ b/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java @@ -35,8 +35,8 @@ public class ContextPool extends ResourcePool { return result; } - public ContextPool(ConnectionPoolProperties properties) { - super(properties); + public ContextPool() { + super(MediaCubeDataSourceFactory.getPoolSize()); } @Override @@ -56,33 +56,7 @@ public class ContextPool extends ResourcePool { result = !context.getConnection().isClosed(); } catch (SQLException e) { } - //logger.info("Context check {}", result); - // String sql = "SELECT 1 FROM SYSIBM.SYSDUMMY1"; - // Statement stmt = null; - // ResultSet rs = null; - // try { - // stmt = context.getConnection().createStatement(); - // rs = stmt.executeQuery(sql); - // while (rs.next()) - // rs.getInt(1); - // - // result = true; - // } catch (Exception e1) { - // logger.catching(e1); - // if (rs != null) - // try { - // rs.close(); - // } catch (Exception e) { - // logger.catching(e); - // } - // if (stmt != null) - // try { - // stmt.close(); - // } catch (Exception e) { - // logger.catching(e); - // } - // - // } + return result; } @@ -105,39 +79,6 @@ public class ContextPool extends ResourcePool { return context; } - // @Override - // protected DefaultContext createObject() { - // ConnectionPoolProperties cpp = (ConnectionPoolProperties) this.getProperties(); - // Connection connection = null; - // DefaultContext context = null; - // try { - // Class.forName(cpp.getDriverName()); - // } catch (ClassNotFoundException e) { - // throw new PoolException(e.getMessage()); - // } - // - // try { - // DriverManager.setLoginTimeout(cpp.getTimeout()); - // Properties p = new Properties(); - // p.setProperty(ConnectionPoolProperties.USERNAME, cpp.getUserName()); - // p.setProperty(ConnectionPoolProperties.PASSWORD, cpp.getPassword()); - // p.setProperty(ConnectionPoolProperties.TRACELEVEL, cpp.getTraceLevel()); - // p.setProperty(ConnectionPoolProperties.TRACEFILE, cpp.getTraceFile()); - // p.setProperty(ConnectionPoolProperties.TRACEFILEAPPEND, cpp.getTraceFileAppend()); - // - // connection = DriverManager.getConnection(cpp.getUrl(), p); - // connection.setAutoCommit(cpp.getAutoCommit()); - // context = new DefaultContext(connection); - // } catch (Throwable t) { - // logger.error("System can't create JDBC connection. Reason: " + t.getMessage()); - // Throwable cause = t.getCause(); - // if (cause instanceof InvocationTargetException) { - // Throwable targetException = ((InvocationTargetException) cause).getTargetException(); - // logger.error(targetException.getMessage()); - // } - // } - // return context; - // } public void lendObject(DefaultContext context) { super.lendObject(context); } @@ -158,10 +99,6 @@ public class ContextPool extends ResourcePool { @Override protected boolean validateObject(Object resourceObject) { - //super.validateObject(resourceObject); return (resourceObject instanceof DefaultContext); - // if (!(resourceObject instanceof DefaultContext)) { - // throw new IllegalArgumentException("Only DefaultContext class is acceptable."); - // } } } diff --git a/server/user.jobengine.osgi.db/src/user/commons/pool/ResourcePool.java b/server/user.jobengine.osgi.db/src/user/commons/pool/ResourcePool.java index ee605a1a..8dc3c33f 100644 --- a/server/user.jobengine.osgi.db/src/user/commons/pool/ResourcePool.java +++ b/server/user.jobengine.osgi.db/src/user/commons/pool/ResourcePool.java @@ -6,8 +6,6 @@ import java.util.LinkedList; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import user.commons.CommonsProperties; - /** * Erőforrás kezelő.
* Az implementációban meghatározott típusú er�forr�s objektumb�l ig�ny szerint l�trehoz annyit, amennyi enged�lyezett.
@@ -20,7 +18,6 @@ abstract public class ResourcePool { private static final Logger logger = LogManager.getLogger(); static public final String POOLSIZE = "PoolSize"; protected LinkedList pool = null; - private CommonsProperties properties = null; private int resourceCounter = 0; /** @@ -29,11 +26,8 @@ abstract public class ResourcePool { * @param properties * Be�ll�t�sok. */ - protected ResourcePool(CommonsProperties properties) { - if (properties == null) - throw new NullPointerException("Pool property map cannot be null."); - this.properties = properties; - resourceCounter = this.properties.getInt(POOLSIZE); + protected ResourcePool(int poolSize) { + resourceCounter = poolSize; } /** @@ -120,15 +114,6 @@ abstract public class ResourcePool { */ abstract protected Object createObject(); - /** - * Param�terek lek�rdez�se. - * - * @return CommonsProperties t�pus� param�ter objektum. - */ - protected CommonsProperties getProperties() { - return properties; - } - /** * K�lcs�nvett er�forr�s objektum visszaszolg�ltat�sa. T�pus �s null pointer elle�rz�s a validateObject seg�ts�g�vel. * diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java index 1717b7b3..7a3bd11d 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java @@ -45,18 +45,6 @@ public interface IItemManager extends IEntityPersister { */ void connect(); - /** - * A megfelelő bemeneti paramétrekekkel meghívja a connect() függvényt. - * - * @param dbUrl - * Adatbázis elérési útvonala - * @param dbUser - * Adatbázis felhasználói név - * @param dbPassword - * Adatbázis jelszó - */ - void connect(String dbUrl, String dbUser, String dbPassword); - FileType createFileType(String name, String description, String videoCodec, String audioCodec, int videoTracks, int audioTracks, float frameRate); Item createItem(String name, String description, String houseId); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java index 181ca38f..f543667d 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java @@ -34,9 +34,8 @@ import user.commons.IJob; import user.commons.Job; import user.commons.ListUtils; import user.commons.StoreUri; -import user.commons.pool.ConnectionPoolProperties; +import user.commons.configuration.IConfiguration; import user.commons.pool.ContextPool; -import user.commons.pool.ResourcePool; import user.commons.remotestore.RemoteStore; import user.commons.remotestore.RemoteStoreProtocol; import user.commons.server.tcp.SignalServer; @@ -59,11 +58,8 @@ import user.jobengine.search.SearchResult; * JobEngine adatbázis modell kezelő API. */ public class ItemManager extends MemoryCache implements IItemManager { - private static final String JOBENGINE_MEDIAFINDER_EXTERNAL = "jobengine.mediafinder.external"; + private static final Logger logger = LogManager.getLogger(); - public static String DBURL = "jobengine.db.url"; - public static String DBUSERNAME = "jobengine.db.user"; - public static String DBPASSWORD = "jobengine.db.password"; static ItemManager currentInstance = null; @@ -71,35 +67,19 @@ public class ItemManager extends MemoryCache implements IItemManager { return currentInstance; } + private IConfiguration systemConfig; + private Map, IEntityBaseDAO> baseDAOs = new Hashtable, IEntityBaseDAO>(); + private IChangeHandler itemTypeChangeFactory; - private int connectionPoolSize = 10; private ContextPool contextPool = null; - String dbDriver = "com.ibm.db2.jcc.DB2Driver"; - String dbUrl = null; - - String dbUser = null; - String dbPassword = null; - private SignalServer signalServer; - private boolean useLucene; - private IMediaFinder finder; + private Connection connection; public ItemManager() { initializeItemManager(signalServer); - // TODO mediafinder lokalis valtozo helyett private field. - // System.getProperty("jobengine.mediafinder.external") == true - // System.getProperty("jobengine.mediafinder.external.url") - - try { - useLucene = Boolean.parseBoolean(System.getProperty(JOBENGINE_MEDIAFINDER_EXTERNAL)); - } catch (Exception e) { - logger.info("Configuration property {} mising", JOBENGINE_MEDIAFINDER_EXTERNAL); - } - - finder = createFinder(); } public void activate() { @@ -156,12 +136,17 @@ public class ItemManager extends MemoryCache implements IItemManager { } } + public synchronized void bindSystemConfiguration(Object service) { + if (service instanceof IConfiguration) { + systemConfig = (IConfiguration) service; + logger.info("IConfiguration service binded"); + } + } + @Override public void connect() { traceIn(); - ConnectionPoolProperties properties = new ConnectionPoolProperties(dbDriver, dbUrl, dbUser, dbPassword, false, 2); - properties.add(ResourcePool.POOLSIZE, connectionPoolSize); - contextPool = new ContextPool(properties); + contextPool = new ContextPool(); // try { // getItemTypes(); @@ -172,14 +157,6 @@ public class ItemManager extends MemoryCache implements IItemManager { traceOut(); } - @Override - public void connect(String dbUrl, String dbUser, String dbPassword) { - this.dbUrl = dbUrl; - this.dbUser = dbUser; - this.dbPassword = dbPassword; - connect(); - } - @Override public FileType createFileType(String name, String description, String videoCodec, String audioCodec, int videoTracks, int audioTracks, float frameRate) { traceIn(); @@ -198,7 +175,8 @@ public class ItemManager extends MemoryCache implements IItemManager { private IMediaFinder createFinder() { IMediaFinder finder = null; - if (useLucene) { + boolean externalIndexer = systemConfig.value("datasource.mediacube.external-indexer", false); + if (externalIndexer) { finder = new LuceneMediaFinder(); } else { finder = new MediaFinder(this); @@ -1070,6 +1048,10 @@ public class ItemManager extends MemoryCache implements IItemManager { return storeUri; } + public IConfiguration getSystemConfig() { + return systemConfig; + } + @Override public MediaFile getSystemMediaFile(Media media) { MediaFile result = null; @@ -1187,9 +1169,6 @@ public class ItemManager extends MemoryCache implements IItemManager { private void initializeItemManager(SignalServer signalServer) { this.signalServer = signalServer; initialize(); - dbUrl = System.getProperty(DBURL); - dbUser = System.getProperty(DBUSERNAME); - dbPassword = System.getProperty(DBPASSWORD); } @Override @@ -1315,6 +1294,9 @@ public class ItemManager extends MemoryCache implements IItemManager { @Override public SearchResult search(SearchOptions options) { traceIn(); + + IMediaFinder finder = createFinder(); + SearchResult result = finder.search(options); traceOut(); return result; @@ -1372,6 +1354,10 @@ public class ItemManager extends MemoryCache implements IItemManager { return result; } + public void setSystemConfig(IConfiguration systemConfig) { + this.systemConfig = systemConfig; + } + @Override public void signal(long id, SignalType signalType, StaticTables staticTable) { if (signalServer != null) { diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java b/server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java index 8d5078a8..83cd331e 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/search/MediaFinder.java @@ -22,7 +22,6 @@ public class MediaFinder implements IMediaFinder { private static final Logger logger = LogManager.getLogger(); private ItemManager manager = null; private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); - private boolean simpleSearch = "true".equals(System.getProperty("mediacube.simplesearch", "false")); public MediaFinder(ItemManager manager) { this.manager = manager; @@ -61,7 +60,7 @@ public class MediaFinder implements IMediaFinder { sql.append(criteriaForTag.toString()); sql.append(" )"); } - + boolean simpleSearch = manager.getSystemConfig().value("datasource.mediacube.simple-search", true); if (simpleSearch) { if (criteria.endsWith("*")) criteria = criteria.replace("*", ""); diff --git a/server/user.jobengine.osgi.db/test/user/commons/pool/TestConnectionPool.java b/server/user.jobengine.osgi.db/test/user/commons/pool/TestConnectionPool.java deleted file mode 100644 index 2946b7f3..00000000 --- a/server/user.jobengine.osgi.db/test/user/commons/pool/TestConnectionPool.java +++ /dev/null @@ -1,37 +0,0 @@ -package user.commons.pool; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -public class TestConnectionPool { - private static ConnectionPool pool = null; - - @AfterClass - public static void afterTest() { - pool.close(); - } - - @BeforeClass - public static void beforeTest() { - ConnectionPoolProperties properties = new ConnectionPoolProperties("com.ibm.db2.jcc.DB2Driver", - "-Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true;", "db2admin", "password", false, 1000); - properties.add(ResourcePool.POOLSIZE, 10); - pool = new ConnectionPool(properties); - } - - @Test - public void testConcurrentBorrow() { - - for (int i = 0; i < 10; i++) { - TestingThread thread = new TestingThread("Thread" + i, pool); - thread.start(); - } - - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - } - } - -} diff --git a/server/user.jobengine.osgi.db/test/user/commons/pool/TestingThread.java b/server/user.jobengine.osgi.db/test/user/commons/pool/TestingThread.java deleted file mode 100644 index 9b065f59..00000000 --- a/server/user.jobengine.osgi.db/test/user/commons/pool/TestingThread.java +++ /dev/null @@ -1,31 +0,0 @@ -package user.commons.pool; - -import java.sql.Connection; - -/** - * Teszt thread, kölcsönöz majd egy idõ múlva visszaad egy Connection erõforrást. - */ -public class TestingThread extends Thread { - private ConnectionPool pool = null; - private String name = null; - - TestingThread(String name, ConnectionPool pool) { - this.pool = pool; - this.name = name; - } - - public void run() { - try { - Connection connection = pool.borrowObject(); - System.out.println(name + " borrowed a connection."); - Thread.sleep(3000); - pool.lendObject(connection); - System.out.println(name + " lend a connection."); - } catch (PoolException e) { - System.out.println(e.getMessage()); - } catch (InterruptedException e1) { - System.out.println(name + " finished."); - } - - } -} diff --git a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestBase.java b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestBase.java index 1cf8f58c..2313b258 100644 --- a/server/user.jobengine.osgi.db/test/user/jobengine/db/TestBase.java +++ b/server/user.jobengine.osgi.db/test/user/jobengine/db/TestBase.java @@ -3,8 +3,6 @@ package user.jobengine.db; import org.junit.AfterClass; import org.junit.BeforeClass; -import user.commons.logging.LogUtils; - public class TestBase { protected static IItemManager manager = null; @@ -34,10 +32,9 @@ public class TestBase { // System.setProperty(ItemManager.DBPASSWORD, "password"); // System.setProperty(LogUtils.LOGLEVEL, "INFO"); - System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty(ItemManager.DBUSERNAME, "db2admin"); - System.setProperty(ItemManager.DBPASSWORD, "password"); - System.setProperty(LogUtils.LOGLEVEL, "INFO"); + // System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty(ItemManager.DBUSERNAME, "db2admin"); + // System.setProperty(ItemManager.DBPASSWORD, "password"); // System.setProperty(ItemManager.DBURL, // "jdbc:db2://localhost:50000/je:retrieveMessagesFromServerOnGetMessage=true;"); // System.setProperty(ItemManager.DBUSERNAME, "jobengine"); diff --git a/server/user.jobengine.osgi.server/OSGI-INF/componentBinder.xml b/server/user.jobengine.osgi.server/OSGI-INF/componentBinder.xml index a8f596c9..0b60807b 100644 --- a/server/user.jobengine.osgi.server/OSGI-INF/componentBinder.xml +++ b/server/user.jobengine.osgi.server/OSGI-INF/componentBinder.xml @@ -2,5 +2,5 @@ - + diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/osgi/server/ComponentBinder.java b/server/user.jobengine.osgi.server/src/user/jobengine/osgi/server/ComponentBinder.java index 0dd3f5ad..559a4228 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/osgi/server/ComponentBinder.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/osgi/server/ComponentBinder.java @@ -3,6 +3,7 @@ package user.jobengine.osgi.server; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import user.commons.configuration.IConfiguration; import user.commons.nexio.INexioAPI; import user.mediacube.metadata.interfaces.IMetadataProviderFactory; @@ -11,6 +12,8 @@ public class ComponentBinder { private static INexioAPI nexioAPI; private static IMetadataProviderFactory metadataProviderFactory; + private static IConfiguration systemConfig; + public static IMetadataProviderFactory getMetadataProviderFactory() { return metadataProviderFactory; } @@ -21,6 +24,10 @@ public class ComponentBinder { return nexioAPI; } + public static IConfiguration getSystemConfig() { + return systemConfig; + } + public synchronized void bindMetadataProviderFactory(Object service) { if (service instanceof IMetadataProviderFactory) { metadataProviderFactory = (IMetadataProviderFactory) service; @@ -35,6 +42,13 @@ public class ComponentBinder { } } + public synchronized void bindSystemConfiguration(Object service) { + if (service instanceof IConfiguration) { + systemConfig = (IConfiguration) service; + logger.info("IConfiguration service binded"); + } + } + public synchronized void unbindMetadataProviderFactory(Object service) { metadataProviderFactory = null; logger.info("IMetadataProviderFactory service unbinded"); diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/DynamicClassLocator.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/DynamicClassLocator.java index 370a2586..92f80831 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/DynamicClassLocator.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/DynamicClassLocator.java @@ -28,7 +28,7 @@ public class DynamicClassLocator { public static URL[] makeURLs() { List result = new ArrayList<>(); - addPath(result, JobEngine.STEPSROOT); + addPath(result, ""); return result.toArray(new URL[result.size()]); } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobEngine.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobEngine.java index d6bb6057..ae75af71 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobEngine.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobEngine.java @@ -18,8 +18,6 @@ public interface IJobEngine { void addManagedJobChangedListener(IJobChangedListener listener); - void addStepExecutor(IJobStepExecutor executor); - void addToExecutorQueue(IJobRuntime jobRuntime); void addToRunQueue(IJobRuntime jobRuntime); @@ -28,8 +26,6 @@ public interface IJobEngine { void bindItemManagerService(IItemManager service); - boolean deleteProgram(String fileName); - void executeAssignVariableInstruction(IJobRuntime jobRuntime); void executeCallConcurrentJobStepInstruction(IJobRuntime jobRuntime, IProgram subProgram); @@ -52,8 +48,6 @@ public interface IJobEngine { void fireJobChangedEvent(JobChangedEvent event); - Map getExecutors(); - Object[] getInputsFromStack(IJobRuntime jobRuntime); IItemManager getItemManager(); @@ -62,12 +56,12 @@ public interface IJobEngine { IJobRuntime getJobById(long jobId); + JobEngineConfiguration getJobEngineConfiguration(); + Map getJobs(); IProgram getProgram(String name); - Map getPrograms(); - JobEngineRemote getRemoteEngine(); ScheduledJob getScheduledJob(String template); @@ -90,12 +84,6 @@ public interface IJobEngine { void keepAliveWorker(String remoteAddr); - void loadExecutors(); - - void loadProgram(String fileName) throws Exception; - - void loadPrograms(); - void processCancelRequest(IJobMessage message); void processJobStepCompletedMessage(IJobMessage message); diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobStepExecutor.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobStepExecutor.java index 02dc8dd9..961cac39 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobStepExecutor.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/IJobStepExecutor.java @@ -61,5 +61,4 @@ public interface IJobStepExecutor { void submit(IJobRuntime... job); void waitShutdown(); - } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java index 0a46bbf6..c0862468 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java @@ -1,17 +1,10 @@ package user.jobengine.server; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Paths; import java.sql.Timestamp; import java.time.LocalDate; import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.concurrent.BlockingQueue; @@ -32,20 +25,15 @@ import com.ibm.nosql.json.api.BasicDBObject; import user.commons.Job; import user.commons.JobStatus; -import user.commons.RemoteFile; -import user.commons.StoreUri; import user.commons.cluster.ClusteredJob; import user.commons.nosql.NoSQLUtils; -import user.commons.remotestore.DirectoryUtils; -import user.commons.remotestore.RemoteStoreProtocol; import user.jobengine.db.IItemManager; import user.jobengine.db.ItemManagerData.SignalType; +import user.jobengine.osgi.server.ComponentBinder; import user.jobengine.server.actions.IStatusMachine; import user.jobengine.server.actions.JobAction; import user.jobengine.server.actions.StatusMachine; -import user.jobengine.server.ast.Encoder; import user.jobengine.server.ast.JobTemplate; -import user.jobengine.server.ast.Parser; import user.jobengine.server.instructions.CallJobStepInstruction; import user.jobengine.server.instructions.IInstruction; import user.jobengine.server.messagequeue.IUserMessage; @@ -70,7 +58,7 @@ public class JobEngine implements IJobEngine { @Override public void run() { try { - barrier.await(); + startUpBarrier.await(); } catch (Exception e) { } @@ -99,7 +87,7 @@ public class JobEngine implements IJobEngine { @Override public void run() { try { - barrier.await(); + startUpBarrier.await(); } catch (Exception e) { } @@ -141,7 +129,7 @@ public class JobEngine implements IJobEngine { @Override public void run() { try { - barrier.await(); + startUpBarrier.await(); } catch (Exception e) { } @@ -185,12 +173,6 @@ public class JobEngine implements IJobEngine { } private static final Logger logger = LogManager.getLogger(); - public static final String TEMPLATEROOT = "jobengine.jobtemplates.root"; - public static final String STEPSROOT = "jobengine.jobsteps.root"; - public static final String STEPSCONFIG = "jobengine.jobsteps.config"; - private static final String SCHEDULEDEXECUTION_DISABLED = "jobengine.scheduledexecution.disabled"; - private static final String EXECUTORCONFIGFILE = "config.xml"; - static private IItemManager itemManager; private static IJobEngine instance; @@ -208,15 +190,12 @@ public class JobEngine implements IJobEngine { private final BlockingQueue runQueue; private final BlockingQueue messageQueue; - private final List jobTemplates; private final Map submittedJobs; - private final Map programs; - private final Map executors; private VM vm; private MessageDispatcher dispatcher; private JobChangedListenerChecker jobChangedListenerChecker; private IUserMessageQueues userMessageQueues; - private final CyclicBarrier barrier; + private final CyclicBarrier startUpBarrier; private final IStatusMachine statusMachine; @@ -229,25 +208,19 @@ public class JobEngine implements IJobEngine { private String masterServerAddress = System.getProperty("jobengine.master.server", ""); private final JobEngineRemote remoteEngine; private ConcurrentHashMap keepAliveJobChangedListeners = new ConcurrentHashMap<>(); + private JobEngineConfiguration jobEngineConfiguration = new JobEngineConfiguration(); /** * A MAM motor példányosítása. Ennek során létrejönnek a várakozási sorok, az ütemező szál, az üzenet kezelő szál. */ public JobEngine() { - try { - isScheduledExecutionDisabled = Boolean.parseBoolean(System.getProperty(SCHEDULEDEXECUTION_DISABLED, "false")); - } finally { - } + isScheduledExecutionDisabled = ComponentBinder.getSystemConfig().value("jobs.scheduled-execution-disabled", false); runQueue = new PriorityBlockingQueue(); messageQueue = new LinkedBlockingQueue(); - jobTemplates = Collections.synchronizedList(new ArrayList()); - executors = new LinkedHashMap(); - submittedJobs = createJobs(); - barrier = new CyclicBarrier(4); + startUpBarrier = new CyclicBarrier(4); nextJobId = new AtomicLong(0); - programs = new HashMap(); statusMachine = createStatusMachine(); if (instance != null) throw new RuntimeException("Multiple JobEngine instances are not supported!"); @@ -280,27 +253,6 @@ public class JobEngine implements IJobEngine { } } - @Override - public void addStepExecutor(IJobStepExecutor executor) { - //Class stepClass = executor.getStepClass(); - executor.setJobEngine(this); - String unitName = executor.getStepUnitName(); - if (!executors.containsKey(unitName)) { - logger.info("Executor now registered for {}", unitName); - executors.put(unitName, executor); - } else { - logger.info("Executor already registered for {}", unitName); - IJobStepExecutor stepExecutor = executors.get(unitName); - int currentMaxConcurrent = stepExecutor.getMaxConcurrent(); - int newMaxConcurrent = executor.getMaxConcurrent(); - if (currentMaxConcurrent != newMaxConcurrent) { - stepExecutor.setMaxConcurrent(newMaxConcurrent); - logger.info("Executor maxConcurrent changed from {} to {}", currentMaxConcurrent, newMaxConcurrent); - } - } - - } - @Override public void addToExecutorQueue(IJobRuntime jobRuntime) { try { @@ -308,13 +260,13 @@ public class JobEngine implements IJobEngine { if (typeName == null) throw new Exception(jobRuntime.toString() + " illegal execution state detected: executor name is null."); String executorName = String.valueOf(typeName); - if (!executors.containsKey(executorName)) + if (!jobEngineConfiguration.getExecutors().containsKey(executorName)) throw new Exception(jobRuntime.toString() + " executor is unavailable: " + executorName); //a lista mindig letezik, de sima futtataskor csak 1 elemu, az aktualis van benne //ha van parhuzamos futtatas, akkor letrejonnek benne a step szellemek is, es meghivodik a fork List jobs = spawnJobs(jobRuntime, executorName); - executors.get(executorName).submit(jobs.toArray(new IJobRuntime[] {})); + jobEngineConfiguration.getExecutors().get(executorName).submit(jobs.toArray(new IJobRuntime[] {})); jobs.forEach(r -> fireJobChangedEvent(new JobChangedEvent(r, SignalType.EXECUTE))); } catch (Exception e) { @@ -358,8 +310,8 @@ public class JobEngine implements IJobEngine { } //JobStepExecutor reorder - if (this.executors != null) { - for (IJobStepExecutor exec : executors.values()) { + if (jobEngineConfiguration.getExecutors() != null) { + for (IJobStepExecutor exec : jobEngineConfiguration.getExecutors().values()) { if (exec.containsRuntime(jobRuntime)) { logger.info("executor"); exec.changePriority(jobRuntime); @@ -403,26 +355,6 @@ public class JobEngine implements IJobEngine { public void deactivate() { } - @Override - public boolean deleteProgram(String fileName) { - boolean result = true; - try { - String filePath = DirectoryUtils.combine(System.getProperty(TEMPLATEROOT), fileName, true, true); - File file = new File(filePath); - if (!file.exists()) - throw new Exception("File not exists: " + filePath); - if (!file.delete()) - throw new Exception("Can not delete file: " + filePath); - if (programs.containsKey(fileName)) - programs.remove(fileName); - logger.info("Template deleted: " + filePath); - } catch (Exception e) { - logger.error(e); - result = false; - } - return result; - } - @Override public void executeAssignVariableInstruction(IJobRuntime jobRuntime) { Object value = jobRuntime.popFromStack(); @@ -532,11 +464,6 @@ public class JobEngine implements IJobEngine { } } - @Override - public Map getExecutors() { - return executors; - } - @Override public Object[] getInputsFromStack(IJobRuntime jobRuntime) { jobRuntime.swapStack(); @@ -569,6 +496,11 @@ public class JobEngine implements IJobEngine { return submittedJobs.get(jobId); } + @Override + public JobEngineConfiguration getJobEngineConfiguration() { + return jobEngineConfiguration; + } + @Override public Map getJobs() { return submittedJobs; @@ -580,12 +512,7 @@ public class JobEngine implements IJobEngine { @Override public IProgram getProgram(String name) { - return programs.get(name); - } - - @Override - public Map getPrograms() { - return programs; + return jobEngineConfiguration.getPrograms().get(name); } @Override @@ -672,122 +599,6 @@ public class JobEngine implements IJobEngine { remoteWorkers.put(remoteAddr, LocalDate.now()); } - @Override - public void loadExecutors() { - // TODO - // shutdownExecutors(); - //executors.clear(); - InputStream stream = null; - try { - String stepRoot = DirectoryUtils.normalize(System.getProperty(STEPSROOT), File.separator); - String stepsConfig = DirectoryUtils.normalize(System.getProperty(STEPSCONFIG), File.separator); - if (stepsConfig == null || !Paths.get(stepsConfig).toFile().exists()) - stepsConfig = DirectoryUtils.combine(stepRoot, EXECUTORCONFIGFILE, true, true); - - logger.info("Loading executors based on configuration: " + stepsConfig); - stream = new FileInputStream(stepsConfig); - ExecutorConfigParser parser = new ExecutorConfigParser(stream); - - List executorList = parser.parse(); - if (executorList != null) { - for (IJobStepExecutor executor : executorList) - addStepExecutor(executor); - } - } catch (Exception e) { - logger.error("Error loading executors: " + e); - } finally { - try { - if (stream != null) - stream.close(); - } catch (IOException e) { - } - } - } - - @Override - public void loadProgram(String fileName) throws Exception { - InputStream stream = null; - try { - String filePath = DirectoryUtils.combine(System.getProperty(TEMPLATEROOT), fileName, true, true); - File file = new File(filePath); - if (!file.exists()) - throw new Exception("File not exists: " + filePath); - logger.info("Loading template: " + filePath); - stream = new FileInputStream(filePath); - - Parser parser = new Parser(stream); - JobTemplate template = parser.parse(); - template.validate(); - template.setFileName(fileName); - - Encoder encoder = new Encoder(); - IProgram program = (IProgram) encoder.visitJobTemplate(template, null); - - if (programs.containsKey(fileName)) - programs.remove(fileName); - - programs.put(fileName, program); - logger.info("Job template loaded: " + fileName); - } catch (Exception e) { - logger.error(fileName + " compile error: " + e.getMessage()); - throw new Exception(e); - } finally { - if (stream != null) - stream.close(); - } - } - - @Override - public void loadPrograms() { - programs.clear(); - StringBuilder sb = new StringBuilder(); - try { - StoreUri store = new StoreUri(); - store.setProtocol(RemoteStoreProtocol.LOCAL); - store.setUri(DirectoryUtils.normalize(System.getProperty(TEMPLATEROOT), File.separator)); - store.setFileFilter("*.xml"); - - // String userDirectory = System.getProperty("user.dir"); - // - // Path path = Paths.get(userDirectory + "\\" + System.getProperty(TEMPLATEROOT, "")); - // boolean exists = path.toFile().exists(); - String templateRoot = store.toString(true); - logger.info("Template root is: " + templateRoot); - // File f = new File(templateRoot); - // System.out.println(f.getAbsolutePath()); - List files = store.getRemoteFiles(); - - for (RemoteFile file : files) { - String name = file.getName(); - InputStream stream = null; - try { - String filePath = templateRoot + name; - logger.info("Loading template {}", name); - // System.out.println(name); - stream = new FileInputStream(filePath); - Parser parser = new Parser(stream); - Encoder encoder = new Encoder(); - JobTemplate jobTemplate = parser.parse(); - jobTemplate.validate(); - jobTemplate.setFileName(name); - IProgram program = (IProgram) encoder.visitJobTemplate(jobTemplate, null); - programs.put(name, program); - jobTemplates.add(jobTemplate); - sb.append(name + " "); - } catch (Exception e) { - logger.error("Compile error in {}", name); - } finally { - if (stream != null) - stream.close(); - } - } - } catch (Exception e) { - logger.error("Error loading templates: " + e.getMessage()); - } - if (sb.length() > 0) - logger.info("Loaded templates: " + sb.toString()); - } - @Override public void processCancelRequest(IJobMessage message) { IJobRuntime jobRuntime = getJobById(message.getJobId()); @@ -898,10 +709,8 @@ public class JobEngine implements IJobEngine { if (schedulerService != null) schedulerService.shutdown(); - loadPrograms(); - loadExecutors(); - - //startupExecutors(); + jobEngineConfiguration.loadTemplates(); + jobEngineConfiguration.loadExecutors(this); schedulerService = new SchedulerService(this); schedulerService.startup(); @@ -911,7 +720,7 @@ public class JobEngine implements IJobEngine { @Override public void removeFromExecutorQueue(IJobRuntime jobRuntime) { - for (IJobStepExecutor executor : executors.values()) + for (IJobStepExecutor executor : jobEngineConfiguration.getExecutors().values()) executor.revoke(jobRuntime); } @@ -977,10 +786,9 @@ public class JobEngine implements IJobEngine { @Override public ClusteredJob requestJob(String className) throws Exception { - if (!executors.containsKey(className)) + IJobStepExecutor executor = jobEngineConfiguration.getExecutors().get(className); + if (executor == null) throw new Exception("Unregistered executor request: " + className); - - IJobStepExecutor executor = executors.get(className); if (!executor.isRemoteEnabled()) throw new Exception("Job is not registered for remote workers: " + className); @@ -997,14 +805,16 @@ public class JobEngine implements IJobEngine { vm.shutDown(); shutdownExecutors(); + startUpBarrier.reset(); logger.info("JobEngine gracefully stopped"); - loadPrograms(); - loadExecutors(); + jobEngineConfiguration.loadTemplates(); + jobEngineConfiguration.loadExecutors(this); vm.start(); startupExecutors(); + startUpBarrier.await(); schedulerService = new SchedulerService(this); schedulerService.startup(); @@ -1051,13 +861,12 @@ public class JobEngine implements IJobEngine { } private void shutdownExecutors() { - if (executors == null) - return; - for (IJobStepExecutor executor : executors.values()) { + Collection executors = jobEngineConfiguration.getExecutors().values(); + for (IJobStepExecutor executor : executors) { logger.trace("Notify executor {}", executor.getStepUnitName()); executor.shutdown(); } - for (IJobStepExecutor executor : executors.values()) { + for (IJobStepExecutor executor : executors) { logger.info("Stopping executor {}", executor.getStepUnitName()); executor.waitShutdown(); } @@ -1103,8 +912,8 @@ public class JobEngine implements IJobEngine { try { removeGarbage(); - loadPrograms(); - loadExecutors(); + jobEngineConfiguration.loadTemplates(); + jobEngineConfiguration.loadExecutors(this); vm = new VM(); dispatcher = new MessageDispatcher(); @@ -1116,7 +925,7 @@ public class JobEngine implements IJobEngine { jobChangedListenerChecker.start(); startupExecutors(); - barrier.await(); + startUpBarrier.await(); schedulerService = new SchedulerService(this); schedulerService.startup(); @@ -1131,7 +940,7 @@ public class JobEngine implements IJobEngine { } private void startupExecutors() { - for (IJobStepExecutor executor : executors.values()) + for (IJobStepExecutor executor : jobEngineConfiguration.getExecutors().values()) executor.startup(); } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java new file mode 100644 index 00000000..82729e8a --- /dev/null +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java @@ -0,0 +1,202 @@ +package user.jobengine.server; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import groovy.lang.GroovyClassLoader; +import user.commons.configuration.IConfiguration; +import user.jobengine.osgi.server.ComponentBinder; +import user.jobengine.server.ast.Encoder; +import user.jobengine.server.ast.JobTemplate; +import user.jobengine.server.ast.Parser; +import user.jobengine.server.steps.IJobStep; + +public class JobEngineConfiguration { + private static final Logger logger = LogManager.getLogger(); + public static final String CONF_MEDIACUBE = "configuration/mediacube.json"; + public static final String CONF_MAESTRO = "configuration/maestro.json"; + public static final String CONF_EXECUTORS = "jobs/executors.xml"; + public static final String CONF_SCHEDULES = "jobs/schedules.json"; + public static final String DIR_STEPS = "jobs/steps"; + public static final String DIR_CLASSES = "jobs/classes"; + public static final String DIR_TEMPLATES = "jobs/templates"; + + private final Map executors = new LinkedHashMap(); + private final Map programs = new LinkedHashMap(); + private final List templates = Collections.synchronizedList(new ArrayList()); + private URLClassLoader stepsClassLoader = null; + + @SuppressWarnings("unchecked") + public IJobStep createJobStep(String stepUnitName) throws Exception { + IJobStep result = null; + + boolean isGroovyClass = stepUnitName.toLowerCase().endsWith(".java") || stepUnitName.toLowerCase().endsWith(".groovy"); + + if (stepsClassLoader == null) { + String stepClassesDir = ComponentBinder.getSystemConfig().getConfig(DIR_CLASSES); + Path path = Paths.get(stepClassesDir); + URL[] urls = { path.toUri().toURL() }; + stepsClassLoader = URLClassLoader.newInstance(urls, getClass().getClassLoader()); + } + + Class stepClass = null; + + if (isGroovyClass) { + try (GroovyClassLoader gcl = new GroovyClassLoader(stepsClassLoader)) { + String stepsDir = ComponentBinder.getSystemConfig().getConfig(DIR_STEPS); + stepClass = (Class) parseClassHierarchy(gcl, stepsDir, stepUnitName); + } catch (Exception e) { + throw e; + } + + } else + stepClass = (Class) stepsClassLoader.loadClass(stepUnitName); + + result = stepClass.newInstance(); + + return result; + } + + public Map getExecutors() { + return executors; + } + + public Map getPrograms() { + return programs; + } + + public List getTemplates() { + return templates; + } + + public void loadExecutors(IJobEngine jobEngine) { + InputStream stream = null; + try { + IConfiguration systemConfig = ComponentBinder.getSystemConfig(); + String configFilePath = systemConfig.getConfig(CONF_EXECUTORS); + logger.info("Loading executors configuration {}", configFilePath); + stream = Files.newInputStream(Paths.get(configFilePath)); + ExecutorConfigParser parser = new ExecutorConfigParser(stream); + + List executorList = parser.parse(); + if (executorList != null) { + for (IJobStepExecutor executor : executorList) { + String unitName = executor.getStepUnitName(); + executor.setJobEngine(jobEngine); + if (!executors.containsKey(unitName)) { + logger.info("Executor now registered for {}", unitName); + executors.put(unitName, executor); + } else { + logger.info("Executor already registered for {}", unitName); + IJobStepExecutor stepExecutor = executors.get(unitName); + int currentMaxConcurrent = stepExecutor.getMaxConcurrent(); + int newMaxConcurrent = executor.getMaxConcurrent(); + if (currentMaxConcurrent != newMaxConcurrent) { + stepExecutor.setMaxConcurrent(newMaxConcurrent); + logger.info("Executor maxConcurrent changed from {} to {}", currentMaxConcurrent, newMaxConcurrent); + } + } + + logger.info("Executor now registered for {}", unitName); + } + } + } catch (Exception e) { + logger.error("Error loading executors: " + e); + } finally { + try { + if (stream != null) + stream.close(); + } catch (IOException e) { + } + } + } + + private void loadTemplate(Path config) { + InputStream stream = null; + try { + stream = Files.newInputStream(config); + String fileName = config.getFileName().toString(); + Parser parser = new Parser(stream); + JobTemplate template = parser.parse(); + template.validate(); + template.setFileName(fileName); + + Encoder encoder = new Encoder(); + IProgram program = (IProgram) encoder.visitJobTemplate(template, null); + getPrograms().put(fileName, program); + + getTemplates().add(template); + logger.info("Job template loaded {}", fileName); + } catch (Exception e) { + logger.error("{} compile error: {}", config, e.getMessage()); + } finally { + try { + if (stream != null) + stream.close(); + } catch (IOException e) { + } + } + } + + public void loadTemplates() { + programs.clear(); + try { + IConfiguration systemConfig = ComponentBinder.getSystemConfig(); + Path templatesPath = Paths.get(systemConfig.getConfig(DIR_TEMPLATES)); + if (!templatesPath.toFile().isDirectory()) + throw new FileNotFoundException(templatesPath + " is not directory!"); + logger.info("Loading templates from {}", templatesPath); + Predicate filter = file -> !Files.isDirectory(file) && file.getFileName().toString().endsWith(".xml"); + Consumer consumer = file -> loadTemplate(file); + try (Stream stream = Files.list(templatesPath)) { + stream.filter(filter).forEach(consumer); + } + + } catch (Exception e) { + logger.error(e); + } + } + + private Class parseClassHierarchy(GroovyClassLoader cl, String root, String className) throws IOException { + Path path = Paths.get(root, className); + + //logger.info("Loading class {} from {}", className, path.toString()); + Class result = null; + if (!path.toFile().exists()) + return result; + List lines = Files.readAllLines(path); + + for (String line : lines) { + if (line.contains("extends")) { + + String[] tokens = line.split("extends"); + String parent = tokens[tokens.length - 1]; + parent = parent.replace("{", "").trim(); + //logger.info("Class {} needs parent class {}", className, parent); + + parseClassHierarchy(cl, root, parent + ".java"); + break; + } + } + result = cl.parseClass(path.toFile()); + return result; + } + +} diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java index d2dd3a50..cebc500b 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java @@ -1,10 +1,5 @@ package user.jobengine.server; -import java.io.IOException; -import java.net.URLClassLoader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -16,7 +11,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import groovy.lang.GroovyClassLoader; import user.commons.JobStatus; import user.commons.cluster.ClusteredJob; import user.jobengine.server.messages.JobStepCompletedMessage; @@ -68,7 +62,7 @@ public class JobStepExecutor implements IJobStepExecutor { jobEngine.storeJob(jobRuntime); Object[] inputs = job.getInputs(); - runStepObject(jobRuntime, inputs); + runStep(jobRuntime, inputs); } } @@ -98,7 +92,7 @@ public class JobStepExecutor implements IJobStepExecutor { logger.info("Executing locally {}", jobRuntime.getId()); //jobRuntime.setDescription(PROCESSING_LOCALLY); Object[] inputs = jobEngine.getInputsFromStack(jobRuntime); - IJobStep stepObject = runStepObject(jobRuntime, inputs); + IJobStep stepObject = runStep(jobRuntime, inputs); if (stepObject.isTest()) { logger.trace("Finishing test worker"); break; @@ -133,16 +127,14 @@ public class JobStepExecutor implements IJobStepExecutor { } } - private IJobStep runStepObject(IJobRuntime jobRuntime, Object[] inputs) throws Throwable { + private IJobStep runStep(IJobRuntime jobRuntime, Object[] inputs) throws Throwable { IJobStep step = null; jobRuntime.setStatus(JobStatus.EXECUTING); jobRuntime.NotifyUpdate(); - step = createStepObject(); - if (step == null) - throw new Exception("Step object is null"); - logger.debug("{} executing", jobRuntime); + step = createStep(); + jobRuntime.incrementPriority(); Object[] outputs = step.run(jobEngine, jobRuntime, inputs); @@ -178,7 +170,6 @@ public class JobStepExecutor implements IJobStepExecutor { private int maxConcurrent; private String stepUnitName; private boolean isRemote; - private URLClassLoader parentLoader; public JobStepExecutor() { } @@ -236,50 +227,12 @@ public class JobStepExecutor implements IJobStepExecutor { logger.debug("Creating executor {}, instances {}", stepUnitName, maxConcurrent); if (StringUtils.isEmpty(stepUnitName)) throw new JobEngineException("Step unit name can't be null."); - - parentLoader = URLClassLoader.newInstance(DynamicClassLocator.makeURLs(), getClass().getClassLoader()); - if (!isGroovyStep()) { - //a groovy-nak nem kell - try { - stepClass = (Class) parentLoader.loadClass(stepUnitName); - } catch (ClassNotFoundException e1) { - logger.catching(e1); - throw new JobEngineException("System can't load JobStep implementation: " + stepUnitName); - } - } - queue = new PriorityBlockingQueue(); this.maxConcurrent = maxConcurrent; } - protected IJobStep createStepObject() throws Exception { - IJobStep result = null; - - if (isGroovyStep()) { - try (GroovyClassLoader gcl = new GroovyClassLoader(parentLoader)) { - String stepsDir = System.getProperty("jobengine.jobsteps.groovy.root", ""); - - Class myClass = parseClassHierarchy(gcl, stepsDir, stepUnitName); - result = (IJobStep) myClass.newInstance(); - - // for (String executorName : jobEngine.getExecutors().keySet()) { - // if (!executorName.endsWith(".java")) - // continue; - // - // Class myClass = gcl.parseClass(Paths.get(stepsDir, executorName).toFile()); - // if (stepUnitName.equals(executorName)) { - // result = (IJobStep) myClass.newInstance(); - // break; - // } - // } - } catch (Exception e) { - logger.error(e.getMessage()); - throw e; - } - - } else - result = stepClass.newInstance(); - return result; + protected IJobStep createStep() throws Exception { + return jobEngine.getJobEngineConfiguration().createJobStep(stepUnitName); } @Override @@ -302,40 +255,11 @@ public class JobStepExecutor implements IJobStepExecutor { return stepUnitName; } - private boolean isGroovyStep() { - return stepUnitName.toLowerCase().endsWith(".java") || stepUnitName.toLowerCase().endsWith(".groovy"); - } - @Override public boolean isRemoteEnabled() { return isRemote; } - private Class parseClassHierarchy(GroovyClassLoader cl, String root, String className) throws IOException { - Path path = Paths.get(root, className); - - //logger.info("Loading class {} from {}", className, path.toString()); - Class result = null; - if (!path.toFile().exists()) - return result; - List lines = Files.readAllLines(path); - - for (String line : lines) { - if (line.contains("extends")) { - - String[] tokens = line.split("extends"); - String parent = tokens[tokens.length - 1]; - parent = parent.replace("{", "").trim(); - //logger.info("Class {} needs parent class {}", className, parent); - - parseClassHierarchy(cl, root, parent + ".java"); - break; - } - } - result = cl.parseClass(path.toFile()); - return result; - } - protected synchronized boolean retireUnusedWorker(Worker worker) { boolean result = false; if (getMaxConcurrent() < workers.size()) { @@ -418,4 +342,5 @@ public class JobStepExecutor implements IJobStepExecutor { public void waitShutdown() { workers.forEach(worker -> worker.waitShutdown()); } + } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java index 859ce080..24b9231c 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java @@ -1,6 +1,5 @@ package user.jobengine.server.scheduler; -import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; @@ -33,8 +32,11 @@ import com.ibm.nosql.json.JSONUtil; import com.ibm.nosql.json.api.BasicDBList; import com.ibm.nosql.json.api.BasicDBObject; +import user.commons.configuration.IConfiguration; import user.commons.nosql.NoSQLUtils; +import user.jobengine.osgi.server.ComponentBinder; import user.jobengine.server.IJobEngine; +import user.jobengine.server.JobEngineConfiguration; /** * Jobok schedulalt inditasa. @@ -176,32 +178,24 @@ public class SchedulerService { * @throws Exception */ private void loadStartupJobsFromConfig() throws Exception { - String configPath = System.getProperty("jobengine.jobscheduling.config"); - if (configPath == null || "".equals(configPath)) { - logger.error("Missing system property: 'jobengine.jobscheduling.config'"); - return; - } - logger.info("Loading scheduler configuration file: {}", configPath); - File schedulingConfigFile = new File(configPath); - if (schedulingConfigFile.exists()) { - String jsonConfig = new String(Files.readAllBytes(Paths.get(schedulingConfigFile.getAbsolutePath()))); - BasicDBObject dbo = (BasicDBObject) JSONUtil.jsonToDbObject(jsonConfig); - scheduleJobs = (BasicDBList) dbo.get("joblist"); - for (int c = 0; c < scheduleJobs.size(); c++) { - BasicDBObject sjob = (BasicDBObject) scheduleJobs.get(c); - ScheduledJob sj = null; - try { - sj = createScheduledJob(sjob); - } catch (Exception e) { - logger.error("Error creating job: {}", sjob); - } - //skip inactive jobs - if (!sj.isActive()) - continue; - schedule(sj); + IConfiguration systemConfig = ComponentBinder.getSystemConfig(); + String configFilePath = systemConfig.getConfig(JobEngineConfiguration.CONF_SCHEDULES); + logger.info("Loading scheduler configuration file {}", configFilePath); + String jsonConfig = new String(Files.readAllBytes(Paths.get(configFilePath))); + BasicDBObject dbo = (BasicDBObject) JSONUtil.jsonToDbObject(jsonConfig); + scheduleJobs = (BasicDBList) dbo.get("joblist"); + for (int c = 0; c < scheduleJobs.size(); c++) { + BasicDBObject sjob = (BasicDBObject) scheduleJobs.get(c); + ScheduledJob sj = null; + try { + sj = createScheduledJob(sjob); + } catch (Exception e) { + logger.error("Error creating job: {}", sjob); } - } else { - logger.error("Missing '{}' configuration file: {}", configPath, schedulingConfigFile.getAbsolutePath()); + //skip inactive jobs + if (!sj.isActive()) + continue; + schedule(sj); } } diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java index 79f19de7..7a61998b 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java @@ -27,7 +27,9 @@ import user.jobengine.server.messages.CancelRequest; */ public class JobStep implements IJobStep { private static final Logger logger = LogManager.getLogger(); + private IJobRuntime jobRuntime = null; + private IJobEngine jobEngine; private Object[] addParameter(Method stepEntry, Object[] inputs, Class type, Object parameter) { diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/JobengineIT.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/JobengineIT.java index 4564a71a..2e0df99e 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/JobengineIT.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/JobengineIT.java @@ -57,8 +57,6 @@ public class JobengineIT { final ThreadSynchronizer sync = new ThreadSynchronizer(); IJobEngine jobEngine = new JobEngine(); jobEngine.setItemManager(manager); - jobEngine.loadPrograms(); - jobEngine.loadExecutors(); jobEngine.startup(); Map parameters = new HashMap<>(); parameters.put("mediaFolder", "/tmp"); diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java index 54619b60..4b4fdd27 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/Support.java @@ -43,7 +43,6 @@ import user.commons.CalendarUtils; import user.commons.IEntityBase; import user.commons.ListUtils; import user.commons.StoreUri; -import user.commons.logging.LogUtils; import user.commons.mediatool.MediaInfo; import user.commons.nosql.NoSQLUtils; import user.commons.octopus.IOctopusAPI; @@ -76,21 +75,19 @@ public class Support { @BeforeClass static public void setUpConnection() { - // System.setProperty("jobengine.octopus.rundowns.name", "test_rundowns"); - // System.setProperty("jobengine.octopus.stories.name", "test_stories"); - // System.setProperty("jobengine.octopus.storyfolders.name", "test_storyfolders"); - System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); - System.setProperty("jobengine.octopus.stories.name", "stories180620"); - System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); - - System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.29:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty("jobengine.nosql.db.user", "db2admin"); - System.setProperty("jobengine.nosql.db.password", "password"); - System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.29:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty(ItemManager.DBUSERNAME, "db2admin"); - System.setProperty(ItemManager.DBPASSWORD, "password"); - System.setProperty(LogUtils.LOGLEVEL, "INFO"); - // System.setProperty(ItemManager.DBURL, + // // System.setProperty("jobengine.octopus.rundowns.name", "test_rundowns"); + // // System.setProperty("jobengine.octopus.stories.name", "test_stories"); + // // System.setProperty("jobengine.octopus.storyfolders.name", "test_storyfolders"); + // System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); + // System.setProperty("jobengine.octopus.stories.name", "stories180620"); + // System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); + // + // System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.29:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty("jobengine.nosql.db.user", "db2admin"); + // System.setProperty("jobengine.nosql.db.password", "password"); + // System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.29:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty(ItemManager.DBUSERNAME, "db2admin"); + // System.setProperty(ItemManager.DBPASSWORD, "password"); manager = new ItemManager(); manager.connect(); @@ -342,8 +339,7 @@ public class Support { public List getRundownsByPlaceHolderID(String id) { DB db = NoSQLUtils.getNoSQLDB(); DBCollection collection = db.getCollection(IOctopusAPI.STORY_COLLECTION); - BasicDBObject criteria = new BasicDBObject(IOctopusAPI.MOS_OBJECTS, - new BasicDBObject(IOctopusAPI.$ELEMMATCH, new BasicDBObject(IOctopusAPI.OBJ_ID, id))); + BasicDBObject criteria = new BasicDBObject(IOctopusAPI.MOS_OBJECTS, new BasicDBObject(IOctopusAPI.$ELEMMATCH, new BasicDBObject(IOctopusAPI.OBJ_ID, id))); DBCursor find = collection.find(criteria, new BasicDBObject(IOctopusAPI.REF_RUNDOWN, 1)); List rundowns = NoSQLUtils.asList(find); db.cancelBatch(); diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportRemoveDuplicates.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportRemoveDuplicates.java index e6ed2cfb..02bdad77 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportRemoveDuplicates.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportRemoveDuplicates.java @@ -8,7 +8,6 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import user.commons.logging.LogUtils; import user.jobengine.db.IItemManager; import user.jobengine.db.IResultSetConsumer; import user.jobengine.db.IStatementDecorator; @@ -33,18 +32,17 @@ public class SupportRemoveDuplicates { // System.setProperty("jobengine.octopus.rundowns.name", "test_rundowns"); // System.setProperty("jobengine.octopus.stories.name", "test_stories"); // System.setProperty("jobengine.octopus.storyfolders.name", "test_storyfolders"); - System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); - System.setProperty("jobengine.octopus.stories.name", "stories180620"); - System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); - - System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty("jobengine.nosql.db.user", "db2admin"); - System.setProperty("jobengine.nosql.db.password", "password"); - System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty(ItemManager.DBUSERNAME, "db2admin"); - System.setProperty(ItemManager.DBPASSWORD, "password"); - System.setProperty(LogUtils.LOGLEVEL, "INFO"); - // System.setProperty(ItemManager.DBURL, + // System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); + // System.setProperty("jobengine.octopus.stories.name", "stories180620"); + // System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); + // + // System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty("jobengine.nosql.db.user", "db2admin"); + // System.setProperty("jobengine.nosql.db.password", "password"); + // System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty(ItemManager.DBUSERNAME, "db2admin"); + // System.setProperty(ItemManager.DBPASSWORD, "password"); + // System.setProperty(LogUtils.LOGLEVEL, "INFO"); manager = new ItemManager(); manager.connect(); @@ -68,7 +66,7 @@ public class SupportRemoveDuplicates { long mediaFileId = rs.getLong("mediafileid"); String path = rs.getString("relativepath"); File file = Paths.get(LOWRES_ROOT, path).toFile(); - //ellenorizni kell, hogy a tobbi szellem e, ha van kozte akkor mar jok vagyunk + //ellenorizni kell, hogy a tobbi szellem e, ha van kozte akkor mar jok vagyunk MediaFile mediaFile = (MediaFile) manager.get(MediaFile.class, mediaFileId); if (masterMediaFile[0] == null) { diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java index 750c58b3..d034aef6 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java @@ -11,7 +11,6 @@ import org.junit.BeforeClass; import org.junit.Test; import user.commons.StoreUri; -import user.commons.logging.LogUtils; import user.commons.remotestore.RemoteStoreProtocol; import user.jobengine.db.IItemManager; import user.jobengine.db.Item; @@ -35,18 +34,17 @@ public class SupportTest { @BeforeClass static public void setUpConnection() { - System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); - System.setProperty("jobengine.octopus.stories.name", "stories180620"); - System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); - - System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty("jobengine.nosql.db.user", "db2admin"); - System.setProperty("jobengine.nosql.db.password", "password"); - System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); - System.setProperty(ItemManager.DBUSERNAME, "db2admin"); - System.setProperty(ItemManager.DBPASSWORD, "password"); - System.setProperty(LogUtils.LOGLEVEL, "INFO"); - // System.setProperty(ItemManager.DBURL, + // System.setProperty("jobengine.octopus.rundowns.name", "rundowns180620"); + // System.setProperty("jobengine.octopus.stories.name", "stories180620"); + // System.setProperty("jobengine.octopus.storyfolders.name", "storyfolders180620"); + // + // System.setProperty("jobengine.nosql.db.url", "jdbc:db2://10.10.1.27:50000/mccache:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty("jobengine.nosql.db.user", "db2admin"); + // System.setProperty("jobengine.nosql.db.password", "password"); + // System.setProperty(ItemManager.DBURL, "jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true;"); + // System.setProperty(ItemManager.DBUSERNAME, "db2admin"); + // System.setProperty(ItemManager.DBPASSWORD, "password"); + // System.setProperty(LogUtils.LOGLEVEL, "INFO"); manager = new ItemManager(); manager.connect(); diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/JobEngineTest.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/JobEngineTest.java index 93557ce3..04b17dc0 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/JobEngineTest.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/JobEngineTest.java @@ -1,11 +1,7 @@ package user.jobengine.server; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import java.util.Map; - -import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JMock; import org.jmock.integration.junit4.JUnit4Mockery; @@ -18,20 +14,21 @@ import org.junit.runner.RunWith; import user.jobengine.server.instructions.CallJobStepInstruction; import user.jobengine.server.instructions.PushToStackInstruction; import user.jobengine.server.steps.IJobStep; -import user.jobengine.server.steps.JobStep; @RunWith(JMock.class) public class JobEngineTest { private static Mockery context = null; - private IJobEngine sut = null; - private IProgram program = null; - private IJobRuntime jobRuntime = null; @BeforeClass public static void setupClass() throws Exception { context = new JUnit4Mockery(); } + private IJobEngine sut = null; + private IProgram program = null; + + private IJobRuntime jobRuntime = null; + @Before public void setup() throws Exception { sut = new JobEngine(); @@ -47,34 +44,22 @@ public class JobEngineTest { } @Test - public void testAddStepExecutor() throws Exception { + public void testGetInputsFromStack() throws Exception { // Fixture - final Class stepClass = IJobStep.class; - final IJobStepExecutor executor = context.mock(IJobStepExecutor.class); - context.checking(new Expectations() { - { - one(executor).getStepClass(); - will(returnValue(stepClass)); - } - }); + jobRuntime = new JobRuntime(sut, program); + final String value1 = "value1"; + final Integer value2 = 2; + jobRuntime.pushToStack(value1); + jobRuntime.pushToStack(value2); + jobRuntime.pushToStack(2); // Exercise - sut.addStepExecutor(executor); + final Object[] inputs = sut.getInputsFromStack(jobRuntime); // Verify - Map executors = sut.getExecutors(); - assertEquals(1, executors.size()); - assertEquals(executor, executors.get(stepClass)); - - // Avoid unexpected shutdown - executors.clear(); - } - - @Test - public void testLoadPrograms() throws Exception { - sut.loadPrograms(); - IProgram program = sut.getProgram("program1"); - assertTrue(program != null); + assertEquals(2, inputs.length); + assertEquals(value1, inputs[0]); + assertEquals(value2, inputs[1]); } @Test(expected = NullPointerException.class) @@ -107,45 +92,4 @@ public class JobEngineTest { assertEquals(VAR2, jobRuntime.popFromStack()); } - @Test - public void testGetInputsFromStack() throws Exception { - // Fixture - jobRuntime = new JobRuntime(sut, program); - final String value1 = "value1"; - final Integer value2 = 2; - jobRuntime.pushToStack(value1); - jobRuntime.pushToStack(value2); - jobRuntime.pushToStack(2); - - // Exercise - final Object[] inputs = sut.getInputsFromStack(jobRuntime); - - // Verify - assertEquals(2, inputs.length); - assertEquals(value1, inputs[0]); - assertEquals(value2, inputs[1]); - } - - @Test - public void testAddToExecutorQueue() throws Exception { - // Fixture - jobRuntime = new JobRuntime(sut, program); - jobRuntime.pushToStack(JobStep.class); - final IJobStepExecutor executor = context.mock(IJobStepExecutor.class); - - context.checking(new Expectations() { - { - ignoring(executor).getStepClass(); - will(returnValue(new JobStep())); - one(executor).submit(with(jobRuntime)); - ignoring(executor).shutdown(); - } - }); - - // Exercise - sut.addStepExecutor(executor); - - // Exercise, Verify - sut.addToExecutorQueue(jobRuntime); - } } diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/JobIntegration.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/JobIntegration.java index 34c84260..920a222d 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/JobIntegration.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/JobIntegration.java @@ -136,7 +136,6 @@ public class JobIntegration { } }; executor = new JobStepExecutor("user.jobengine.server.steps.JobStepSpy", 1); - jobEngine.addStepExecutor(executor); program = new Program(); parameters = new LinkedHashMap(); parameters.put(STEPRUN_IN_SECONDS, 0); diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/JobStepExecutorTest.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/JobStepExecutorTest.java index 6f3441e8..a39ded33 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/JobStepExecutorTest.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/JobStepExecutorTest.java @@ -61,10 +61,6 @@ public class JobStepExecutorTest { }; sut = new JobStepExecutor(IJobStep.class, 1) { - @Override - protected IJobStep createStepObject() throws InstantiationException, IllegalAccessException { - return jobStep; - } }; sut.startup(); diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/JobStepExecutorTest1.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/JobStepExecutorTest1.java index b5aea6dd..06c5120a 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/JobStepExecutorTest1.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/JobStepExecutorTest1.java @@ -60,7 +60,7 @@ public class JobStepExecutorTest1 { final IJobStepExecutor sut = new JobStepExecutor(IJobStep.class, expectedJobCount) { @Override - protected IJobStep createStepObject() throws InstantiationException, IllegalAccessException { + protected IJobStep createStep() throws Exception { return jobStep; } @@ -116,7 +116,7 @@ public class JobStepExecutorTest1 { final IJobStepExecutor sut = new JobStepExecutor(IJobStep.class, 1) { @Override - protected IJobStep createStepObject() throws InstantiationException, IllegalAccessException { + protected IJobStep createStep() throws Exception { return jobStep; } diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/SchedulerConfigTest.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/SchedulerConfigTest.java index 87bbdd73..b7001188 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/SchedulerConfigTest.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/SchedulerConfigTest.java @@ -3,38 +3,32 @@ package user.jobengine.server; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; + import org.junit.Test; import com.ibm.nosql.json.JSONUtil; import com.ibm.nosql.json.api.BasicDBList; import com.ibm.nosql.json.api.BasicDBObject; - public class SchedulerConfigTest { @Test - public void testConfigParsing() throws Exception{ + public void testConfigParsing() throws Exception { String configPath = null; - if(System.getProperty("jobengine.jobscheduling.config") == null){ - System.out.println("There is no config at: " + System.getProperty("jobengine.jobscheduling.config")); - configPath = "C:/Users/robi/workspace/-configuration/scheduledjobs.json"; - }else{ - configPath = System.getProperty("jobengine.jobscheduling.config"); - } + configPath = "C:/Users/robi/workspace/-configuration/scheduledjobs.json"; File schedulingConfigFile = new File(configPath); - if(schedulingConfigFile.exists()){ + if (schedulingConfigFile.exists()) { String jsonConfig = new String(Files.readAllBytes(Paths.get(schedulingConfigFile.getAbsolutePath()))); - BasicDBObject dbo = (BasicDBObject)JSONUtil.jsonToDbObject(jsonConfig); - BasicDBList jobList = (BasicDBList)dbo.get("joblist"); - for(int c=0; c + diff --git a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/mediacube/MediaFileServlet.java b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/mediacube/MediaFileServlet.java index cb3f689e..9edb9c84 100644 --- a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/mediacube/MediaFileServlet.java +++ b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/mediacube/MediaFileServlet.java @@ -7,8 +7,10 @@ import javax.servlet.http.HttpServletRequest; import org.omnifaces.servlet.FileServlet; +import user.jobengine.osgi.rest.ComponentBinder; + public class MediaFileServlet extends FileServlet { - private String root = System.getProperty("jobengine.mediacube.service.proxyroot", "/temp"); + private String root = ComponentBinder.getSystemConfig().value("services.mediacube.proxy-root", "/temp"); private File folder; @Override diff --git a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ComponentBinder.java b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ComponentBinder.java index d6ce4e12..49b7322e 100644 --- a/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ComponentBinder.java +++ b/server/user.jobengine.osgi.services/src/user/jobengine/osgi/rest/ComponentBinder.java @@ -4,6 +4,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.MarkerManager; +import user.commons.configuration.IConfiguration; import user.commons.nexio.INexioAPI; import user.commons.nexio.NexioDispatcher; import user.commons.octopus.IOctopusAPI; @@ -19,8 +20,8 @@ public class ComponentBinder { private static IItemManager itemManager; private static IOctopusAPI octopusAPI; private static INexioAPI nexioAPI; - private static NexioWSServlet nexioServlet; + private static IConfiguration systemConfig; public static IItemManager getItemManager() { if (itemManager == null) @@ -40,18 +41,16 @@ public class ComponentBinder { return nexioAPI; } - // public static NexioWSServlet getNexioWSServlet() { - // if (nexioServlet == null) - // throw new RuntimeException("IOctopusAPI is null"); - // return nexioServlet; - // } - public static IOctopusAPI getOctopusAPI() { if (octopusAPI == null) throw new RuntimeException("IOctopusAPI is null"); return octopusAPI; } + public static IConfiguration getSystemConfig() { + return systemConfig; + } + public synchronized void bindService(Object service) { //logger.info("Ref {}", service.getClass()); @@ -82,6 +81,13 @@ public class ComponentBinder { } } + public synchronized void bindSystemConfiguration(Object service) { + if (service instanceof IConfiguration) { + systemConfig = (IConfiguration) service; + logger.info("IConfiguration service binded"); + } + } + public void start() { NexioDispatcher dispatcher = nexioAPI.getDispatcher(); dispatcher.setNexioChangeListener(nexioServlet); @@ -116,4 +122,5 @@ public class ComponentBinder { return; } } + } diff --git a/server/user.mediacube.gui/OSGI-INF/componentBinder.xml b/server/user.mediacube.gui/OSGI-INF/componentBinder.xml index f0532438..720fd418 100644 --- a/server/user.mediacube.gui/OSGI-INF/componentBinder.xml +++ b/server/user.mediacube.gui/OSGI-INF/componentBinder.xml @@ -4,4 +4,5 @@ + diff --git a/server/user.mediacube.gui/src/user/jobengine/gui/ComponentBinder.java b/server/user.mediacube.gui/src/user/jobengine/gui/ComponentBinder.java index 3848a6eb..dc13abda 100644 --- a/server/user.mediacube.gui/src/user/jobengine/gui/ComponentBinder.java +++ b/server/user.mediacube.gui/src/user/jobengine/gui/ComponentBinder.java @@ -3,6 +3,7 @@ package user.jobengine.gui; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import user.commons.configuration.IConfiguration; import user.commons.nexio.INexioAPI; import user.jobengine.server.IJobEngine; import user.mediacube.metadata.interfaces.IMetadataProviderFactory; @@ -12,6 +13,7 @@ public class ComponentBinder { private static INexioAPI nexioAPI; private static IMetadataProviderFactory metadataProviderFactory; private static IJobEngine jobEngine; + private static IConfiguration systemConfig; public static void bindJobEngine(Object service) { if (service instanceof IJobEngine) { @@ -34,6 +36,10 @@ public class ComponentBinder { return nexioAPI; } + public static IConfiguration getSystemConfig() { + return systemConfig; + } + public synchronized void bindMetadataProviderFactory(Object service) { if (service instanceof IMetadataProviderFactory) { metadataProviderFactory = (IMetadataProviderFactory) service; @@ -48,6 +54,13 @@ public class ComponentBinder { } } + public synchronized void bindSystemConfiguration(Object service) { + if (service instanceof IConfiguration) { + systemConfig = (IConfiguration) service; + logger.info("IConfiguration service binded"); + } + } + public synchronized void unbindJobEngine(Object service) { jobEngine = null; logger.info("IJobEngine service unbinded"); diff --git a/server/user.mediacube.gui/src/user/jobengine/zk/model/MediaCubeConfig.java b/server/user.mediacube.gui/src/user/jobengine/zk/model/MediaCubeConfig.java index d75bf3c9..5844fbfb 100644 --- a/server/user.mediacube.gui/src/user/jobengine/zk/model/MediaCubeConfig.java +++ b/server/user.mediacube.gui/src/user/jobengine/zk/model/MediaCubeConfig.java @@ -8,6 +8,11 @@ public class MediaCubeConfig { private List topTypeFilters; private List bottomTypeFilters; private List targetRestoreFilters; + private boolean maestroDisabled; + private boolean alternateRetrieveSelector; + private boolean disableStatistics; + private boolean disableHelp; + private boolean disableEditor; public MediaCubeAuthentication getAuthentication() { return authentication; @@ -29,6 +34,30 @@ public class MediaCubeConfig { return topTypeFilters; } + public boolean isAlternateRetrieveSelector() { + return alternateRetrieveSelector; + } + + public boolean isDisableEditor() { + return disableEditor; + } + + public boolean isDisableHelp() { + return disableHelp; + } + + public boolean isDisableStatistics() { + return disableStatistics; + } + + public boolean isMaestroDisabled() { + return maestroDisabled; + } + + public void setAlternateRetrieveSelector(boolean alternateRetrieveSelector) { + this.alternateRetrieveSelector = alternateRetrieveSelector; + } + public void setAuthentication(MediaCubeAuthentication authentication) { this.authentication = authentication; } @@ -37,10 +66,26 @@ public class MediaCubeConfig { this.bottomTypeFilters = bottomTypeFilters; } + public void setDisableEditor(boolean disableEditor) { + this.disableEditor = disableEditor; + } + + public void setDisableHelp(boolean disableHelp) { + this.disableHelp = disableHelp; + } + + public void setDisableStatistics(boolean disableStatistics) { + this.disableStatistics = disableStatistics; + } + public void setJobQueuePollInterval(int jobQueuePollInterval) { this.jobQueuePollInterval = jobQueuePollInterval; } + public void setMaestroDisabled(boolean maestroDisabled) { + this.maestroDisabled = maestroDisabled; + } + public void setTargetRestoreFilters(List targetRestoreFilters) { this.targetRestoreFilters = targetRestoreFilters; } diff --git a/server/user.mediacube.gui/src/user/jobengine/zk/model/MenuModel.java b/server/user.mediacube.gui/src/user/jobengine/zk/model/MenuModel.java index 5194ccdf..baf3318f 100644 --- a/server/user.mediacube.gui/src/user/jobengine/zk/model/MenuModel.java +++ b/server/user.mediacube.gui/src/user/jobengine/zk/model/MenuModel.java @@ -64,7 +64,7 @@ public class MenuModel extends BaseModel { } public boolean isMaestroAvailable() { - return "false".equals(System.getProperty("gui.maestro.disable", "false")); + return equals(SessionUtil.getMediaCubeConfig().isMaestroDisabled()); } @Command @@ -101,7 +101,7 @@ public class MenuModel extends BaseModel { @Command public void showBasket() { - boolean useAlternate = System.getProperty("gui.jobs.alternate.selector", "false").equals("true"); + boolean useAlternate = SessionUtil.getMediaCubeConfig().isAlternateRetrieveSelector(); String zul = useAlternate ? PAGES_ALTERNATE_RETRIEVEBATCHSELECTOR_ZUL : PAGES_RETRIEVEBATCHSELECTOR_ZUL; Map arguments = new HashMap(); arguments.put("selectedItems", basketItems); diff --git a/server/user.mediacube.gui/src/user/jobengine/zk/util/SessionUtil.java b/server/user.mediacube.gui/src/user/jobengine/zk/util/SessionUtil.java index d965d331..83898601 100644 --- a/server/user.mediacube.gui/src/user/jobengine/zk/util/SessionUtil.java +++ b/server/user.mediacube.gui/src/user/jobengine/zk/util/SessionUtil.java @@ -27,15 +27,15 @@ import user.commons.nosql.NoSQLUtils; import user.jobengine.gui.ComponentBinder; import user.jobengine.server.IJobChangedListener; import user.jobengine.server.IJobEngine; +import user.jobengine.server.JobEngineConfiguration; import user.jobengine.zk.model.IndexModel; import user.jobengine.zk.model.MaestroConfig; import user.jobengine.zk.model.MediaCubeConfig; public class SessionUtil { - private static final String MEDIACUBE_CONFIG = "mediaCubeConfig"; private static Logger logger = LogManager.getLogger(); - private static final String JOBENGINE_MEDIACUBE_CONFIG = "jobengine.mediacube.config"; - private static final String JOBENGINE_MAESTRO_CONFIG = "jobengine.maestro.config"; + private static final String MEDIACUBE_CONFIG = "mediaCubeConfig"; + private static final String MAESTRO_CONFIG = "maestroConfig"; private static final String SEARCH_FILTER = "searchFilter"; private static final String COLUMN_ORDERS = "columnOrders"; private static final String PAGE_SIZE = "pageSize"; @@ -43,7 +43,6 @@ public class SessionUtil { private static final String USER_NAME = "userName"; private static final String USER_SETTINGS = "userSettings"; private static final String USERPRINCIPAL = "userPrincipal"; - private static final String AUTH_LOCATION = "mediacube.auth.location"; public static final String JOBLISTENER = "joblistener"; public static final String MENUMODEL = "menuModel"; public static final String HISTORY = "history"; @@ -65,7 +64,6 @@ public class SessionUtil { MediaCubeConfig mediaCubeConfig = getMediaCubeConfig(); LocalUserHandler localUserHandler = new LocalUserHandler(account, password, mediaCubeConfig.getAuthentication()); UserPrincipal userPrincipal = localUserHandler.getUserPrincipal(); - // Object nexioStatus = System.getProperty(NEXIO); if (userPrincipal == null) { LDAPUserHandler ldapUserHandler = new LDAPUserHandler(account, password, mediaCubeConfig.getAuthentication()); userPrincipal = ldapUserHandler.getUserPrincipal(); @@ -76,25 +74,25 @@ public class SessionUtil { setAttribute(USERPRINCIPAL, userPrincipal); try { - setAttribute("nexioDisable", Boolean.parseBoolean(System.getProperty(NEXIO_DISABLE))); + setAttribute("nexioDisable", ComponentBinder.getSystemConfig().value("services.nexio.disabled")); } catch (Exception e) { logger.catching(e); } try { - setAttribute("guiStatisticsDisable", Boolean.parseBoolean(System.getProperty(GUI_STAT_DISABLE))); + setAttribute("guiStatisticsDisable", getMediaCubeConfig().isDisableStatistics()); } catch (Exception e) { logger.catching(e); } try { - setAttribute("guiHelpDisable", Boolean.parseBoolean(System.getProperty(GUI_HELP_DISABLE))); + setAttribute("guiHelpDisable", getMediaCubeConfig().isDisableHelp()); } catch (Exception e) { logger.catching(e); } try { - setAttribute("guiEditorDisable", Boolean.parseBoolean(System.getProperty(GUI_EDITOR_DISABLE))); + setAttribute("guiEditorDisable", getMediaCubeConfig().isDisableEditor()); } catch (Exception e) { logger.catching(e); } @@ -150,29 +148,29 @@ public class SessionUtil { public static MaestroConfig getMaestroConfig() { MaestroConfig result = null; try { - //result = (MaestroConfig) getAttribute(JOBENGINE_MAESTRO_CONFIG); + result = (MaestroConfig) getAttribute(MAESTRO_CONFIG); if (result == null) { - result = JSONConfig.read(JOBENGINE_MAESTRO_CONFIG, MaestroConfig.class); - setAttribute(JOBENGINE_MAESTRO_CONFIG, result); + String configFilePath = ComponentBinder.getSystemConfig().getConfig(JobEngineConfiguration.CONF_MAESTRO); + result = JSONConfig.read(configFilePath, MaestroConfig.class); + setAttribute(MAESTRO_CONFIG, result); } } catch (Exception e) { - logger.catching(e); + logger.error(e.getMessage()); } return result; } public static MediaCubeConfig getMediaCubeConfig() { MediaCubeConfig result = null; - - result = (MediaCubeConfig) getAttribute(MEDIACUBE_CONFIG); - - if (result == null) { - try { - result = JSONConfig.read(JOBENGINE_MEDIACUBE_CONFIG, MediaCubeConfig.class); + try { + result = (MediaCubeConfig) getAttribute(MEDIACUBE_CONFIG); + if (result == null) { + String configFilePath = ComponentBinder.getSystemConfig().getConfig(JobEngineConfiguration.CONF_MEDIACUBE); + result = JSONConfig.read(configFilePath, MediaCubeConfig.class); setAttribute(MEDIACUBE_CONFIG, result); - } catch (Exception e) { - logger.error(e.getMessage()); } + } catch (Exception e) { + logger.error(e.getMessage()); } return result; } diff --git a/server/user.mediacube.metadata/META-INF/MANIFEST.MF b/server/user.mediacube.metadata/META-INF/MANIFEST.MF index 6d81603f..c1c8de3b 100644 --- a/server/user.mediacube.metadata/META-INF/MANIFEST.MF +++ b/server/user.mediacube.metadata/META-INF/MANIFEST.MF @@ -10,10 +10,12 @@ Service-Component: OSGI-INF/component.xml DynamicImport-Package: * Require-Bundle: org.mybatis.mybatis;bundle-version="3.5.2", com.microsoft.sqlserver.sqljdbc, - com.ibm.db2.jcc;bundle-version="1.4.0" + com.ibm.db2.jcc;bundle-version="1.4.0", + user.jobengine.osgi.commons;bundle-version="1.0.0" Bundle-ActivationPolicy: lazy Import-Package: com.ibm.nosql.bson, com.ibm.nosql.json.api, + org.apache.logging.log4j;version="2.8.2", org.junit, user.mediacube.metadata.interfaces Bundle-ClassPath: . diff --git a/server/user.mediacube.metadata/OSGI-INF/component.xml b/server/user.mediacube.metadata/OSGI-INF/component.xml index 95870415..63a74a6f 100644 --- a/server/user.mediacube.metadata/OSGI-INF/component.xml +++ b/server/user.mediacube.metadata/OSGI-INF/component.xml @@ -4,4 +4,5 @@ + diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/MetadataProviderFactory.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/MetadataProviderFactory.java index b71f7a12..e2f9629b 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/MetadataProviderFactory.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/MetadataProviderFactory.java @@ -3,6 +3,10 @@ package user.mediacube.metadata; import java.util.HashMap; import java.util.Map; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.configuration.IConfiguration; import user.mediacube.metadata.hsm.HSMMetadataProvider; import user.mediacube.metadata.interfaces.IMetadataProvider; import user.mediacube.metadata.interfaces.IMetadataProviderFactory; @@ -10,14 +14,28 @@ import user.mediacube.metadata.interfaces.MetadataProviderType; import user.mediacube.metadata.planair.PlanAirMetadataProvider; public class MetadataProviderFactory implements IMetadataProviderFactory { + private static Logger logger = LogManager.getLogger(); + + private static IConfiguration systemConfig; + + public static IConfiguration getSystemConfig() { + return systemConfig; + } private Map providers = new HashMap<>(); public MetadataProviderFactory() { - try { - providers.put(MetadataProviderType.PLANAIR, new PlanAirMetadataProvider()); - providers.put(MetadataProviderType.HSM, new HSMMetadataProvider()); - } catch (Exception e) { + } + + public synchronized void bindSystemConfiguration(Object service) { + if (service instanceof IConfiguration) { + systemConfig = (IConfiguration) service; + logger.info("IConfiguration service binded"); + try { + providers.put(MetadataProviderType.PLANAIR, new PlanAirMetadataProvider()); + providers.put(MetadataProviderType.HSM, new HSMMetadataProvider()); + } catch (Exception e) { + } } } @@ -25,4 +43,5 @@ public class MetadataProviderFactory implements IMetadataProviderFactory { public IMetadataProvider getProvider(MetadataProviderType type) { return providers.get(type); } + } diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMMetadataProvider.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMMetadataProvider.java index 34127afa..901cdffb 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMMetadataProvider.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/hsm/HSMMetadataProvider.java @@ -10,15 +10,16 @@ import org.apache.ibatis.session.SqlSession; import com.ibm.nosql.json.api.BasicDBObject; +import user.mediacube.metadata.MetadataProviderFactory; import user.mediacube.metadata.MyBatisMetadataProvider; import user.mediacube.metadata.interfaces.IMetadata; import user.mediacube.metadata.interfaces.IMetadataListOptions; public class HSMMetadataProvider extends MyBatisMetadataProvider { private static final String JDBC_DRIVER = "com.ibm.db2.jcc.DB2Driver"; - private static final String JDBC_URL = System.getProperty("jobengine.hsm.db.url", "jdbc:db2://10.11.1.89:51500/tsmdb1"); - private static final String JDBC_USER = System.getProperty("jobengine.hsm.db.user", "tsminst1"); - private static final String JDBC_PWD = System.getProperty("jobengine.hsm.db.password", "tsminst1"); + private static final String JDBC_URL = MetadataProviderFactory.getSystemConfig().value("datasource.hsm.url"); + private static final String JDBC_USER = MetadataProviderFactory.getSystemConfig().value("datasource.hsm.user"); + private static final String JDBC_PWD = MetadataProviderFactory.getSystemConfig().value("datasource.hsm.password"); public HSMMetadataProvider() throws Exception { super(); diff --git a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataProvider.java b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataProvider.java index 1c3b612f..de6a8198 100644 --- a/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataProvider.java +++ b/server/user.mediacube.metadata/src/user/mediacube/metadata/planair/PlanAirMetadataProvider.java @@ -10,6 +10,7 @@ import org.apache.ibatis.session.SqlSession; import com.ibm.nosql.json.api.BasicDBObject; +import user.mediacube.metadata.MetadataProviderFactory; import user.mediacube.metadata.MyBatisMetadataProvider; import user.mediacube.metadata.hsm.HSMListOptions; import user.mediacube.metadata.interfaces.IMetadata; @@ -17,11 +18,7 @@ import user.mediacube.metadata.interfaces.IMetadataListOptions; import user.mediacube.metadata.interfaces.PlanAirMetadataListOptions; public class PlanAirMetadataProvider extends MyBatisMetadataProvider { - private static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - private static final String JDBC_URL = System.getProperty("jobengine.planair.db.url", "jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis;"); - private static final String JDBC_USER = System.getProperty("jobengine.planair.db.user", "MAM"); - private static final String JDBC_PWD = System.getProperty("jobengine.planair.db.password", "VDani"); - public static final String JDBC_PROCEDURE = System.getProperty("jobengine.planair.db.procedure", "clIFsp_ORI_MAM"); + String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; public PlanAirMetadataProvider() throws Exception { super(); @@ -29,6 +26,9 @@ public class PlanAirMetadataProvider extends MyBatisMetadataProvider { @Override protected DataSource createDataSource() { + String JDBC_URL = MetadataProviderFactory.getSystemConfig().value("datasource.planair.url"); + String JDBC_USER = MetadataProviderFactory.getSystemConfig().value("datasource.planair.user"); + String JDBC_PWD = MetadataProviderFactory.getSystemConfig().value("datasource.planair.password"); return new PooledDataSource(JDBC_DRIVER, JDBC_URL, JDBC_USER, JDBC_PWD); } -- 2.54.0