예제 #1
0
 @Override
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
   StringBuilder sb = new StringBuilder();
   try {
     Monitor.fetchData();
     bannerText =
         sanitize(Monitor.getContext().getConfiguration().get(Property.MONITOR_BANNER_TEXT));
     bannerColor =
         Monitor.getContext()
             .getConfiguration()
             .get(Property.MONITOR_BANNER_COLOR)
             .replace("'", "'");
     bannerBackground =
         Monitor.getContext()
             .getConfiguration()
             .get(Property.MONITOR_BANNER_BACKGROUND)
             .replace("'", "'");
     pageStart(req, resp, sb);
     pageBody(req, resp, sb);
     pageEnd(req, resp, sb);
   } catch (Throwable t) {
     log.error("Error building page " + req.getRequestURI(), t);
     sb.append("\n<pre>\n");
     StringWriter sw = new StringWriter();
     t.printStackTrace(new PrintWriter(sw));
     sb.append(sanitize(sw.getBuffer().toString()));
     sb.append("</pre>\n");
   } finally {
     resp.getWriter().print(sb);
     resp.getWriter().flush();
   }
 }
예제 #2
0
  protected void pageStart(HttpServletRequest req, HttpServletResponse resp, StringBuilder sb)
      throws Exception {
    resp.setContentType(DEFAULT_CONTENT_TYPE);
    int refresh = -1;
    String refreshStr = getCookieValue(req, "page.refresh.rate");
    if (refreshStr != null) {
      try {
        refresh = Integer.parseInt(BasicServlet.decode(refreshStr));
      } catch (NumberFormatException e) {
        // ignore improperly formatted user cookie
      }
    }

    // BEGIN PAGE
    sb.append("<!--\n");
    sb.append("  Licensed to the Apache Software Foundation (ASF) under one or more\n");
    sb.append("  contributor license agreements.  See the NOTICE file distributed with\n");
    sb.append("  this work for additional information regarding copyright ownership.\n");
    sb.append("  The ASF licenses this file to You under the Apache License, Version 2.0\n");
    sb.append("  (the \"License\"); you may not use this file except in compliance with\n");
    sb.append("  the License.  You may obtain a copy of the License at\n");
    sb.append("\n");
    sb.append("    http://www.apache.org/licenses/LICENSE-2.0\n");
    sb.append("\n");
    sb.append("  Unless required by applicable law or agreed to in writing, software\n");
    sb.append("  distributed under the License is distributed on an \"AS IS\" BASIS,\n");
    sb.append("  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n");
    sb.append("  See the License for the specific language governing permissions and\n");
    sb.append("  limitations under the License.\n");
    sb.append("-->\n");
    sb.append("<html>\n");

    // BEGIN HEADER
    sb.append("<head>\n");
    sb.append("<title>")
        .append(getTitle(req))
        .append(" - Accumulo ")
        .append(Constants.VERSION)
        .append("</title>\n");
    if ((refresh > 0)
        && (req.getRequestURI().startsWith("/vis") == false)
        && (req.getRequestURI().startsWith("/shell") == false))
      sb.append("<meta http-equiv='refresh' content='" + refresh + "' />\n");
    sb.append("<meta http-equiv='Content-Type' content='")
        .append(DEFAULT_CONTENT_TYPE)
        .append("' />\n");
    sb.append("<meta http-equiv='Content-Script-Type' content='text/javascript' />\n");
    sb.append("<meta http-equiv='Content-Style-Type' content='text/css' />\n");
    sb.append("<link rel='shortcut icon' type='image/jpg' href='/web/favicon.png' />\n");
    sb.append("<link rel='stylesheet' type='text/css' href='/web/screen.css' media='screen' />\n");
    sb.append("<script src='/web/functions.js' type='text/javascript'></script>\n");

    sb.append(
        "<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"/web/flot/excanvas.min.js\"></script><![endif]-->\n");
    sb.append(
        "<script language=\"javascript\" type=\"text/javascript\" src=\"/web/flot/jquery.js\"></script>\n");
    sb.append(
        "<script language=\"javascript\" type=\"text/javascript\" src=\"/web/flot/jquery.flot.js\"></script>\n");

    sb.append("</head>\n");

    // BEGIN BODY OPENING
    sb.append("\n<body ").append(getBodyAttributes()).append(">\n");
    sb.append("<div id='content-wrapper'>\n");
    sb.append("<div id='content'>\n");
    sb.append("<div id='header'>");
    if (!bannerText.isEmpty()) {
      sb.append("<div id='banner' style='color:")
          .append(bannerColor)
          .append(";background:")
          .append(bannerBackground)
          .append("'>")
          .append(bannerText)
          .append("</div>\n");
    }
    sb.append("<div id='headertitle'>");
    sb.append("<h1>").append(getTitle(req)).append("</h1></div>\n");
    sb.append("<div id='subheader'>Instance&nbsp;Name:&nbsp;")
        .append(Monitor.cachedInstanceName.get())
        .append("&nbsp;&nbsp;&nbsp;Version:&nbsp;")
        .append(Constants.VERSION)
        .append("\n");
    sb.append("<br><span class='smalltext'>Instance&nbsp;ID:&nbsp;")
        .append(Monitor.getContext().getInstance().getInstanceID())
        .append("</span>\n");
    sb.append("<br><span class='smalltext'>")
        .append(new Date().toString().replace(" ", "&nbsp;"))
        .append("</span>");
    sb.append("</div>\n"); // end <div id='subheader'>
    sb.append("</div>\n"); // end <div id='header'>

    // BEGIN LEFT SIDE
    sb.append("<div id='nav'>\n");
    sb.append("<span id='nav-title'><a href='/'>Overview</a></span><br />\n");
    sb.append("<hr />\n");
    sb.append("<a href='/master'>Master&nbsp;Server</a><br />\n");
    sb.append("<a href='/tservers'>Tablet&nbsp;Servers</a><br />\n");
    sb.append("<a href='/scans'>Active&nbsp;Scans</a><br />\n");
    sb.append("<a href='/bulkImports'>Bulk&nbsp;Imports</a><br />\n");
    sb.append("<a href='/vis'>Server Activity</a><br />\n");
    sb.append("<a href='/gc'>Garbage&nbsp;Collector</a><br />\n");
    sb.append("<a href='/tables'>Tables</a><br />\n");
    sb.append("<a href='/trace/summary?minutes=10'>Recent&nbsp;Traces</a><br />\n");
    sb.append("<a href='/replication'>Replication</a><br />\n");
    List<DedupedLogEvent> dedupedLogEvents = LogService.getInstance().getEvents();
    int numLogs = dedupedLogEvents.size();
    boolean logsHaveError = false;
    for (DedupedLogEvent dedupedLogEvent : dedupedLogEvents)
      if (dedupedLogEvent.getEvent().getLevel().isGreaterOrEqual(Level.ERROR)) {
        logsHaveError = true;
        break;
      }
    if (numLogs > 0)
      sb.append(
          "<span class='"
              + (logsHaveError ? "error" : "warning")
              + "'><a href='/log'>Recent&nbsp;Logs&nbsp;<span class='smalltext'>("
              + numLogs
              + ")</a></span></span><br />\n");
    int numProblems = Monitor.getProblemSummary().entrySet().size();
    if (numProblems > 0)
      sb.append(
          "<span class='error'><a href='/problems'>Table&nbsp;Problems&nbsp;<span class='smalltext'>("
              + numProblems
              + ")</a></span></span><br />\n");
    sb.append("<hr />\n");
    sb.append("<a href='/xml'>XML</a><br />\n");
    sb.append("<a href='/json'>JSON</a><hr />\n");
    if (Monitor.isUsingSsl()) sb.append("<a href='/shell'>Shell</a><hr />\n");
    sb.append("<div class='smalltext'>[<a href='")
        .append("/op?action=refresh&value=")
        .append(refresh < 1 ? "5" : "-1");
    sb.append("&redir=").append(currentPage(req)).append("'>");
    sb.append(refresh < 1 ? "en" : "dis").append("able&nbsp;auto-refresh</a>]</div>\n");
    sb.append("</div>\n"); // end <div id='nav'>

    sb.append("<div id='main'");
    if (bannerText.isEmpty()) sb.append(" style='bottom:0'");
    sb.append(">\n");
    sb.append("<!-- BEGIN MAIN BODY CONTENT -->\n\n");
  }