git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Mon, 9 Aug 2021 09:17:04 +0000 (09:17 +0000)
committervasary.daniel <TFS\vasary.daniel>
Mon, 9 Aug 2021 09:17:04 +0000 (09:17 +0000)
server/user.jobengine.executors/src/user/jobengine/server/steps/ArchiveRecursive.java

index 6a580e0fec4b64345b9ccf1bd124954195ca4de1..bdef82c0b22d59fc778667003e26f37adcdc1a71 100644 (file)
@@ -10,18 +10,23 @@ import java.nio.file.Paths;
 import java.nio.file.attribute.BasicFileAttributes;\r
 import java.text.SimpleDateFormat;\r
 import java.util.Arrays;\r
+import java.util.HashSet;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.Set;\r
 \r
 import org.apache.commons.io.FilenameUtils;\r
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.logging.log4j.LogManager;\r
 import org.apache.logging.log4j.Logger;\r
+import org.apache.logging.log4j.message.Message;\r
+import org.apache.logging.log4j.message.ParameterizedMessage;\r
 \r
 import com.ibm.nosql.json.api.BasicDBObject;\r
 \r
 import user.commons.JobStatus;\r
 import user.commons.ListUtils;\r
+import user.commons.MediaCubeMarker;\r
 import user.commons.mediatool.MediaInfo;\r
 import user.jobengine.server.IJobEngine;\r
 import user.jobengine.server.IJobRuntime;\r
@@ -47,10 +52,12 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        private static final String KILL_DATE_DAYS = "killDateDays";\r
        private SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");\r
 \r
-       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", "VASAROLT", EscortFiles.STATUSFOLDER, EscortFiles.CONFLICTFOLDER);\r
+       private List<String> skipPathNames = Arrays.asList("!ARCHIVALAS_ALATT", EscortFiles.STATUSFOLDER,\r
+                       EscortFiles.CONFLICTFOLDER);\r
        private int limit;\r
        private int submitted;\r
        private int killDateDays;\r
+       private boolean disableProxy;\r
 \r
        private boolean canReadMediaInfo(Path mediaFilePath) {\r
                boolean result = false;\r
@@ -64,21 +71,32 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                return result;\r
        }\r
 \r
-       private void checkArchiveItem(ArchiveItem archiveItem, Path mediaPath) throws Exception {\r
+       private void checkArchiveItem(ArchiveItem archiveItem) throws Exception {\r
                if (archiveItem == null)\r
-                       throw new Exception(mediaPath + " has no metadata specified.");\r
+                       throw new Exception("No metadata specified.");\r
 \r
                if (StringUtils.isBlank(archiveItem.getItemHouseId()))\r
-                       throw new Exception(mediaPath + " has no Item HouseID specified in metadata.");\r
+                       throw new Exception("No Item HouseID specified in metadata.");\r
 \r
                if (StringUtils.isBlank(archiveItem.getItemTitle()))\r
-                       throw new Exception(mediaPath + " has no Item Title specified in metadata.");\r
+                       throw new Exception("No Item Title specified in metadata.");\r
 \r
                if (StringUtils.isBlank(archiveItem.getMediaHouseId()))\r
-                       throw new Exception(mediaPath + " has no Media HouseID specified in metadata.");\r
+                       throw new Exception("No Media HouseID specified in metadata.");\r
 \r
                if (StringUtils.isBlank(archiveItem.getMediaTitle()))\r
-                       throw new Exception(mediaPath + " has no Media Title specified in metadata.");\r
+                       throw new Exception("No Media Title specified in metadata.");\r
+       }\r
+\r
+       private String archiveItemJSON(ArchiveItem result) {\r
+               BasicDBObject obj = new BasicDBObject();\r
+               obj.put("itemHouseId", result.getItemHouseId());\r
+               obj.put("itemTitle", result.getItemTitle());\r
+               obj.put("mediaHouseId", result.getMediaHouseId());\r
+               obj.put("mediaTitle", result.getMediaTitle());\r
+               obj.put("mediaDescription", result.getMediaDescription());\r
+               obj.put("mediaType", result.getMediaType());\r
+               return obj.toPrettyString("");\r
        }\r
 \r
        private ArchiveItem createArchiveItem(Path filePath) throws Exception {\r
@@ -88,45 +106,55 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                String mediaHouseId = FilenameUtils.removeExtension(fileName);\r
                try {\r
                        result = getPlanAirMetadata(mediaHouseId);\r
-               } catch (Exception e) {\r
 \r
-                       logger.error("PlanAir metadata error", e);\r
-                       //nem latja a drivert pl.\r
+                       if (result != null) {\r
+                               result.setMediaFile(filePath.toString());\r
+                               // 210617 proxy keszites tiltasa\r
+                               result.setDisableProxy(disableProxy);\r
+                       }\r
+\r
+                       logger.info(getSessionMarker(), "PlanAir query done for {}", filePath);\r
+               } catch (Exception e) {\r
+                       logger.error(getSessionMarker(), "PlanAir metadata error", e);\r
+                       // nem latja a drivert pl.\r
                        throw e;\r
                }\r
 \r
-               if (result == null) {\r
-                       result = new ArchiveItem();\r
-                       BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);\r
-                       result.setItemHouseId(df.format(attr.lastModifiedTime().toMillis()));\r
-                       result.setItemTitle(filePath.getParent().toString());\r
-                       result.setMediaHouseId(mediaHouseId);\r
-                       result.setMediaTitle(fileName);\r
-                       //TODO kesobb kivenni\r
-                       //result.setMediaDescription("/OMARCHIVE");\r
-                       result.setMediaType("Generic");\r
-               }\r
+//210616 Ha nincs metaadat, nem archivalunk\r
+//             if (result == null) {\r
+//                     result = new ArchiveItem();\r
+//                     BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class);\r
+//                     result.setItemHouseId(df.format(attr.lastModifiedTime().toMillis()));\r
+//                     result.setItemTitle(filePath.getParent().toString());\r
+//                     result.setMediaHouseId(mediaHouseId);\r
+//                     result.setMediaTitle(fileName);\r
+//                     // TODO kesobb kivenni\r
+//                     // result.setMediaDescription("/OMARCHIVE");\r
+//                     result.setMediaType("Generic");\r
+//                     result.setMediaFile(filePath.toString());\r
+//             }\r
 \r
-               result.setMediaFile(filePath.toString());\r
                return result;\r
        }\r
 \r
        @StepEntry\r
