0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna/*
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* The contents of this file are subject to the terms of the Common Development and
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* Distribution License (the License). You may not use this file except in compliance with the
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* License.
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna*
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* specific language governing permission and limitations under the License.
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna*
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* When distributing Covered Software, include this CDDL Header Notice in each file and include
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* Header, with the fields enclosed by brackets [] replaced by your own identifying
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna* information: "Portions copyright [year] [name of copyright owner]".
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna*
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey* Copyright 2014-2016 ForgeRock AS.
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna*/
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Lunapackage com.iplanet.dpro.session.monitoring;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Majorimport java.util.Collection;
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Major
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumseyimport org.apache.commons.lang.builder.ToStringBuilder;
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Majorimport org.forgerock.openam.dpro.session.PartialSession;
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Majorimport org.forgerock.openam.utils.CrestQuery;
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Lunaimport com.iplanet.dpro.session.Session;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Lunaimport com.iplanet.dpro.session.SessionException;
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumseyimport com.iplanet.dpro.session.SessionID;
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumseyimport com.iplanet.dpro.session.TokenRestriction;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Lunaimport com.iplanet.dpro.session.operations.SessionOperations;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Lunaimport com.iplanet.dpro.session.share.SessionInfo;
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumseyimport com.iplanet.sso.SSOToken;
fc8409d20f991d53ac0c4708efa04c121b73c449Tom Rumseyimport com.sun.identity.common.SearchResults;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna/**
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * Wraps a provided {@link SessionOperations} instance with timing meta information, and
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * inserts that into an appropriate monitoring store. Uses a {@link SessionMonitorType} to inform
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * the {@link SessionMonitoringStore} under what collection to store its entries.
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna */
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Lunapublic class MonitoredOperations implements SessionOperations {
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna private final SessionOperations sessionOperations;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna private final SessionMonitorType monitorType;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna private final SessionMonitoringStore sessionMonitoringStore;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna /**
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * Sets up an appropriate {@link SessionOperations}, linking it to its {@link SessionMonitorType} and
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * giving it a link to the singleton {@link SessionMonitoringStore}.
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna *
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * @param sessionOperations The SessionOperations to wrap
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * @param monitorType Whether these SessionOperations are for LOCAL, REMOTE, etc.
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * @param sessionMonitoringStore The store to use to write the data to
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna */
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna public MonitoredOperations(SessionOperations sessionOperations, SessionMonitorType monitorType,
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna SessionMonitoringStore sessionMonitoringStore) {
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna this.sessionOperations = sessionOperations;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna this.monitorType = monitorType;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna this.sessionMonitoringStore = sessionMonitoringStore;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna }
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna /**
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * {@inheritDoc}
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna */
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna @Override
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna public SessionInfo refresh(Session session, boolean reset) throws SessionException {
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna final long start = System.nanoTime();
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna final SessionInfo response = sessionOperations.refresh(session, reset);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna sessionMonitoringStore.storeRefreshTime(System.nanoTime() - start, monitorType);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna return response;
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna }
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna /**
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * {@inheritDoc}
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna */
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna @Override
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna public void logout(Session session) throws SessionException {
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna final long start = System.nanoTime();
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna sessionOperations.logout(session);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna sessionMonitoringStore.storeLogoutTime(System.nanoTime() - start, monitorType);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna }
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey @Override
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey public Session resolveSession(SessionID sessionID) throws SessionException {
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey return sessionOperations.resolveSession(sessionID); // Not monitored at present
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey }
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey
fc8409d20f991d53ac0c4708efa04c121b73c449Tom Rumsey @Override
fc8409d20f991d53ac0c4708efa04c121b73c449Tom Rumsey public SearchResults<SessionInfo> getValidSessions(Session session, String pattern) throws SessionException {
fc8409d20f991d53ac0c4708efa04c121b73c449Tom Rumsey return sessionOperations.getValidSessions(session, pattern); // Not monitored at present
fc8409d20f991d53ac0c4708efa04c121b73c449Tom Rumsey }
fc8409d20f991d53ac0c4708efa04c121b73c449Tom Rumsey
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Major @Override
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Major public Collection<PartialSession> getMatchingSessions(CrestQuery crestQuery) throws SessionException {
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Major return sessionOperations.getMatchingSessions(crestQuery);
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Major }
c414e18b750ecd647a82c14bb30f33afc32ca188Peter Major
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna @Override
6b0b9411405932b5ada376bb06d6bc3d94980d7fPeter Major public void destroy(Session requester, Session session) throws SessionException {
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna final long start = System.nanoTime();
6b0b9411405932b5ada376bb06d6bc3d94980d7fPeter Major sessionOperations.destroy(requester, session);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna sessionMonitoringStore.storeDestroyTime(System.nanoTime() - start, monitorType);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna }
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna /**
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna * {@inheritDoc}
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna */
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna @Override
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna public void setProperty(Session session, String name, String value) throws SessionException {
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna final long start = System.nanoTime();
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna sessionOperations.setProperty(session, name, value);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna sessionMonitoringStore.storeSetPropertyTime(System.nanoTime() - start, monitorType);
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna }
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey @Override
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey public SessionInfo getSessionInfo(SessionID sid, boolean reset) throws SessionException {
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey return sessionOperations.getSessionInfo(sid, reset); // Not monitored at present
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey }
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey @Override
fc8409d20f991d53ac0c4708efa04c121b73c449Tom Rumsey public void addSessionListener(Session session, String url) throws SessionException {
fc8409d20f991d53ac0c4708efa04c121b73c449Tom Rumsey sessionOperations.addSessionListener(session, url); // Not monitored at present
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey }
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey @Override
aa9422005d747789faacd4064a4d42c58014a41cTom Rumsey public boolean checkSessionExists(SessionID sessionId) throws SessionException {
aa9422005d747789faacd4064a4d42c58014a41cTom Rumsey return sessionOperations.checkSessionExists(sessionId); // Not monitored at present
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey }
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey @Override
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey public String getRestrictedTokenId(SessionID masterSid, TokenRestriction restriction) throws SessionException {
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey return sessionOperations.getRestrictedTokenId(masterSid, restriction); // Not monitored at present
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey }
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey @Override
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey public String deferenceRestrictedID(Session session, SessionID restrictedID) throws SessionException {
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey return sessionOperations.deferenceRestrictedID(session, restrictedID); // Not monitored at present
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey }
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey @Override
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey public void setExternalProperty(SSOToken clientToken, SessionID sessionId, String name, String value) throws SessionException {
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey sessionOperations.setExternalProperty(clientToken,sessionId, name, value); // Not monitored at present
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey }
a90aba9cbcbb8e7fe95e45590d853959efe0d354Tom Rumsey
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell @Override
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell public boolean equals(Object obj) {
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell if (!(obj instanceof MonitoredOperations)) {
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell return false;
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell }
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell MonitoredOperations op = (MonitoredOperations) obj;
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell return op.monitorType == this.monitorType && op.sessionMonitoringStore == this.sessionMonitoringStore &&
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell op.sessionOperations == this.sessionOperations;
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell }
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell @Override
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell public String toString() {
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell return new ToStringBuilder(this)
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell .append("monitorType", monitorType)
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell .append("sessionOperations", sessionOperations)
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell .append("sessionMonitoringStore", sessionMonitoringStore)
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell .toString();
cc7c18212481f5e9ee508afe2ffcaecb6b9330f5Craig McDonnell }
0f7c5b88fd04e25bea6113dfc783a05e4e2045f8David Luna}