From 96826e52184c63028f794d39cf99716310227bbd Mon Sep 17 00:00:00 2001 From: Rajesh Battala Date: Mon, 6 Aug 2012 20:31:00 +0530 Subject: [PATCH] CS-15778: Fetching thumbnail --- .../consoleproxy/AjaxFIFOImageCache.java | 21 +++++++++++-------- .../ConsoleProxyAjaxImageHandler.java | 13 ++++++++++-- .../cloud/servlet/ConsoleProxyServlet.java | 14 ++++++++----- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java b/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java index 49f528a7e30..bbf45cfefaf 100644 --- a/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java +++ b/console-proxy/src/com/cloud/consoleproxy/AjaxFIFOImageCache.java @@ -40,9 +40,8 @@ public class AjaxFIFOImageCache { public synchronized int putImage(byte[] image) { while(cache.size() >= cacheSize) { - Integer keyToRemove = fifoQueue.remove(0); + Integer keyToRemove = fifoQueue.remove(0); cache.remove(keyToRemove); - if(s_logger.isTraceEnabled()) s_logger.trace("Remove image from cache, key: " + keyToRemove); } @@ -51,26 +50,30 @@ public class AjaxFIFOImageCache { if(s_logger.isTraceEnabled()) s_logger.trace("Add image to cache, key: " + key); - - cache.put(key, image); + + cache.put(key, image); fifoQueue.add(key); return key; } - public synchronized byte[] getImage(int key) { + public synchronized byte[] getImage(int key) { + if(cache.containsKey(key)) { if(s_logger.isTraceEnabled()) - s_logger.trace("Retrieve image from cache, key: " + key); - + s_logger.trace("Retrieve image from cache, key: " + key); + return cache.get(key); } - - if(s_logger.isTraceEnabled()) + s_logger.trace("Image is no long in cache, key: " + key); return null; } public synchronized int getNextKey() { return nextKey++; + } + + public synchronized int getKey() { + return nextKey; } } diff --git a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java index bc01ed72474..a2736fb3df1 100644 --- a/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java +++ b/console-proxy/src/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java @@ -61,6 +61,9 @@ public class ConsoleProxyAjaxImageHandler implements HttpHandler { String tag = queryMap.get("tag"); String ticket = queryMap.get("ticket"); String keyStr = queryMap.get("key"); + String console_url = queryMap.get("consoleurl"); + String console_host_session = queryMap.get("sessionref"); + int key = 0; if(tag == null) @@ -90,8 +93,14 @@ public class ConsoleProxyAjaxImageHandler implements HttpHandler { param.setClientHostPassword(sid); param.setClientTag(tag); param.setTicket(ticket); - ConsoleProxyClient viewer = ConsoleProxy.getVncViewer(param); - byte[] img = viewer.getAjaxImageCache().getImage(key); + param.setClientTunnelUrl(console_url); + param.setClientTunnelSession(console_host_session); + + ConsoleProxyClient viewer = ConsoleProxy.getVncViewer(param); + AjaxFIFOImageCache imageCache =viewer.getAjaxImageCache(); + + byte[] img = imageCache.getImage(imageCache.getKey() - 1); + if(img != null) { Headers hds = t.getResponseHeaders(); hds.set("Content-Type", "image/jpeg"); diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java b/server/src/com/cloud/servlet/ConsoleProxyServlet.java index 31320d3f69a..094726623f2 100644 --- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java +++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java @@ -175,7 +175,8 @@ public class ConsoleProxyServlet extends HttpServlet { return; } - String rootUrl = _ms.getConsoleAccessUrlRoot(vmId); + String rootUrl = _ms.getConsoleAccessUrlRoot(vmId); + if(rootUrl == null) { sendResponse(resp, ""); return; @@ -226,7 +227,9 @@ public class ConsoleProxyServlet extends HttpServlet { return; } - String rootUrl = _ms.getConsoleAccessUrlRoot(vmId); + String rootUrl = _ms.getConsoleAccessUrlRoot(vmId); + //String rootUrl = "http://localhost:8099"; + if(rootUrl == null) { sendResponse(resp, "

Console access will be ready in a few minutes. Please try it again later.

"); return; @@ -322,6 +325,7 @@ public class ConsoleProxyServlet extends HttpServlet { ConsoleProxyPasswordBasedEncryptor encryptor = new ConsoleProxyPasswordBasedEncryptor(_ms.getHashKey()); ConsoleProxyClientParam param = new ConsoleProxyClientParam(); + param.setClientHostAddress(parsedHostInfo.first()); param.setClientHostPort(portInfo.second()); param.setClientHostPassword(sid); @@ -331,9 +335,9 @@ public class ConsoleProxyServlet extends HttpServlet { param.setClientTunnelUrl(parsedHostInfo.second()); param.setClientTunnelSession(parsedHostInfo.third()); } - - sb.append("/ajax?token=" + encryptor.encryptObject(ConsoleProxyClientParam.class, param)); - sb.append("&w=").append(w).append("&h=").append(h); + s_logger.debug("Thumbnail url params" + param.toString()); + sb.append("/ajaximg?token=" + encryptor.encryptObject(ConsoleProxyClientParam.class, param)); + sb.append("&w=").append(w).append("&h=").append(h).append("&key=0"); if(s_logger.isDebugEnabled()) { s_logger.debug("Compose thumbnail url: " + sb.toString());