已经存在的文件和LOG文件,怎么通过脚本语言来将各项信息显示在UI中?


我使用Apache作为文件服务器使用。
1. 在安装目录/logs/access.log 文件中能够查看到其他设备的http GET信息,如下所示:

   
  172.16.1.148 - - [30/Nov/2012:16:58:35 +0800] "GET http://172.16.1.148:8000/index.html HTTP/1.1" 200 86
  
172.16.1.111 - - [04/Dec/2012:08:53:08 +0800] "GET http://172.16.1.148:8000/shape.wdf HTTP/1.1" 200 255088552

依次是IP,时间,端口号,请求路径,HTTP标准,200 OK成功标志,下载的文件大小
2. 同一目录下的error.log文件中有错误的信息,如下:

   
  [Thu Dec 13 08:37:38 2012] [notice] Child 944: Child process is running
  
[Thu Dec 13 08:37:38 2012] [notice] Child 944: Acquired the start mutex.
[Thu Dec 13 08:37:38 2012] [notice] Child 944: Starting 64 worker threads.
[Thu Dec 13 08:37:38 2012] [notice] Child 944: Starting thread to listen on port 80.

3.下图是存放文件的路径
document root

4.配置文件为 安装目录/conf/httpd.conf 文件
这个文件中配置了 服务器IP,端口号,以及作为文件服务器时的文件路径
内容模式如下:

   
  #Listen 12.34.56.78:80
  
Listen 80
   
  <IfModule log_config_module>
  
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>

#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
CustomLog "logs/access.log" common

#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
#CustomLog "logs/access.log" combined
</IfModule>

由于我完全没接触过脚本语言,并且怎么写一个类似与HFS的UI,用什么语言,用什么方法去写也完全不知道。
所以上面介绍一些我需求的基本情况,我想实现的UI内容如下:
a.UI分为三部分,上下两部分,上面那部分又分为左右两部分
b.上左那部分我希望能够直接将 存放文件的文件夹中的所有文件列出来
c.上右那部分我想实时显示access中的信息,access文件有更新就直接显示出来
d.下面那部分我想模仿HFS显示一个下载进度,但是不知道怎么监控Apache的瞬时流量,还不知道咋整
e.能够有一个地址栏一样的东西,显示内容为当点击左上部分某一文件是,地址栏中显示
http://本机IP:配置的端口号/所点击的文件名 。最好还能提供一个按钮将这个地址复制到剪切板。(也就是完全模仿HFS)

PS:Apache功能特别稳定和强大,相对于HFS差别不是一点半点,但是在用的时候没有UI就很不方便了。请教各位大虾。指点一二。好的想法也行。界面是用MFC还是用JAVA?那些信息的显示是单纯地直接解析文件?还是通过脚本方式进行显示?
实现这个功能的东西是作为一个小插件似的东西使用还是直接添加到Apache的源代码中去?
感谢各位一起探讨学习。

shell C++

Vincy 10 years, 4 months ago

@HandsomeKyle

迅雷是面向一般 用户 的,当然要有UI. 我开始以为你仅仅要自己监控,所以觉得用最简单的方式达到目的就好,不知道你是有意要学习这方面。sry。

如果是我的话,我会这么弄。

首先确定使用BS,工作当然就分两大块,服务器端和浏览器端。

服务器端的主要工作是将你的access.log和error.log中的信息组装成html,不涉及任何数据库之类的操作,比较简单。浏览器端主要负责怎么提高用户体验。比如,你可以使用一个html来显示access.log,用户需要不停刷新来获取变化;提高的话就可以在这个html里面用js发起ajax来自动刷新。这种可能的提高非常之多,所以我之前说这个东西可以实现的方式太多了。。

实现的话我会用python做服务器端,用flask框架。客户端没得选,就是js和css,其实现复杂成都完全取决于你对用户体验的要求。

Finally, here's code you'd expect..

   
  from flask import Flask
  
app = Flask(__name__)

@app.route("/access")
def hello():
with open('/local/path/to/your/access.log') as f:
return '<html>%s</html>' % f.read()
# you may include your styles or js for enhanced user experience
# see the template module Flask provides

@app.route("/error")
def hello():
with open('/local/path/to/your/error.log') as f:
return '<html>%s</html>' % f.read()

if __name__ == "__main__":
app.run()

Run:

   
  $ python hello.py
  
* Running on http://localhost:5000/

然后你用浏览器访问http://localhost:5000/access或http://localhost:5000/error就可以了。当然,这又是最简单的实现。。实际上,有非常多的改进的地方。例如,你不会每次都把整个access.log都读入内存,也许只要最新的10行就好了;客服端采用ajax动态刷新;用html和css设计一个好看的UI。。。。。

Resources:
[Python]
一种面向对象的解释型语言,特点是上手快,语法简洁,可读性高。同时完全能胜任企业级的应用,例如youtube在被google收购前服务器端就是用python做的。居家旅行必备良药。

Flask
一个微量级的web框架,基于 Werkzeug ,使用 Jinjia2 做模版。你已经看到上面的代码有多简单了。
js and css tutorials are all over the web..

Cheers!

二重黒死蝶 answered 10 years, 4 months ago

Your Answer