You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by tv...@apache.org on 2012/06/07 23:24:00 UTC

svn commit: r1347803 - in /openejb/trunk/openejb/tomee: tomee-plus-webapp/src/main/webapp/WEB-INF/ tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/ tomee-webapp/src/main/webapp/WEB-INF/ tomee-webapp/src/main/webapp/js/tomee/ tomee-webapp/src...

Author: tveronezi
Date: Thu Jun  7 21:23:59 2012
New Revision: 1347803

URL: http://svn.apache.org/viewvc?rev=1347803&view=rev
Log:
https://issues.apache.org/jira/browse/TOMEE-205
* log skeleton (almost done!)

Added:
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogServlet.java
      - copied, changed from r1347549, openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogoutServlet.java
Modified:
    openejb/trunk/openejb/tomee/tomee-plus-webapp/src/main/webapp/WEB-INF/web.xml
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationController.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationModel.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/util/I18N.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewHome.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewLog.js

Modified: openejb/trunk/openejb/tomee/tomee-plus-webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-plus-webapp/src/main/webapp/WEB-INF/web.xml?rev=1347803&r1=1347802&r2=1347803&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-plus-webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-plus-webapp/src/main/webapp/WEB-INF/web.xml Thu Jun  7 21:23:59 2012
@@ -53,6 +53,11 @@
     </servlet>
 
     <servlet>
+        <servlet-name>LogServlet</servlet-name>
+        <servlet-class>org.apache.tomee.webapp.servlet.LogServlet</servlet-class>
+    </servlet>
+
+    <servlet>
         <servlet-name>LogoutServlet</servlet-name>
         <servlet-class>org.apache.tomee.webapp.servlet.LogoutServlet</servlet-class>
     </servlet>
@@ -103,6 +108,11 @@
     </servlet-mapping>
 
     <servlet-mapping>