-       public Object[] execute(String sourcePath, int killDateDays, int limit) throws Exception {\r
+       public Object[] execute(String sourcePath, int killDateDays, int limit, boolean disableProxy) throws Exception {\r
                this.killDateDays = killDateDays;\r
                this.limit = limit;\r
+               this.disableProxy = disableProxy;\r
+               logger.info(getSessionMarker(), "Starting in {}", sourcePath);\r
                try {\r
                        if (getJobRuntime().forkPrepare()) {\r
                                Files.walkFileTree(Paths.get(sourcePath), this);\r
                        }\r
                } catch (Exception e) {\r
-                       logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath, e.getMessage());\r
+                       logger.error(getSessionMarker(), "Az '{}' mappa elérése sikertelen. A rendszer hibaüzenete: {}", sourcePath,\r
+                                       e.getMessage());\r
                } finally {\r
                        if (submitted > 0)\r
                                getJobRuntime().forkWaitComplete();\r
                        else\r
                                getJobRuntime().cancelForkPrepare();\r
-\r
                }\r
                return null;\r
        }\r
@@ -140,7 +168,12 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                List<IMetadata> data = null;\r
 \r
                IMetadataProviderFactory factory = getService(IMetadataProviderFactory.class);\r
+               if (factory == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProviderFactory is null");\r
+\r
                IMetadataProvider planairProvider = factory.getProvider(MetadataProviderType.PLANAIR);\r
+               if (planairProvider == null)\r
+                       logger.info(getSessionMarker(), "IMetadataProvider is null");\r
 \r
                ArchiveItem result = null;\r
                data = planairProvider.list(opt);\r
@@ -176,36 +209,7 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                if (getManager().isMediaFileExists(sourceFileName)) {\r
                        EscortFiles.createMediaCatch(mediaPath);\r
                        result = true;\r
-\r
-                       //                      try {\r
-                       //                              Path parent = sourcePath.getParent();\r
-                       //                              Path conflictPath = Paths.get(parent.toString(), CONFLICT);\r
-                       //                              File folder = conflictPath.toFile();\r
-                       //                              if (!folder.exists() || !folder.isDirectory()) {\r
-                       //                                      Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxrwxrwx");\r
-                       //                                      FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);\r
-                       //                                      try {\r
-                       //                                              Files.createDirectories(conflictPath, attr);\r
-                       //                                      } catch (Exception e) {\r
-                       //                                              try {\r
-                       //                                                      Files.createDirectory(conflictPath);\r
-                       //                                              } catch (Exception e1) {\r
-                       //                                                      logger.catching(e);\r
-                       //                                                      throw e;\r
-                       //                                              }\r
-                       //                                      }\r
-                       //                              }\r
-                       //\r
-                       //                              Path conflictFile = Paths.get(conflictPath.toString(), sourceFileName);\r
-                       //                              if (conflictFile.toFile().exists())\r
-                       //                                      conflictFile = Paths.get(conflictPath.toString(), sourceFileName + (new Date()).getTime());\r
-                       //                              Files.move(sourcePath, conflictFile);\r
-                       //                              result = true;\r
-                       //                      } catch (Exception e1) {\r
-                       //                              logger.error(getSessionMarker(), "Hiba az '{}' állomány mappába mozgatásakor. A rendszer üzenete: {}", CONFLICT, e1.getMessage());\r
-                       //                      }\r
                }\r
-\r
                return result;\r
        }\r
 \r
@@ -215,46 +219,71 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
        }\r
 \r
        @Override\r
