import org.springframework.cloud.deployer.spi.app.AppStatus; //导入方法依赖的package包/类
public Release status(Release release) {
AppDeployer appDeployer = this.deployerRepository.findByNameRequired(release.getPlatformName())
.getAppDeployer();
AppDeployerData appDeployerData = this.appDeployerDataRepository
.findByReleaseNameAndReleaseVersion(release.getName(), release.getVersion());
if (appDeployerData == null) {
logger.warn(String.format("Could not get status for release %s-v%s. No app deployer data found.",
release.getName(), release.getVersion()));
return release;
}
List deploymentIds = appDeployerData.getDeploymentIds();
logger.debug("Getting status for {} using deploymentIds {}", release,
StringUtils.collectionToCommaDelimitedString(deploymentIds));
if (!deploymentIds.isEmpty()) {
// mainly track deployed and unknown statuses. for any other
// combination, get more details from instances.
int deployedCount = 0;
int unknownCount = 0;
Map deploymentStateMap = new HashMap<>();
if (appDeployer instanceof MultiStateAppDeployer) {
MultiStateAppDeployer multiStateAppDeployer = (MultiStateAppDeployer) appDeployer;
deploymentStateMap = multiStateAppDeployer.states(StringUtils.toStringArray(deploymentIds));
}
List appStatusList = new ArrayList<>();
for (String deploymentId : deploymentIds) {
AppStatus appStatus = appDeployer.status(deploymentId);
if (appStatus.getState().equals(DeploymentState.failed)) {
// check if we have 'early' status computed via multiStateAppDeployer
if (deploymentStateMap.containsKey(deploymentId)) {
appStatus = AppStatus.of(deploymentId).generalState(deploymentStateMap.get(deploymentId))
.build();
}
}
logger.debug("App Deployer for deploymentId {} gives status {}", deploymentId, appStatus);
appStatusList.add(appStatus);
switch (appStatus.getState()) {
case deployed:
deployedCount++;
break;
case unknown:
unknownCount++;
break;
case deploying:
case undeployed:
case partial:
case failed:
case error:
default:
break;
}
}
release.getInfo().getStatus().setPlatformStatusAsAppStatusList(appStatusList);
}
return release;
}