use of io.fabric8.api.AutoScaleProfileStatus in project fabric8 by jboss-fuse.
the class AutoScaleStatusListAction method printStatus.
protected void printStatus(PrintStream out, AutoScaleStatus status) {
TablePrinter table = new TablePrinter();
table.columns("auto scale profile", "status", "message");
List<AutoScaleProfileStatus> profileStatuses = status.getProfileStatuses();
for (AutoScaleProfileStatus profile : profileStatuses) {
table.row(getStringOrBlank(profile.getProfile()), getStringOrBlank(profile.getStatus()), getStringOrBlank(profile.getMessage()));
}
table.print();
}
use of io.fabric8.api.AutoScaleProfileStatus in project fabric8 by jboss-fuse.
the class AutoScaleController method stopContainers.
protected void stopContainers(List<Container> containers, ContainerAutoScaler autoScaler, FabricRequirements requirements, ProfileRequirements profileRequirement, AutoScaleStatus status, int delta) {
final String profile = profileRequirement.getProfile();
AutoScaleProfileStatus profileStatus = status.profileStatus(profile);
// TODO sort the containers using some kind of requirements sorting order
List<Container> sorted = new ArrayList<>(containers);
// lets stop the ones at the end of the list by default
Collections.reverse(sorted);
List<String> stoppingContainerIds = new ArrayList<>();
for (int i = 0; i < delta; i++) {
if (i >= sorted.size()) {
break;
}
Container container = sorted.get(i);
stoppingContainerIds.add(container.getId());
profileStatus.stoppingContainers(stoppingContainerIds);
container.stop(true);
}
}
use of io.fabric8.api.AutoScaleProfileStatus in project fabric8 by jboss-fuse.
the class AutoScaleController method autoScaleProfile.
private void autoScaleProfile(FabricService service, final ContainerAutoScaler autoScaler, FabricRequirements requirements, ProfileRequirements profileRequirement, AutoScaleStatus status) {
final String profile = profileRequirement.getProfile();
Integer minimumInstances = profileRequirement.getMinimumInstances();
Integer maximumInstances = profileRequirement.getMaximumInstances();
String requirementsVersion = requirements.getVersion();
final String version = Strings.isNotBlank(requirementsVersion) ? requirementsVersion : service.getDefaultVersionId();
if (maximumInstances != null || minimumInstances != null) {
if (maximumInstances != null) {
List<Container> containers = Containers.aliveAndSuccessfulContainersForProfile(version, profile, service);
int count = containers.size();
int delta = count - maximumInstances;
if (delta > 0) {
stopContainers(containers, autoScaler, requirements, profileRequirement, status, delta);
}
}
if (minimumInstances != null) {
// lets check if we need to provision more
List<Container> containers = Containers.aliveOrPendingContainersForProfile(version, profile, service);
int count = containers.size();
int delta = minimumInstances - count;
try {
AutoScaleProfileStatus profileStatus = status.profileStatus(profile);
if (delta < 0) {
FabricService fs = this.fabricService.get();
if (fs != null) {
profileStatus.destroyingContainer();
for (int i = delta; i < 0; i++) {
while (!containers.isEmpty()) {
Container container = containers.remove(0);
if (container.getId().startsWith("auto_")) {
fs.destroyContainer(container);
break;
}
}
}
}
} else if (delta > 0) {
if (AutoScalers.requirementsSatisfied(service, version, requirements, profileRequirement, status)) {
profileStatus.creatingContainer();
final AutoScaleRequest command = new AutoScaleRequest(service, version, profile, delta, requirements, profileRequirement, status);
new Thread("Creating container for " + command.getProfile()) {
@Override
public void run() {
try {
autoScaler.createContainers(command);
} catch (Exception e) {
LOGGER.error("Failed to create container of profile: " + profile + ". Caught: " + e, e);
}
}
}.start();
}
} else {
profileStatus.provisioned();
}
} catch (Exception e) {
LOGGER.error("Failed to auto-scale " + profile + ". Caught: " + e, e);
}
}
}
}
Aggregations