All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.orientechnologies.security.auditing.OAuditingLoggingThread Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2010-2016 OrientDB LTD (http://orientdb.com)
 *
 * 

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. * *

For more information: http://www.orientdb.com */ package com.orientechnologies.security.auditing; import com.orientechnologies.common.util.OCallable; import com.orientechnologies.orient.core.Orient; import com.orientechnologies.orient.core.db.ODatabaseSession; import com.orientechnologies.orient.core.db.OrientDBInternal; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OSchema; import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.security.OAuditingOperation; import com.orientechnologies.orient.core.security.OSecuritySystem; import java.util.concurrent.BlockingQueue; /** * Thread that logs asynchronously. * * @author Luca Garulli */ public class OAuditingLoggingThread extends Thread { private final String databaseName; private final BlockingQueue auditingQueue; private volatile boolean running = true; private volatile boolean waitForAllLogs = true; private OrientDBInternal context; private String className; private OSecuritySystem security; public OAuditingLoggingThread( final String iDatabaseName, final BlockingQueue auditingQueue, final OrientDBInternal context, OSecuritySystem security) { super( Orient.instance().getThreadGroup(), "OrientDB Auditing Logging Thread - " + iDatabaseName); this.databaseName = iDatabaseName; this.auditingQueue = auditingQueue; this.context = context; this.security = security; setDaemon(true); // This will create a cluster in the system database for logging auditing events for // "databaseName", if it doesn't already // exist. // server.getSystemDatabase().createCluster(ODefaultAuditing.AUDITING_LOG_CLASSNAME, // ODefaultAuditing.getClusterName(databaseName)); className = ODefaultAuditing.getClassName(databaseName); context .getSystemDatabase() .executeInDBScope( new OCallable() { @Override public Void call(ODatabaseSession iArgument) { OSchema schema = iArgument.getMetadata().getSchema(); if (!schema.existsClass(className)) { OClass clazz = schema.getClass(ODefaultAuditing.AUDITING_LOG_CLASSNAME); OClass cls = schema.createClass(className, clazz); cls.createIndex( className + ".date", OClass.INDEX_TYPE.NOTUNIQUE, new String[] {"date"}); } return null; } }); } @Override public void run() { while (running || waitForAllLogs) { try { if (!running && auditingQueue.isEmpty()) { break; } final ODocument log = auditingQueue.take(); log.setClassName(className); context.getSystemDatabase().save(log); if (security.getSyslog() != null) { byte byteOp = OAuditingOperation.UNSPECIFIED.getByte(); if (log.containsField("operation")) byteOp = log.field("operation"); String username = log.field("user"); String message = log.field("note"); String dbName = log.field("database"); security .getSyslog() .log(OAuditingOperation.getByByte(byteOp).toString(), dbName, username, message); } } catch (InterruptedException e) { // IGNORE AND SOFTLY EXIT } catch (Exception e) { e.printStackTrace(); } } } public void sendShutdown(final boolean iWaitForAllLogs) { this.waitForAllLogs = iWaitForAllLogs; running = false; interrupt(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy