普通文本  |  75行  |  1.88 KB

#!/usr/bin/env python

"""This runs Apache Status on the remote host and returns the number of requests per second.

./astat.py [-s server_hostname] [-u username] [-p password]
    -s : hostname of the remote server to login to.
    -u : username to user for login.
    -p : Password to user for login.

Example:
    This will print information about the given host:
        ./astat.py -s www.example.com -u mylogin -p mypassword

"""

import os, sys, time, re, getopt, getpass
import traceback
import pexpect, pxssh

def exit_with_usage():

    print globals()['__doc__']
    os._exit(1)

def main():

    ######################################################################
    ## Parse the options, arguments, get ready, etc.
    ######################################################################
    try:
        optlist, args = getopt.getopt(sys.argv[1:], 'h?s:u:p:', ['help','h','?'])
    except Exception, e:
        print str(e)
        exit_with_usage()
    options = dict(optlist)
    if len(args) > 1:
        exit_with_usage()

    if [elem for elem in options if elem in ['-h','--h','-?','--?','--help']]:
        print "Help:"
        exit_with_usage()

    if '-s' in options:
        hostname = options['-s']
    else:
        hostname = raw_input('hostname: ')
    if '-u' in options:
        username = options['-u']
    else:
        username = raw_input('username: ')
    if '-p' in options:
        password = options['-p']
    else:
        password = getpass.getpass('password: ')

    #
    # Login via SSH
    #
    p = pxssh.pxssh()
    p.login(hostname, username, password)
    p.sendline('apachectl status')
    p.expect('([0-9]+\.[0-9]+)\s*requests/sec')
    requests_per_second = p.match.groups()[0]
    p.logout()
    print requests_per_second

if __name__ == "__main__":
    try:
        main()
    except Exception, e:
        print str(e)
        traceback.print_exc()
        os._exit(1)