@Override public ApplicationEntity getBySiteIdAndAppType(String siteId, String appType) { Optional<ApplicationEntity> optional = applicationEntityMap.values().stream() .filter((app) -> siteId.equals(app.getSite().getSiteId()) && appType.equals(app.getDescriptor().getType())).findAny(); if (optional.isPresent()) { return optional.get(); } else { return null; } }
@Override public void ensureDefault() { super.ensureDefault(); Preconditions.checkNotNull(this.getSite(), "site is null"); Preconditions.checkNotNull(this.getSite().getSiteId(), "siteId is null"); Preconditions.checkNotNull(this.getDescriptor(), "descriptor is null"); Preconditions.checkNotNull(this.getDescriptor().getType(), "descriptor type is null"); if (this.appId == null) { this.appId = String.format("%s_%s", this.getDescriptor().getType(), this.getSite().getSiteId()).toUpperCase(); } if (this.status == null) { this.status = Status.INITIALIZED; } }
@Override protected void runOneIteration() throws Exception { LOG.info("Updating application status"); try { Collection<ApplicationEntity> applicationEntities = applicationEntityService.findAll(); if (applicationEntities.size() == 0) { LOG.info("No application installed yet"); return; } for (ApplicationEntity applicationEntity : applicationEntities) { if (applicationEntity.getDescriptor().isExecutable()) { updateApplicationEntityStatus(applicationEntity); } } LOG.info("Updated {} application status", applicationEntities.size()); } catch (Exception e) { LOG.error("Failed to update application status", e); } }
private Collection<String> loadSites(String appType) { Set<String> sites = new HashSet<>(); Collection<ApplicationEntity> apps = applicationEntityService.findAll(); for (ApplicationEntity app : apps) { if (app.getDescriptor().getType().equalsIgnoreCase(appType) && app.getStatus().equals(ApplicationEntity.Status.RUNNING)) { sites.add(app.getSite().getSiteId()); } } LOG.info("Detected {} sites where MR_HISTORY_JOB_APP is Running: {}", sites.size(), sites); return sites; }
private void validateDependingApplicationInstalled(ApplicationEntity applicationEntity) { if (applicationEntity.getDescriptor().getDependencies() != null) { for (ApplicationDependency dependency : applicationEntity.getDescriptor().getDependencies()) { if (dependency.isRequired() && applicationEntityService.getBySiteIdAndAppType(applicationEntity.getSite().getSiteId(), dependency.getType()) == null) { throw new IllegalStateException("Required dependency " + dependency.toString() + " of " + applicationEntity.getDescriptor().getType() + " was not installed"); } } } }
@Override public ApplicationEntity create(ApplicationEntity entity) { entity.ensureDefault(); if (getBySiteIdAndAppType(entity.getSite().getSiteId(), entity.getDescriptor().getType()) != null) { throw new IllegalArgumentException("Duplicated appId: " + entity.getAppId()); } List<ApplicationEntity> entities = new ArrayList<>(1); entities.add(entity); try { queryService.insert(insertSql, entities, new ApplicationEntityToRelation()); } catch (SQLException e) { LOGGER.error("Error to insert ApplicationEntity: {}", entity, e); } return entity; } }
@Override public void register(ApplicationEntity appEntity) { if (environment == null) { LOG.warn("Environment is null, can not register"); return; } ApplicationProvider<?> appProvider = applicationProviderService.getApplicationProviderByType(appEntity.getDescriptor().getType()); Optional<HealthCheck> applicationHealthCheck = appProvider.getManagedHealthCheck( ConfigFactory.parseMap(appEntity.getContext()) .withFallback(config) .withFallback(ConfigFactory.parseMap(appEntity.getConfiguration())) ); if (!applicationHealthCheck.isPresent()) { LOG.warn("Application {} does not implement HealthCheck", appEntity.getAppId()); return; } this.environment.healthChecks().register(appEntity.getAppId(), applicationHealthCheck.get()); currentInjector.injectMembers(applicationHealthCheck.get()); synchronized (lock) { if (!appHealthChecks.containsKey(appEntity.getAppId())) { appHealthChecks.put(appEntity.getAppId(), applicationHealthCheck); LOG.info("Successfully register health check for {}", appEntity.getAppId()); } } }
@Override public ApplicationEntity create(ApplicationEntity entity) { entity.ensureDefault(); if (getBySiteIdAndAppType(entity.getSite().getSiteId(), entity.getDescriptor().getType()) != null) { throw new IllegalArgumentException("Duplicated appId: " + entity.getAppId()); } applicationEntityMap.put(entity.getUuid(), entity); return entity; }
@Override public ApplicationEntity.Status getStatus(ApplicationOperations.CheckStatusOperation operation) { try { ApplicationEntity applicationEntity = applicationEntityService.getByUUIDOrAppId(operation.getUuid(), operation.getAppId()); Application application = applicationProviderService.getApplicationProviderByType(applicationEntity.getDescriptor().getType()).getApplication(); Preconditions.checkArgument(application.isExecutable(), "Application is not executable"); ApplicationAction applicationAction = new ApplicationAction(application, applicationEntity, config, alertMetadataService); return applicationAction.getStatus(); } catch (IllegalArgumentException e) { LOGGER.error("application id not exist", e); throw e; } } }
parameterIndex++; if (entity.getDescriptor() != null && StringUtils.isNotBlank(entity.getDescriptor().getType())) { statement.setString(parameterIndex, entity.getDescriptor().getType()); parameterIndex++;
updateSql += "siteid = ?, "; if (entity.getDescriptor() != null && StringUtils.isNotBlank(entity.getDescriptor().getType())) { updateSql += "apptype = ?, ";
private void fillApplicationDesc(List<ApplicationEntity> entities) { for (ApplicationEntity entity : entities) { entity.setDescriptor(applicationProviderService.getApplicationDescByType(entity.getDescriptor().getType())); if (entity.getDescriptor().getStreams() == null) { continue; } List<StreamDesc> streamDescToInstall = entity.getDescriptor().getStreams().stream().map((streamDefinition -> { StreamDefinition copied = streamDefinition.copy(); copied.setSiteId(entity.getSite().getSiteId()); copied.setStreamId(StreamIdConversions.formatSiteStreamId(entity.getSite().getSiteId(), copied.getStreamId())); Config effectiveConfig = ConfigFactory.parseMap(new HashMap<>(entity.getConfiguration())) .withFallback(config).withFallback(ConfigFactory.parseMap(entity.getContext())); ExecutionRuntime runtime = ExecutionRuntimeManager.getInstance().getRuntime( applicationProviderService.getApplicationProviderByType(entity.getDescriptor().getType()).getApplication().getEnvironmentType(), config); StreamSinkConfig streamSinkConfig = runtime.environment() .stream().getSinkConfig(StreamIdConversions.parseStreamTypeId(copied.getSiteId(), copied.getStreamId()), effectiveConfig); StreamDesc streamDesc = new StreamDesc(); streamDesc.setSchema(copied); streamDesc.setSinkConfig(streamSinkConfig); streamDesc.setStreamId(copied.getStreamId()); streamDesc.getSchema().setDataSource(entity.getAppId()); return streamDesc; })).collect(Collectors.toList()); entity.setStreams(streamDescToInstall); } }
@Override public ApplicationEntity start(ApplicationOperations.StartOperation operation) throws ApplicationWrongStatusException { ApplicationEntity appEntity = applicationEntityService.getByUUIDOrAppId(operation.getUuid(), operation.getAppId()); ApplicationProvider<?> appProvider = applicationProviderService.getApplicationProviderByType(appEntity.getDescriptor().getType()); Application application = appProvider.getApplication(); Preconditions.checkArgument(application.isExecutable(), "Application is not executable");
@Override public ApplicationEntity stop(ApplicationOperations.StopOperation operation) throws ApplicationWrongStatusException { ApplicationEntity applicationEntity = applicationEntityService.getByUUIDOrAppId(operation.getUuid(), operation.getAppId()); ApplicationProvider<?> appProvider = applicationProviderService.getApplicationProviderByType(applicationEntity.getDescriptor().getType()); Application application = appProvider.getApplication(); Preconditions.checkArgument(application.isExecutable(), "Application is not executable");
@Override public ApplicationEntity uninstall(ApplicationOperations.UninstallOperation operation) throws ApplicationWrongStatusException { ApplicationEntity appEntity = applicationEntityService.getByUUIDOrAppId(operation.getUuid(), operation.getAppId()); ApplicationProvider<?> appProvider = applicationProviderService.getApplicationProviderByType(appEntity.getDescriptor().getType()); ApplicationAction appAction = new ApplicationAction(appProvider.getApplication(), appEntity, config, alertMetadataService); ApplicationEntity.Status currentStatus = appEntity.getStatus(); try { if (currentStatus == ApplicationEntity.Status.INITIALIZED || currentStatus == ApplicationEntity.Status.STOPPED) { // AfterUninstall Callback appAction.doUninstall(); appProvider.getApplicationListener().ifPresent((listener) -> { currentInjector.injectMembers(listener); listener.init(appEntity); listener.afterUninstall(); }); applicationHealthCheckService.unregister(appEntity); return applicationEntityService.delete(appEntity); } else { throw new ApplicationWrongStatusException("App: " + appEntity.getAppId() + " status is " + currentStatus + ", uninstall operation is not allowed"); } } catch (Throwable throwable) { LOGGER.error(throwable.getMessage(), throwable); throw throwable; } }
ApplicationProvider<?> applicationProvider = applicationProviderService.getApplicationProviderByType(applicationEntity.getDescriptor().getType());
private void processStreams() { if (metadata.getDescriptor().getStreams() == null) { return; List<StreamDesc> streamDescToInstall = metadata.getDescriptor().getStreams().stream().map((streamDefinition -> { StreamDefinition copied = streamDefinition.copy(); copied.setSiteId(metadata.getSite().getSiteId());