#!/usr/bin/python3 # coding=utf-8 from bottle import route, run, template, post, request import MySQLdb from SetupMinersClass import SetupMiner from kea_hosts_generane import ConfigClass import kea_hosts_generane @route('/') def server_homepage(): conf = ConfigClass() conf.readall() sql = "SELECT " \ " expire, " \ " INET_NTOA(address) as ip4, " \ " HEX(hwaddr)as hw_addr, " \ " hostname " \ " FROM lease4 " \ "where INET_NTOA(address) like '%.%.0.%'" \ " ORDER BY expire DESC;" print(conf.dbconf) try: conn = MySQLdb.connect(host=conf.dbconf['dbhost'], user=conf.dbconf['dbuser'], passwd=conf.dbconf['dbpass'], db=conf.dbconf['dbbase']) except MySQLdb.Error as err: print("Connection error: {}".format(err)) conn.close() try: cur = conn.cursor(MySQLdb.cursors.DictCursor) cur.execute(sql) data = cur.fetchall() except MySQLdb.Error as err: print("Query error: {}".format(err)) conn.close() data_list = [] for row in data: temp = [row['expire'], row['ip4'], row['hw_addr'], row['hostname']] data_list.append(temp) return template('tpl/main.tpl', A=data_list) @post('/') def reboot_hosts(): conf = ConfigClass() conf.readall() i = 1 data = [] while request.POST.get("reboot_%s" % i, default=False): hostname = request.POST.getall('reboot_%s' % i) print(hostname) sm = SetupMiner(hostname[0], conf.minerconf, telnets=['/sbin/reboot'], sshs=['/sbin/reboot']) print(sm.result) data.append("host {} log : {}".format(hostname, sm.result)) i += 1 return template('tpl/reboot_hosts.tpl', A=data) @route('/add_hosts') def server_add_hosts(): conf = ConfigClass() conf.readall() sql = "SELECT " \ " expire, " \ " INET_NTOA(address) as ip4, " \ " HEX(hwaddr)as hw_addr, " \ " hostname " \ " FROM lease4 " \ "where INET_NTOA(address) like '%.%.0.%'" \ " ORDER BY expire DESC;" try: conn = MySQLdb.connect(host=conf.dbconf['dbhost'], user=conf.dbconf['dbuser'], passwd=conf.dbconf['dbpass'], db=conf.dbconf['dbbase']) except MySQLdb.Error as err: print("Connection error: {}".format(err)) conn.close() try: cur = conn.cursor(MySQLdb.cursors.DictCursor) cur.execute(sql) data = cur.fetchall() except MySQLdb.Error as err: print("Query error: {}".format(err)) conn.close() data_list = [] for row in data: temp = [row['expire'], row['ip4'], row['hw_addr'], row['hostname']] data_list.append(temp) return template('tpl/add_hosts.tpl', A=data_list) @post('/add_hosts') def adding_hosts(): conf = ConfigClass() conf.readall() s_select = "SELECT " \ " expire, " \ " INET_NTOA(address) as ip4, " \ " HEX(hwaddr)as hw_addr, " \ " hostname " \ " FROM lease4 " \ "where INET_NTOA(address) like '10.100.0%'" \ " ORDER BY expire DESC;" s_insert = "insert into 1c_import (serial, net_num, hw_addr, imported) values ('%s', %s, '%s', 0);" i = 1 data = [] while request.POST.get("hostname_%s" % i, default=False): hostname = request.POST.getall('hostname_%s' % i) print(request.POST.getall('hostname_%s' % i)) if len(hostname) == 3: try: conn = MySQLdb.connect(host=conf.dbconf['dbhost'], user=conf.dbconf['dbuser'], passwd=conf.dbconf['dbpass'], db=conf.dbconf['dbbase']) except MySQLdb.Error as err: data.append("connection error: {}
".format(err)) conn.close() try: cur = conn.cursor(MySQLdb.cursors.Cursor) sql = s_insert % tuple(hostname) cur.execute(sql) conn.commit() data.append("host {} proceed with request : {}
".format(hostname[0], sql)) except MySQLdb.Error as err: data.append("host {} Query error: {}
".format(hostname[0], err)) conn.close() i += 1 kea_hosts_generane.main() return template('tpl/a_add_hosts.tpl', A=data) @route('/hosts') def server_hosts_repo(): conf = ConfigClass() conf.readall() sql = "SELECT " \ "INET_NTOA(hosts.ipv4_address) AS ip4," \ " hosts.hostname," \ " HEX(dhcp_identifier)as hw_addr, " \ " if(hex(inet_ntoa(lease4.address)), '+','-') as leased " \ "FROM " \ " hosts " \ "LEFT JOIN" \ " lease4" \ " on" \ " dhcp_identifier = hwaddr " \ "ORDER BY ip4;" try: conn = MySQLdb.connect(host=conf.dbconf['dbhost'], user=conf.dbconf['dbuser'], passwd=conf.dbconf['dbpass'], db=conf.dbconf['dbbase']) except MySQLdb.Error as err: print("Connection error: {}".format(err)) conn.close() try: cur = conn.cursor(MySQLdb.cursors.DictCursor) cur.execute(sql) data = cur.fetchall() except MySQLdb.Error as err: print("Query error: {}".format(err)) conn.close() data_list = [] for row in data: temp = list() temp.append(row['ip4']) temp.append(row['hostname']) temp.append(row['hw_addr']) temp.append(row['leased']) data_list.append(temp) return template('tpl/hosts.tpl', A=data_list) @post('/hosts') def remove_host(): conf = ConfigClass() s_remove1c = "delete from 1c_import where replace(hw_addr, ':', '') = '%s';" s_removehost = "delete from hosts where dhcp_identifier = unhex('%s');" hosts_del = request.forms.getall('remove_host') del_1c = request.forms.getall('remove_import') try: conn = MySQLdb.connect(host=conf.dbconf['dbhost'], user=conf.dbconf['dbuser'], passwd=conf.dbconf['dbpass'], db=conf.dbconf['dbbase']) except MySQLdb.Error as err: print("Connection error: {}".format(err)) conn.close() try: cur = conn.cursor(MySQLdb.cursors.Cursor) for host in hosts_del: try: cur.execute(s_removehost % host) conn.commit() except MySQLdb.Error as err: print("Query error: {}".format(err)) print(s_removehost % host) for host in del_1c: try: cur.execute(s_removehost % host) conn.commit() except MySQLdb.Error as err: print("Query error: {}".format(err)) try: cur.execute(s_remove1c % host) conn.commit() except MySQLdb.Error as err: print("Query error: {}".format(err)) print(s_remove1c % host) conn.commit() conn.close() except MySQLdb.Error as err: print("Query error: {}".format(err)) conn.close() print(request.forms.getall('remove_host')) print(request.forms.getall('remove_import')) return template('tpl/remove_hosts.tpl') run(host='0.0.0.0', port=8080, debug=True)