@ApiOperation(value = "Update a canary config") @RequestMapping(value = "/{canaryConfigId:.+}", consumes = "application/json", method = RequestMethod.PUT) public CanaryConfigUpdateResponse updateCanaryConfig(@RequestParam(required = false) final String configurationAccountName, @PathVariable String canaryConfigId, @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.")); canaryConfig.setUpdatedTimestamp(System.currentTimeMillis()); canaryConfig.setUpdatedTimestampIso(Instant.ofEpochMilli(canaryConfig.getUpdatedTimestamp()).toString()); validateNameAndApplicationAttributes(canaryConfig); try { configurationService.loadObject(resolvedConfigurationAccountName, ObjectType.CANARY_CONFIG, canaryConfigId); } catch (Exception e) { throw new IllegalArgumentException("Canary config '" + canaryConfigId + "' does not exist."); } configurationService.storeObject(resolvedConfigurationAccountName, ObjectType.CANARY_CONFIG, canaryConfigId, canaryConfig, canaryConfig.getName() + ".json", true); return CanaryConfigUpdateResponse.builder().canaryConfigId(canaryConfigId).build(); }
@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() + ""; // TODO(duftler): Serialize the canary config within a canary run? 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."); }