source: proiecte/HadoopJUnit/hadoop-0.20.1/build/src/org/apache/hadoop/hdfs/server/datanode/tail_jsp.java @ 120

Last change on this file since 120 was 120, checked in by (none), 14 years ago

Added the mail files for the Hadoop JUNit Project

  • Property svn:executable set to *
File size: 5.8 KB
Line 
1package org.apache.hadoop.hdfs.server.datanode;
2
3import javax.servlet.*;
4import javax.servlet.http.*;
5import javax.servlet.jsp.*;
6import javax.servlet.*;
7import javax.servlet.http.*;
8import java.io.*;
9import java.util.*;
10import java.net.*;
11import org.apache.hadoop.hdfs.*;
12import org.apache.hadoop.hdfs.server.namenode.*;
13import org.apache.hadoop.hdfs.server.datanode.*;
14import org.apache.hadoop.hdfs.protocol.*;
15import org.apache.hadoop.io.*;
16import org.apache.hadoop.conf.*;
17import org.apache.hadoop.net.DNS;
18import org.apache.hadoop.util.*;
19import org.apache.hadoop.net.NetUtils;
20import java.text.DateFormat;
21
22public final class tail_jsp extends org.apache.jasper.runtime.HttpJspBase
23    implements org.apache.jasper.runtime.JspSourceDependent {
24
25
26  static JspHelper jspHelper = new JspHelper();
27
28  public void generateFileChunks(JspWriter out, HttpServletRequest req) 
29    throws IOException {
30    long startOffset = 0;
31   
32    int chunkSizeToView = 0;
33
34    String referrer = req.getParameter("referrer");
35    boolean noLink = false;
36    if (referrer == null) {
37      noLink = true;
38    }
39
40    String filename = req.getParameter("filename");
41    if (filename == null) {
42      out.print("Invalid input (file name absent)");
43      return;
44    }
45
46    String namenodeInfoPortStr = req.getParameter("namenodeInfoPort");
47    int namenodeInfoPort = -1;
48    if (namenodeInfoPortStr != null)
49      namenodeInfoPort = Integer.parseInt(namenodeInfoPortStr);
50   
51    String chunkSizeToViewStr = req.getParameter("chunkSizeToView");
52    if (chunkSizeToViewStr != null && Integer.parseInt(chunkSizeToViewStr) > 0)
53      chunkSizeToView = Integer.parseInt(chunkSizeToViewStr);
54    else chunkSizeToView = jspHelper.defaultChunkSizeToView;
55
56    if (!noLink) {
57      out.print("<h3>Tail of File: ");
58      JspHelper.printPathWithLinks(filename, out, namenodeInfoPort);
59            out.print("</h3><hr>");
60      out.print("<a href=\"" + referrer + "\">Go Back to File View</a><hr>");
61    }
62    else {
63      out.print("<h3>" + filename + "</h3>");
64    }
65    out.print("<b>Chunk size to view (in bytes, up to file's DFS block size): </b>");
66    out.print("<input type=\"text\" name=\"chunkSizeToView\" value=" +
67              chunkSizeToView + " size=10 maxlength=10>");
68    out.print("&nbsp;&nbsp;<input type=\"submit\" name=\"submit\" value=\"Refresh\"><hr>");
69    out.print("<input type=\"hidden\" name=\"filename\" value=\"" + filename +
70              "\">");
71    out.print("<input type=\"hidden\" name=\"namenodeInfoPort\" value=\"" + namenodeInfoPort +
72    "\">");
73    if (!noLink)
74      out.print("<input type=\"hidden\" name=\"referrer\" value=\"" + 
75                referrer+ "\">");
76
77    //fetch the block from the datanode that has the last block for this file
78    DFSClient dfs = new DFSClient(jspHelper.nameNodeAddr, 
79                                         jspHelper.conf);
80    List<LocatedBlock> blocks = 
81      dfs.namenode.getBlockLocations(filename, 0, Long.MAX_VALUE).getLocatedBlocks();
82    if (blocks == null || blocks.size() == 0) {
83      out.print("No datanodes contain blocks of file "+filename);
84      dfs.close();
85      return;
86    }
87    LocatedBlock lastBlk = blocks.get(blocks.size() - 1);
88    long blockSize = lastBlk.getBlock().getNumBytes();
89    long blockId = lastBlk.getBlock().getBlockId();
90    long genStamp = lastBlk.getBlock().getGenerationStamp();
91    DatanodeInfo chosenNode;
92    try {
93      chosenNode = jspHelper.bestNode(lastBlk);
94    } catch (IOException e) {
95      out.print(e.toString());
96      dfs.close();
97      return;
98    }     
99    InetSocketAddress addr = NetUtils.createSocketAddr(chosenNode.getName());
100    //view the last chunkSizeToView bytes while Tailing
101    if (blockSize >= chunkSizeToView)
102      startOffset = blockSize - chunkSizeToView;
103    else startOffset = 0;
104
105    out.print("<textarea cols=\"100\" rows=\"25\" wrap=\"virtual\" style=\"width:100%\" READONLY>");
106    jspHelper.streamBlockInAscii(addr, blockId, genStamp, blockSize, startOffset, chunkSizeToView, out);
107    out.print("</textarea>");
108    dfs.close();
109  }
110
111
112  private static java.util.List _jspx_dependants;
113
114  public Object getDependants() {
115    return _jspx_dependants;
116  }
117
118  public void _jspService(HttpServletRequest request, HttpServletResponse response)
119        throws java.io.IOException, ServletException {
120
121    JspFactory _jspxFactory = null;
122    PageContext pageContext = null;
123    HttpSession session = null;
124    ServletContext application = null;
125    ServletConfig config = null;
126    JspWriter out = null;
127    Object page = this;
128    JspWriter _jspx_out = null;
129    PageContext _jspx_page_context = null;
130
131
132    try {
133      _jspxFactory = JspFactory.getDefaultFactory();
134      response.setContentType("text/html; charset=UTF-8");
135      pageContext = _jspxFactory.getPageContext(this, request, response,
136                        null, true, 8192, true);
137      _jspx_page_context = pageContext;
138      application = pageContext.getServletContext();
139      config = pageContext.getServletConfig();
140      session = pageContext.getSession();
141      out = pageContext.getOut();
142      _jspx_out = out;
143
144      out.write('\n');
145      out.write('\n');
146      out.write("\n\n\n\n<html>\n<head>\n");
147JspHelper.createTitle(out, request, request.getParameter("filename")); 
148      out.write("\n</head>\n<body>\n<form action=\"/tail.jsp\" method=\"GET\">\n");
149 
150   generateFileChunks(out,request);
151
152      out.write("\n</form>\n<hr>\n\n<h2>Local logs</h2>\n<a href=\"/logs/\">Log</a> directory\n\n");
153
154out.println(ServletUtil.htmlFooter());
155
156      out.write('\n');
157    } catch (Throwable t) {
158      if (!(t instanceof SkipPageException)){
159        out = _jspx_out;
160        if (out != null && out.getBufferSize() != 0)
161          out.clearBuffer();
162        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
163      }
164    } finally {
165      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
166    }
167  }
168}
Note: See TracBrowser for help on using the repository browser.