private String buildMapPendingUpdatesByApplicationKey(AccountCredentials credentials, String accountName) { return "kayenta:" + credentials.getType() + ":" + accountName + PENDING_UPDATES_KEY_SUFFIX; } }
@Override public AccountCredentials save(String name, AccountCredentials credentials) { return accountNameToCredentialsMap.put(credentials.getName(), credentials); } }
public static Set<AccountCredentials> getAllAccountsOfType(AccountCredentials.Type accountType, AccountCredentialsRepository accountCredentialsRepository) { return accountCredentialsRepository .getAll() .stream() .filter(credentials -> credentials.getSupportedTypes().contains(accountType)) .collect(Collectors.toSet()); } }
@Bean @DependsOn({"registerGoogleCredentials"}) MetricsService stackdriverMetricsService(AccountCredentialsRepository accountCredentialsRepository) { StackdriverMetricsService.StackdriverMetricsServiceBuilder stackdriverMetricsServiceBuilder = StackdriverMetricsService.builder(); accountCredentialsRepository .getAll() .stream() .filter(c -> c instanceof GoogleNamedAccountCredentials) .filter(c -> c.getSupportedTypes().contains(AccountCredentials.Type.METRICS_STORE)) .map(c -> c.getName()) .forEach(stackdriverMetricsServiceBuilder::accountName); StackdriverMetricsService stackdriverMetricsService = stackdriverMetricsServiceBuilder.build(); log.info("Populated StackdriverMetricsService with {} Google accounts.", stackdriverMetricsService.getAccountNames().size()); return stackdriverMetricsService; } }
private AtlasNamedAccountCredentials getCredentials(String accountName) { return (AtlasNamedAccountCredentials)accountCredentialsRepository .getOne(accountName) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + accountName + ".")); }
public static String resolveAccountByNameOrType(String accountName, AccountCredentials.Type accountType, AccountCredentialsRepository accountCredentialsRepository) { AccountCredentials credentials; if (StringUtils.hasLength(accountName)) { credentials = accountCredentialsRepository .getOne(accountName) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + accountName + ".")); } else { credentials = accountCredentialsRepository .getOne(accountType) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account of type " + accountType + ".")); } return credentials.getName(); }
@ApiOperation(value = "Retrieve a list of all configured metrics services") @RequestMapping(method = RequestMethod.GET) List<MetricsServiceDetail> list() { Set<AccountCredentials> metricAccountCredentials = CredentialsHelper.getAllAccountsOfType(METRICS_STORE, accountCredentialsRepository); return metricAccountCredentials .stream() .map(account -> MetricsServiceDetail .builder() .name(account.getName()) .type(account.getType()) .locations(account.getLocations()) .recommendedLocations(account.getRecommendedLocations()) .build()) .collect(Collectors.toList()); } }
@Override protected void doHealthCheck(Health.Builder builder) throws Exception { Set<AccountCredentials> configurationStoreAccountCredentialsSet = CredentialsHelper.getAllAccountsOfType(AccountCredentials.Type.CONFIGURATION_STORE, accountCredentialsRepository); int existingByApplicationIndexCount = 0; String accountName = credentials.getName(); String mapByApplicationKey = "kayenta:" + credentials.getType() + ":" + accountName + MAP_BY_APPLICATION_KEY_SUFFIX;
@ApiOperation(value = "Retrieve status and results for a canary run") @RequestMapping(value = "/{canaryExecutionId:.+}", method = RequestMethod.GET) public CanaryExecutionStatusResponse getCanaryResults(@RequestParam(required = false) final String storageAccountName, @PathVariable String canaryExecutionId) { String resolvedStorageAccountName = CredentialsHelper.resolveAccountByNameOrType(storageAccountName, AccountCredentials.Type.OBJECT_STORE, accountCredentialsRepository); Execution pipeline = executionRepository.retrieve(Execution.ExecutionType.PIPELINE, canaryExecutionId); return executionMapper.fromExecution(resolvedStorageAccountName, pipeline); }
@ApiOperation(value = "Retrieve a list of all configured credentials") @RequestMapping(method = RequestMethod.GET) Set<? extends AccountCredentials> list() { return accountCredentialsRepository.getAll(); } }
@Override public Optional<AccountCredentials> getOne(AccountCredentials.Type credentialsType) { return accountNameToCredentialsMap .values() .stream() .filter(a -> a.getSupportedTypes().contains(credentialsType)) .findFirst(); }
@Bean @ConditionalOnMissingBean(AccountCredentialsRepository.class) AccountCredentialsRepository accountCredentialsRepository() { return new MapBackedAccountCredentialsRepository(); }
@Bean @DependsOn({"registerGoogleCredentials"}) public GcsStorageService gcsStorageService(AccountCredentialsRepository accountCredentialsRepository) { GcsStorageService.GcsStorageServiceBuilder gcsStorageServiceBuilder = GcsStorageService.builder(); accountCredentialsRepository .getAll() .stream() .filter(c -> c instanceof GoogleNamedAccountCredentials) .filter(c -> c.getSupportedTypes().contains(AccountCredentials.Type.OBJECT_STORE)) .map(c -> c.getName()) .forEach(gcsStorageServiceBuilder::accountName); GcsStorageService gcsStorageService = gcsStorageServiceBuilder.build(); log.info("Populated GcsStorageService with {} Google accounts.", gcsStorageService.getAccountNames().size()); return gcsStorageService; } }
private MemoryNamedAccountCredentials getCredentials(String accountName, ObjectType objectType) { MemoryNamedAccountCredentials credentials = (MemoryNamedAccountCredentials)accountCredentialsRepository .getOne(accountName) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + accountName + ".")); credentials.getObjects().putIfAbsent(objectType, new ConcurrentHashMap<>()); credentials.getMetadata().putIfAbsent(objectType, new ConcurrentHashMap<>()); return credentials; }
public void startPendingUpdate(AccountCredentials credentials, String updatedTimestamp, CanaryConfigIndexAction action, String correlationId, String canaryConfigSummaryJson) { String accountName = credentials.getName(); String mapPendingUpdatesByApplicationKey = buildMapPendingUpdatesByApplicationKey(credentials, accountName); try (Jedis jedis = jedisPool.getResource()) { jedis.rpush(mapPendingUpdatesByApplicationKey, updatedTimestamp + ":" + action + ":start:" + correlationId + ":" + canaryConfigSummaryJson); } }
@Bean @ConditionalOnMissingBean(AccountCredentialsRepository.class) AccountCredentialsRepository accountCredentialsRepository() { return new MapBackedAccountCredentialsRepository(); }
@Bean @DependsOn({"registerAwsCredentials"}) public S3StorageService s3StorageService(AccountCredentialsRepository accountCredentialsRepository) { AmazonObjectMapperConfigurer.configure(kayentaObjectMapper); kayentaObjectMapper.configure(MapperFeature.AUTO_DETECT_IS_GETTERS, true); S3StorageService.S3StorageServiceBuilder s3StorageServiceBuilder = S3StorageService.builder(); accountCredentialsRepository .getAll() .stream() .filter(c -> c instanceof AwsNamedAccountCredentials) .filter(c -> c.getSupportedTypes().contains(AccountCredentials.Type.OBJECT_STORE)) .map(c -> c.getName()) .forEach(s3StorageServiceBuilder::accountName); S3StorageService s3StorageService = s3StorageServiceBuilder.objectMapper(kayentaObjectMapper).build(); log.info("Populated S3StorageService with {} AWS accounts.", s3StorageService.getAccountNames().size()); return s3StorageService; } }
private String determineProjectId(String metricsAccountName, StackdriverCanaryScope stackdriverCanaryScope) { String projectId = stackdriverCanaryScope.getProject(); if (StringUtils.isEmpty(projectId)) { GoogleNamedAccountCredentials stackdriverCredentials = (GoogleNamedAccountCredentials)accountCredentialsRepository .getOne(metricsAccountName) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + metricsAccountName + ".")); projectId = stackdriverCredentials.getProject(); } return projectId; }
public void removeFailedPendingUpdate(AccountCredentials credentials, String updatedTimestamp, CanaryConfigIndexAction action, String correlationId, String canaryConfigSummaryJson) { String accountName = credentials.getName(); String mapPendingUpdatesByApplicationKey = buildMapPendingUpdatesByApplicationKey(credentials, accountName); try (Jedis jedis = jedisPool.getResource()) { jedis.lrem(mapPendingUpdatesByApplicationKey, 1, updatedTimestamp + ":" + action + ":start:" + correlationId + ":" + canaryConfigSummaryJson); } }
public void finishPendingUpdate(AccountCredentials credentials, CanaryConfigIndexAction action, String correlationId) { String accountName = credentials.getName(); String mapPendingUpdatesByApplicationKey = buildMapPendingUpdatesByApplicationKey(credentials, accountName); try (Jedis jedis = jedisPool.getResource()) { jedis.rpush(mapPendingUpdatesByApplicationKey, getRedisTime() + ":" + action + ":finish:" + correlationId); } }