# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import telnetlib, threading, time

# Controls Server Technology CW-16V1-C20M switched CDUs over Telnet
# Opens a new connection for every command to
# avoid threading and address space conflicts

class PowerStrip():
    def __init__(self, host, user='admn', password='admn'):
        self.host = host
        self.user = user
        self.password = password

    def reboot(self, outlet, delay=0):
        self.command('reboot', outlet, delay)

    def off(self, outlet, delay=0):
        self.command('off', outlet, delay)

    def on(self, outlet, delay=0):
        self.command('on', outlet, delay)

    def command(self, command, outlet=1, delay=0):
        if delay == 0:
            self._do_command(command, outlet)
        else:
            threading.Timer(delay, self._do_command, (command, outlet)).start()

    def _do_command(self, command, outlet=1):
        tn = telnetlib.Telnet(self.host)
        tn.read_until('Username: ')
        tn.write(self.user + '\n')
        tn.read_until('Password: ')
        tn.write(self.password + '\n')
        tn.read_until('Switched CDU: ')
        tn.write('%s .a%d\n' % (command, outlet))
        tn.read_some()
        tn.close()