Flask实现网页版top

一直想弄个linux top的网页,但弄成却发现没什么用,不过,弄好了就记录下。如以下截图,弄得比较简单,就一个框框提供ip的输入,然后后台ajax请求后端(Flask)并进行展示。

150636_Znxt_1588616.png

 

后台的Flask接口实现:

@app.route('/machine/top/interface', methods=['GET', 'POST'])
def machine_top_interface():
    result = ''
    machine_ip = request.values.get("machine_ip")
    if machine_ip:
        result = run_remote_command(machine_ip, 'root', '/root/.ssh/id_rsa', 22,'export COLUMNS=200;top -b -n1 -c -s| head -n40')
    return result
#到远程机器运行命令
def run_remote_command(ip, user, pkey, port, cmd):
    ip = ip
    user = user
    pkey = pkey
    port = port
    key = paramiko.RSAKey.from_private_key_file(pkey)
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()

    ssh.connect(ip, port, user, pkey=key)
    (stdin, stdout, stderr) = ssh.exec_command(cmd)
    result = stdout.read()
    if not result:
        result = stderr.read()
    ssh.close()
    return  result

后端接口实现方法就是去远程机器上运行export COLUMNS=200;top -b -n1 -c -s| head -n40命令,此命令是抓取top的一个屏幕,前端ajax每5s过来抓一次并且展示在前端。前端如下:

{% extends "basic.html" %}
{% block head %}
    {{ super() }}
    <script type="text/javascript">
        function loadXMLDoc() {
            ip = document.getElementById("ip").value;
            var patrn=/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/;
            if (!patrn.test(ip))
                return false;
            var xmlhttp;
            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            }
            else {// code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("top_result").innerHTML = xmlhttp.responseText;
                }
            }
            xmlhttp.open("GET", "/machine/top/interface?machine_ip="+ip, true);
            xmlhttp.setRequestHeader('If-Modified-Since', 0)
            xmlhttp.send();
        }
        setInterval("loadXMLDoc()", "5000")
    </script>
{% endblock %}
{% block page_content %}
    <form role="form" class="form" method="get" action="#" style="width: 35%;">
        <input id="ip" class="form-control" name="machine_ip" placeholder="请输入机器的ip"/>
    </form>
    <pre id="top_result" style="background: none;border: none" >
    </pre>
{% endblock %}

 

又稍微了解了下ajax,虽然开发的功能没什么大用处,但了解的知识后面还可以再用。

转载于:https://my.oschina.net/zhuangweihong/blog/851768

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值