Author: bpoussin Date: 2011-08-14 15:29:13 +0200 (Sun, 14 Aug 2011) New Revision: 1145 Url: http://nuiton.org/repositories/revision/wikitty/1145 Log: Evolution #1672: Add timelog in WikittyServiceSecurity to see time spent in Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java 2011-08-13 18:17:26 UTC (rev 1144) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfigOption.java 2011-08-14 13:29:13 UTC (rev 1145) @@ -293,6 +293,16 @@ n_("maximum time before send log warn with time consumed"), "3000", Integer.class, false, false), + WIKITTY_SECURITY_TIME_TO_LOG_INFO( + "wikitty.security.timeToLog.info", + n_("maximum time before send log info with time consumed"), + "100", + Integer.class, false, false), + WIKITTY_SECURITY_TIME_TO_LOG_WARN( + "wikitty.security.timeToLog.warn", + n_("maximum time before send log warn with time consumed"), + "500", + Integer.class, false, false), JCS_DEFAULT("jcs.default", n_("jcs auxiliares to use"), "", Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2011-08-13 18:17:26 UTC (rev 1144) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2011-08-14 13:29:13 UTC (rev 1145) @@ -38,6 +38,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.TimeLog; +import org.nuiton.wikitty.WikittyConfigOption; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyAuthorisation; import org.nuiton.wikitty.entities.WikittyAuthorisationHelper; @@ -68,7 +70,10 @@ public class WikittyServiceSecurity extends WikittyServiceDelegator { /** to use log facility, just put in your code: log.info(\"...\"); */ - static private Log log = LogFactory.getLog(WikittyServiceSecurity.class); + final static private Log log = LogFactory.getLog(WikittyServiceSecurity.class); + /** use to trace time of security code, timelog must not include delegator + * time in this class */ + final static private TimeLog timeLog = new TimeLog(WikittyServiceSecurity.class); /** cache de l'id du groupe AppAdmin */ transient protected String appAdminGroupId = null; @@ -80,6 +85,14 @@ */ public WikittyServiceSecurity(ApplicationConfig config, WikittyService ws) { super(ws); + if (config != null) { + long timeToLogInfo = config.getOptionAsInt(WikittyConfigOption. + WIKITTY_SECURITY_TIME_TO_LOG_INFO.getKey()); + long timeToLogWarn = config.getOptionAsInt(WikittyConfigOption. + WIKITTY_SECURITY_TIME_TO_LOG_WARN.getKey()); + timeLog.setTimeToLogInfo(timeToLogInfo); + timeLog.setTimeToLogWarn(timeToLogWarn); + } } @Override @@ -94,6 +107,10 @@ @Override public String login(String login, String password) { + long start = TimeLog.getTime(); + + String tokenId; + Criteria criteria = Search.query() .eq(WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).criteria(); String userId = getDelegate().findByCriteria(null, @@ -106,27 +123,32 @@ getDelegate(), null, userId); // check password is valid if (WikittyUserHelper.getPassword(user).equals(password)) { - String tokenId = WikittyUtil.genSecurityTokenId(); + tokenId = WikittyUtil.genSecurityTokenId(); Wikitty wikittyToken = new WikittyImpl(tokenId); // force add extension to wikitty WikittyTokenHelper.addExtension(wikittyToken); WikittyTokenHelper.setUser(wikittyToken, user.getId()); WikittyTokenHelper.setDate(wikittyToken, new Date()); getDelegate().store(null, Arrays.asList(wikittyToken), false); - log.debug(String.format("token '%s' is for login '%s'", - tokenId, login)); - return tokenId; + if (log.isDebugEnabled()) { + log.debug(String.format("token '%s' is for login '%s'", + tokenId, login)); + } } else { throw new SecurityException("bad password"); } } + timeLog.log(start, "login"); + return tokenId; } @Override public void logout(String securityToken) { + long start = TimeLog.getTime(); if (securityToken != null) { getDelegate().delete(securityToken, Arrays.asList(securityToken)); } + timeLog.log(start, "logout"); } @Override @@ -144,6 +166,8 @@ @Override public WikittyEvent replay( String securityToken, List<WikittyEvent> events, boolean force) { + long start = TimeLog.getTime(); + String userId = getUserId(securityToken); for (WikittyEvent e : events) { if (e.getType().contains( @@ -172,6 +196,8 @@ checkDeleteExtension(securityToken, e.getDeletedExtensions()); } } + + timeLog.log(start, "replay"); WikittyEvent result = getDelegate().replay(securityToken, events, force); return result; } @@ -202,7 +228,9 @@ @Override public WikittyEvent store(String securityToken, Collection<Wikitty> wikitties, boolean force) { + long start = TimeLog.getTime(); checkStore(securityToken, wikitties); + timeLog.log(start, "store"); WikittyEvent result = getDelegate().store(securityToken, wikitties, force); return result; } @@ -304,11 +332,14 @@ public List<Wikitty> restore(String securityToken, List<String> ids) { String userId = getUserId(securityToken); List<Wikitty> wikitties = getDelegate().restore(securityToken, ids); + + long start = TimeLog.getTime(); for (Wikitty wikitty : wikitties) { if (wikitty != null) { refuseUnauthorizedRead(securityToken, userId, wikitty); } } + timeLog.log(start, "restore"); return wikitties; } @@ -410,7 +441,9 @@ @Override public WikittyEvent delete(String securityToken, Collection<String> ids) { + long start = TimeLog.getTime(); checkDelete(securityToken, ids); + timeLog.log(start, "delete"); WikittyEvent result = getDelegate().delete(securityToken, ids); return result; } @@ -507,14 +540,18 @@ @Override public WikittyEvent storeExtension(String securityToken, Collection<WikittyExtension> exts) { + long start = TimeLog.getTime(); checkStoreExtension(securityToken, exts); + timeLog.log(start, "storeExtension"); return getDelegate().storeExtension(securityToken, exts); } @Override public WikittyEvent deleteExtension( String securityToken, Collection<String> extNames) { + long start = TimeLog.getTime(); checkDeleteExtension(securityToken, extNames); + timeLog.log(start, "deleteExtension"); return getDelegate().deleteExtension(securityToken, extNames); } @@ -528,25 +565,31 @@ Wikitty treeNodeWikitty = WikittyServiceEnhanced.restore( getDelegate(), securityToken, treeNodeId); + long start = TimeLog.getTime(); Collection<Wikitty> wikitties = Collections.singletonList(treeNodeWikitty); // TODO poussin 20101222 perhaps we must check deletion authorization // for all children ? checkStore(securityToken, wikitties); + timeLog.log(start, "deleteTree"); return getDelegate().deleteTree(securityToken, treeNodeId); } @Override public Wikitty restoreVersion(String securityToken, String wikittyId, String version) { Wikitty wikitty = getDelegate().restoreVersion(securityToken, wikittyId, version); + long start = TimeLog.getTime(); String userId = getUserId(securityToken); refuseUnauthorizedRead(securityToken, userId, wikitty); + timeLog.log(start, "restoreVersion"); return wikitty; } @Override public void syncSearchEngine(String securityToken) { + long start = TimeLog.getTime(); String userId = getUserId(securityToken); if (isAppAdmin(securityToken, userId)) { + timeLog.log(start, "syncSearchEngine"); // seul les AppAdmin on le droit a cette method getDelegate().syncSearchEngine(securityToken); } else {