Advertisement
Guest User

Untitled

a guest
Sep 13th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.19 KB | None | 0 0
  1. package monitor;
  2.  
  3.  
  4. import java.io.InputStream;
  5. import java.io.ObjectInputStream;
  6. import java.sql.Connection;
  7. import java.sql.DriverManager;
  8. import java.sql.PreparedStatement;
  9. import java.sql.ResultSet;
  10. import java.sql.SQLException;
  11. import java.util.ArrayList;
  12. import org.apache.log4j.spi.LoggingEvent;
  13.  
  14. public class LogDatabase {
  15.  
  16. private String password;
  17. private int port;
  18. private String url;
  19. private String database;
  20. private String table;
  21. private String user;
  22. private Connection connection;
  23.  
  24. LogDatabase()
  25. {
  26.  
  27. }
  28.  
  29. /**
  30. * A helper function to quickly set all of the main details in 1 go.
  31. * @param user The user name for the database server.
  32. * @param password The password for the database server.
  33. * @param url The url for the database server.
  34. * @param database The database that stores the logging events.
  35. * @param table The table that stores the logging events.
  36. * @param port The port that the database server listens on.
  37. */
  38. public void setDetails(String user, String password, String url, String database, String table, int port)
  39. {
  40. this.setDatabase(database);
  41. this.setPassword(password);
  42. this.setPort(port);
  43. this.setUrl(url);
  44. this.setTable(table);
  45. this.setUser(user);
  46. }
  47.  
  48. /**
  49. * Connects to the database, using parameters that have already been defined.
  50. */
  51. public void connect()
  52. {
  53. try
  54. {
  55. Class.forName("com.mysql.jdbc.Driver").newInstance();
  56. String connectString = "jdbc:mysql://" + this.url + "/" + this.database + "?user=" + this.user + "&password=" +this.password;
  57. this.connection = DriverManager.getConnection(connectString);
  58. }
  59. catch(Exception e)
  60. {
  61. System.out.println(e.getMessage());
  62. }
  63. }
  64.  
  65. /**
  66. * Gets all logging events from the server. these can be filtered with the filter fuctions.
  67. * @return An arraylist of the logging events.
  68. */
  69. public ArrayList<LoggingEvent> getLogEvents(String logger, String message, String level)
  70. {
  71. try
  72. {
  73. QueryBuilder builder = new QueryBuilder();
  74. builder.setAllColumns(true);
  75. builder.setTable(this.table);
  76. if(!message.equals(""))
  77. builder.addLike("message", message);
  78. if(!logger.equals(""))
  79. builder.addEquals("logger", logger);
  80. if(!level.equals(""))
  81. builder.addEquals("level", level);
  82. ResultSet rs = builder.executeStatement(this.connection);
  83. return readResults(rs);
  84. }
  85. catch(Exception e)
  86. {
  87. System.out.println(e.getMessage());
  88. }
  89. //if there was an error then just return null
  90. return null;
  91. }
  92.  
  93.  
  94. /**
  95. * Generates an arraylist from a result set.
  96. * @param rs The result set to be read.
  97. * @return An array list containing the logging event objects.
  98. */
  99. private ArrayList<LoggingEvent> readResults(ResultSet rs)
  100. {
  101. try
  102. {
  103. InputStream is = null;
  104. ObjectInputStream ois = null;
  105. ArrayList<LoggingEvent> events = new ArrayList<LoggingEvent>();
  106. while(rs.next())
  107. {
  108. is = rs.getBlob("event").getBinaryStream();
  109. ois = new ObjectInputStream(is);
  110. LoggingEvent e = (LoggingEvent)ois.readObject();
  111. events.add(e);
  112. System.out.println(e.getMessage());
  113. }
  114. return events;
  115. }
  116. catch(Exception e)
  117. {
  118. System.out.println(e.getMessage());
  119. }
  120. return null;
  121. }
  122.  
  123. public void storeEvent(LoggingEvent event) throws SQLException
  124. {
  125. String prepared = "insert into " + this.table + " (event, message, logger, level, timeStamp) values(?,?,?, ?, ?)";
  126. PreparedStatement statement = connection.prepareStatement(prepared);
  127. statement.setObject(1, event);
  128. statement.setString(2, event.getRenderedMessage());
  129. statement.setString(3, event.getLoggerName());
  130. statement.setString(4, event.getLevel().toString());
  131. statement.setLong(5, event.getTimeStamp());
  132. statement.execute();
  133. }
  134.  
  135.  
  136. /**
  137. * @return the password
  138. */
  139. public String getPassword() {
  140. return password;
  141. }
  142.  
  143. /**
  144. * @param password the password to set
  145. */
  146. public void setPassword(String password) {
  147. this.password = password;
  148. }
  149.  
  150. /**
  151. * @return the port
  152. */
  153. public int getPort() {
  154. return port;
  155. }
  156.  
  157. /**
  158. * @param port the port to set
  159. */
  160. public void setPort(int port) {
  161. this.port = port;
  162. }
  163.  
  164. /**
  165. * @return the url
  166. */
  167. public String getUrl() {
  168. return url;
  169. }
  170.  
  171. /**
  172. * @param url the url to set
  173. */
  174. public void setUrl(String url) {
  175. this.url = url;
  176. }
  177.  
  178. /**
  179. * @return the database
  180. */
  181. public String getDatabase() {
  182. return database;
  183. }
  184.  
  185. /**
  186. * @param database the database to set
  187. */
  188. public void setDatabase(String database) {
  189. this.database = database;
  190. }
  191.  
  192. /**
  193. * @return the table
  194. */
  195. public String getTable() {
  196. return table;
  197. }
  198.  
  199. /**
  200. * @param table the table to set
  201. */
  202. public void setTable(String table) {
  203. this.table = table;
  204. }
  205.  
  206. /**
  207. * @return the user
  208. */
  209. public String getUser() {
  210. return user;
  211. }
  212.  
  213. /**
  214. * @param user the user to set
  215. */
  216. public void setUser(String user) {
  217. this.user = user;
  218. }
  219. }
  220.  
  221.  
  222.  
  223. package monitor;
  224.  
  225. import java.sql.Connection;
  226. import java.sql.ResultSet;
  227. import java.sql.Statement;
  228. import java.util.*;
  229.  
  230.  
  231. public class QueryBuilder {
  232.  
  233. private String table;
  234. private ArrayList<String> parameters;
  235. private HashMap<String, String> equals;
  236. private HashMap<String, String> like;
  237. private boolean allColumns;
  238. public QueryBuilder()
  239. {
  240. this.like = new HashMap<String, String>();
  241. this.equals = new HashMap<String, String>();
  242. this.parameters = new ArrayList<String>();
  243. }
  244.  
  245. public String getStatementString()
  246. {
  247. StringBuilder statement = new StringBuilder();
  248. String operation = "select";
  249. String from = "from " + this.getTable();
  250.  
  251. statement.append(operation);
  252. statement.append(" ");
  253. statement.append(this.getParameterString());
  254. statement.append(" ");
  255. statement.append(from);
  256. statement.append(" ");
  257. statement.append(this.getWhereString());
  258. return statement.toString();
  259. }
  260.  
  261. private String getParameterString()
  262. {
  263. StringBuilder parametersString = new StringBuilder();
  264. if(this.isAllColumns())
  265. parametersString.append("*");
  266. else
  267. {
  268. for(int i = 0; i < this.getParameters().size(); i++)
  269. {
  270. if(i != 0)
  271. parametersString.append(",");
  272. parametersString.append(this.getParameters().get(i));
  273. }
  274. }
  275. return parametersString.toString();
  276. }
  277.  
  278. private String getWhereString()
  279. {
  280. StringBuilder statement = new StringBuilder();
  281. if(this.like.size() + this.equals.size() != 0)
  282. {
  283. statement.append(" where ");
  284. statement.append(" ");
  285. statement.append(this.getEqualsString(equals));
  286. if(this.equals.size() != 0 && this.like.size() != 0){
  287. statement.append(" and ");
  288. }
  289. else{
  290. statement.append(" ");
  291. }
  292. statement.append(this.getLikeString(this.like));
  293. }
  294. return statement.toString();
  295. }
  296.  
  297. private String getLikeString(HashMap<String, String> parameters)
  298. {
  299. StringBuilder output = new StringBuilder();
  300. String[] likeKeys = this.like.keySet().toArray(new String[like.keySet().size()]);
  301. for(int i = 0; i < like.keySet().size(); i++)
  302. {
  303. if(i != 0)
  304. output.append(" and ");
  305. output.append(likeKeys[i]);
  306. output.append(" like ");
  307. output.append(" '%").append(getLike().get(likeKeys[i])).append("%'");
  308. }
  309. return output.toString();
  310. }
  311.  
  312. private String getEqualsString(HashMap<String, String> parameters)
  313. {
  314. StringBuilder output = new StringBuilder();
  315. String[] equalsKeys = (String[]) this.equals.keySet().toArray(new String[equals.keySet().size()]);
  316. for(int i = 0; i < equals.keySet().size(); i++)
  317. {
  318. if(i != 0)
  319. output.append(" and ");
  320. output.append(equalsKeys[i]);
  321. output.append(" = ");
  322. output.append(" '").append(getEquals().get(equalsKeys[i])).append("'");
  323. }
  324. return output.toString();
  325. }
  326.  
  327.  
  328. public ResultSet executeStatement(Connection connection)
  329. {
  330. try{
  331. Statement statement = connection.createStatement();
  332. return statement.executeQuery(this.getStatementString());
  333. }
  334. catch(Exception e)
  335. {
  336. System.out.println(this.getStatementString());
  337. System.out.println(e.getMessage());
  338. }
  339. return null;
  340. }
  341.  
  342. public void addLike(String column, String value)
  343. {
  344. this.getLike().put(column, value);
  345. }
  346.  
  347. public void addEquals(String column, String value)
  348. {
  349. this.getEquals().put(column, value);
  350. }
  351.  
  352. public void addParameter(String parameter)
  353. {
  354. this.getParameters().add(parameter);
  355. }
  356.  
  357. /**
  358. * @return the table
  359. */
  360. public String getTable() {
  361. return table;
  362. }
  363.  
  364. /**
  365. * @param table the table to set
  366. */
  367. public void setTable(String table) {
  368. this.table = table;
  369. }
  370.  
  371. /**
  372. * @return the parameters
  373. */
  374. public ArrayList<String> getParameters() {
  375. return parameters;
  376. }
  377.  
  378. /**
  379. * @param parameters the parameters to set
  380. */
  381. public void setParameters(ArrayList<String> parameters) {
  382. this.parameters = parameters;
  383. }
  384.  
  385. /**
  386. * @return the equals
  387. */
  388. public HashMap<String, String> getEquals() {
  389. return equals;
  390. }
  391.  
  392. /**
  393. * @param equals the equals to set
  394. */
  395. public void setEquals(HashMap<String, String> equals) {
  396. this.equals = equals;
  397. }
  398.  
  399. /**
  400. * @return the like
  401. */
  402. public HashMap<String, String> getLike() {
  403. return like;
  404. }
  405.  
  406. /**
  407. * @param like the like to set
  408. */
  409. public void setLike(HashMap<String, String> like) {
  410. this.like = like;
  411. }
  412.  
  413. /**
  414. * @return the allColumns
  415. */
  416. public boolean isAllColumns() {
  417. return allColumns;
  418. }
  419.  
  420. /**
  421. * @param allColumns the allColumns to set
  422. */
  423. public void setAllColumns(boolean allColumns) {
  424. this.allColumns = allColumns;
  425. }
  426.  
  427.  
  428. }
  429.  
  430.  
  431. /*
  432. * To change this template, choose Tools | Templates
  433. * and open the template in the editor.
  434. */
  435.  
  436. package monitor;
  437.  
  438. import java.io.IOException;
  439. import java.io.ObjectInputStream;
  440. import java.io.ObjectOutputStream;
  441. import java.io.OutputStream;
  442. import java.io.PrintWriter;
  443. import java.util.ArrayList;
  444. import java.util.Iterator;
  445. import javax.servlet.ServletConfig;
  446. import javax.servlet.http.*;
  447. import org.apache.log4j.spi.LoggingEvent;
  448. public class Log extends HttpServlet
  449. {
  450. private LogDatabase DB;
  451.  
  452. public void init()
  453. {
  454. this.DB = new LogDatabase();
  455. ServletConfig config = this.getServletConfig();
  456. String user = config.getInitParameter("user");
  457. String table = config.getInitParameter("table");
  458. String password = config.getInitParameter("password");
  459. String url = config.getInitParameter("url");
  460. String database = config.getInitParameter("database");
  461. //add a port thing, too lazy right now
  462. this.DB.setDetails(user, password, url, database, table, 8084);
  463. this.DB.connect();
  464. }
  465.  
  466. public void doPost(HttpServletRequest request, HttpServletResponse response)
  467. {
  468. PrintWriter writer = null;
  469. try
  470. {
  471. ObjectInputStream is = new ObjectInputStream(request.getInputStream());
  472. LoggingEvent e = (LoggingEvent) is.readObject();
  473. writer = response.getWriter();
  474. System.out.println(e.getRenderedMessage());
  475. this.DB.storeEvent(e);
  476.  
  477.  
  478. }
  479. catch(Exception e)
  480. {
  481. writer.write(e.getMessage());
  482. }
  483. }
  484.  
  485. public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
  486. {
  487. ServletConfig config = this.getServletConfig();
  488. String logger = request.getParameter("logger");
  489. String level = request.getParameter("level");
  490. String message = request.getParameter("message");
  491. ArrayList<LoggingEvent> events = this.DB.getLogEvents(logger, message, level);
  492. response.setContentType("application/octet-stream");
  493. ObjectOutputStream stream = new ObjectOutputStream(response.getOutputStream());
  494. stream.writeObject(events);
  495.  
  496. }
  497. }
  498.  
  499. /*
  500. * To change this template, choose Tools | Templates
  501. * and open the template in the editor.
  502. */
  503.  
  504. package monitor;
  505.  
  506. import java.util.*;
  507. import javax.servlet.http.*;
  508. import org.apache.log4j.spi.*;
  509. import javax.servlet.*;
  510. import java.io.*;
  511. import org.apache.log4j.*;
  512. import javax.xml.parsers.*;
  513. import javax.xml.transform.*;
  514. import javax.xml.transform.dom.*;
  515. import javax.xml.transform.stream.*;
  516. //import org.apache.xerces.parsers.*;
  517. import org.w3c.dom.*;
  518. import java.lang.Long;
  519.  
  520. //Most of the html stuff in here is quite roughly done. normally id be sane and use a library but I dont know what you wanted so i figured id do it this way.
  521. //in most projects like this i would have created a seperate servlet to act as a rest service, but in the case of this one ive made it so that the get request
  522. //passes a "service" parameter to determine what to send back.
  523. public class Demo extends HttpServlet{
  524.  
  525. private LogDatabase DB;
  526.  
  527. public Demo()
  528. {
  529.  
  530. }
  531.  
  532. public void doGet(HttpServletRequest request, HttpServletResponse response)
  533. {
  534. PrintWriter writer = null;
  535. try
  536. {
  537. writer = response.getWriter();
  538. }
  539. catch(Exception e)
  540. {
  541. System.out.println(e.getMessage());
  542. }
  543. if(request.getParameter("service") == null)
  544. {
  545. writer.write(this.getPage());
  546. return;
  547. }
  548. if(request.getParameter("service").equals("update"))
  549. {
  550. String logger = request.getParameter("logger");
  551. String level = request.getParameter("level");
  552. response.setContentType("text/xml");
  553. response.setHeader("Cache-Control", "no-cache");
  554. response.setHeader("Pragma", "no-cache");
  555.  
  556. try{
  557. Document document = null;
  558.  
  559. {
  560. String filter = request.getParameter("filter");
  561. document = this.getXML(DB.getLogEvents(level.toString(), logger, filter));
  562. }
  563. Source source = new DOMSource(document);
  564. Result result = new StreamResult(response.getWriter());
  565. Transformer xformer = TransformerFactory.newInstance().newTransformer();
  566. xformer.transform(source, result);
  567. }
  568. catch(Exception e)
  569. {
  570. System.out.println(e.getMessage());
  571. }
  572. return;
  573. }
  574. else
  575. if(request.getParameter("service").equals("delete"))
  576. {
  577.  
  578. }
  579. }
  580.  
  581. /**
  582. All of the init stuff goes in here. the connection details are read from the web.xml config file.
  583. **/
  584. public void init()
  585. {
  586. this.DB = new LogDatabase();
  587. ServletConfig config = getServletConfig();
  588. String user = config.getInitParameter("user");
  589. String password = config.getInitParameter("password");
  590. String url = config.getInitParameter("url");
  591. String table = config.getInitParameter("table");
  592. String database = config.getInitParameter("database");
  593. this.DB.setDetails(table, user, password, url, database, 8084);
  594. this.DB.connect();
  595. }
  596.  
  597. /**
  598.  
  599. **/
  600. public String getSearchForm()
  601. {
  602. StringBuffer output = new StringBuffer();
  603. output.append("<form id = 'SearchForm'>");
  604. output.append("<table>");
  605. output.append(getTextSearchRow());
  606. output.append(getLevelRow());
  607. output.append(getNumberOfResultsRow());
  608. output.append(getLoggerRow());
  609. output.append(getUpdateButton());
  610. output.append("</table>");
  611. output.append("</form>");
  612. return output.toString();
  613. }
  614.  
  615. public String getUpdateButton()
  616. {
  617. StringBuffer output = new StringBuffer();
  618. output.append("<tr>");
  619. output.append("<td>");
  620. output.append("<input type = 'button' onClick = 'updateValues()' value='update'/>");
  621. output.append("</td>");
  622. output.append("</tr>");
  623. return output.toString();
  624. }
  625.  
  626. public String getRow(String data1, String data2)
  627. {
  628. StringBuffer output = new StringBuffer();
  629. output.append("<tr>");
  630. output.append("<td>");
  631. output.append(data1);
  632. output.append("</td>");
  633. output.append("<td>");
  634. output.append(data2);
  635. output.append("</td>");
  636. output.append("</tr>");
  637. return output.toString();
  638. }
  639.  
  640. public String getNumberOfResultsRow()
  641. {
  642. return getRow("Maximum Results", "<input type = 'text' name = 'numberResults' id = 'numberResults'");
  643. }
  644.  
  645. public String getTextSearchRow()
  646. {
  647. return getRow("Search", "<input type = 'text' name = 'search' id = 'search'");
  648. }
  649.  
  650. public String getLevelRow()
  651. {
  652. return getRow("Level", getLevelOptions());
  653. }
  654.  
  655. public String getLoggerRow()
  656. {
  657. return getRow("Logger", "<input type = 'text' name = 'logger' id = 'loggerEntry'");
  658. }
  659.  
  660. public String getLevelOptions()
  661. {
  662. StringBuffer options = new StringBuffer();
  663. options.append("<select id = 'levelSelect' name = 'levelSelect'>");
  664. options.append("<option>DEBUG</option>");
  665. options.append("<option>WARN</option>");
  666. options.append("<option>INFO</option>");
  667. options.append("<option>ERROR</option>");
  668. options.append("<option>ALL</option>");
  669. options.append("</select>");
  670. return options.toString();
  671. }
  672.  
  673. public String getResultsXml()
  674. {
  675. String output = new String();
  676. return output;
  677. }
  678.  
  679. public String getPage()
  680. {
  681. StringBuffer page = new StringBuffer();
  682. page.append("<html>");
  683. page.append("<head>");
  684. page.append("<script type = 'text/javascript' src = 'Demo.js'></script>");
  685.  
  686. page.append("</head>");
  687. page.append("<body onload='init()'>");
  688. page.append("<div id = 'Events'>");
  689. page.append("</div>");
  690. page.append(this.getSearchForm());
  691. page.append("</body>");
  692. page.append("<html>");
  693. return page.toString();
  694. }
  695.  
  696.  
  697.  
  698. public Document getXML(ArrayList<LoggingEvent> events) throws ParserConfigurationException
  699. {
  700. DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
  701. DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
  702. Document document = docBuilder.newDocument();
  703.  
  704. Element root = document.createElement("Events");
  705. for(LoggingEvent e : events)
  706. {
  707. System.out.println("looping");
  708. root.appendChild(this.getLoggingEventXml(e, document));
  709. }
  710. document.appendChild(root);
  711. return document;
  712. }
  713.  
  714.  
  715. public Element getLoggingEventXml(LoggingEvent event, Document document)
  716. {
  717. Element root = document.createElement("Event");
  718.  
  719. Element logger = document.createElement("Logger");
  720. Text loggerText = document.createTextNode(event.getLoggerName());
  721. logger.appendChild(loggerText);
  722. Element message = document.createElement("Message");
  723. Text messageText = document.createTextNode(event.getMessage().toString());
  724. message.appendChild(messageText);
  725. Element level = document.createElement("Level");
  726. Text levelText = document.createTextNode(event.getLevel().toString());
  727. level.appendChild(levelText);
  728. Element time = document.createElement("Time");
  729. Text timeText = document.createTextNode(new Long(event.getTimeStamp()).toString());
  730. time.appendChild(timeText);
  731.  
  732.  
  733. root.appendChild(time);
  734. root.appendChild(logger);
  735. root.appendChild(message);
  736. root.appendChild(level);
  737. System.out.println("fsdfd");
  738. return root;
  739. }
  740. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement