Skip to content

Commit

Permalink
extra files to logrotate need their own block due to different file e…
Browse files Browse the repository at this point in the history
…xtensions
  • Loading branch information
tpetr committed Feb 5, 2016
1 parent 5ff15b9 commit 3f3e535
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 26 deletions.
Expand Up @@ -16,7 +16,6 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;
import com.hubspot.mesos.MesosUtils;
import com.hubspot.singularity.executor.models.LogrotateAdditionalFile;
import com.hubspot.singularity.executor.shells.SingularityExecutorShellCommandDescriptor;
import com.hubspot.singularity.runner.base.configuration.BaseRunnerConfiguration;
import com.hubspot.singularity.runner.base.configuration.Configuration;
Expand Down Expand Up @@ -120,7 +119,7 @@ public class SingularityExecutorConfiguration extends BaseRunnerConfiguration {

@NotNull
@JsonProperty
private List<LogrotateAdditionalFile> logrotateAdditionalFiles = Collections.emptyList();
private List<SingularityExecutorLogrotateAdditionalFile> logrotateAdditionalFiles = Collections.emptyList();

/**
* Extra files to backup to S3 besides the service log.
Expand Down Expand Up @@ -230,11 +229,11 @@ public void setShellCommandUserPlaceholder(String shellCommandUserPlaceholder) {
this.shellCommandUserPlaceholder = shellCommandUserPlaceholder;
}

public List<LogrotateAdditionalFile> getLogrotateAdditionalFiles() {
public List<SingularityExecutorLogrotateAdditionalFile> getLogrotateAdditionalFiles() {
return logrotateAdditionalFiles;
}

public void setLogrotateAdditionalFiles(List<LogrotateAdditionalFile> logrotateAdditionalFiles) {
public void setLogrotateAdditionalFiles(List<SingularityExecutorLogrotateAdditionalFile> logrotateAdditionalFiles) {
this.logrotateAdditionalFiles = logrotateAdditionalFiles;
}

Expand Down
@@ -0,0 +1,36 @@
package com.hubspot.singularity.executor.config;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;

public class SingularityExecutorLogrotateAdditionalFile {
private final String filename;
private final Optional<String> extension;
private final Optional<String> dateformat;

public static SingularityExecutorLogrotateAdditionalFile fromString(String value) {
return new SingularityExecutorLogrotateAdditionalFile(value, Optional.<String>absent(), Optional.<String>absent());
}

@JsonCreator
public SingularityExecutorLogrotateAdditionalFile(@JsonProperty("filename") String filename,
@JsonProperty("extension") Optional<String> extension,
@JsonProperty("dateformat") Optional<String> dateformat) {
this.filename = filename;
this.extension = extension;
this.dateformat = dateformat;
}

public String getFilename() {
return filename;
}

public Optional<String> getExtension() {
return extension;
}

public Optional<String> getDateformat() {
return dateformat;
}
}
@@ -1,28 +1,14 @@
package com.hubspot.singularity.executor.models;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

public class LogrotateAdditionalFile {
private final String filename;
private final String extension;
private final String dateformat;

@JsonCreator
public static LogrotateAdditionalFile fromString(String value) {
final int lastPeriodIndex = value.lastIndexOf('.');

// attempt to autodetect file extension
if ((lastPeriodIndex > -1) && !value.substring(lastPeriodIndex + 1).contains("*")) {
return new LogrotateAdditionalFile(value, value.substring(lastPeriodIndex + 1));
} else {
return new LogrotateAdditionalFile(value, null);
}
}

@JsonCreator
public LogrotateAdditionalFile(@JsonProperty("filename") String filename, @JsonProperty("extension") String extension) {
public LogrotateAdditionalFile(String filename, String extension, String dateformat) {
this.filename = filename;
this.extension = extension;
this.dateformat = dateformat;
}

public String getFilename() {
Expand All @@ -33,11 +19,16 @@ public String getExtension() {
return extension;
}

public String getDateformat() {
return dateformat;
}

@Override
public String toString() {
return "LogrotateAdditionalFile[" +
"filename='" + filename + '\'' +
", extension='" + extension + '\'' +
", dateformat='" + dateformat + '\'' +
']';
}
}
Expand Up @@ -3,7 +3,9 @@
import java.util.ArrayList;
import java.util.List;

import com.google.common.base.Optional;
import com.hubspot.singularity.executor.config.SingularityExecutorConfiguration;
import com.hubspot.singularity.executor.config.SingularityExecutorLogrotateAdditionalFile;
import com.hubspot.singularity.executor.task.SingularityExecutorTaskDefinition;

/**
Expand Down Expand Up @@ -45,16 +47,26 @@ public boolean getShouldLogRotateLogFile() {
* @return filenames to rotate.
*/
public List<LogrotateAdditionalFile> getExtrasFiles() {
final List<LogrotateAdditionalFile> original = configuration.getLogrotateAdditionalFiles();
final List<SingularityExecutorLogrotateAdditionalFile> original = configuration.getLogrotateAdditionalFiles();
final List<LogrotateAdditionalFile> transformed = new ArrayList<>(original.size());

for (LogrotateAdditionalFile additionalFile : original) {
transformed.add(new LogrotateAdditionalFile(taskDefinition.getTaskDirectoryPath().resolve(additionalFile.getFilename()).toString(), additionalFile.getExtension()));
for (SingularityExecutorLogrotateAdditionalFile additionalFile : original) {
transformed.add(new LogrotateAdditionalFile(taskDefinition.getTaskDirectoryPath().resolve(additionalFile.getFilename()).toString(), additionalFile.getExtension().or(parseFilenameExtension(additionalFile.getFilename())).orNull(), additionalFile.getDateformat().or(configuration.getLogrotateExtrasDateformat())));
}

return transformed;
}

private Optional<String> parseFilenameExtension(String filename) {
final int lastPeriodIndex = filename.lastIndexOf('.');

if ((lastPeriodIndex > -1) && !filename.substring(lastPeriodIndex + 1).contains("*")) {
return Optional.of(filename.substring(lastPeriodIndex + 1));
} else {
return Optional.absent();
}
}

public String getExtrasDateformat() {
return configuration.getLogrotateExtrasDateformat();
}
Expand Down
5 changes: 3 additions & 2 deletions SingularityExecutor/src/main/resources/logrotate.conf.hbs
Expand Up @@ -16,8 +16,9 @@ notifempty
{{/if}}

{{#if extrasFiles}}
{{#each extrasFiles}}{{{filename}}} {{/each}} {
dateformat {{{ extrasDateformat }}}{{#if extension}}.{{{ extension}}}{{/if}}
{{#each extrasFiles}}{{{filename}}} {
dateformat {{{ dateformat }}}{{#if extension}}.{{{ extension}}}{{/if}}
missingok
}
{{/each}}
{{/if}}

0 comments on commit 3f3e535

Please sign in to comment.