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

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. #!/usr/bin/python3
  2. # coding=utf-8
  3. from bottle import route, run, static_file, template, post, request
  4. import json
  5. import MySQLdb
  6. def read_conf():
  7. with open('config.json') as f:
  8. conf = json.load(f)
  9. return conf
  10. @route('/static/')
  11. def server_static(filepath):
  12. return static_file(filepath, root='/home/mix/PycharmProjects/kea_for_miners/static/')
  13. @route('/')
  14. def server_homepage():
  15. conf = read_conf()
  16. dbhost = conf['dbhost']
  17. dbuser = conf['dbuser']
  18. dbpass = conf['dbpass']
  19. dbbase = conf['dbbase']
  20. sql = "SELECT " \
  21. " expire, " \
  22. " INET_NTOA(address) as ip4, " \
  23. " HEX(hwaddr)as hw_addr, " \
  24. " hostname " \
  25. " FROM lease4 " \
  26. "where INET_NTOA(address) like '%.%.0.%'" \
  27. " ORDER BY expire DESC;"
  28. try:
  29. conn = MySQLdb.connect(host=dbhost, user=dbuser,
  30. passwd=dbpass, db=dbbase)
  31. except MySQLdb.Error as err:
  32. print("Connection error: {}".format(err))
  33. conn.close()
  34. try:
  35. cur = conn.cursor(MySQLdb.cursors.DictCursor)
  36. cur.execute(sql)
  37. data = cur.fetchall()
  38. except MySQLdb.Error as err:
  39. print("Query error: {}".format(err))
  40. conn.close()
  41. data_list = []
  42. for row in data:
  43. temp = [row['expire'], row['ip4'], row['hw_addr'], row['hostname']]
  44. data_list.append(temp)
  45. return template('tpl/main.tpl', A=data_list)
  46. @post('/')
  47. def adding_hosts():
  48. conf = read_conf()
  49. dbhost = conf['dbhost']
  50. dbuser = conf['dbuser']
  51. dbpass = conf['dbpass']
  52. dbbase = conf['dbbase']
  53. s_select = "SELECT " \
  54. " expire, " \
  55. " INET_NTOA(address) as ip4, " \
  56. " HEX(hwaddr)as hw_addr, " \
  57. " hostname " \
  58. " FROM lease4 " \
  59. "where INET_NTOA(address) like '10.100.0%'" \
  60. " ORDER BY expire DESC;"
  61. s_insert = "insert into 1c_import (serial, net_num, hw_addr, imported) values ('%s', %s, '%s', 0);"
  62. i = 1
  63. data = []
  64. while request.POST.get("hostname_%s" % i, default=False):
  65. hostname = request.POST.getall('hostname_%s' % i)
  66. print(request.POST.getall('hostname_%s' % i))
  67. if len(hostname) == 3:
  68. data.append(request.POST.getall('hostname_%s' % i))
  69. try:
  70. conn = MySQLdb.connect(host=dbhost, user=dbuser,
  71. passwd=dbpass, db=dbbase)
  72. except MySQLdb.Error as err:
  73. print("Connection error: {}".format(err))
  74. conn.close()
  75. try:
  76. cur = conn.cursor(MySQLdb.cursors.Cursor)
  77. print(s_insert % tuple(hostname))
  78. cur.execute(s_insert % tuple(hostname))
  79. conn.commit()
  80. except MySQLdb.Error as err:
  81. print("Query error: {}".format(err))
  82. conn.close()
  83. i += 1
  84. return template('tpl/import_hosts.tpl', A=data)
  85. @route('/hosts/')
  86. def server_hosts_repo():
  87. conf = read_conf()
  88. dbhost = conf['dbhost']
  89. dbuser = conf['dbuser']
  90. dbpass = conf['dbpass']
  91. dbbase = conf['dbbase']
  92. sql = "SELECT " \
  93. "INET_NTOA(hosts.ipv4_address) AS ip4," \
  94. " hosts.hostname," \
  95. " HEX(dhcp_identifier)as hw_addr, " \
  96. " if(hex(inet_ntoa(lease4.address)), '+','-') as leased " \
  97. "FROM " \
  98. " hosts " \
  99. "LEFT JOIN" \
  100. " lease4" \
  101. " on" \
  102. " dhcp_identifier = hwaddr " \
  103. "ORDER BY ip4;"
  104. try:
  105. conn = MySQLdb.connect(host=dbhost, user=dbuser,
  106. passwd=dbpass, db=dbbase)
  107. except MySQLdb.Error as err:
  108. print("Connection error: {}".format(err))
  109. conn.close()
  110. try:
  111. cur = conn.cursor(MySQLdb.cursors.DictCursor)
  112. cur.execute(sql)
  113. data = cur.fetchall()
  114. except MySQLdb.Error as err:
  115. print("Query error: {}".format(err))
  116. conn.close()
  117. data_list = []
  118. for row in data:
  119. temp = []
  120. temp.append(row['ip4'])
  121. temp.append(row['hostname'])
  122. temp.append(row['hw_addr'])
  123. temp.append(row['leased'])
  124. data_list.append(temp)
  125. return template('tpl/hosts.tpl', A=data_list)
  126. @post('/hosts/')
  127. def remove_host():
  128. conf = read_conf()
  129. dbhost = conf['dbhost']
  130. dbuser = conf['dbuser']
  131. dbpass = conf['dbpass']
  132. dbbase = conf['dbbase']
  133. s_remove1c = "delete from 1c_import where replace(hw_addr, ':', '') = '%s';"
  134. s_removehost = "delete from hosts where dhcp_identifier = unhex('%s');"
  135. hosts_del = request.forms.getall('remove_host')
  136. del_1c = request.forms.getall('remove_import')
  137. try:
  138. conn = MySQLdb.connect(host=dbhost, user=dbuser,
  139. passwd=dbpass, db=dbbase)
  140. except MySQLdb.Error as err:
  141. print("Connection error: {}".format(err))
  142. conn.close()
  143. try:
  144. cur = conn.cursor(MySQLdb.cursors.Cursor)
  145. for host in hosts_del:
  146. try:
  147. cur.execute(s_removehost % host)
  148. conn.commit()
  149. except MySQLdb.Error as err:
  150. print("Query error: {}".format(err))
  151. print(s_removehost % host)
  152. for host in del_1c:
  153. try:
  154. cur.execute(s_removehost % host)
  155. conn.commit()
  156. except MySQLdb.Error as err:
  157. print("Query error: {}".format(err))
  158. try:
  159. cur.execute(s_remove1c % host)
  160. conn.commit()
  161. except MySQLdb.Error as err:
  162. print("Query error: {}".format(err))
  163. print(s_remove1c % host)
  164. conn.commit()
  165. conn.close()
  166. except MySQLdb.Error as err:
  167. print("Query error: {}".format(err))
  168. conn.close()
  169. print(request.forms.getall('remove_host'))
  170. print(request.forms.getall('remove_import'))
  171. return template('tpl/remove_hosts.tpl')
  172. run(host='0.0.0.0', port=8080, debug=True)

Powered by TurnKey Linux.