blob: 282f5abfa0ba71c67cca7bdd070c0a5c3322d416 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.ranger.audit.provider;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ranger.audit.model.AuditEventBase;
public class MultiDestAuditProvider extends BaseAuditHandler {
private static final Log LOG = LogFactory
.getLog(MultiDestAuditProvider.class);
protected List<AuditHandler> mProviders = new ArrayList<AuditHandler>();
static final String DEFAULT_NAME = "multi_dest";
public MultiDestAuditProvider() {
LOG.info("MultiDestAuditProvider: creating..");
setName(DEFAULT_NAME);
}
public MultiDestAuditProvider(AuditHandler provider) {
LOG.info("MultiDestAuditProvider(): provider="
+ (provider == null ? null : provider.getName()));
setName(DEFAULT_NAME);
addAuditProvider(provider);
}
@Override
public void init(Properties props) {
LOG.info("MultiDestAuditProvider.init()");
super.init(props);
for (AuditHandler provider : mProviders) {
try {
provider.init(props);
} catch (Throwable excp) {
LOG.info("MultiDestAuditProvider.init(): failed "
+ provider.getClass().getCanonicalName() + ")", excp);
}
}
}
@Override
public void setParentPath(String parentPath) {
super.setParentPath(parentPath);
for (AuditHandler provider : mProviders) {
if (provider instanceof BaseAuditHandler) {
BaseAuditHandler baseAuditHander = (BaseAuditHandler) provider;
baseAuditHander.setParentPath(getName());
}
}
}
@Override
public void setName(String name) {
super.setName(name);
for (AuditHandler provider : mProviders) {
if (provider instanceof BaseAuditHandler) {
BaseAuditHandler baseAuditHander = (BaseAuditHandler) provider;
baseAuditHander.setParentPath(getName());
}
}
}
public void addAuditProvider(AuditHandler provider) {
if (provider != null) {
LOG.info("MultiDestAuditProvider.addAuditProvider(providerType="
+ provider.getClass().getCanonicalName() + ")");
mProviders.add(provider);
if (provider instanceof BaseAuditHandler) {
BaseAuditHandler baseAuditHander = (BaseAuditHandler) provider;
baseAuditHander.setParentPath(getName());
}
}
}
public void addAuditProviders(List<AuditHandler> providers) {
if (providers != null) {
for (AuditHandler provider : providers) {
LOG.info("Adding " + provider.getName()
+ " as consumer to MultiDestination " + getName());
addAuditProvider(provider);
}
}
}
@Override
public boolean log(AuditEventBase event) {
for (AuditHandler provider : mProviders) {
try {
provider.log(event);
} catch (Throwable excp) {
logFailedEvent(event, excp);
}
}
return true;
}
@Override
public boolean log(Collection<AuditEventBase> events) {
for (AuditHandler provider : mProviders) {
try {
provider.log(events);
} catch (Throwable excp) {
logFailedEvent(events, excp);
}
}
return true;
}
@Override
public boolean logJSON(String event) {
for (AuditHandler provider : mProviders) {
try {
provider.logJSON(event);
} catch (Throwable excp) {
logFailedEventJSON(event, excp);
}
}
return true;
}
@Override
public boolean logJSON(Collection<String> events) {
for (AuditHandler provider : mProviders) {
try {
provider.logJSON(events);
} catch (Throwable excp) {
logFailedEventJSON(events, excp);
}
}
return true;
}
@Override
public void start() {
for (AuditHandler provider : mProviders) {
try {
provider.start();
} catch (Throwable excp) {
LOG.error("MultiDestAuditProvider.start(): failed for provider { "
+ provider.getClass().getName() + " }", excp);
}
}
}
@Override
public void stop() {
for (AuditHandler provider : mProviders) {
try {
provider.stop();
} catch (Throwable excp) {
LOG.error("MultiDestAuditProvider.stop(): failed for provider { "
+ provider.getClass().getName() + " }", excp);
}
}
}
@Override
public void waitToComplete() {
for (AuditHandler provider : mProviders) {
try {
provider.waitToComplete();
} catch (Throwable excp) {
LOG.error(
"MultiDestAuditProvider.waitToComplete(): failed for provider { "
+ provider.getClass().getName() + " }", excp);
}
}
}
@Override
public void waitToComplete(long timeout) {
for (AuditHandler provider : mProviders) {
try {
provider.waitToComplete(timeout);
} catch (Throwable excp) {
LOG.error(
"MultiDestAuditProvider.waitToComplete(): failed for provider { "
+ provider.getClass().getName() + " }", excp);
}
}
}
@Override
public void flush() {
for (AuditHandler provider : mProviders) {
try {
provider.flush();
} catch (Throwable excp) {
LOG.error("MultiDestAuditProvider.flush(): failed for provider { "
+ provider.getClass().getName() + " }", excp);
}
}
}
}