-       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
+       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes paramBasicFileAttributes)\r
+                       throws IOException {\r
                Path dirName = dir.getFileName();\r
-               logger.info("PreVisit {}", dir);\r
 \r
-               if (skipPathNames.contains(dirName.toString()))\r
+               if (skipPathNames.contains(dirName.toString())) {\r
+                       logger.info(getSessionMarker(), "PreVisit skip {}", dir);\r
                        return FileVisitResult.SKIP_SUBTREE;\r
-               else\r
-                       logger.info("PreVisit {}", dir);\r
+               else\r
+                       logger.info(getSessionMarker(), "PreVisit {}", dir);\r
 \r
                return FileVisitResult.CONTINUE;\r
        }\r
 \r
        private boolean processPathItem(Path mediaPath) throws Exception {\r
-               if (submitted == limit)\r
+               if (limit != 0 && submitted == limit) {\r
+                       logger.info(getSessionMarker(), "Limit reached {}, canceling", limit);\r
+                       return false;\r
+               }\r
+\r
+               String fileName = mediaPath.getFileName().toString();\r
+               if (fileName.startsWith(".") || fileName.endsWith(".nomd"))\r
                        return false;\r
 \r
-               //              if (!"Transfered".equals(mediaPath.getParent().getFileName().toString()))\r
-               //                      return false;\r
+               logger.info(getSessionMarker(), "Processing {}", mediaPath);\r
 \r
-               if (mediaPath.getFileName().toString().startsWith("."))\r
+               File mediaFile = mediaPath.toFile();  \r
+               if (mediaFile.isDirectory()) {\r
+                       //logger.info(getSessionMarker(), "Skipping directory {}", mediaPath);\r
                        return false;\r
+               }\r
 \r
-               File mediaFile = mediaPath.toFile();\r
-               if (mediaFile.isDirectory())\r
+               if (EscortFiles.isMediaCatched(mediaPath)) {\r
+                       //logger.info(getSessionMarker(), "Skipping already catched {}", mediaPath);\r
                        return false;\r
+               }\r
 \r
-               if (EscortFiles.isMediaCatched(mediaPath))\r
+               Path nomdFile = Paths.get(mediaPath.toString() + ".nomd");\r
+\r
+               if (nomdFile.toFile().exists()) {\r
+                       //logger.info(getSessionMarker(), "Skipping nomd file exists {}", nomdFile);\r
                        return false;\r
+               }\r
 \r
-               if (handleArchiveConflict(mediaPath))\r
+               if (handleArchiveConflict(mediaPath)) {\r
+                       logger.info(getSessionMarker(), "Skipping archive db already contains {}", mediaPath);\r
                        return false;\r
+               }\r
 \r
-               if (!canReadMediaInfo(mediaPath))\r
+               if (!canReadMediaInfo(mediaPath)) {\r
+                       logger.info(getSessionMarker(), "Skipping cant read mediainfo {}", mediaPath);\r
                        return false;\r
+               }\r
 \r
                ArchiveItem archiveItem = createArchiveItem(mediaPath);\r
 \r
+               if (archiveItem == null) {\r
+                       Message msg = new ParameterizedMessage("Nincs metaadat!");\r
+                       logger.info(new MediaCubeMarker("vasary@elgekko.net,muszak@mediavivantis.hu",\r
+                                       "Értesítés problémás " + mediaPath.getFileName().toString() + " archiválásról"), msg);\r
+                       Files.createFile(nomdFile);\r
+                       return false;\r
+               }\r
+\r
                try {\r
-                       checkArchiveItem(archiveItem, mediaPath);\r
-                       submitted++;\r
+                       checkArchiveItem(archiveItem);\r
 \r
                        Map<String, Object> parameters = ListUtils.asMap(ARCHIVE_ITEM, archiveItem, KILL_DATE_DAYS, killDateDays);\r
                        IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
@@ -265,9 +294,13 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
                                throw new Exception("Submit returned null runtime");\r
                        runtime.setRelated(mediaPath.toString());\r
                        EscortFiles.createMediaCatch(mediaPath);\r
+                       String metadata = archiveItemJSON(archiveItem);\r
+                       EscortFiles.createMetadata(mediaPath.getParent().toString(), mediaPath.getFileName().toString(), metadata);\r
+                       submitted++;\r
                } catch (Exception e) {\r
-                       String fileName = new File(archiveItem.getMediaFile()).getName();\r
-                       logger.error(getSessionMarker(), "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", fileName, e.getMessage());\r
+                       logger.error(getSessionMarker(),\r
+                                       "Az '{}' állomány archiválási kísérlete sikertelen. A rendszer üzenete: {}", mediaPath,\r
+                                       e.getMessage());\r
                }\r
 \r
                return true;\r
@@ -275,7 +308,7 @@ public class ArchiveRecursive extends JobStep implements FileVisitor<Path> {
 \r
        @Override\r
        public FileVisitResult visitFile(Path filePath, BasicFileAttributes paramBasicFileAttributes) throws IOException {\r
-               //logger.info("Will archived {}", filePath);\r
+               // logger.info(getSessionMarker(), "Will checked {}", filePath);\r
                try {\r
                        processPathItem(filePath);\r
                } catch (Exception e) {\r