Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,25 @@ public class RequestUtilization {
private int numTasks = 0;

private long maxMemBytesUsed = 0;
private double maxMemTimestamp = 0;
private long maxMemTimestamp = 0;
private long minMemBytesUsed = Long.MAX_VALUE;
private double minMemTimestamp = 0;
private long minMemTimestamp = 0;
private double maxCpuUsed = 0;
private double maxCpusTimestamp = 0;
private long maxCpusTimestamp = 0;
private double minCpuUsed = Double.MAX_VALUE;
private double minCpusTimestamp = 0;
private long minCpusTimestamp = 0;
private long maxDiskBytesUsed = 0;
private double maxDiskTimestamp = 0;
private long maxDiskTimestamp = 0;
private long minDiskBytesUsed = Long.MAX_VALUE;
private double minDiskTimestamp = 0;
private long minDiskTimestamp = 0;

private double cpuBurstRating = 0;

private double percentCpuTimeThrottled = 0;
private double maxPercentCpuTimeThrottled = 0;
private double maxCpuThrottledTimestamp = 0;
private long maxCpuThrottledTimestamp = 0;
private double minPercentCpuTimeThrottled = Double.MAX_VALUE;
private double minCpuThrottledTimestamp = 0;
private long minCpuThrottledTimestamp = 0;

@JsonCreator
public RequestUtilization(@JsonProperty("requestId") String requestId,
Expand Down Expand Up @@ -227,74 +227,74 @@ public RequestUtilization setMinPercentCpuTimeThrottled(double minPercentCpuTime
return this;
}

public double getMaxMemTimestamp() {
public long getMaxMemTimestamp() {
return maxMemTimestamp;
}

public RequestUtilization setMaxMemTimestamp(double maxMemTimestamp) {
public RequestUtilization setMaxMemTimestamp(long maxMemTimestamp) {
this.maxMemTimestamp = maxMemTimestamp;
return this;
}

public double getMinMemTimestamp() {
public long getMinMemTimestamp() {
return minMemTimestamp;
}

public RequestUtilization setMinMemTimestamp(double minMemTimestamp) {
public RequestUtilization setMinMemTimestamp(long minMemTimestamp) {
this.minMemTimestamp = minMemTimestamp;
return this;
}

public double getMaxCpusTimestamp() {
public long getMaxCpusTimestamp() {
return maxCpusTimestamp;
}

public RequestUtilization setMaxCpusTimestamp(double maxCpusTimestamp) {
public RequestUtilization setMaxCpusTimestamp(long maxCpusTimestamp) {
this.maxCpusTimestamp = maxCpusTimestamp;
return this;
}

public double getMinCpusTimestamp() {
public long getMinCpusTimestamp() {
return minCpusTimestamp;
}

public RequestUtilization setMinCpusTimestamp(double minCpusTimestamp) {
public RequestUtilization setMinCpusTimestamp(long minCpusTimestamp) {
this.minCpusTimestamp = minCpusTimestamp;
return this;
}

public double getMaxDiskTimestamp() {
public long getMaxDiskTimestamp() {
return maxDiskTimestamp;
}

public RequestUtilization setMaxDiskTimestamp(double maxDiskTimestamp) {
public RequestUtilization setMaxDiskTimestamp(long maxDiskTimestamp) {
this.maxDiskTimestamp = maxDiskTimestamp;
return this;
}

public double getMinDiskTimestamp() {
public long getMinDiskTimestamp() {
return minDiskTimestamp;
}

public RequestUtilization setMinDiskTimestamp(double minDiskTimestamp) {
public RequestUtilization setMinDiskTimestamp(long minDiskTimestamp) {
this.minDiskTimestamp = minDiskTimestamp;
return this;
}

public double getMaxCpuThrottledTimestamp() {
public long getMaxCpuThrottledTimestamp() {
return maxCpuThrottledTimestamp;
}

public RequestUtilization setMaxCpuThrottledTimestamp(double maxCpuThrottledTimestamp) {
public RequestUtilization setMaxCpuThrottledTimestamp(long maxCpuThrottledTimestamp) {
this.maxCpuThrottledTimestamp = maxCpuThrottledTimestamp;
return this;
}

public double getMinCpuThrottledTimestamp() {
public long getMinCpuThrottledTimestamp() {
return minCpuThrottledTimestamp;
}

public RequestUtilization setMinCpuThrottledTimestamp(double minCpuThrottledTimestamp) {
public RequestUtilization setMinCpuThrottledTimestamp(long minCpuThrottledTimestamp) {
this.minCpuThrottledTimestamp = minCpuThrottledTimestamp;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
public class SingularityTaskUsage {

private final long memoryTotalBytes;
private final double timestamp; // seconds
private final long timestamp; // epoch millis
private final double cpuSeconds;
private final long diskTotalBytes;
private final long cpusNrPeriods;
Expand All @@ -18,7 +18,7 @@ public class SingularityTaskUsage {

@JsonCreator
public SingularityTaskUsage(@JsonProperty("memoryTotalBytes") long memoryTotalBytes,
@JsonProperty("timestamp") double timestamp,
@JsonProperty("timestamp") long timestamp,
@JsonProperty("cpuSeconds") double cpuSeconds,
@JsonProperty("diskTotalBytes") long diskTotalBytes,
@JsonProperty("cpusNrPeriods") long cpusNrPeriods,
Expand All @@ -38,8 +38,8 @@ public long getMemoryTotalBytes() {
return memoryTotalBytes;
}

@Schema(description = "Timestamp this usage was recorded (epoch seconds)")
public double getTimestamp() {
@Schema(description = "Timestamp this usage was recorded (epoch millis)")
public long getTimestamp() {
return timestamp;
}

Expand All @@ -53,14 +53,17 @@ public long getDiskTotalBytes() {
return diskTotalBytes;
}

@Schema(description = "Number of cpu periods used by this task (from cgroups)")
public long getCpusNrPeriods() {
return cpusNrPeriods;
}

@Schema(description = "Number of cpu periods throttled for this task (from cgroups)")
public long getCpusNrThrottled() {
return cpusNrThrottled;
}

@Schema(description = "Total cpu time throttled for this task(from cgroups)")
public double getCpusThrottledTimeSecs() {
return cpusThrottledTimeSecs;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void configure(Binder binder) {
binder.install(new MetricsInstrumentationModule(getBootstrap().getMetricRegistry()));

binder.install(new SingularityMainModule(getConfiguration()));
binder.install(new SingularityDataModule());
binder.install(new SingularityDataModule(getConfiguration()));
binder.install(new SingularitySchedulerModule());
binder.install(new SingularityResourceModule(getConfiguration().getUiConfiguration()));
binder.install(new SingularityTranscoderModule());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,17 @@
import com.hubspot.singularity.SingularityDeploy;
import com.hubspot.singularity.SingularityTask;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.data.usage.UsageManager;
import com.hubspot.singularity.helpers.RequestHelper;

public class SingularityDataModule extends AbstractModule {

private final SingularityConfiguration configuration;

public SingularityDataModule(final SingularityConfiguration configuration) {
this.configuration = configuration;
}

@Override
protected void configure() {
bind(RequestHelper.class).in(Scopes.SINGLETON);
Expand All @@ -29,6 +36,7 @@ protected void configure() {
bind(SingularityValidator.class).in(Scopes.SINGLETON);
bind(UserManager.class).in(Scopes.SINGLETON);
bind(UsageManager.class).in(Scopes.SINGLETON);

bind(WebhookManager.class).in(Scopes.SINGLETON);

bind(NotificationsManager.class).in(Scopes.SINGLETON);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.hubspot.singularity.MachineState;
import com.hubspot.singularity.SingularityMachineStateHistoryUpdate;
import com.hubspot.singularity.SingularitySlave;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.data.transcoders.Transcoder;
import com.hubspot.singularity.data.usage.UsageManager;
import com.hubspot.singularity.expiring.SingularityExpiringMachineState;
import com.hubspot.singularity.scheduler.SingularityLeaderCache;

Expand All @@ -23,6 +25,7 @@ public class SlaveManager extends AbstractMachineManager<SingularitySlave> {

private static final String SLAVE_ROOT = "/slaves";
private final SingularityLeaderCache leaderCache;
private final UsageManager usageManager;

@Inject
public SlaveManager(CuratorFramework curator,
Expand All @@ -31,9 +34,11 @@ public SlaveManager(CuratorFramework curator,
Transcoder<SingularitySlave> slaveTranscoder,
Transcoder<SingularityMachineStateHistoryUpdate> stateHistoryTranscoder,
Transcoder<SingularityExpiringMachineState> expiringMachineStateTranscoder,
SingularityLeaderCache leaderCache) {
SingularityLeaderCache leaderCache,
UsageManager usageManager) {
super(curator, configuration, metricRegistry, slaveTranscoder, stateHistoryTranscoder, expiringMachineStateTranscoder);
this.leaderCache = leaderCache;
this.usageManager = usageManager;
}

@Override
Expand Down Expand Up @@ -79,4 +84,12 @@ public void deleteFromLeaderCache(String slaveId) {
LOG.info("Asked to remove slave from leader cache when not active");
}
}

@Override
public StateChangeResult changeState(SingularitySlave singularitySlave, MachineState newState, Optional<String> message, Optional<String> user) {
if (newState == MachineState.DEAD) {
usageManager.deleteSlaveUsage(singularitySlave.getId());
}
return super.changeState(singularitySlave, newState, message, user);
}
}
Loading