You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

191 lines
5.9 KiB

#!/usr/bin/python3
# coding=utf-8
from bottle import route, run, static_file, template, post, request
import json
import MySQLdb
def read_conf():
with open('config.json') as f:
conf = json.load(f)
return conf
@route('/static/')
def server_static(filepath):
return static_file(filepath, root='/home/mix/PycharmProjects/kea_for_miners/static/')
@route('/')
def server_homepage():
conf = read_conf()
dbhost = conf['dbhost']
dbuser = conf['dbuser']
dbpass = conf['dbpass']
dbbase = conf['dbbase']
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=dbhost, user=dbuser,
passwd=dbpass, db=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 adding_hosts():
conf = read_conf()
dbhost = conf['dbhost']
dbuser = conf['dbuser']
dbpass = conf['dbpass']
dbbase = conf['dbbase']
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:
data.append(request.POST.getall('hostname_%s' % i))
try:
conn = MySQLdb.connect(host=dbhost, user=dbuser,
passwd=dbpass, db=dbbase)
except MySQLdb.Error as err:
print("Connection error: {}".format(err))
conn.close()
try:
cur = conn.cursor(MySQLdb.cursors.Cursor)
print(s_insert % tuple(hostname))
cur.execute(s_insert % tuple(hostname))
conn.commit()
except MySQLdb.Error as err:
print("Query error: {}".format(err))
conn.close()
i += 1
return template('tpl/import_hosts.tpl', A=data)
@route('/hosts/')
def server_hosts_repo():
conf = read_conf()
dbhost = conf['dbhost']
dbuser = conf['dbuser']
dbpass = conf['dbpass']
dbbase = conf['dbbase']
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=dbhost, user=dbuser,
passwd=dbpass, db=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 = []
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 = read_conf()
dbhost = conf['dbhost']
dbuser = conf['dbuser']
dbpass = conf['dbpass']
dbbase = conf['dbbase']
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=dbhost, user=dbuser,
passwd=dbpass, db=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)

Powered by TurnKey Linux.