1#!/usr/bin/env python
2
3"""This runs Apache Status on the remote host and returns the number of requests per second.
4
5./astat.py [-s server_hostname] [-u username] [-p password]
6    -s : hostname of the remote server to login to.
7    -u : username to user for login.
8    -p : Password to user for login.
9
10Example:
11    This will print information about the given host:
12        ./astat.py -s www.example.com -u mylogin -p mypassword
13
14"""
15
16import os, sys, time, re, getopt, getpass
17import traceback
18import pexpect, pxssh
19
20def exit_with_usage():
21
22    print globals()['__doc__']
23    os._exit(1)
24
25def main():
26
27    ######################################################################
28    ## Parse the options, arguments, get ready, etc.
29    ######################################################################
30    try:
31        optlist, args = getopt.getopt(sys.argv[1:], 'h?s:u:p:', ['help','h','?'])
32    except Exception, e:
33        print str(e)
34        exit_with_usage()
35    options = dict(optlist)
36    if len(args) > 1:
37        exit_with_usage()
38
39    if [elem for elem in options if elem in ['-h','--h','-?','--?','--help']]:
40        print "Help:"
41        exit_with_usage()
42
43    if '-s' in options:
44        hostname = options['-s']
45    else:
46        hostname = raw_input('hostname: ')
47    if '-u' in options:
48        username = options['-u']
49    else:
50        username = raw_input('username: ')
51    if '-p' in options:
52        password = options['-p']
53    else:
54        password = getpass.getpass('password: ')
55
56    #
57    # Login via SSH
58    #
59    p = pxssh.pxssh()
60    p.login(hostname, username, password)
61    p.sendline('apachectl status')
62    p.expect('([0-9]+\.[0-9]+)\s*requests/sec')
63    requests_per_second = p.match.groups()[0]
64    p.logout()
65    print requests_per_second
66
67if __name__ == "__main__":
68    try:
69        main()
70    except Exception, e:
71        print str(e)
72        traceback.print_exc()
73        os._exit(1)
74
75