org.openmrs.module.logmanager.web.controller.ToolsController.java Source code

Java tutorial

Introduction

Here is the source code for org.openmrs.module.logmanager.web.controller.ToolsController.java

Source

/**
 * The contents of this file are subject to the OpenMRS Public License
 * Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://license.openmrs.org
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 *
 * Copyright (C) OpenMRS, LLC.  All Rights Reserved.
 */
package org.openmrs.module.logmanager.web.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.openmrs.module.logmanager.Constants;
import org.openmrs.module.logmanager.impl.LevelProxy;
import org.openmrs.module.logmanager.impl.ManagerProxy;
import org.openmrs.module.logmanager.util.LogManagerUtils;
import org.openmrs.module.logmanager.web.util.WebUtils;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.ParameterizableViewController;

/**
 * Controller for tools page
 */
public class ToolsController extends ParameterizableViewController {

    protected static final Log log = LogFactory.getLog(ToolsController.class);

    /**
     * @see org.springframework.web.servlet.mvc.ParameterizableViewController#handleRequestInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        // Used for testing - testException url param throws exception
        if (request.getParameter("testException") != null)
            throw new Exception("Test exception");

        Map<String, Object> model = new HashMap<String, Object>();

        String injectLoggerName = ServletRequestUtils.getStringParameter(request, "injectLoggerName",
                Constants.MODULE_PACKAGE);
        LevelProxy injectLevel = new LevelProxy(
                ServletRequestUtils.getIntParameter(request, "injectLevel", LevelProxy.INFO.getIntValue()));
        String injectMessage = request.getParameter("injectMessage");
        model.put("injectLoggerName", injectLoggerName);
        model.put("injectLevel", injectLevel);
        model.put("injectMessage", injectMessage);

        // Special logger switches
        if (request.getParameter("startAPIProfiling") != null)
            setProfilingLogging(true);
        else if (request.getParameter("stopAPIProfiling") != null)
            setProfilingLogging(false);
        else if (request.getParameter("startHibernateSQL") != null)
            setHibernateSQLLogging(true);
        else if (request.getParameter("stopHibernateSQL") != null)
            setHibernateSQLLogging(false);

        else if (request.getParameter("inject") != null) {
            if (!LogManagerUtils.isValidLoggerName(injectLoggerName))
                model.put("loggerNameError", true);
            else {
                ManagerProxy.logEvent(injectLoggerName, injectLevel, injectMessage);
                WebUtils.setInfoMessage(request, Constants.MODULE_ID + ".tools.injectSuccess", null);
                // Clear message
                model.put("injectMessage", "");
            }
        }

        Logger profilingLogger = LogManager.exists(Constants.LOGGER_API_PROFILING);
        Level profilingLoggerLevel = (profilingLogger != null) ? profilingLogger.getEffectiveLevel() : null;

        model.put("apiProfilingLoggerName", Constants.LOGGER_API_PROFILING);
        model.put("apiProfilingStarted",
                (profilingLoggerLevel != null) ? (profilingLoggerLevel.toInt() <= Level.TRACE.toInt()) : false);

        Logger sqlLogger = LogManager.exists(Constants.LOGGER_HIBERNATE_SQL);
        Level sqlLoggerLevel = (sqlLogger != null) ? sqlLogger.getEffectiveLevel() : null;

        model.put("hibernateSQLLoggerName", Constants.LOGGER_HIBERNATE_SQL);
        model.put("hibernateSQLStarted",
                (sqlLoggerLevel != null) ? (sqlLoggerLevel.toInt() <= Level.DEBUG.toInt()) : false);

        return new ModelAndView(getViewName(), model);
    }

    /**
     * Toggles profiling of API service methods
     * @param on true to enable logging, else false
     */
    private void setProfilingLogging(boolean on) {
        LogManager.getLogger("org.openmrs.api").setLevel(on ? Level.TRACE : Level.WARN);
    }

    /**
     * Toggles logging of SQL in Hibernate
     * @param on true to enable logging, else false
     */
    private void setHibernateSQLLogging(boolean on) {
        LogManager.getLogger("org.hibernate.SQL").setLevel(on ? Level.DEBUG : Level.OFF);
    }
}