From 9c096dc5956e0ea882a86623d8d665bb05460868 Mon Sep 17 00:00:00 2001 From: elgekko Date: Mon, 11 Sep 2023 14:39:52 +0200 Subject: [PATCH] Implemented CSV logging, before final test --- .gitignore | 2 + mc-intergator/.idea/modules.xml | 8 ++ .../mc-db/target/mc-db-0.0.1-SNAPSHOT.jar | Bin 133526 -> 0 bytes mc-intergator/mc-integrator.iml | 8 ++ mc-intergator/mc-safe-delete/README.md | 34 +++++++ mc-intergator/mc-safe-delete/pom.xml | 2 +- .../safedelete/ArchiveFileStatus.java | 22 ++++- .../safedelete/FileOperations.java | 32 ++++++- .../safedelete/SafeDeleteCommand.java | 86 +++++++++++++----- .../safedelete/SafeDeleteProperties.java | 24 +++-- .../safedelete/logging/MarkerFilter.java | 58 ++++++++++++ .../services/ArchiveStatusService.java | 53 +++++++++++ .../services/StatusFileService.java | 47 ++++++++++ .../verifier/MediaCubeDatabaseService.java | 5 +- .../safedelete/verifier/TSMService.java | 10 +- .../src/main/resources/application.yaml | 18 ++-- .../src/main/resources/logback.xml | 53 ++++++++++- .../mc-safe-delete/start-mc-safe-delete.sh | 17 ++++ .../target/classes/application.yaml | 24 ----- .../mc-safe-delete/target/classes/logback.xml | 5 - .../target/maven-archiver/pom.properties | 3 - .../compile/default-compile/inputFiles.lst | 9 -- 22 files changed, 425 insertions(+), 95 deletions(-) create mode 100644 .gitignore create mode 100644 mc-intergator/.idea/modules.xml delete mode 100644 mc-intergator/mc-db/target/mc-db-0.0.1-SNAPSHOT.jar create mode 100644 mc-intergator/mc-integrator.iml create mode 100644 mc-intergator/mc-safe-delete/README.md create mode 100644 mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/logging/MarkerFilter.java create mode 100644 mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/services/ArchiveStatusService.java create mode 100644 mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/services/StatusFileService.java create mode 100644 mc-intergator/mc-safe-delete/start-mc-safe-delete.sh delete mode 100644 mc-intergator/mc-safe-delete/target/classes/application.yaml delete mode 100644 mc-intergator/mc-safe-delete/target/classes/logback.xml delete mode 100644 mc-intergator/mc-safe-delete/target/maven-archiver/pom.properties delete mode 100644 mc-intergator/mc-safe-delete/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..232ccd1d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +target/ +logs/ diff --git a/mc-intergator/.idea/modules.xml b/mc-intergator/.idea/modules.xml new file mode 100644 index 00000000..14c76e49 --- /dev/null +++ b/mc-intergator/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/mc-intergator/mc-db/target/mc-db-0.0.1-SNAPSHOT.jar b/mc-intergator/mc-db/target/mc-db-0.0.1-SNAPSHOT.jar deleted file mode 100644 index 09991a5f137116956ffbc92f728e9d63aef9dc18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133526 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�RazR&4GZLkYJz>xaLXkiT3kkKfZ<^(@nu^R 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 JT*d+b;D19@>(2lH diff --git a/mc-intergator/mc-integrator.iml b/mc-intergator/mc-integrator.iml new file mode 100644 index 00000000..e0b14e33 --- /dev/null +++ b/mc-intergator/mc-integrator.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/mc-intergator/mc-safe-delete/README.md b/mc-intergator/mc-safe-delete/README.md new file mode 100644 index 00000000..22a06153 --- /dev/null +++ b/mc-intergator/mc-safe-delete/README.md @@ -0,0 +1,34 @@ +A programot az mc-safe-dalete.sh parancsfájllal lehet elindítani. +A parancsfájlban használt kapcsolók, amik a program futását befolyásolják: +-f +Hiánya esetén nincs fizikai fájl törlés. Alkalmazása esetén van ! +-d +A viszgálandó mappa teljes elérési útja. A .STATUS mappát ez alatt keresi. + +A program kilistázza a .STATUS mappa alatt található, .killdate végződésű fájlokat. +A .killdate fájlokból képzett fájlnév megléte azt jelenti a programnak, hogy ezekkel a fájlokkal foglalkozhat törlés +vizsgálat szempontjából. + +Ezután végighalad a bemenetként kapott mappa fájljain, és amennyiben az előző lista tartalmazza a nevet, akkor: + +1. Nulla méretű fájl esetén bejátszó ismétlésről van szó: törli a fájlt és annak státusz fájljait. Ebben az esetben + nincs visszaellenőrzés, mert tényleges fájl archiválás nem történik. +2. Nullától különböző méretű fájl esetén, amennyiben létezik a MediaCube adatbázisban metaadat bejegyzés, + továbbá a TSM-ből a program által visszatöltött fájl mérete és a fájl tartalmából képzett MD5 hash megegyezik: + törli a fájlt és státusz fájljait. + +Időzített indítás az operációs rendszer ütemezőjével oldható meg. +A program addig fut, míg a beállításban engedélyezett óraszám le nem telik, vagy míg el nem fogy a mappa tartalma. +Erről a max-execution-hours beállítás rendelkezik. -1 érték esetén nincs limit, 0 esetén egy fájlt dolgoz fel, 0-nál +nagyobb érték esetén óraszámként értemezi. +Az eltelt idő ellenőrzését minden fájl után vizsgálja, tehát ha lejárat előtt 5 perccel elkezd feldolgozni egy +állományt és közben lejár az idő, akkor a feldolgozás még végigmegy. + +A futási beállításokat az application.yaml fájlból olvassa fel. + +A naplózási beállításokat a logback.xml fájlból olvassa fel. +A program napi bontású emberi olvasásra alkalmas szöveges naplófájlt hoz létre a logs mappában. +A program napi bontású, CSV formátumú naplófájlt hoz létre a kezelt fájl adatok számára a logs mappában. +Minden elindítás során az első bejegyzés a fejléc lesz: +"timestamp;fileName;fileSize;creationTime;lastAccessTime;lastModifiedTime;metadataOnly;metadataExists;tsmFileExists; +fileSizeEquals;hashEquals;canDelete;deleteSuccess;statusCleanupSuccess" \ No newline at end of file diff --git a/mc-intergator/mc-safe-delete/pom.xml b/mc-intergator/mc-safe-delete/pom.xml index 94a98192..ae3c8722 100644 --- a/mc-intergator/mc-safe-delete/pom.xml +++ b/mc-intergator/mc-safe-delete/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 mc-safe-delete - 0.0.1-SNAPSHOT + 0.0.2-SNAPSHOT hu.user.mediacube mc-integrator diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/ArchiveFileStatus.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/ArchiveFileStatus.java index 2666d373..9a19ff4f 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/ArchiveFileStatus.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/ArchiveFileStatus.java @@ -4,12 +4,24 @@ import lombok.Builder; import lombok.Getter; import lombok.Setter; +import java.nio.file.attribute.FileTime; + @Getter @Setter @Builder public class ArchiveFileStatus { - - private String name; + + private String fileName; + + private long fileSize; + + private FileTime creationTime; + + private FileTime lastAccessTime; + + private FileTime lastModifiedTime; + + private boolean isMetadataOnly; private boolean metadataExists; @@ -19,4 +31,10 @@ public class ArchiveFileStatus { private boolean hashEquals; + private boolean canDelete; + + private boolean deleteSuccess; + + private boolean statusCleanupSuccess; + } diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/FileOperations.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/FileOperations.java index 4e089d37..ad5be295 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/FileOperations.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/FileOperations.java @@ -2,21 +2,37 @@ package hu.user.mediacube.integration.safedelete; import lombok.extern.log4j.Log4j2; +import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @Log4j2 public class FileOperations { + public static final String ERROR_FILENAME_PREFIX = "ERROR-"; + public static final String KILLDATE_POSTFIX = ".killdate"; + public static final String STATUS = "/.STATUS"; - static public void silentDelete(Path path) { + static public Path getStatusPath(Path inputPath) { + Path result = null; + if (Files.isDirectory(inputPath)) { + result = Paths.get(inputPath.toAbsolutePath().toString(), STATUS); + } else { + result = Paths.get(inputPath.getParent().toAbsolutePath().toString(), STATUS); + } + return result; + } + + static public boolean silentDelete(Path path) { + boolean result = false; try { Files.delete(path); log.info("File deleted: {}", path); + result = true; } catch (Exception e) { log.catching(e); } - + return result; } static public void silentRename(Path source, String prefix) { @@ -29,4 +45,16 @@ public class FileOperations { log.catching(e); } } + + public static DirectoryStream.Filter filterOnlyFiles() { + return entry -> !Files.isDirectory(entry) && !entry.getFileName().toString().startsWith(ERROR_FILENAME_PREFIX); + } + + public static DirectoryStream.Filter filterKillDateFiles() { + return entry -> !Files.isDirectory(entry) && entry.getFileName().toString().endsWith(KILLDATE_POSTFIX); + } + + public static DirectoryStream.Filter filterRelatedFiles(String originalFileName) { + return entry -> !Files.isDirectory(entry) && entry.getFileName().toString().startsWith(originalFileName); + } } diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteCommand.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteCommand.java index baa96ad2..f625cf21 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteCommand.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteCommand.java @@ -1,5 +1,7 @@ package hu.user.mediacube.integration.safedelete; +import hu.user.mediacube.integration.safedelete.services.ArchiveStatusService; +import hu.user.mediacube.integration.safedelete.services.StatusFileService; import hu.user.mediacube.integration.safedelete.verifier.MediaCubeDatabaseService; import hu.user.mediacube.integration.safedelete.verifier.TSMService; import lombok.extern.log4j.Log4j2; @@ -13,13 +15,14 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; import java.time.Instant; +import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.Set; +import java.util.TimeZone; @Component @Log4j2 public class SafeDeleteCommand { - private static final String ERROR_FILENAME_PREFIX = "ERROR-"; - @Autowired private SafeDeleteProperties safeDeleteProperties; @@ -29,48 +32,83 @@ public class SafeDeleteCommand { @Autowired private TSMService tsmService; - private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); + @Autowired + private ArchiveStatusService archivestatusService; + + @Autowired + private StatusFileService statusFileService; + + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(TimeZone.getDefault().toZoneId()); public void processDirectory(String directory, boolean forceDeleteArchived) throws IOException { + archivestatusService.logHeader(); final Instant start = Instant.now(); log.info("Check directory: {}", directory); log.info("Delete already archived: {}", forceDeleteArchived); Path inputPath = Paths.get(directory); - try (DirectoryStream stream = Files.newDirectoryStream(inputPath)) { + + Set fileNamesWithKillDates = statusFileService.loadFileNamesWithKillDates(inputPath); + + try (DirectoryStream stream = Files.newDirectoryStream(inputPath, FileOperations.filterOnlyFiles())) { for (Path filePath : stream) { - if (Files.isDirectory(filePath) || filePath.getFileName().toString().startsWith(ERROR_FILENAME_PREFIX)) { - continue; + ArchiveFileStatus status = archivestatusService.createStatus(filePath); + + try { + process(filePath, status, fileNamesWithKillDates, forceDeleteArchived); + } catch (Exception e) { + log.error(e.getMessage()); + FileOperations.silentRename(filePath, FileOperations.ERROR_FILENAME_PREFIX + formatter.format(LocalDate.now())); + } finally { + archivestatusService.logStatus(status); } - processInputFile(filePath, forceDeleteArchived); + if (safeDeleteProperties.getMaxExecutionHours() > -1 && safeDeleteProperties.getMaxExecutionHours() <= Duration.between(start, Instant.now()).toHours() ) { - log.info("Reached maximum execution duration"); + log.info("Reached maximum enabled execution duration {} hours(s)", safeDeleteProperties.getMaxExecutionHours()); break; } } } } - private void processInputFile(Path source, boolean forceDeleteArchived) { - ArchiveFileStatus status = ArchiveFileStatus.builder().name(source.getFileName().toString()).build(); - String fileName = source.getFileName().toString(); - - try { - log.info("Check MediaCube metadata for {}", source); - mediaCubeDatabaseService.verify(fileName, status); - - log.info("Check TSM file for {}", source); - tsmService.verify(source, status); - - if (forceDeleteArchived && status.isFileSizeEquals() && status.isHashEquals()) { - FileOperations.silentDelete(source); + private void process(Path filePath, ArchiveFileStatus status, Set fileNamesWithKillDates, boolean forceDeleteArchived) throws Exception { + boolean canDelete = fileNamesWithKillDates.contains(status.getFileName()); + if (canDelete) { + if (status.getFileSize() == 0) { + processEmptyInputFile(filePath, status, forceDeleteArchived); + } else { + processInputFile(filePath, status, forceDeleteArchived); } + } else { + log.info("File {} not processed yet by archive system, .killdate status file is missing", filePath.toString()); + } + } + + private void processEmptyInputFile(Path source, ArchiveFileStatus status, boolean forceDeleteArchived) throws Exception { + status.setMetadataOnly(true); + status.setCanDelete(true); + if (forceDeleteArchived) { + deleteArchivedFileAndStatusFiles(source, status); + } + } - } catch (Exception e) { - log.catching(e); - FileOperations.silentRename(source, ERROR_FILENAME_PREFIX); + private void processInputFile(Path source, ArchiveFileStatus status, boolean forceDeleteArchived) throws Exception { + log.info("Check MediaCube metadata for {}", source); + mediaCubeDatabaseService.verify(source, status); + log.info("Check TSM file for {}", source); + tsmService.verify(source, status); + status.setCanDelete(status.isFileSizeEquals() && status.isHashEquals()); + if (forceDeleteArchived && status.isCanDelete()) { + deleteArchivedFileAndStatusFiles(source, status); } } + + private void deleteArchivedFileAndStatusFiles(Path source, ArchiveFileStatus status) throws IOException { + String fileName = source.getFileName().toString(); + Path statusPath = FileOperations.getStatusPath(source); + status.setStatusCleanupSuccess(statusFileService.cleanupStatusFiles(statusPath, fileName)); + status.setDeleteSuccess(FileOperations.silentDelete(source)); + } } diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteProperties.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteProperties.java index 1d4dfa70..18434919 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteProperties.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteProperties.java @@ -8,22 +8,28 @@ import org.springframework.context.annotation.Configuration; @Configuration @Getter @Setter -@ConfigurationProperties(prefix = "tsm") +@ConfigurationProperties(prefix = "safe-delete") public class SafeDeleteProperties { - private String nodeName; + private int maxExecutionHours; + private Tsm tsm; - private String fsName; + @Getter + @Setter + public static class Tsm { + private String nodeName; - private String hlName; + private String fsName; - private String delimiter; + private String hlName; - private String user; + private String delimiter; - private String password; + private String user; - private int bufferSize; + private String password; + + private int bufferSize; + } - private int maxExecutionHours; } diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/logging/MarkerFilter.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/logging/MarkerFilter.java new file mode 100644 index 00000000..83001520 --- /dev/null +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/logging/MarkerFilter.java @@ -0,0 +1,58 @@ +package hu.user.mediacube.integration.safedelete.logging; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.filter.AbstractMatcherFilter; +import ch.qos.logback.core.spi.FilterReply; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +/** + * @author yoshiori_shoji + */ +public class MarkerFilter extends AbstractMatcherFilter { + + Marker markerToMatch; + + /* + * (non-Javadoc) + * + * @see ch.qos.logback.core.filter.Filter#decide(java.lang.Object) + */ + @Override + public FilterReply decide(ILoggingEvent event) { + if (!isStarted()) { + return FilterReply.NEUTRAL; + } + org.slf4j.Marker marker = event.getMarker(); + if (marker == null) { + return onMismatch; + } + + if (markerToMatch.toString().equals(marker.toString())) { + return onMatch; + } else { + return onMismatch; + } + } + + /** + * The marker to match in the event. + * + * @param markerToMatch + */ + public void setMarker(String markerStr) { + markerToMatch = MarkerManager.getMarker(markerStr); + } + + /* + * (non-Javadoc) + * + * @see ch.qos.logback.core.filter.Filter#start() + */ + @Override + public void start() { + if (this.markerToMatch != null) { + super.start(); + } + } +} \ No newline at end of file diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/services/ArchiveStatusService.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/services/ArchiveStatusService.java new file mode 100644 index 00000000..20dc79a4 --- /dev/null +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/services/ArchiveStatusService.java @@ -0,0 +1,53 @@ +package hu.user.mediacube.integration.safedelete.services; + +import hu.user.mediacube.integration.safedelete.ArchiveFileStatus; +import lombok.extern.log4j.Log4j2; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.BasicFileAttributes; + +@Log4j2 +@Service +public class ArchiveStatusService { + private final Marker CSV_MARKER = MarkerManager.getMarker("CSV_MARKER"); + + public ArchiveFileStatus createStatus(Path filePath) throws IOException { + String fileName = filePath.getFileName().toString(); + long length = filePath.toFile().length(); + BasicFileAttributes attr = Files.readAttributes(filePath, BasicFileAttributes.class); + + return ArchiveFileStatus.builder() + .fileName(fileName) + .fileSize(length) + .creationTime(attr.creationTime()) + .creationTime(attr.lastAccessTime()) + .creationTime(attr.lastModifiedTime()) + .build(); + } + + public void logHeader() { + log.info(CSV_MARKER, "timestamp;fileName;fileSize;creationTime;lastAccessTime;lastModifiedTime;metadataOnly;metadataExists;tsmFileExists;fileSizeEquals;hashEquals;canDelete;deleteSuccess;statusCleanupSuccess"); + } + + public void logStatus(ArchiveFileStatus status) { + log.info(CSV_MARKER, "{};{};{};{};{};{};{};{};{};{};{};{};{}", + status.getFileName(), + status.getFileSize(), + status.getCreationTime(), + status.getLastAccessTime(), + status.getLastModifiedTime(), + status.isMetadataOnly(), + status.isMetadataExists(), + status.isTsmFileExists(), + status.isFileSizeEquals(), + status.isHashEquals(), + status.isCanDelete(), + status.isDeleteSuccess(), + status.isStatusCleanupSuccess()); + } +} diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/services/StatusFileService.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/services/StatusFileService.java new file mode 100644 index 00000000..7235266d --- /dev/null +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/services/StatusFileService.java @@ -0,0 +1,47 @@ +package hu.user.mediacube.integration.safedelete.services; + +import hu.user.mediacube.integration.safedelete.FileOperations; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.Set; + +@Log4j2 +@Service +public class StatusFileService { + + public Set loadFileNamesWithKillDates(Path inputPath) throws IOException { + Set result = new HashSet<>(); + Path statusPath = FileOperations.getStatusPath(inputPath); + if (Files.exists(statusPath) && Files.isDirectory(statusPath)) { + try (DirectoryStream stream = Files.newDirectoryStream(statusPath, FileOperations.filterKillDateFiles())) { + stream.forEach(file -> { + String[] tokens = file.getFileName().toString().split("\\."); + if (tokens.length > 1) { + result.add(tokens[0] + "." + tokens[1]); + } + }); + } + } + return result; + } + + + public boolean cleanupStatusFiles(Path statusPath, String fileName) throws IOException { + boolean[] statusCleanupSuccess = {true}; + try (DirectoryStream stream = Files.newDirectoryStream(statusPath, FileOperations.filterRelatedFiles(fileName))) { + stream.forEach(file -> { + if (!FileOperations.silentDelete(file)) { + statusCleanupSuccess[0] = false; + } + }); + } + return statusCleanupSuccess[0]; + } + +} diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/MediaCubeDatabaseService.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/MediaCubeDatabaseService.java index 1741e18f..545b4c5c 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/MediaCubeDatabaseService.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/MediaCubeDatabaseService.java @@ -7,6 +7,7 @@ import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.nio.file.Path; import java.util.List; @Service @@ -15,8 +16,8 @@ public class MediaCubeDatabaseService { @Autowired MediaCubeRecordMapper mediaCubeRecordMapper; - public void verify(String fileName, ArchiveFileStatus status) throws Exception { - List dbRecords = mediaCubeRecordMapper.getByFileName(fileName); + public void verify(Path source, ArchiveFileStatus status) throws Exception { + List dbRecords = mediaCubeRecordMapper.getByFileName(source.getFileName().toString()); if (dbRecords.size() != 1) { throw new Exception(String.format("Database record count mismatch. Expected 1 found %d", dbRecords.size())); } diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/TSMService.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/TSMService.java index eed9471c..367e149e 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/TSMService.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/TSMService.java @@ -31,12 +31,12 @@ public class TSMService { Path result = null; TSMClient server = null; try { - server = new TSMClient(safeDeleteProperties.getNodeName()); - server.connect(safeDeleteProperties.getUser(), safeDeleteProperties.getPassword()); - server.setBufferSize(safeDeleteProperties.getBufferSize()); + server = new TSMClient(safeDeleteProperties.getTsm().getNodeName()); + server.connect(safeDeleteProperties.getTsm().getUser(), safeDeleteProperties.getTsm().getPassword()); + server.setBufferSize(safeDeleteProperties.getTsm().getBufferSize()); - TSMBackupFileObject backupFileObject = server.getActiveBackupFileObject(safeDeleteProperties.getFsName(), - safeDeleteProperties.getHlName(), safeDeleteProperties.getDelimiter() + source.getFileName().toString()); + TSMBackupFileObject backupFileObject = server.getActiveBackupFileObject(safeDeleteProperties.getTsm().getFsName(), + safeDeleteProperties.getTsm().getHlName(), safeDeleteProperties.getTsm().getDelimiter() + source.getFileName().toString()); if (backupFileObject != null) { result = Paths.get(source.getParent().toAbsolutePath().toString(), source.getFileName().toString() + UUID.randomUUID()); diff --git a/mc-intergator/mc-safe-delete/src/main/resources/application.yaml b/mc-intergator/mc-safe-delete/src/main/resources/application.yaml index 86dbc4a3..56854758 100644 --- a/mc-intergator/mc-safe-delete/src/main/resources/application.yaml +++ b/mc-intergator/mc-safe-delete/src/main/resources/application.yaml @@ -14,11 +14,13 @@ spring: pool-name: pool-mediacube maximum-pool-size: 5 minimum-idle: 1 -tsm: - user: mediacube - password: password - buffer-size: 65536 - delimiter: / - node-name: mc-safe-delete - fs-name: /JOBENGINE - hl-name: /JOBENGINE +safe-delete: + max-execution-hours: 2 + tsm: + user: mediacube + password: password + buffer-size: 65536 + delimiter: / + node-name: mc-safe-delete + fs-name: /JOBENGINE + hl-name: /JOBENGINE diff --git a/mc-intergator/mc-safe-delete/src/main/resources/logback.xml b/mc-intergator/mc-safe-delete/src/main/resources/logback.xml index 01730548..78af0675 100644 --- a/mc-intergator/mc-safe-delete/src/main/resources/logback.xml +++ b/mc-intergator/mc-safe-delete/src/main/resources/logback.xml @@ -1,5 +1,56 @@ - + + + + + + %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable + + + + + + + CSV_MARKER + DENY + ACCEPT + + ${LOGS}/mc-safe-delete.log + + %d %p %C{1.} [%t] %m%n + + + ${LOGS}/archived/mc-safe-delete-%d{yyyy-MM-dd}.log.zip + + + + + + CSV_MARKER + ACCEPT + DENY + + ${LOGS}/mc-safe-delete.csv + + %d{ISO8601};%m%n + + + ${LOGS}/archived/mc-safe-delete-%d{yyyy-MM-dd}.csv.zip + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mc-intergator/mc-safe-delete/start-mc-safe-delete.sh b/mc-intergator/mc-safe-delete/start-mc-safe-delete.sh new file mode 100644 index 00000000..36cda617 --- /dev/null +++ b/mc-intergator/mc-safe-delete/start-mc-safe-delete.sh @@ -0,0 +1,17 @@ +export DSMI_CONFIG=/opt/mediacube/settings/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 PATH=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/bin:$PATH +java \ +-DMC-SAFE-DELETE \ +-Dfile.encoding=UTF-8 \ +-Xms1024m \ +-Xmx2048m \ +-jar mc-safe-delete-0.0.1-SNAPSHOT.jar \ +-d /mnt/ISILON/ARCHIVE/TEST/ \ +-f + diff --git a/mc-intergator/mc-safe-delete/target/classes/application.yaml b/mc-intergator/mc-safe-delete/target/classes/application.yaml deleted file mode 100644 index 86dbc4a3..00000000 --- a/mc-intergator/mc-safe-delete/target/classes/application.yaml +++ /dev/null @@ -1,24 +0,0 @@ -spring: - main: - banner-mode: off - output: - ansi: - enabled: always - datasource: - url: jdbc:db2://10.10.1.27:50000/mc:retrieveMessagesFromServerOnGetMessage=true; - username: db2admin - password: password - driver-class-name: com.ibm.db2.jcc.DB2Driver - type: com.zaxxer.hikari.HikariDataSource - hikari: - pool-name: pool-mediacube - maximum-pool-size: 5 - minimum-idle: 1 -tsm: - user: mediacube - password: password - buffer-size: 65536 - delimiter: / - node-name: mc-safe-delete - fs-name: /JOBENGINE - hl-name: /JOBENGINE diff --git a/mc-intergator/mc-safe-delete/target/classes/logback.xml b/mc-intergator/mc-safe-delete/target/classes/logback.xml deleted file mode 100644 index 01730548..00000000 --- a/mc-intergator/mc-safe-delete/target/classes/logback.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/mc-intergator/mc-safe-delete/target/maven-archiver/pom.properties b/mc-intergator/mc-safe-delete/target/maven-archiver/pom.properties deleted file mode 100644 index 9306887f..00000000 --- a/mc-intergator/mc-safe-delete/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -version=0.0.1-SNAPSHOT -groupId=hu.user.mediacube -artifactId=mc-safe-delete diff --git a/mc-intergator/mc-safe-delete/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/mc-intergator/mc-safe-delete/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index d7a812e5..00000000 --- a/mc-intergator/mc-safe-delete/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1,9 +0,0 @@ -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\SafeDeleteMainEntry.java -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\SafeDeleteProperties.java -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\ArchiveFileStatus.java -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\db\MediaCubeRecord.java -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\db\MediaCubeRecordMapper.java -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\verifier\MediaCubeDatabaseService.java -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\verifier\TSMService.java -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\FileOperations.java -C:\work\user\mediacube\mc-intergator\mc-safe-delete\src\main\java\hu\user\mediacube\integration\safedelete\SafeDeleteCommand.java -- 2.54.0