Skip to content
Snippets Groups Projects
Commit 10e7f48e authored by fareed.hussain's avatar fareed.hussain
Browse files

283-c02.1.233-create-function-Adaptation-Component-Container-Enabler-Container...

283-c02.1.233-create-function-Adaptation-Component-Container-Enabler-Container-Cold-Start-Optimizer-11072025
parent fb28b432
No related merge requests found
package com.informationcatalyst.enact.application_controller.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "container")
public class ContainerConfig {
private int defaultMinReplicas = 1;
private long startupThresholdMs = 5000;
private int warmupInstances = 2;
// Getters and Setters
public int getDefaultMinReplicas() {
return defaultMinReplicas;
}
public void setDefaultMinReplicas(int defaultMinReplicas) {
this.defaultMinReplicas = defaultMinReplicas;
}
public long getStartupThresholdMs() {
return startupThresholdMs;
}
public void setStartupThresholdMs(long startupThresholdMs) {
this.startupThresholdMs = startupThresholdMs;
}
public int getWarmupInstances() {
return warmupInstances;
}
public void setWarmupInstances(int warmupInstances) {
this.warmupInstances = warmupInstances;
}
}
package com.informationcatalyst.enact.application_controller.containerEnabler.controllers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import com.informationcatalyst.enact.application_controller.containerEnabler.models.WarmupPlan;
import com.informationcatalyst.enact.application_controller.containerEnabler.services.ContainerColdStartOptimizerService;
@RestController
public class ContainerColdStartOptimizerController {
@Autowired
private ContainerColdStartOptimizerService optimizer;
@PostMapping("/prewarm/{containerId}")
public WarmupPlan prewarm(@PathVariable String containerId) {
return optimizer.preWarmContainer(containerId);
}
}
package com.informationcatalyst.enact.application_controller.containerEnabler.models;
public class StartupTimeReport {
private String containerId;
private long startupTimeMs;
private String status;
public StartupTimeReport(String containerId, long startupTimeMs, String status) {
this.containerId = containerId;
this.startupTimeMs = startupTimeMs;
this.status = status;
}
// Getters
public String getContainerId() {
return containerId;
}
public long getStartupTimeMs() {
return startupTimeMs;
}
public String getStatus() {
return status;
}
}
package com.informationcatalyst.enact.application_controller.containerEnabler.models;
public class WarmupPlan {
private String containerId;
private int instances;
private String status;
public WarmupPlan(String containerId, int instances, String status) {
this.containerId = containerId;
this.instances = instances;
this.status = status;
}
// Getters
public String getContainerId() {
return containerId;
}
public int getInstances() {
return instances;
}
public String getStatus() {
return status;
}
}
\ No newline at end of file
package com.informationcatalyst.enact.application_controller.containerEnabler.services;
import com.informationcatalyst.enact.application_controller.config.ContainerConfig;
import com.informationcatalyst.enact.application_controller.containerEnabler.models.StartupTimeReport;
import com.informationcatalyst.enact.application_controller.containerEnabler.models.WarmupPlan;
import com.informationcatalyst.enact.application_controller.containerEnabler.utils.ContainerManagerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ContainerColdStartOptimizerService {
private final ContainerManagerService containerManager;
private final ContainerConfig config;
@Autowired
public ContainerColdStartOptimizerService(ContainerManagerService containerManager,
ContainerConfig config) {
this.containerManager = containerManager;
this.config = config;
}
public WarmupPlan preWarmContainer(String containerId) {
// Use configured warmup instance count
int instances = config.getWarmupInstances();
containerManager.preWarmContainer(containerId, instances);
return new WarmupPlan(containerId, instances, "SUCCESS");
}
public boolean keepAlive(String containerId, int minReplicas) {
// Validate input
if (minReplicas < 0) {
throw new IllegalArgumentException("minReplicas must be >= 0");
}
// Apply default if not specified
int effectiveMinReplicas = (minReplicas == 0) ? config.getDefaultMinReplicas() : minReplicas;
containerManager.setMinReplicas(containerId, effectiveMinReplicas);
return true;
}
public StartupTimeReport measureStartupImpact(String containerId) {
long startupTime = containerManager.measureStartupTime(containerId);
String status = (startupTime <= config.getStartupThresholdMs()) ? "OPTIMIZED" : "NEEDS_IMPROVEMENT";
return new StartupTimeReport(containerId, startupTime, status);
}
}
package com.informationcatalyst.enact.application_controller.containerEnabler.utils;
import org.springframework.stereotype.Service;
@Service
public class ContainerManagerService {
public void preWarmContainer(String containerId, int instances) {
// Simulate API call to container orchestration platform
System.out.printf("Pre-warming %d instances for container %s%n", instances, containerId);
}
public void setMinReplicas(String containerId, int minReplicas) {
// Simulate updating replica configuration
System.out.printf("Setting min replicas for %s to %d%n", containerId, minReplicas);
}
public long measureStartupTime(String containerId) {
// Simulate startup time measurement (random between 100ms and 3000ms)
return 100 + (long) (Math.random() * 2900);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment