diff options
Diffstat (limited to 'third_party/Python/module/pexpect-2.4/examples/monitor.py')
| -rw-r--r-- | third_party/Python/module/pexpect-2.4/examples/monitor.py | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/third_party/Python/module/pexpect-2.4/examples/monitor.py b/third_party/Python/module/pexpect-2.4/examples/monitor.py deleted file mode 100644 index 6ed6589d6707..000000000000 --- a/third_party/Python/module/pexpect-2.4/examples/monitor.py +++ /dev/null @@ -1,222 +0,0 @@ -#!/usr/bin/env python - -""" This runs a sequence of commands on a remote host using SSH. It runs a -simple system checks such as uptime and free to monitor the state of the remote -host. - -./monitor.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: - ./monitor.py -s www.example.com -u mylogin -p mypassword - -It works like this: - Login via SSH (This is the hardest part). - Run and parse 'uptime'. - Run 'iostat'. - Run 'vmstat'. - Run 'netstat' - Run 'free'. - Exit the remote host. -""" - -import os -import sys -import time -import re -import getopt -import getpass -import traceback -import pexpect - -# -# Some constants. -# -# This is way too simple for industrial use -- we will change is ASAP. -COMMAND_PROMPT = '[#$] ' -TERMINAL_PROMPT = '(?i)terminal type\?' -TERMINAL_TYPE = 'vt100' -# This is the prompt we get if SSH does not have the remote host's public -# key stored in the cache. -SSH_NEWKEY = '(?i)are you sure you want to continue connecting' - - -def exit_with_usage(): - - print globals()['__doc__'] - os._exit(1) - - -def main(): - - global COMMAND_PROMPT, TERMINAL_PROMPT, TERMINAL_TYPE, SSH_NEWKEY - ###################################################################### - # Parse the options, arguments, get ready, etc. - ###################################################################### - try: - optlist, args = getopt.getopt( - sys.argv[ - 1:], 'h?s:u:p:', [ - 'help', 'h', '?']) - except Exception as 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: - host = options['-s'] - else: - host = raw_input('hostname: ') - if '-u' in options: - user = options['-u'] - else: - user = raw_input('username: ') - if '-p' in options: - password = options['-p'] - else: - password = getpass.getpass('password: ') - - # - # Login via SSH - # - child = pexpect.spawn('ssh -l %s %s' % (user, host)) - i = child.expect([pexpect.TIMEOUT, SSH_NEWKEY, - COMMAND_PROMPT, '(?i)password']) - if i == 0: # Timeout - print 'ERROR! could not login with SSH. Here is what SSH said:' - print child.before, child.after - print str(child) - sys.exit(1) - if i == 1: # In this case SSH does not have the public key cached. - child.sendline('yes') - child.expect('(?i)password') - if i == 2: - # This may happen if a public key was setup to automatically login. - # But beware, the COMMAND_PROMPT at this point is very trivial and - # could be fooled by some output in the MOTD or login message. - pass - if i == 3: - child.sendline(password) - # Now we are either at the command prompt or - # the login process is asking for our terminal type. - i = child.expect([COMMAND_PROMPT, TERMINAL_PROMPT]) - if i == 1: - child.sendline(TERMINAL_TYPE) - child.expect(COMMAND_PROMPT) - # - # Set command prompt to something more unique. - # - COMMAND_PROMPT = "\[PEXPECT\]\$ " - child.sendline("PS1='[PEXPECT]\$ '") # In case of sh-style - i = child.expect([pexpect.TIMEOUT, COMMAND_PROMPT], timeout=10) - if i == 0: - print "# Couldn't set sh-style prompt -- trying csh-style." - child.sendline("set prompt='[PEXPECT]\$ '") - i = child.expect([pexpect.TIMEOUT, COMMAND_PROMPT], timeout=10) - if i == 0: - print "Failed to set command prompt using sh or csh style." - print "Response was:" - print child.before - sys.exit(1) - - # Now we should be at the command prompt and ready to run some commands. - print '---------------------------------------' - print 'Report of commands run on remote host.' - print '---------------------------------------' - - # Run uname. - child.sendline('uname -a') - child.expect(COMMAND_PROMPT) - print child.before - if 'linux' in child.before.lower(): - LINUX_MODE = 1 - else: - LINUX_MODE = 0 - - # Run and parse 'uptime'. - child.sendline('uptime') - child.expect( - 'up\s+(.*?),\s+([0-9]+) users?,\s+load averages?: ([0-9]+\.[0-9][0-9]),?\s+([0-9]+\.[0-9][0-9]),?\s+([0-9]+\.[0-9][0-9])') - duration, users, av1, av5, av15 = child.match.groups() - days = '0' - hours = '0' - mins = '0' - if 'day' in duration: - child.match = re.search('([0-9]+)\s+day', duration) - days = str(int(child.match.group(1))) - if ':' in duration: - child.match = re.search('([0-9]+):([0-9]+)', duration) - hours = str(int(child.match.group(1))) - mins = str(int(child.match.group(2))) - if 'min' in duration: - child.match = re.search('([0-9]+)\s+min', duration) - mins = str(int(child.match.group(1))) - print - print 'Uptime: %s days, %s users, %s (1 min), %s (5 min), %s (15 min)' % ( - duration, users, av1, av5, av15) - child.expect(COMMAND_PROMPT) - - # Run iostat. - child.sendline('iostat') - child.expect(COMMAND_PROMPT) - print child.before - - # Run vmstat. - child.sendline('vmstat') - child.expect(COMMAND_PROMPT) - print child.before - - # Run free. - if LINUX_MODE: - child.sendline('free') # Linux systems only. - child.expect(COMMAND_PROMPT) - print child.before - - # Run df. - child.sendline('df') - child.expect(COMMAND_PROMPT) - print child.before - - # Run lsof. - child.sendline('lsof') - child.expect(COMMAND_PROMPT) - print child.before - -# # Run netstat -# child.sendline ('netstat') -# child.expect (COMMAND_PROMPT) -# print child.before - -# # Run MySQL show status. -# child.sendline ('mysql -p -e "SHOW STATUS;"') -# child.expect (PASSWORD_PROMPT_MYSQL) -# child.sendline (password_mysql) -# child.expect (COMMAND_PROMPT) -# print -# print child.before - - # Now exit the remote host. - child.sendline('exit') - index = child.expect([pexpect.EOF, "(?i)there are stopped jobs"]) - if index == 1: - child.sendline("exit") - child.expect(EOF) - -if __name__ == "__main__": - - try: - main() - except Exception as e: - print str(e) - traceback.print_exc() - os._exit(1) |
