/* * Copyright 2014-2016 CyberVision, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kaaproject.kaa.server.admin.services; import static org.kaaproject.kaa.server.admin.services.util.Utils.getCurrentUser; import static org.kaaproject.kaa.server.admin.shared.util.Utils.isEmpty; import org.kaaproject.kaa.common.dto.ApplicationDto; import org.kaaproject.kaa.common.dto.KaaAuthorityDto; import org.kaaproject.kaa.common.dto.VersionDto; import org.kaaproject.kaa.common.dto.ctl.CTLSchemaDto; import org.kaaproject.kaa.common.dto.logs.LogAppenderDto; import org.kaaproject.kaa.common.dto.logs.LogSchemaDto; import org.kaaproject.kaa.server.admin.services.util.Utils; import org.kaaproject.kaa.server.admin.shared.plugin.PluginInfoDto; import org.kaaproject.kaa.server.admin.shared.schema.ConverterType; import org.kaaproject.kaa.server.admin.shared.schema.CtlSchemaFormDto; import org.kaaproject.kaa.server.admin.shared.schema.CtlSchemaReferenceDto; import org.kaaproject.kaa.server.admin.shared.schema.LogSchemaViewDto; import org.kaaproject.kaa.server.admin.shared.services.CtlService; import org.kaaproject.kaa.server.admin.shared.services.KaaAdminServiceException; import org.kaaproject.kaa.server.admin.shared.services.LoggingService; import org.kaaproject.kaa.server.common.plugin.PluginType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Service("loggingService") public class LoggingServiceImpl extends AbstractAdminService implements LoggingService { /** * The Constant LOG. */ private static final Logger LOG = LoggerFactory.getLogger(LoggingServiceImpl.class); @Autowired CtlService ctlService; @Override public List<LogSchemaDto> getLogSchemasByApplicationToken(String applicationToken) throws KaaAdminServiceException { return getLogSchemasByApplicationId(checkApplicationToken(applicationToken)); } @Override public List<LogSchemaDto> getLogSchemasByApplicationId(String applicationId) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { checkApplicationId(applicationId); return controlService.getLogSchemasByApplicationId(applicationId); } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogSchemaDto getLogSchema(String logSchemaId) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { LogSchemaDto logSchema = controlService.getLogSchema(logSchemaId); Utils.checkNotNull(logSchema); checkApplicationId(logSchema.getApplicationId()); return logSchema; } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogSchemaDto getLogSchemaByApplicationTokenAndVersion(String applicationToken, int version) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { ApplicationDto storedApplication = controlService.getApplicationByApplicationToken( applicationToken); checkApplication(storedApplication); LogSchemaDto logSchema = controlService.getLogSchemaByApplicationIdAndVersion( storedApplication.getId(), version); Utils.checkNotNull(logSchema); return logSchema; } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogSchemaDto saveLogSchema(LogSchemaDto logSchema) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { if (isEmpty(logSchema.getId())) { logSchema.setCreatedUsername(getCurrentUser().getUsername()); checkApplicationId(logSchema.getApplicationId()); } else { LogSchemaDto storedLogSchema = controlService.getLogSchema(logSchema.getId()); Utils.checkNotNull(storedLogSchema); checkApplicationId(storedLogSchema.getApplicationId()); } return controlService.saveLogSchema(logSchema); } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogSchemaViewDto getLogSchemaView(String logSchemaId) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { LogSchemaDto logSchema = getLogSchema(logSchemaId); CTLSchemaDto ctlSchemaDto = controlService.getCtlSchemaById(logSchema.getCtlSchemaId()); LogSchemaViewDto logSchemaViewDto = new LogSchemaViewDto( logSchema, toCtlSchemaForm(ctlSchemaDto, ConverterType.FORM_AVRO_CONVERTER)); return logSchemaViewDto; } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogSchemaViewDto saveLogSchemaView(LogSchemaViewDto logSchemaView) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { LogSchemaDto logSchemaDto = logSchemaView.getSchema(); String applicationId = logSchemaDto.getApplicationId(); checkApplicationId(applicationId); String ctlSchemaId = logSchemaDto.getCtlSchemaId(); if (isEmpty(ctlSchemaId)) { if (logSchemaView.useExistingCtlSchema()) { CtlSchemaReferenceDto metaInfo = logSchemaView.getExistingMetaInfo(); CTLSchemaDto schema = ctlService.getCtlSchemaByFqnVersionTenantIdAndApplicationId( metaInfo.getMetaInfo().getFqn(), metaInfo.getVersion(), metaInfo.getMetaInfo().getTenantId(), metaInfo.getMetaInfo().getApplicationId()); logSchemaDto.setCtlSchemaId(schema.getId()); } else { CtlSchemaFormDto ctlSchemaForm = ctlService.saveCtlSchemaForm( logSchemaView.getCtlSchemaForm(), ConverterType.FORM_AVRO_CONVERTER); logSchemaDto.setCtlSchemaId(ctlSchemaForm.getId()); } } LogSchemaDto savedLogSchema = saveLogSchema(logSchemaDto); return getLogSchemaView(savedLogSchema.getId()); } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogSchemaViewDto createLogSchemaFormCtlSchema(CtlSchemaFormDto ctlSchemaForm) throws KaaAdminServiceException { LOG.error("createLogSchemaFormCtlSchema [{}]", ctlSchemaForm.getSchema().getDisplayString()); checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { checkApplicationId(ctlSchemaForm.getMetaInfo().getApplicationId()); LogSchemaDto logSchema = new LogSchemaDto(); logSchema.setApplicationId(ctlSchemaForm.getMetaInfo().getApplicationId()); logSchema.setName(ctlSchemaForm.getSchema().getDisplayNameFieldValue()); logSchema.setDescription(ctlSchemaForm.getSchema().getDescriptionFieldValue()); CtlSchemaFormDto savedCtlSchemaForm = ctlService.saveCtlSchemaForm( ctlSchemaForm, ConverterType.FORM_AVRO_CONVERTER); logSchema.setCtlSchemaId(savedCtlSchemaForm.getId()); LogSchemaDto savedLogSchema = saveLogSchema(logSchema); return getLogSchemaView(savedLogSchema.getId()); } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public List<LogAppenderDto> getRestLogAppendersByApplicationToken(String appToken) throws KaaAdminServiceException { return getRestLogAppendersByApplicationId(checkApplicationToken(appToken)); } @Override public List<LogAppenderDto> getRestLogAppendersByApplicationId(String appId) throws KaaAdminServiceException { List<LogAppenderDto> logAppenders = getLogAppendersByApplicationId(appId); for (LogAppenderDto logAppender : logAppenders) { setPluginJsonConfigurationFromRaw(logAppender, PluginType.LOG_APPENDER); } return logAppenders; } @Override public List<LogAppenderDto> getLogAppendersByApplicationId(String appId) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { checkApplicationId(appId); return controlService.getLogAppendersByApplicationId(appId); } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogAppenderDto getRestLogAppender(String appenderId) throws KaaAdminServiceException { LogAppenderDto logAppender = getLogAppender(appenderId); setPluginJsonConfigurationFromRaw(logAppender, PluginType.LOG_APPENDER); return logAppender; } @Override public LogAppenderDto getLogAppender(String appenderId) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { LogAppenderDto logAppender = controlService.getLogAppender(appenderId); Utils.checkNotNull(logAppender); checkApplicationId(logAppender.getApplicationId()); return logAppender; } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogAppenderDto editRestLogAppender(LogAppenderDto logAppender) throws KaaAdminServiceException { setPluginRawConfigurationFromJson(logAppender, PluginType.LOG_APPENDER); LogAppenderDto savedLogAppender = editLogAppender(logAppender); setPluginJsonConfigurationFromRaw(savedLogAppender, PluginType.LOG_APPENDER); return savedLogAppender; } @Override public LogAppenderDto editLogAppender(LogAppenderDto appender) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { if (isEmpty(appender.getId())) { appender.setCreatedUsername(getCurrentUser().getUsername()); checkApplicationId(appender.getApplicationId()); } else { LogAppenderDto storedlLogAppender = controlService.getLogAppender(appender.getId()); Utils.checkNotNull(storedlLogAppender); checkApplicationId(storedlLogAppender.getApplicationId()); } return controlService.editLogAppender(appender); } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public void deleteLogAppender(String appenderId) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); try { if (isEmpty(appenderId)) { throw new IllegalArgumentException("The appenderId parameter is empty."); } LogAppenderDto logAppender = controlService.getLogAppender(appenderId); Utils.checkNotNull(logAppender); checkApplicationId(logAppender.getApplicationId()); controlService.deleteLogAppender(appenderId); } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public List<VersionDto> getLogSchemasVersions(String applicationId) throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); List<VersionDto> logSchemaVersions = Collections.emptyList(); try { checkApplicationId(applicationId); logSchemaVersions = controlService.getLogSchemaVersionsByApplicationId(applicationId); } catch (Exception ex) { throw Utils.handleException(ex); } return logSchemaVersions; } @Override public LogAppenderDto getLogAppenderForm(String appenderId) throws KaaAdminServiceException { LogAppenderDto logAppender = getLogAppender(appenderId); try { setPluginFormConfigurationFromRaw(logAppender, PluginType.LOG_APPENDER); return logAppender; } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public LogAppenderDto editLogAppenderForm(LogAppenderDto logAppender) throws KaaAdminServiceException { try { setPluginRawConfigurationFromForm(logAppender); LogAppenderDto saved = editLogAppender(logAppender); return saved; } catch (Exception ex) { throw Utils.handleException(ex); } } @Override public List<PluginInfoDto> getLogAppenderPluginInfos() throws KaaAdminServiceException { checkAuthority(KaaAuthorityDto.TENANT_DEVELOPER, KaaAuthorityDto.TENANT_USER); return new ArrayList<PluginInfoDto>(pluginsInfo.get(PluginType.LOG_APPENDER).values()); } }