private void copyLogTail() { if (configuration.getTailLogLinesToSave() <= 0) { return; } final Path tailOfLogPath = taskDefinition.getTaskDirectoryPath().resolve(configuration.getServiceFinishedTailLog()); if (Files.exists(tailOfLogPath)) { log.debug("{} already existed, skipping tail", tailOfLogPath); return; } final List<String> cmd = ImmutableList.of( "tail", "-n", Integer.toString(configuration.getTailLogLinesToSave()), taskDefinition.getServiceLogOut()); try { new SimpleProcessManager(log).runCommand(cmd, Redirect.to(tailOfLogPath.toFile())); } catch (Throwable t) { log.error( "Failed saving tail of log {} to {}", taskDefinition.getServiceLogOut(), configuration.getServiceFinishedTailLog(), t); } }
private void checkArtifactSignature(S3ArtifactSignature s3ArtifactSignature) { final Path artifactPath = Paths.get( s3Configuration.getArtifactCacheDirectory(), s3ArtifactSignature.getArtifactFilename()); final Path artifactSignaturePath = Paths.get(s3Configuration.getArtifactCacheDirectory(), s3ArtifactSignature.getFilename()); if (!Files.exists(artifactPath)) { log.warn("Artifact {} not found for signature {}", artifactPath, s3ArtifactSignature); return; } final List<String> verifyCommand = new ArrayList<>(executorConfiguration.getArtifactSignatureVerificationCommand().size()); for (String arg : executorConfiguration.getArtifactSignatureVerificationCommand()) { verifyCommand.add( arg.replace("{artifactPath}", artifactPath.toString()) .replace("{artifactSignaturePath}", artifactSignaturePath.toString())); } try { final ProcessBuilder processBuilder = new ProcessBuilder(verifyCommand); processBuilder.directory(taskDefinition.getTaskDirectoryPath().toFile()); processBuilder.redirectError(taskDefinition.getSignatureVerifyOutPath().toFile()); processBuilder.redirectOutput(taskDefinition.getSignatureVerifyOutPath().toFile()); final Process p = processBuilder.start(); p.waitFor(); // TODO: add some sort of timeout? if (p.exitValue() != 0) { log.error( "Failed to validate signature {} for artifact {}", s3ArtifactSignature.getFilename(), s3ArtifactSignature.getArtifactFilename()); if (executorConfiguration.isFailTaskOnInvalidArtifactSignature()) { throw new RuntimeException( String.format("Failed to validate signature for artifact %s", artifactPath)); } } else { log.info( "Signature {} for artifact {} is valid!", s3ArtifactSignature.getFilename(), s3ArtifactSignature.getArtifactFilename()); } } catch (InterruptedException | IOException e) { throw Throwables.propagate(e); } }