private static void validateNameAndApplicationAttributes(@RequestBody CanaryConfig canaryConfig) { if (StringUtils.isEmpty(canaryConfig.getName())) { throw new IllegalArgumentException("Canary config must specify a name."); } else if (canaryConfig.getApplications() == null || canaryConfig.getApplications().size() == 0) { throw new IllegalArgumentException("Canary config must specify at least one application."); } String canaryConfigName = canaryConfig.getName(); if (!canaryConfigNamePattern.matcher(canaryConfigName).matches()) { throw new IllegalArgumentException("Canary config cannot be named '" + canaryConfigName + "'. Names must contain only letters, numbers, dashes (-) and underscores (_)."); } }
private void checkForDuplicateCanaryConfig(String accountName, ObjectType objectType, CanaryConfig canaryConfig, String canaryConfigId) { String canaryConfigName = canaryConfig.getName(); List<String> applications = canaryConfig.getApplications(); List<Map<String, Object>> canaryConfigSummaries = listObjectKeys(accountName, objectType, applications, false); Map<String, Object> existingCanaryConfigSummary = canaryConfigSummaries .stream() .filter(it -> it.get("name").equals(canaryConfigName)) .findFirst() .orElse(null); // We want to avoid creating a naming collision due to the renaming of an existing canary config. if (existingCanaryConfigSummary != null && !existingCanaryConfigSummary.get("id").equals(canaryConfigId)) { throw new IllegalArgumentException("Canary config with name '" + canaryConfigName + "' already exists in the scope of applications " + applications + "."); } }
private void checkForDuplicateCanaryConfig(CanaryConfig canaryConfig, String canaryConfigId, AwsNamedAccountCredentials credentials) { String canaryConfigName = canaryConfig.getName(); List<String> applications = canaryConfig.getApplications(); String existingCanaryConfigId = canaryConfigIndex.getIdFromName(credentials, canaryConfigName, applications); // We want to avoid creating a naming collision due to the renaming of an existing canary config. if (!StringUtils.isEmpty(existingCanaryConfigId) && !existingCanaryConfigId.equals(canaryConfigId)) { throw new IllegalArgumentException("Canary config with name '" + canaryConfigName + "' already exists in the scope of applications " + applications + "."); } }
private void checkForDuplicateCanaryConfig(CanaryConfig canaryConfig, String canaryConfigId, ConfigBinNamedAccountCredentials credentials) { String canaryConfigName = canaryConfig.getName(); List<String> applications = canaryConfig.getApplications(); String existingCanaryConfigId = canaryConfigIndex.getIdFromName(credentials, canaryConfigName, applications); // We want to avoid creating a naming collision due to the renaming of an existing canary config. if (!StringUtils.isEmpty(existingCanaryConfigId) && !existingCanaryConfigId.equals(canaryConfigId)) { throw new IllegalArgumentException("Canary config with name '" + canaryConfigName + "' already exists in the scope of applications " + applications + "."); } }
private void checkForDuplicateCanaryConfig(CanaryConfig canaryConfig, String canaryConfigId, GoogleNamedAccountCredentials credentials) { String canaryConfigName = canaryConfig.getName(); List<String> applications = canaryConfig.getApplications(); String existingCanaryConfigId = canaryConfigIndex.getIdFromName(credentials, canaryConfigName, applications); // We want to avoid creating a naming collision due to the renaming of an existing canary config. if (!StringUtils.isEmpty(existingCanaryConfigId) && !existingCanaryConfigId.equals(canaryConfigId)) { throw new IllegalArgumentException("Canary config with name '" + canaryConfigName + "' already exists in the scope of applications " + applications + "."); } }
@Override public <T> void storeObject(String accountName, ObjectType objectType, String objectKey, T obj, String filename, boolean isAnUpdate) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); long currentTimestamp = System.currentTimeMillis(); Map<String, Object> objectMetadataMap = new HashMap<>(); objectMetadataMap.put("id", objectKey); objectMetadataMap.put("updatedTimestamp", currentTimestamp); objectMetadataMap.put("updatedTimestampIso", Instant.ofEpochMilli(currentTimestamp).toString()); if (objectType == ObjectType.CANARY_CONFIG) { CanaryConfig canaryConfig = (CanaryConfig)obj; checkForDuplicateCanaryConfig(accountName, objectType, canaryConfig, objectKey); objectMetadataMap.put("name", canaryConfig.getName()); objectMetadataMap.put("applications", canaryConfig.getApplications()); } credentials.getObjects().get(objectType).put(objectKey, obj); credentials.getMetadata().get(objectType).put(objectKey, objectMetadataMap); }
@Override public List<Map<String, Object>> listObjectKeys(String accountName, ObjectType objectType, List<String> applications, boolean skipIndex) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); boolean filterOnApplications = applications != null && applications.size() > 0; List<Map<String, Object>> result = new ArrayList<>(); for (Map.Entry<String, Object> entry : credentials.getObjects().get(objectType).entrySet()) { String entryKey = entry.getKey(); if (objectType == ObjectType.CANARY_CONFIG) { if (filterOnApplications) { CanaryConfig canaryConfig = (CanaryConfig)entry.getValue(); if (CanaryConfigIndex.haveCommonElements(applications, canaryConfig.getApplications())) { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } else { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } else { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } return result; } }
List<String> applications = canaryConfig.getApplications();
.put("updatedTimestamp", updatedTimestamp) .put("updatedTimestampIso", Instant.ofEpochMilli(updatedTimestamp).toString()) .put("applications", canaryConfig.getApplications()) .build();
.put("updatedTimestamp", updatedTimestamp) .put("updatedTimestampIso", Instant.ofEpochMilli(updatedTimestamp).toString()) .put("applications", canaryConfig.getApplications()) .build();
.put("updatedTimestamp", updatedTimestamp) .put("updatedTimestampIso", Instant.ofEpochMilli(updatedTimestamp).toString()) .put("applications", canaryConfig.getApplications()) .build();
private void checkForDuplicateCanaryConfig(String accountName, ObjectType objectType, CanaryConfig canaryConfig, String canaryConfigId) { String canaryConfigName = canaryConfig.getName(); List<String> applications = canaryConfig.getApplications(); List<Map<String, Object>> canaryConfigSummaries = listObjectKeys(accountName, objectType, applications, false); Map<String, Object> existingCanaryConfigSummary = canaryConfigSummaries .stream() .filter(it -> it.get("name").equals(canaryConfigName)) .findFirst() .orElse(null); // We want to avoid creating a naming collision due to the renaming of an existing canary config. if (existingCanaryConfigSummary != null && !existingCanaryConfigSummary.get("id").equals(canaryConfigId)) { throw new IllegalArgumentException("Canary config with name '" + canaryConfigName + "' already exists in the scope of applications " + applications + "."); } }
private void checkForDuplicateCanaryConfig(CanaryConfig canaryConfig, String canaryConfigId, AwsNamedAccountCredentials credentials) { String canaryConfigName = canaryConfig.getName(); List<String> applications = canaryConfig.getApplications(); String existingCanaryConfigId = canaryConfigIndex.getIdFromName(credentials, canaryConfigName, applications); // We want to avoid creating a naming collision due to the renaming of an existing canary config. if (!StringUtils.isEmpty(existingCanaryConfigId) && !existingCanaryConfigId.equals(canaryConfigId)) { throw new IllegalArgumentException("Canary config with name '" + canaryConfigName + "' already exists in the scope of applications " + applications + "."); } }
@Override public <T> void storeObject(String accountName, ObjectType objectType, String objectKey, T obj, String filename, boolean isAnUpdate) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); long currentTimestamp = System.currentTimeMillis(); Map<String, Object> objectMetadataMap = new HashMap<>(); objectMetadataMap.put("id", objectKey); objectMetadataMap.put("updatedTimestamp", currentTimestamp); objectMetadataMap.put("updatedTimestampIso", Instant.ofEpochMilli(currentTimestamp).toString()); if (objectType == ObjectType.CANARY_CONFIG) { CanaryConfig canaryConfig = (CanaryConfig)obj; checkForDuplicateCanaryConfig(accountName, objectType, canaryConfig, objectKey); objectMetadataMap.put("name", canaryConfig.getName()); objectMetadataMap.put("applications", canaryConfig.getApplications()); } credentials.getObjects().get(objectType).put(objectKey, obj); credentials.getMetadata().get(objectType).put(objectKey, objectMetadataMap); }
@Override public List<Map<String, Object>> listObjectKeys(String accountName, ObjectType objectType, List<String> applications, boolean skipIndex) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); boolean filterOnApplications = applications != null && applications.size() > 0; List<Map<String, Object>> result = new ArrayList<>(); for (Map.Entry<String, Object> entry : credentials.getObjects().get(objectType).entrySet()) { String entryKey = entry.getKey(); if (objectType == ObjectType.CANARY_CONFIG) { if (filterOnApplications) { CanaryConfig canaryConfig = (CanaryConfig)entry.getValue(); if (CanaryConfigIndex.haveCommonElements(applications, canaryConfig.getApplications())) { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } else { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } else { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } return result; } }
List<String> applications = canaryConfig.getApplications();
.put("updatedTimestamp", updatedTimestamp) .put("updatedTimestampIso", Instant.ofEpochMilli(updatedTimestamp).toString()) .put("applications", canaryConfig.getApplications()) .build();