/* * 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.appenders.couchbase.appender; import org.kaaproject.kaa.common.dto.logs.LogAppenderDto; import org.kaaproject.kaa.common.dto.logs.LogEventDto; import org.kaaproject.kaa.server.appenders.couchbase.config.gen.CouchbaseConfig; import org.kaaproject.kaa.server.common.log.shared.appender.AbstractLogAppender; import org.kaaproject.kaa.server.common.log.shared.appender.LogDeliveryCallback; import org.kaaproject.kaa.server.common.log.shared.appender.LogEventPack; import org.kaaproject.kaa.server.common.log.shared.avro.gen.RecordHeader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.MessageFormat; import java.util.List; public class CouchbaseLogAppender extends AbstractLogAppender<CouchbaseConfig> { private static final Logger LOG = LoggerFactory.getLogger(CouchbaseLogAppender.class); private LogEventDao logEventDao; private boolean closed = false; public CouchbaseLogAppender() { super(CouchbaseConfig.class); } /** * Saves logs into a couchbase database. * * @param logEventPack logs * @param header header * @param listener log delivery listener */ @Override public void doAppend(LogEventPack logEventPack, RecordHeader header, LogDeliveryCallback listener) { if (!closed) { try { LOG.debug("[{}] appending {} logs to couchbase bucket", getApplicationToken(), logEventPack.getEvents().size()); List<LogEventDto> dtos = generateLogEvent(logEventPack, header); LOG.debug("[{}] saving {} objects", getApplicationToken(), dtos.size()); if (!dtos.isEmpty()) { logEventDao.save(header, dtos); LOG.debug("[{}] appended {} logs to couchbase bucket", getApplicationToken(), logEventPack.getEvents().size()); } listener.onSuccess(); } catch (Exception ex) { LOG.error(MessageFormat.format("[{0}] Attempted to append logs failed due to internal error", getName()), ex); listener.onInternalError(); } } else { LOG.info("Attempted to append to closed appender named [{}].", getName()); listener.onInternalError(); } } @Override protected void initFromConfiguration(LogAppenderDto appender, CouchbaseConfig configuration) { LOG.debug("Initializing new instance of Couchbase log appender"); try { logEventDao = new LogEventCouchbaseDao(configuration); } catch (Exception ex) { LOG.error("Failed to init Couchbase log appender: ", ex); } } @Override public void close() { if (!closed) { closed = true; if (logEventDao != null) { logEventDao.close(); logEventDao = null; } } LOG.debug("Stoped Couchbase log appender."); } }