+        <servlet-name>LogServlet</servlet-name>
+        <url-pattern>/log/*</url-pattern>
+    </servlet-mapping>
+
+    <servlet-mapping>
         <servlet-name>LogoutServlet</servlet-name>
         <url-pattern>/logout/*</url-pattern>
     </servlet-mapping>

Copied: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogServlet.java (from r1347549, openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogoutServlet.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogServlet.java?p2=openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogServlet.java&p1=openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogoutServlet.java&r1=1347549&r2=1347803&rev=1347803&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogoutServlet.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/LogServlet.java Thu Jun  7 21:23:59 2012
@@ -17,36 +17,128 @@
 
 package org.apache.tomee.webapp.servlet;
 
+import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.tomee.webapp.JsonExecutor;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
 import java.io.IOException;
-import java.util.Map;
+import java.util.*;
 
 
-public class LogoutServlet extends HttpServlet {
+public class LogServlet extends HttpServlet {
 
     @Override
     protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
         JsonExecutor.execute(resp, new JsonExecutor.Executor() {
+
             @Override
-            public void call(Map<String, Object> json) {
-                final HttpSession session = req.getSession(false);
-                if (session == null) {
-                    return;
+            public void call(Map<String, Object> json) throws Exception {
+                final File logFolder = new File(System.getProperty("catalina.base"), "logs");
+                json.put("files", logFolder.list());
+
+                final String loadFileName = req.getParameter("file");
+                if (loadFileName != null) {
+                    Map<String, Object> log = new HashMap<String, Object>();
+                    log.put("name", loadFileName);
+
+                    Integer tail;
+                    try {
+                        tail = Integer.valueOf(req.getParameter("tail"));
+                    } catch (Exception e) {
+                        tail = null;
+                    }
+
+                    log.put("lines", read(
+                            Boolean.valueOf(req.getParameter("escapeHtml")),
+                            new File(logFolder, loadFileName),
+                            tail
+                    ));
+
+                    json.put("log", log);
                 }
+            }
+        });
+
+    }
+
+    private Collection<String> read(final boolean escapeHtml, final File file, final Integer tail) throws IOException {
+        final Queue<String> lines = new LinkedList<String>();
+        final AddLine addLine = new AddLine(lines, tail);
+
+        String line;
+        final BufferedReader br = new BufferedReader(new FileReader(file));
+
+        if (escapeHtml) {
+            while ((line = br.readLine()) != null) {
+                addLine.add(StringEscapeUtils.escapeHtml(line));
+            }
+        } else {
+            while ((line = br.readLine()) != null) {
+                addLine.add(line);
+            }
+        }
+
+
+        return lines;
+    }
+
+    private interface AddItemStrategy {
+        void add(String newLine);
+    }
+
+    private class AddLine {
+        final Queue<String> lines;
+        AddItemStrategy strategy;
+        final int tail;
+
+        private AddLine(Queue<String> lines, Integer tail) {
+            this.lines = lines;
+
+            if (tail == null) {
+                this.tail = -1;
+                this.strategy = justAddIt;
+            } else {
+                this.tail = tail;
+                this.strategy = addToEmptyList;
+            }
+        }
+
+        final AddItemStrategy justAddIt = new AddItemStrategy() {
+
+            @Override
+            public void add(String newLine) {
+                lines.add(newLine);
+            }
+        };
 
-                synchronized (session) {
-                    session.invalidate();
+        final AddItemStrategy addToEmptyList = new AddItemStrategy() {
+
+            @Override
+            public void add(String newLine) {
+                lines.add(newLine);
+                if (lines.size() > tail) {
+                    strategy = addToFullList;
                 }
+            }
+        };
 
-                json.put("done", Boolean.TRUE);
+        final AddItemStrategy addToFullList = new AddItemStrategy() {
+
+            @Override
+            public void add(String newLine) {
+                lines.add(newLine);
+                lines.remove();
             }
-        });
+        };
 
+        public void add(String newLine) {
+            strategy.add(newLine);
+        }
     }
 }

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml?rev=1347803&r1=1347802&r2=1347803&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml Thu Jun  7 21:23:59 2012
@@ -53,6 +53,11 @@
     </servlet>
 
     <servlet>
+        <servlet-name>LogServlet</servlet-name>
+        <servlet-class>org.apache.tomee.webapp.servlet.LogServlet</servlet-class>
+    </servlet>
+
+    <servlet>
         <servlet-name>LogoutServlet</servlet-name>
         <servlet-class>org.apache.tomee.webapp.servlet.LogoutServlet</servlet-class>
     </servlet>
@@ -103,6 +108,11 @@
     </servlet-mapping>
 
     <servlet-mapping>
+        <servlet-name>LogServlet</servlet-name>
+        <url-pattern>/log/*</url-pattern>
+    </servlet-mapping>
+
+    <servlet-mapping>
         <servlet-name>LogoutServlet</servlet-name>
         <url-pattern>/logout/*</url-pattern>
     </servlet-mapping>

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationController.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationController.js?rev=1347803&r1=1347802&r2=1347803&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationController.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationController.js Thu Jun  7 21:23:59 2012
@@ -152,6 +152,14 @@ TOMEE.ApplicationController = function (
         throw "app.console.executed not implemented";
     });
 
+    channel.bind('app.new.log.data', function (params) {
+        logView.loadData(params);
+    });
+
+    channel.bind('trigger.log.load', function (params) {
+        model.loadLog(params.file, params.tail);
+    });
+
     var view = TOMEE.ApplicationView({
         channel:channel,
         groups:{
@@ -159,10 +167,11 @@ TOMEE.ApplicationController = function (
             'apps':appsView,
             'log':logView
         },
-        initTab:'home'
+        initTab:'log'
     });
 
     model.loadSystemInfo();
+    model.loadLog(null, null);
 
     return {
 

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationModel.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationModel.js?rev=1347803&r1=1347802&r2=1347803&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationModel.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/ApplicationModel.js Thu Jun  7 21:23:59 2012
@@ -27,6 +27,7 @@ TOMEE.ApplicationModel = function (cfg) 
     var channel = cfg.channel;
 
     var systemInfo = {};
+    var logInfo = {};
 
     var request = function (params) {
         $.ajax({
@@ -75,13 +76,13 @@ TOMEE.ApplicationModel = function (cfg) 
         getSystemInfo:function () {
             return systemInfo;
         },
-        execute: function(codeType, codeText) {
+        execute:function (codeType, codeText) {
             request({
                 method:'POST',
                 url:TOMEE.baseURL('console'),
-                data: {
-                    engineName: codeType,
-                    scriptCode: codeText
+                data:{
+                    engineName:codeType,
+                    scriptCode:codeText
                 },
                 success:function (data) {
                     systemInfo = data;
@@ -89,6 +90,32 @@ TOMEE.ApplicationModel = function (cfg) 
                 }
             });
 
+        },
+        loadLog:function (file, tail) {
+            var data = {
+                escapeHtml:true
+            };
+
+            if (file) {
+                data.file = file;
+            }
+
+            if (tail) {
+                data.tail = tail;
+            }
+
+            request({
+                method:'GET',
+                url:TOMEE.baseURL('log'),
+                data:data,
+                success:function (data) {
+                    logInfo = data;
+                    channel.send('app.new.log.data', data);
+                }
+            });
+        },
+        getLogInfo:function () {
+            return logInfo;
         }
     };
 }
\ No newline at end of file

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/util/I18N.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/util/I18N.js?rev=1347803&r1=1347802&r2=1347803&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/util/I18N.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/util/I18N.js Thu Jun  7 21:23:59 2012
@@ -30,17 +30,19 @@ TOMEE.I18N = (function () {
         'application.apps':'Apps',
         'application.log':'Log',
 
-        'application.deployments': 'Deployments',
+        'application.deployments':'Deployments',
 
-        'application.jdni': 'Jndi',
-        'application.saved.objects': 'Saved Objects',
-        'application.console': 'Console',
-        'application.mdbs': 'MDBs',
-        'application.ws': 'Webservices',
-
-        'application.console.execute': 'Execute',
-        'application.console.Javascript': 'Javascript',
-        'application.console.Groovy': 'Groovy',
+        'application.jdni':'Jndi',
+        'application.saved.objects':'Saved Objects',
+        'application.console':'Console',
+        'application.mdbs':'MDBs',
+        'application.ws':'Webservices',
+
+        'application.console.execute':'Execute',
+        'application.console.Javascript':'Javascript',
+        'application.console.Groovy':'Groovy',
+
+        'application.log.load':'Load',
 
         'dummy':'dummy'
     };

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewHome.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewHome.js?rev=1347803&r1=1347802&r2=1347803&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewHome.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewHome.js Thu Jun  7 21:23:59 2012
@@ -134,30 +134,36 @@ TOMEE.ApplicationViewHome = function (cf
             },
             children: [
                 {
-                    elName:'scriptSelector',
-                    tag:'select',
+                    tag:'div',
+                    cls:'pull-right',
                     children: [
                         {
-                            tag:'option',
-                            html: TOMEE.I18N.get('application.console.Javascript'),
-                            attributes: {
-                                value: 'JavaScript'
-                            }
+                            elName:'scriptSelector',
+                            tag:'select',
+                            children: [
+                                {
+                                    tag:'option',
+                                    html: TOMEE.I18N.get('application.console.Javascript'),
+                                    attributes: {
+                                        value: 'JavaScript'
+                                    }
+                                },
+                                {
+                                    tag:'option',
+                                    html: TOMEE.I18N.get('application.console.Groovy'),
+                                    attributes: {
+                                        value: 'Groovy'
+                                    }
+                                }
+                            ]
                         },
                         {
-                            tag:'option',
-                            html: TOMEE.I18N.get('application.console.Groovy'),
-                            attributes: {
-                                value: 'Groovy'
-                            }
+                            elName:'executeBtn',
+                            tag:'button',
+                            cls:'btn',
+                            html: TOMEE.I18N.get('application.console.execute')
                         }
                     ]
-                },
-                {
-                    elName:'executeBtn',
-                    tag:'button',
-                    cls:'btn',
-                    html: TOMEE.I18N.get('application.console.execute')
                 }
             ]
         });

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewLog.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewLog.js?rev=1347803&r1=1347802&r2=1347803&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewLog.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/js/tomee/view/ApplicationViewLog.js Thu Jun  7 21:23:59 2012
@@ -23,20 +23,113 @@ TOMEE.ApplicationViewLog = function (cfg
 
     var elMapContent = TOMEE.el.getElMap({
         elName:'main',
-        tag:'div',
-        attributes:{
-            style:'background-color: blue; padding: 5px;'
+        tag:'div'
+    });
+
+    var lines = (function () {
+        var innerPanel = $('<div style="height: 250px; position: relative; overflow: auto;"></div>');
+
+        return {
+            getEl:function () {
+                return innerPanel;
+            },
+            load:function (data) {
+                innerPanel.empty();
+
+                var newData = $('<div></div>');
+                for(var i = 0; i < data.length; i++) {
+                    newData.append(data[i]);
+                    newData.append('<br/>');
+                }
+
+                innerPanel.append(newData);
+            }
         }
+    })();
+
+    var elBottomBar = TOMEE.el.getElMap({
+        elName:'main',
+        tag:'form',
+        cls:'well form-inline',
+        attributes:{
+            style:'height: 27px;margin-bottom: 0px;padding-top: 1px;padding-left: 1px;padding-bottom: 1px;padding-right: 1px;'
+        },
+        children:[
+            {
+                tag:'div',
+                cls:'pull-right',
+                children:[
+                    {
+                        elName:'fileSelector',
+                        tag:'select'
+                    },
+                    {
+                        elName:'loadBtn',
+                        tag:'button',
+                        cls:'btn',
+                        html:TOMEE.I18N.get('application.log.load')
+                    }
+                ]
+            }
+        ]
     });
 
+    elBottomBar.loadBtn.bind('click', function () {
+        var file = elBottomBar.fileSelector.val();
+        var tail = 100; //TODO
+        channel.send('trigger.log.load', {
+            file:file,
+            tail:tail
+        });
+    });
+
+    elMapContent.main.append(lines.getEl());
+    elMapContent.main.append(elBottomBar.main);
+
     var setHeight = function (height) {
-        elMapContent.main.height(height - TOMEE.el.getBorderSize(elMapContent.main));
+        var mySize = height - TOMEE.el.getBorderSize(elMapContent.main);
+        var gridSize = mySize - elBottomBar.main.outerHeight(true);
+
+        elMapContent.main.height(mySize);
+        lines.getEl().height(gridSize);
+    };
+
+    var loadFilesField = function (files) {
+        var getOption = function (fileName) {
+            var option = $('<option></option>');
+            option.attr('value', fileName);
+            option.append(fileName);
+            return option;
+        };
+
+        var selector = elBottomBar.fileSelector;
+        selector.empty();
+        if (!files) {
+            return;
+        }
+        for (var i = 0; i < files.length; i++) {
+            selector.append(getOption(files[i]));
+        }
+    };
+
+    var loadLogTable = function (data) {
+        lines.load(data);
+    };
+
+    var loadData = function (data) {
+        loadFilesField(data.files);
+
+        if (data.log) {
+            loadLogTable(data.log.lines);
+        }
     };
 
     return {
+
         getEl:function () {
             return elMapContent.main;
         },
-        setHeight:setHeight
+        setHeight:setHeight,
+        loadData:loadData
     };
 };
\ No newline at end of file