summaryrefslogtreecommitdiff
path: root/third_party/Python/module/pexpect-2.4/examples/monitor.py
diff options
context:
space:
mode:
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.py222
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)