📄 compieremonitor.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* 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.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.web;
import java.io.*;
import java.lang.management.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.ecs.*;
import org.apache.ecs.xhtml.*;
import org.compiere.*;
import org.compiere.db.*;
import org.compiere.model.*;
import org.compiere.server.*;
import org.compiere.util.*;
/**
* Compiere Server Monitor
*
* @author Jorg Janke
* @version $Id: CompiereMonitor.java,v 1.13 2005/12/05 02:39:22 jjanke Exp $
*/
public class CompiereMonitor extends HttpServlet
{
/** Logger */
private static CLogger log = CLogger.getCLogger(CompiereMonitor.class);
/** The Server */
private CompiereServerMgr m_serverMgr = null;
/** Message */
private p m_message = null;
/**
* Get
* @param request request
* @param response response
* @throws javax.servlet.ServletException
* @throws java.io.IOException
*/
protected void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
m_message = null;
if (processLogParameter (request, response))
return;
if (processTraceParameter (request, response))
return;
if (processEMailParameter (request, response))
return;
if (processCacheParameter (request, response))
return;
//
if (processRunNowParameter (request))
;
else
processActionParameter (request);
createSummaryPage(request, response);
} // doGet
/**
* Post
* @param request request
* @param response response
* @throws javax.servlet.ServletException
* @throws java.io.IOException
*/
protected void doPost (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
} // doPost
/**
* Process Log Parameter and return log page
* @param request request
* @param response response
* @return true if it was a log request
*/
private boolean processLogParameter (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String serverID = WebUtil.getParameter (request, "Log");
if (serverID == null || serverID.length() == 0)
return false;
log.info ("ServerID=" + serverID);
CompiereServer server = m_serverMgr.getServer(serverID);
if (server == null)
{
m_message = new p();
m_message.addElement(new strong("Server not found: "));
m_message.addElement(serverID);
return false;
}
WebDoc doc = WebDoc.create ("Compiere Server Monitor Log");
// Body
body b = doc.getBody();
//
p para = new p();
a link = new a ("compiereMonitor#" + serverID, "Return");
para.addElement(link);
b.addElement(para);
//
b.addElement(new h2(server.getName()));
//
table table = new table();
table.setBorder(1);
table.setCellSpacing(2);
table.setCellPadding(2);
// Header
tr line = new tr();
line.addElement(new th().addElement("Created"));
line.addElement(new th().addElement("Summary"));
// line.addElement(new th().addElement("Error"));
line.addElement(new th().addElement("Reference"));
line.addElement(new th().addElement("TextMsg"));
// line.addElement(new th().addElement("Description"));
table.addElement(line);
CompiereProcessorLog[] logs = server.getLogs();
for (int i = 0; i < logs.length; i++)
{
CompiereProcessorLog log = logs[i];
line = new tr();
line.addElement(new td().addElement(WebEnv.getCellContent(log.getCreated())));
line.addElement(new td().addElement(WebEnv.getCellContent(log.getSummary())));
line.addElement(new td().addElement(WebEnv.getCellContent(log.getReference())));
line.addElement(new td().addElement(WebEnv.getCellContent(log.getTextMsg())));
table.addElement(line);
}
//
b.addElement(table);
link = new a ("#top", "Top");
b.addElement(link);
// fini
WebUtil.createResponse (request, response, this, null, doc, false);
return true;
} // processLogParameter
/**
* Process Run Parameter
* @param request request
* @return true if it was a Run request
*/
private boolean processRunNowParameter (HttpServletRequest request)
throws ServletException, IOException
{
String serverID = WebUtil.getParameter (request, "RunNow");
if (serverID == null || serverID.length() == 0)
return false;
log.info ("ServerID=" + serverID);
CompiereServer server = m_serverMgr.getServer(serverID);
if (server == null)
{
m_message = new p();
m_message.addElement(new strong("Server not found: "));
m_message.addElement(serverID);
return false;
}
//
server.runNow();
//
return true;
} // processRunParameter
/**
* Process Action Parameter
* @param request request
*/
private void processActionParameter (HttpServletRequest request)
{
String action = WebUtil.getParameter (request, "Action");
if (action == null || action.length() == 0)
return;
log.info ("Action=" + action);
try
{
boolean start = action.startsWith("Start");
m_message = new p();
String msg = (start ? "Started" : "Stopped") + ": ";
m_message.addElement(new strong(msg));
//
String serverID = action.substring(action.indexOf("_")+1);
boolean ok = false;
if (serverID.equals("All"))
{
if (start)
ok = m_serverMgr.startAll();
else
ok = m_serverMgr.stopAll();
m_message.addElement("All");
}
else
{
CompiereServer server = m_serverMgr.getServer(serverID);
if (server == null)
{
m_message = new p();
m_message.addElement(new strong("Server not found: "));
m_message.addElement(serverID);
return;
}
else
{
if (start)
ok = m_serverMgr.start (serverID);
else
ok = m_serverMgr.stop (serverID);
m_message.addElement(server.getName());
}
}
m_message.addElement(ok ? " - OK" : " - Error!");
}
catch (Exception e)
{
m_message = new p();
m_message.addElement(new strong("Error processing parameter: " + action));
m_message.addElement(new br());
m_message.addElement(e.toString());
}
} // processActionParameter
/**
* Process Trace Parameter
* @param request request
* @param response response
* @return true if it was a trace request with output
*/
private boolean processTraceParameter (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String traceCmd = WebUtil.getParameter (request, "Trace");
String traceLevel = WebUtil.getParameter (request, "TraceLevel");
if (traceLevel != null && traceLevel.length() > 0)
{
log.info ("New Level: " + traceLevel);
CLogMgt.setLevel(traceLevel);
Ini.setProperty(Ini.P_TRACELEVEL, traceLevel);
Ini.saveProperties(false);
return false;
}
if (traceCmd == null || traceCmd.length() == 0)
return false;
log.info ("Command: " + traceCmd);
CLogFile fileHandler = CLogFile.get (false, null, false);
//
if (traceCmd.equals("ROTATE"))
{
if (fileHandler != null)
fileHandler.rotateLog();
return false; // re-display
}
else if (traceCmd.equals("DELETE"))
{
File logDir = fileHandler.getLogDirectory();
if (logDir != null && logDir.isDirectory())
{
File[] logs = logDir.listFiles();
for (int i = 0; i < logs.length; i++)
{
String fileName = logs[i].getAbsolutePath();
if (fileName.equals(fileHandler.getFileName()))
continue;
if (logs[i].delete())
log.warning("Deleted: " + fileName);
else
log.warning("Not Deleted: " + fileName);
}
}
return false; // re-display
}
// Display current log File
if (fileHandler != null && fileHandler.getFileName().equals(traceCmd))
fileHandler.flush();
// Spool File
File file = new File (traceCmd);
if (!file.exists())
{
log.warning ("Did not find File: " + traceCmd);
return false;
}
if (file.length() == 0)
{
log.warning ("File Length=0: " + traceCmd);
return false;
}
// Stream Log
log.info ("Streaming: " + traceCmd);
try
{
long time = System.currentTimeMillis(); // timer start
int fileLength = (int)file.length();
int bufferSize = 2048; // 2k Buffer
byte[] buffer = new byte[bufferSize];
//
response.setContentType("text/plain");
response.setBufferSize(bufferSize);
response.setContentLength(fileLength);
//
FileInputStream fis = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream ();
int read = 0;
while ((read = fis.read(buffer)) > 0)
out.write (buffer, 0, read);
out.flush();
out.close();
fis.close();
//
time = System.currentTimeMillis() - time;
double speed = (fileLength/1024) / ((double)time/1000);
log.info("length="
+ fileLength + " - "
+ time + " ms - "
+ speed + " kB/sec");
}
catch (IOException ex)
{
log.log(Level.SEVERE, "stream" + ex);
}
return true;
} // processTraceParameter
/**
* Process EMail Parameter
* @param request request
* @param response response
* @return true if it was a email request with output
*/
private boolean processEMailParameter (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String email = WebUtil.getParameter (request, "EMail");
if (email == null || email.length() == 0)
return false;
int AD_Client_ID = -1;
try
{
AD_Client_ID = Integer.parseInt(email);
}
catch (Exception e)
{
log.warning("Parsing: " + email + " - " + e.toString());
}
if (AD_Client_ID < 0)
{
m_message = new p();
m_message.addElement("No EMail: " + email);
return false;
}
// log.info ("Test EMail: " + AD_Client_ID);
MClient client = MClient.get(new Properties(), AD_Client_ID);
log.info ("Test: " + client);
m_message = new p();
m_message.addElement(client.getName() + ": " + client.testEMail());
return false;
} // processEMailParameter
/**
* Process Cache Parameter
* @param request request
* @param response response
* @return true if it was a email request with output
*/
private boolean processCacheParameter (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String cmd = WebUtil.getParameter (request, "CacheReset");
if (cmd == null || cmd.length() == 0)
return false;
String tableName = WebUtil.getParameter (request, "CacheTableName");
String record_ID = WebUtil.getParameter (request, "CacheRecord_ID");
m_message = new p();
try
{
if (tableName == null || tableName.length() == 0)
{
CacheMgt.get().reset();
m_message.addElement("Cache Reset: All");
}
else if (record_ID == null || record_ID.length() == 0)
{
CacheMgt.get().reset(tableName);
m_message.addElement("Cache Reset: " + tableName);
}
else
{
CacheMgt.get().reset(tableName, Integer.parseInt(record_ID));
m_message.addElement("Cache Reset: " + tableName + ", Record_ID=" + record_ID);
}
}
catch (Exception e)
{
log.severe(e.toString());
m_message.addElement("Error: " + e.toString());
}
return false; // continue
} // processEMailParameter
/**************************************************************************
* Create & Return Summary Page
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -