#!/usr/bin/env python import sys import os.path import configparser import http.client import xml.etree.ElementTree as ET import hmac class cps_ups: def __init__(self, address, secret_key, port = 3052): self.address = address self.port = port self.secret_key = secret_key self.connection = http.client.HTTPConnection(self.address, self.port) def __get_keepalive_data__(self): self.connection.request("GET", "/keepalive.xml?ip=" + self.host_address + "&id=-1&type=1") for i in ET.fromstring(self.connection.getresponse().read()).iter("data"): keepalive_data=i.attrib self.connection.close() result = {'boot': keepalive_data['boot'], 'upt': keepalive_data['upt'], 'id': keepalive_data['id']} return(result) def __genxml__(self, keepalive_data): data_tag = '' digest = hmac.new(self.secret_key.encode(), msg = data_tag.encode('utf-8')).hexdigest().upper() xml = '' + data_tag + '' return(xml) def register(self, ip_address, shutdown_time, delay_time, hostname, outlet_id, bank_id, isps = "true", contact = "", location = "", bedt = "0", ): self.host_address = ip_address self.shutdown_time = shutdown_time self.delay_time = delay_time self.hostname = hostname self.outlet_id = outlet_id self.bank_id = bank_id self.isps = isps self.contact = contact self.location = location self.bedt = bedt post_data = self.__genxml__(self.__get_keepalive_data__()) self.connection.request("POST", "/setup.xml", body = post_data) response = self.connection.getresponse().read() self.connection.close() return(response) def help(): print('Usage: ' + sys.argv[0] + ' ') try: configfile = sys.argv[1] except IndexError: help() sys.exit(1) if not os.path.isfile(configfile): print('Error: configuration file ' + configfile + ' doesn\'t exists') sys.exit(2) config = configparser.ConfigParser() config.read(configfile) u = cps_ups(address = config.get('UPS', 'address'), secret_key = config.get('UPS','secret_key'), port = int(config.get('UPS', 'port', fallback='3052'))) u.register(ip_address = config.get('HOST','ip_address'), shutdown_time = config.get('HOST','shutdown_time'), delay_time = config.get('HOST','delay_time'), hostname = config.get('HOST','hostname'), outlet_id = config.get('HOST','outlet_id'), bank_id = config.get('HOST','bank_id'), isps = config.get('HOST','isps'), contact = config.get('HOST','contact'), location = config.get('HOST','location'), bedt = config.get('HOST','bedt'))