Package org.geoserver.web.admin

Source Code of org.geoserver.web.admin.LogPage$GSLogsModel

/* Copyright (c) 2001 - 2008 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.admin;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.logging.Level;

import org.apache.wicket.IRequestTarget;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RequestCycle;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.protocol.http.WebResponse;
import org.apache.wicket.util.io.Streams;
import org.apache.wicket.validation.validator.MinimumValidator;
import org.geoserver.config.GeoServerDataDirectory;
import org.geoserver.logging.LoggingUtils;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.web.GeoServerSecuredPage;

/**
* Shows the log file contents
*
* @author Andrea Aime - OpenGeo
*/
public class LogPage extends GeoServerSecuredPage {
    static final String LINES = "lines";

    int lines = 1000;

    File logFile;

    public LogPage(PageParameters params) {
        Form form = new Form("form");
        add(form);
       
        /**
         * take geoserver log file location from Config as absolute path and only use if valid,
         * otherwise fallback to (geoserver-root)/logs/geoserver.log as default.
         */
        String location = GeoServerExtensions.getProperty(LoggingUtils.GEOSERVER_LOG_LOCATION);
        if(location == null) {
            location= getGeoServerApplication().getGeoServer().getLogging().getLocation();
        }
        logFile = new File(location);
       
        if (!logFile.isAbsolute()) {
            // locate the geoserver.log file
            GeoServerDataDirectory dd = getGeoServerApplication().getBeanOfType(
                    GeoServerDataDirectory.class);
            logFile = new File(dd.root(), logFile.getPath());
        }
       
        if (!logFile.exists()) {
            error("Could not find the GeoServer log file: " + logFile.getAbsolutePath());
        }

        try {
            if (params.getKey(LINES) != null) {
                if (params.getInt(LINES) > 0) {
                    lines = params.getInt(LINES);
                }
            }
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, "Error parsing the lines parameter: ", params.getKey(LINES));
        }

        form.add(new SubmitLink("refresh") {
            @Override
            public void onSubmit() {
                setResponsePage(LogPage.class, new PageParameters(LINES + "="
                        + String.valueOf(lines)));
            }
        });

        TextField lines = new TextField("lines", new PropertyModel(this, "lines"));
        lines.add(new MinimumValidator(1));
        form.add(lines);

        TextArea logs = new TextArea("logs", new GSLogsModel());
        logs.setOutputMarkupId(true);
        logs.setMarkupId("logs");
        add(logs);

        add(new Link("download") {

            @Override
            public void onClick() {
                RequestCycle.get().setRequestTarget(new IRequestTarget() {

                    public void detach(RequestCycle requestCycle) {
                    }

                    public void respond(RequestCycle requestCycle) {

                        InputStream is = null;
                        try {
                            is = new FileInputStream(logFile);

                            WebResponse r = (WebResponse) requestCycle.getResponse();
                            r.setAttachmentHeader("geoserver.log");
                            r.setContentType("text/plain");
                            Streams.copy(is, r.getOutputStream());
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        } finally {
                            if(is != null) {
                                try {
                                    is.close();
                                } catch (IOException e) {
                                }
                            }
                        }
                    }

                });

            }
        });

    }

    public class GSLogsModel extends LoadableDetachableModel {

        @Override
        protected Object load() {
            BufferedReader br = null;
            try {
                // load the logs line by line, keep only the last 1000 lines
                LinkedList<String> lineList = new LinkedList<String>();

                br = new BufferedReader(new FileReader(logFile));
                String line;
                while ((line = br.readLine()) != null) {
                    lineList.addLast(line);
                    if (lineList.size() > LogPage.this.lines) {
                        lineList.removeFirst();
                    }
                }

                StringBuilder result = new StringBuilder();
                for (String logLine : lineList) {
                    result.append(logLine).append("\n");
                }
                return result;
            } catch (Exception e) {
                error(e);
                return e.getMessage();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (Exception e) {
                        // ignore
                    }
                }
            }
        }

    }
}
TOP

Related Classes of org.geoserver.web.admin.LogPage$GSLogsModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.