#!/usr/bin/python

import eventlet
from eventlet.green import socket
import libssh2
import os
import random


def monitor(hostname, username, id):

    print '%s %s %d' % (hostname, username, id)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((hostname, 22))

    session = libssh2.Session()
    started = False
    while not started:
        try:
            session.startup(sock)
            started = True
        except:
            eventlet.sleep(1)
    session.userauth_publickey_fromfile(
        username,
        os.path.expanduser('~/.ssh/id_rsa.pub'),
        os.path.expanduser('~/.ssh/id_rsa'),
        '')

    while True:
        sl = random.randint(1, 20)
        eventlet.sleep(sl)
        channel = session.channel()
        channel.execute('uname -a')

        stdout = []
        #stderr = []

        while not channel.eof:
            data = channel.read(1024)
            if data:
                stdout.append(data)

            #data = channel.read(1024, libssh2.STDERR)
            #if data:
            #    stderr.append(data)

        print '%d %d %s' % (id, sl, ''.join(stdout))
        #print ''.join(stderr)


pool = eventlet.GreenPool()
i = 1
while True:
    pool.spawn_n(monitor, '192.168.122.238', 'root', i)
    i = i + 1
    if i > 800:
        break

pool.waitall()
