Repository: lens Updated Branches: refs/heads/master 87b690ef3 -> 37136a577
LENS-1257: Serverside changes for getting session list Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/b95e9157 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/b95e9157 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/b95e9157 Branch: refs/heads/master Commit: b95e9157ae2cd385a132bed446f284684412c5ee Parents: 87b690e Author: Lavkesh Lahngir <[email protected]> Authored: Tue Aug 9 17:32:01 2016 +0530 Committer: Rajat Khandelwal <[email protected]> Committed: Tue Aug 9 17:32:01 2016 +0530 ---------------------------------------------------------------------- .../lens/api/session/UserSessionInfo.java | 55 ++++++++++++++++++++ .../lens/server/api/session/SessionService.java | 7 +++ .../org/apache/lens/server/BaseLensService.java | 18 +++++++ .../lens/server/session/SessionResource.java | 12 +++++ .../server/session/TestSessionResource.java | 29 ++++++++--- 5 files changed, 114 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/b95e9157/lens-api/src/main/java/org/apache/lens/api/session/UserSessionInfo.java ---------------------------------------------------------------------- diff --git a/lens-api/src/main/java/org/apache/lens/api/session/UserSessionInfo.java b/lens-api/src/main/java/org/apache/lens/api/session/UserSessionInfo.java new file mode 100644 index 0000000..f2f0760 --- /dev/null +++ b/lens-api/src/main/java/org/apache/lens/api/session/UserSessionInfo.java @@ -0,0 +1,55 @@ +/** + * 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.lens.api.session; + +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.lens.api.query.QueryHandle; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@XmlRootElement +@AllArgsConstructor +@NoArgsConstructor +@XmlAccessorType(XmlAccessType.FIELD) +public class UserSessionInfo { + @XmlElement + private String handle; + @XmlElement + private String userName; + @XmlElement + private List<QueryHandle> activeQueries; + @XmlElement + private long creationTime; + @XmlElement + private long lastAccessTime; + + @Override + public String toString() { + return handle + " " + userName + " " + creationTime + " " + activeQueries + " " + lastAccessTime; + } +} http://git-wip-us.apache.org/repos/asf/lens/blob/b95e9157/lens-server-api/src/main/java/org/apache/lens/server/api/session/SessionService.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/session/SessionService.java b/lens-server-api/src/main/java/org/apache/lens/server/api/session/SessionService.java index 027a32b..80ce030 100644 --- a/lens-server-api/src/main/java/org/apache/lens/server/api/session/SessionService.java +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/session/SessionService.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import org.apache.lens.api.LensSessionHandle; +import org.apache.lens.api.session.UserSessionInfo; import org.apache.lens.server.api.error.LensException; public interface SessionService { @@ -121,4 +122,10 @@ public interface SessionService { * Returns true if the session is open */ boolean isOpen(LensSessionHandle sessionHandle); + + /** + * + * @return a list of all sessions + */ + List<UserSessionInfo> getSessionInfo(); } http://git-wip-us.apache.org/repos/asf/lens/blob/b95e9157/lens-server/src/main/java/org/apache/lens/server/BaseLensService.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/BaseLensService.java b/lens-server/src/main/java/org/apache/lens/server/BaseLensService.java index 19a86c6..e0e4bf8 100644 --- a/lens-server/src/main/java/org/apache/lens/server/BaseLensService.java +++ b/lens-server/src/main/java/org/apache/lens/server/BaseLensService.java @@ -22,7 +22,9 @@ import static org.apache.lens.server.error.LensServerErrorCode.SESSION_CLOSED; import static org.apache.lens.server.error.LensServerErrorCode.SESSION_ID_NOT_PROVIDED; import java.io.*; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -34,6 +36,7 @@ import javax.ws.rs.core.Response; import org.apache.lens.api.LensConf; import org.apache.lens.api.LensSessionHandle; +import org.apache.lens.api.session.UserSessionInfo; import org.apache.lens.api.util.PathValidator; import org.apache.lens.server.api.LensConfConstants; import org.apache.lens.server.api.LensService; @@ -561,5 +564,20 @@ public abstract class BaseLensService extends CompositeService implements Extern release(sessionHandle); } } + + public List<UserSessionInfo> getSessionInfo() { + List<UserSessionInfo> userSessionInfoList = new ArrayList<>(); + for (LensSessionHandle handle : SESSION_MAP.values()) { + LensSessionImpl session = getSession(handle); + UserSessionInfo sessionInfo = new UserSessionInfo(); + sessionInfo.setHandle(handle.getPublicId().toString()); + sessionInfo.setUserName(session.getLoggedInUser()); + sessionInfo.setActiveQueries(session.getActiveQueries()); + sessionInfo.setCreationTime(session.getCreationTime()); + sessionInfo.setLastAccessTime(session.getLastAccessTime()); + userSessionInfoList.add(sessionInfo); + } + return userSessionInfoList; + } } http://git-wip-us.apache.org/repos/asf/lens/blob/b95e9157/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java b/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java index fdfd09c..a4e61c4 100644 --- a/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java +++ b/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java @@ -30,6 +30,7 @@ import org.apache.lens.api.APIResult.Status; import org.apache.lens.api.LensConf; import org.apache.lens.api.LensSessionHandle; import org.apache.lens.api.StringList; +import org.apache.lens.api.session.UserSessionInfo; import org.apache.lens.server.LensServices; import org.apache.lens.server.api.error.LensException; import org.apache.lens.server.api.session.SessionService; @@ -260,4 +261,15 @@ public class SessionResource { return new APIResult(Status.SUCCEEDED, "Set param succeeded"); } + /** + * Returns a list of all sessions + * @return + */ + @GET + @Path("sessions") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN }) + public List<UserSessionInfo> getSession() { + List<UserSessionInfo> l = sessionService.getSessionInfo(); + return l; + } } http://git-wip-us.apache.org/repos/asf/lens/blob/b95e9157/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java b/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java index 9ebe17c..3aa3163 100644 --- a/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java +++ b/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java @@ -22,17 +22,14 @@ import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Set; -import java.util.UUID; +import java.util.*; import javax.ws.rs.ClientErrorException; import javax.ws.rs.NotFoundException; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Application; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -42,7 +39,8 @@ import org.apache.lens.api.LensConf; import org.apache.lens.api.LensSessionHandle; import org.apache.lens.api.StringList; import org.apache.lens.api.jaxb.LensJAXBContextResolver; -import org.apache.lens.api.query.*; +import org.apache.lens.api.query.QueryHandle; +import org.apache.lens.api.session.UserSessionInfo; import org.apache.lens.server.LensJerseyTest; import org.apache.lens.server.LensServerConf; import org.apache.lens.server.LensServices; @@ -57,7 +55,6 @@ import org.apache.lens.server.common.TestResourceFile; import org.apache.lens.server.error.GenericExceptionMapper; import org.apache.commons.io.FileUtils; - import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.metastore.api.Database; import org.apache.hadoop.hive.ql.metadata.Hive; @@ -579,4 +576,22 @@ public class TestSessionResource extends LensJerseyTest { result = target.queryParam("sessionid", lensSessionHandle1).request(mt).delete(APIResult.class); Assert.assertTrue(metricsSvc.getTotalClosedSessions() >= 2); } + + @Test(dataProvider = "mediaTypeData") + public void testSessionList(MediaType mt) { + final WebTarget target = target().path("session").path("sessions"); + Response res = target.request().get(Response.class); + List<UserSessionInfo> sessionsList = res.readEntity(new GenericType<List<UserSessionInfo>>() { + }); + int size = sessionsList.size(); + //Create a new session + FormDataMultiPart mp = getMultiFormData("foo", "bar", mt); + LensSessionHandle lensSessionHandle = target().path("session").request(mt) + .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), LensSessionHandle.class); + res = target.request().get(Response.class); + sessionsList = res.readEntity(new GenericType<List<UserSessionInfo>>() { + }); + Assert.assertEquals(sessionsList.size(), size + 1); + target().path("session").queryParam("sessionid", lensSessionHandle).request(mt).delete(APIResult.class); + } }
