@ApiOperation(value = "Write a canary config to object storage")
@RequestMapping(consumes = "application/json", method = RequestMethod.POST)
public CanaryConfigUpdateResponse storeCanaryConfig(@RequestParam(required = false) final String configurationAccountName,
@RequestBody CanaryConfig canaryConfig) throws IOException {
String resolvedConfigurationAccountName = CredentialsHelper.resolveAccountByNameOrType(configurationAccountName,
AccountCredentials.Type.CONFIGURATION_STORE,
accountCredentialsRepository);
StorageService configurationService =
storageServiceRepository
.getOne(resolvedConfigurationAccountName)
.orElseThrow(() -> new IllegalArgumentException("No configuration service was configured; unable to write canary config to bucket."));
if (canaryConfig.getCreatedTimestamp() == null) {
canaryConfig.setCreatedTimestamp(System.currentTimeMillis());
}
if (canaryConfig.getUpdatedTimestamp() == null) {
canaryConfig.setUpdatedTimestamp(canaryConfig.getCreatedTimestamp());
}
canaryConfig.setCreatedTimestampIso(Instant.ofEpochMilli(canaryConfig.getCreatedTimestamp()).toString());
canaryConfig.setUpdatedTimestampIso(Instant.ofEpochMilli(canaryConfig.getUpdatedTimestamp()).toString());
String canaryConfigId = UUID.randomUUID() + "";
validateNameAndApplicationAttributes(canaryConfig);
try {
configurationService.loadObject(resolvedConfigurationAccountName, ObjectType.CANARY_CONFIG, canaryConfigId);
} catch (NotFoundException e) {
configurationService.storeObject(resolvedConfigurationAccountName, ObjectType.CANARY_CONFIG, canaryConfigId, canaryConfig, canaryConfig.getName() + ".json", false);
return CanaryConfigUpdateResponse.builder().canaryConfigId(canaryConfigId).build();
}
throw new IllegalArgumentException("Canary config '" + canaryConfigId + "' already exists.");
}