Skip to content

Commit

Permalink
Feature branch for adding a listener to the method that times all SQL…
Browse files Browse the repository at this point in the history
… expressions. As well as logging we can now optionally do something else, e.g. notify an external monitoring system of slow SQL expressions.
  • Loading branch information
jbrook authored and darkv committed Nov 23, 2012
1 parent 1758a8b commit 7edd825
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,71 +6,23 @@
//
package er.extensions.eof;

import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Set;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import com.webobjects.appserver.WOSession;
import com.webobjects.eoaccess.EOAdaptorChannel;
import com.webobjects.eoaccess.EOAdaptorOperation;
import com.webobjects.eoaccess.EOAttribute;
import com.webobjects.eoaccess.EODatabase;
import com.webobjects.eoaccess.EODatabaseChannel;
import com.webobjects.eoaccess.EODatabaseContext;
import com.webobjects.eoaccess.EODatabaseOperation;
import com.webobjects.eoaccess.EOEntity;
import com.webobjects.eoaccess.EOEntityClassDescription;
import com.webobjects.eoaccess.EOGeneralAdaptorException;
import com.webobjects.eoaccess.EOJoin;
import com.webobjects.eoaccess.EOModel;
import com.webobjects.eoaccess.EOModelGroup;
import com.webobjects.eoaccess.EOObjectNotAvailableException;
import com.webobjects.eoaccess.EOProperty;
import com.webobjects.eoaccess.EORelationship;
import com.webobjects.eoaccess.EOSQLExpression;
import com.webobjects.eoaccess.EOSQLExpressionFactory;
import com.webobjects.eoaccess.EOUtilities;
import com.webobjects.eocontrol.EOAndQualifier;
import com.webobjects.eocontrol.EOClassDescription;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.eocontrol.EOEnterpriseObject;
import com.webobjects.eocontrol.EOFaultHandler;
import com.webobjects.eocontrol.EOFetchSpecification;
import com.webobjects.eocontrol.EOGlobalID;
import com.webobjects.eocontrol.EOKeyGlobalID;
import com.webobjects.eocontrol.EOKeyValueQualifier;
import com.webobjects.eocontrol.EOObjectStoreCoordinator;
import com.webobjects.eocontrol.EOQualifier;
import com.webobjects.eocontrol.EOSortOrdering;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSData;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSForwardException;
import com.webobjects.foundation.NSKeyValueCoding;
import com.webobjects.foundation.NSLog;
import com.webobjects.foundation.NSMutableArray;
import com.webobjects.foundation.NSMutableDictionary;
import com.webobjects.foundation.NSMutableSet;
import com.webobjects.foundation.NSSet;
import com.webobjects.foundation._NSDelegate;
import com.webobjects.eoaccess.*;
import com.webobjects.eocontrol.*;
import com.webobjects.foundation.*;
import com.webobjects.jdbcadaptor.JDBCPlugIn;

import er.extensions.appserver.ERXSession;
import er.extensions.foundation.ERXArrayUtilities;
import er.extensions.foundation.ERXDictionaryUtilities;
import er.extensions.foundation.ERXProperties;
import er.extensions.foundation.ERXStringUtilities;
import er.extensions.foundation.ERXThreadStorage;
import er.extensions.foundation.ERXUtilities;
import er.extensions.foundation.ERXValueUtilities;
import er.extensions.eof.listener.ERXEOExecutionListener;
import er.extensions.eof.listener.ERXEOExecutionListenerDumbImpl;
import er.extensions.foundation.*;
import er.extensions.jdbc.ERXSQLHelper;
import er.extensions.statistics.ERXStats;
import er.extensions.statistics.ERXStats.Group;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import java.util.*;
import java.util.concurrent.atomic.AtomicReference;

/**
* Collection of EOAccess related utilities.
Expand All @@ -84,6 +36,12 @@ public class ERXEOAccessUtilities {
/** SQL logger */
private static Logger sqlLoggingLogger = null;

private static final AtomicReference<ERXEOExecutionListener> listener = new AtomicReference<ERXEOExecutionListener>(new ERXEOExecutionListenerDumbImpl());

public static void setListener(ERXEOExecutionListener aListener) {
listener.set(aListener);
}

/**
* Finds an entity that is contained in a string. This is used a lot in
* DirectToWeb. Example: "ListAllStudios"=>Studio
Expand Down Expand Up @@ -1272,6 +1230,7 @@ public static void logExpression(EOAdaptorChannel channel, EOSQLExpression expre
statement = statement.replaceAll("((t0|T0)\\.[a-zA-Z0-9_]+\\,\\s*)*(t0|T0)\\.[a-zA-Z0-9_\\.]+\\s+FROM\\s+", "t0.* FROM ");
ERXStats.addDurationForKey(millisecondsNeeded, Group.SQL, entityName + ": " +statement);
}
listener.get().log(millisecondsNeeded, entityName);
if (needsLog) {
String logString = createLogString(channel, expression, millisecondsNeeded);
if (logString.length() > maxLength) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package er.extensions.eof.listener;

public interface ERXEOExecutionListener {

public void log(long requestTime, String entityName);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package er.extensions.eof.listener;

public class ERXEOExecutionListenerDumbImpl implements ERXEOExecutionListener {
public void log(long requestTime, String entityName) {
//Do nothing here
}
}

0 comments on commit 7edd825

Please sign in to comment.