All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ogema.frameworkadministration.controller.LoggerController Maven / Gradle / Ivy

/**
 * This file is part of OGEMA.
 *
 * OGEMA is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3
 * as published by the Free Software Foundation.
 *
 * OGEMA is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OGEMA. If not, see .
 */
package org.ogema.frameworkadministration.controller;

import java.io.IOException;
import java.io.Writer;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.http.HttpServletResponse;

import org.ogema.core.administration.AdminLogger;
import org.ogema.core.administration.AdministrationManager;
import org.ogema.core.logging.LogLevel;
import org.ogema.core.logging.LogOutput;
import org.ogema.frameworkadministration.FrameworkAdministration;
import org.ogema.frameworkadministration.json.LoggerJsonSizeResponse;
import org.ogema.frameworkadministration.json.get.LoggerJsonGet;
import org.ogema.frameworkadministration.json.get.LoggerJsonGetList;
import org.ogema.frameworkadministration.json.post.LoggerJsonPost;

import com.fasterxml.jackson.databind.ObjectMapper;

/**
 *
 * @author tgries
 */
public class LoggerController {

	private AdministrationManager administrationManager;

	public static LoggerController instance;

	public static LoggerController getInstance() {
		if (instance == null) {
			instance = new LoggerController();
		}
		return instance;
	}

	private LoggerController() {
	}

	/**
	 * Reads the content of the OGEMA cache logger and returns it as a string
	 * @return the content of the cache as string 
	 */
	public String getCacheContent() {

		List loggers = administrationManager.getAllLoggers();
		String result = "{}";

		AdminLogger initLogger = loggers.get(0);
		List list = initLogger.getCache();

		ObjectMapper mapper = new ObjectMapper();

		try {
			result = mapper.writeValueAsString(list);
		} catch (IOException ex) {
			Logger.getLogger(FrameworkAdministration.class.getName()).log(Level.SEVERE, null, ex);
		}

		return result;

	}

	/**
	 * Generates a list of all OGEMA loggers as json. See {@see org.ogema.frameworkadministration.json.get.LoggerJsonGetList} for message format.
	 * @param out write output to this stream.
	 */
	public void writeAllLoggersJSON(Writer out) {

		List loggers = administrationManager.getAllLoggers();

		if (loggers.isEmpty()) {
			return;
		}

		AdminLogger initLogger = loggers.get(0);

		String path = initLogger.getFilePath().getPath();
		long sizeFile = initLogger.getMaximumSize(LogOutput.FILE);
		long sizeCache = initLogger.getMaximumSize(LogOutput.CACHE);

		ObjectMapper mapper = new ObjectMapper();

		LoggerJsonGetList loggerList = new LoggerJsonGetList();
		loggerList.setPath(path);
		//loggerList.setSizeCache(sizeCache);
		loggerList.setSizeCache(new LoggerJsonSizeResponse("sizeCache", sizeCache, null, null));

		//loggerList.setSizeFile(sizeFile);
		loggerList.setSizeFile(new LoggerJsonSizeResponse("sizeFile", sizeFile, null, null));

		AdminLogger[] sortedLoggers = loggers.toArray(new AdminLogger[loggers.size()]);
		Arrays.sort(sortedLoggers, new Comparator() {

			@Override
			public int compare(AdminLogger o1, AdminLogger o2) {
				return o1.getName().compareTo(o2.getName());
			}

		});

		for (AdminLogger adminLogger : sortedLoggers) {

			String name = adminLogger.getName();
			LogLevel file = adminLogger.getMaximumLogLevel(LogOutput.FILE);
			LogLevel cache = adminLogger.getMaximumLogLevel(LogOutput.CACHE);
			LogLevel console = adminLogger.getMaximumLogLevel(LogOutput.CONSOLE);
			LoggerJsonGet loggerJson = new LoggerJsonGet(name, file, cache, console);
			loggerList.getList().add(loggerJson);
		}

		try {
			mapper.writeValue(out, loggerList);
		} catch (IOException ex) {
			Logger.getLogger(FrameworkAdministration.class.getName()).log(Level.SEVERE, null, ex);
		}

	}

	/**
	 * Sets the values for a given logger defined in the json message.
	 * @param loggerJsonPost json message. See {@see org.ogema.frameworkadministration.json.post.LoggerJsonPost} for message format.
	 */
	public void setLoggerValues(LoggerJsonPost loggerJsonPost) {

		String name = loggerJsonPost.getName();
		LogLevel file = loggerJsonPost.getFile();
		LogLevel cache = loggerJsonPost.getCache();
		LogLevel console = loggerJsonPost.getConsole();

		List loggers = administrationManager.getAllLoggers();
		for (AdminLogger adminLogger : loggers) {
			if (adminLogger.getName().equals(name)) {
				if (file != null) {
					adminLogger.overwriteMaximumLogLevel(LogOutput.FILE, file);
				}
				if (cache != null) {
					adminLogger.overwriteMaximumLogLevel(LogOutput.CACHE, cache);
				}
				if (console != null) {
					adminLogger.overwriteMaximumLogLevel(LogOutput.CONSOLE, console);
				}
			}
		}
	}

	/**
	 * Sets the size for a given logger. Sends a message to the servlet response on success or failure.
	 * @param logOutput OGEMA output target
	 * @param sizeBytes the size in bytes
	 * @param resp the HttpServletResponse object from the servlet class
	 */
	public void setSizeLogger(LogOutput logOutput, long sizeBytes, HttpServletResponse resp) {
		List loggers = administrationManager.getAllLoggers();
		AdminLogger initLogger = loggers.get(0);
		initLogger.setMaximumSize(logOutput, sizeBytes);

		//give response with current values
		LoggerJsonSizeResponse loggerJsonSize = new LoggerJsonSizeResponse();

		long actualSizeBytes = initLogger.getMaximumSize(logOutput);
		if (actualSizeBytes == sizeBytes) {
			loggerJsonSize.setMsgType("SUCCESS");
			loggerJsonSize.setMsg("ok");
		}
		else {
			loggerJsonSize.setMsgType("ERROR");
			loggerJsonSize.setMsg("could not set values due to framework constraints");
		}

		switch (logOutput) {
		case FILE:
			loggerJsonSize.setName("sizeFile");
			break;
		case CACHE:
			loggerJsonSize.setName("sizeCache");
			break;
		default:
			loggerJsonSize.setName("unknown");
			break;
		}

		loggerJsonSize.setValue(initLogger.getMaximumSize(logOutput));

		ObjectMapper mapper = new ObjectMapper();

		String result = "{}";

		try {
			result = mapper.writeValueAsString(loggerJsonSize);
		} catch (IOException ex) {
			ex.printStackTrace();
			Logger.getLogger(FrameworkAdministration.class.getName()).log(Level.SEVERE, null, ex);
		}

		try {
			resp.getWriter().write(result);
			resp.setStatus(200);
		} catch (IOException ex) {
			ex.printStackTrace();
			Logger.getLogger(LoggerController.class.getName()).log(Level.SEVERE, null, ex);
		}

	}

	public AdministrationManager getAdministrationManager() {
		return administrationManager;
	}

	public void setAdministrationManager(AdministrationManager administrationManager) {
		this.administrationManager = administrationManager;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy