/*
* 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.operations.service.logs;
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.common.dao.CtlService;
import org.kaaproject.kaa.server.common.dao.LogAppendersService;
import org.kaaproject.kaa.server.common.dao.LogSchemaService;
import org.kaaproject.kaa.server.common.log.shared.appender.LogAppender;
import org.kaaproject.kaa.server.common.log.shared.appender.LogSchema;
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.List;
@Service
public class DefaultLogAppenderService implements LogAppenderService {
/**
* The Constant LOG.
*/
private static final Logger LOG = LoggerFactory.getLogger(DefaultLogAppenderService.class);
@Autowired
private LogSchemaService logSchemaService;
@Autowired
private LogAppenderBuilder logAppenderResolver;
@Autowired
private CtlService ctlService;
@Autowired
private LogAppendersService logAppendersService;
@Override
public List<LogAppender> getApplicationAppenders(String applicationId) {
LOG.debug("Get log appenders by application id [{}]", applicationId);
List<LogAppenderDto> appenders = logAppendersService.findAllAppendersByAppId(applicationId);
LOG.debug("Found all appenders [{}] for application.", appenders);
List<LogAppender> logAppenders = new ArrayList<>(appenders.size());
for (LogAppenderDto appender : appenders) {
try {
LogAppender logAppender = logAppenderResolver.getAppender(appender);
logAppenders.add(logAppender);
} catch (Exception ex) {
LOG.warn("Can't initialize log appender [{}]", appender, ex);
continue;
}
}
return logAppenders;
}
@Override
public List<LogAppender> getApplicationAppendersByLogSchemaVersion(
String applicationId, int schemaVersion) {
LOG.debug("Get log appenders by application id [{}] and schema version [{}]",
applicationId, schemaVersion);
List<LogAppenderDto> appenders = logAppendersService.findLogAppendersByAppIdAndSchemaVersion(
applicationId, schemaVersion);
LOG.debug("Found all appenders [{}] for application and schema version.", appenders);
List<LogAppender> logAppenders = new ArrayList<>(appenders.size());
for (LogAppenderDto appender : appenders) {
try {
LogAppender logAppender = logAppenderResolver.getAppender(appender);
logAppenders.add(logAppender);
} catch (Exception ex) {
LOG.warn("Can't initialize log appender [{}], exception catched: {}", appender, ex);
continue;
}
}
return logAppenders;
}
@Override
public LogAppender getApplicationAppender(String appenderId) {
LOG.debug("Get log appender by id [{}]", appenderId);
LogAppenderDto appender = logAppendersService.findLogAppenderById(appenderId);
LOG.debug("Found appender [{}] by appender id [{}] ", appender, appenderId);
LogAppender logAppender = null;
try {
logAppender = logAppenderResolver.getAppender(appender);
} catch (Exception ex) {
LOG.warn("Can't initialize log appender [{}]", appender, ex);
}
return logAppender;
}
@Override
public LogSchema getLogSchema(String applicationId, int logSchemaVersion) {
LOG.debug("Fetching log schema for application {} and version {}",
applicationId, logSchemaVersion);
LogSchema logSchema = null;
LogSchemaDto logSchemaDto = logSchemaService.findLogSchemaByAppIdAndVersion(
applicationId, logSchemaVersion);
CTLSchemaDto ctlSchema = ctlService.findCtlSchemaById(logSchemaDto.getCtlSchemaId());
String logFlatSchema = ctlService.flatExportAsString(ctlSchema);
if (logSchemaDto != null) {
logSchema = new LogSchema(logSchemaDto, logFlatSchema);
}
return logSchema;
}
}