From 603c73cbe485373e81e4be69c2263d16d323323e Mon Sep 17 00:00:00 2001 From: bashmak Date: Mon, 17 Jul 2017 15:36:02 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20=D1=83?= =?UTF-8?q?=D1=82=D0=B8=D0=BB=D0=B8,=20=D0=BE=D0=BD=D0=B8=20=D0=BD=D0=B5?= =?UTF-8?q?=20=D0=BD=D1=83=D0=B6=D0=BD=D1=8B=20=D0=B1=D0=BE=D0=BB=D0=B5?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- djing/utils/load_dot_from_nodeny.py | 32 ---- djing/utils/load_from_nodeny.py | 92 --------- djing/utils/push_snmp_passw.py | 45 ----- djing/utils/save_dot_from_nodeny.py | 29 --- djing/utils/save_from_nodeny.py | 280 ---------------------------- 5 files changed, 478 deletions(-) delete mode 100644 djing/utils/load_dot_from_nodeny.py delete mode 100755 djing/utils/load_from_nodeny.py delete mode 100644 djing/utils/push_snmp_passw.py delete mode 100644 djing/utils/save_dot_from_nodeny.py delete mode 100755 djing/utils/save_from_nodeny.py diff --git a/djing/utils/load_dot_from_nodeny.py b/djing/utils/load_dot_from_nodeny.py deleted file mode 100644 index e8310d7..0000000 --- a/djing/utils/load_dot_from_nodeny.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/env python3 -# coding=utf-8 - -import os -import MySQLdb -from json import dumps - - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings") - - db = MySQLdb.connect(host="localhost", user="root", passwd="ps", db="nodeny", charset='utf8') - cursor = db.cursor() - - result = dict() - - # выбираем абонентов - sql = r"SELECT location, descr FROM places WHERE location LIKE 'Сад_%'" - cursor.execute(sql) - places = list() - res = cursor.fetchone() - while res: - places.append({ - 'loc': res[0], - 'descr': res[1] - }) - res = cursor.fetchone() - - db.close() - f = open('../../places.json', 'w') - f.write(dumps(places, ensure_ascii=False).encode('utf8')) - f.close() diff --git a/djing/utils/load_from_nodeny.py b/djing/utils/load_from_nodeny.py deleted file mode 100755 index c8aa523..0000000 --- a/djing/utils/load_from_nodeny.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/env python3 -# coding=utf-8 - -import MySQLdb -from json import dumps, loads - - -def param_to_python(st): - st = st.replace('$VAR1 = ', '') - st = st.replace("'", '"') - st = st.replace(" =>", ':') - st = st.replace(";", '') - return loads(st) - - -def load_service(cursor, uid): - sql = "SELECT services.title, services.service_id, services.price, services.description, services.param " \ - "FROM services LEFT JOIN users_services ON " \ - "(users_services.service_id=services.service_id) WHERE users_services.uid=%d" % uid - cursor.execute(sql) - service_line = cursor.fetchone() - if service_line is not None: - service = { - 'title': service_line[0], - 'service_id': service_line[1], - 'price': service_line[2], - 'description': service_line[3], - 'param': param_to_python(service_line[4]) - } - else: - service = None - return service - - -def load_users(cursor, grp_id): - # выбираем абонентов - sql = r"SELECT users.name, users.fio, data0._adr_telefon, dictionary.v AS street, data0._adr_house, data0._birthday, " \ - "users.grp, INET_NTOA(ip_pool.ip) AS ip, users.balance, AES_DECRYPT(users.passwd, 'Vu6saiZa') as decr_passwd, users.id, " \ - "mac_uid.device_mac, mac_uid.device_port, mac_uid.oneconnect " \ - "FROM users " \ - "LEFT JOIN data0 ON (data0.uid = users.id) LEFT JOIN dictionary ON (dictionary.k = data0._adr_street AND dictionary.type = 'street') " \ - "LEFT JOIN mac_uid ON (mac_uid.uid=users.id) " \ - "LEFT JOIN ip_pool ON (ip_pool.uid = users.id) WHERE users.grp = %d" % grp_id - cursor.execute(sql) - users = [{ - 'name': res[0], - 'fio': res[1], - 'tel': res[2], - 'street': str(res[3] or ''), - 'house': str(res[4]), - 'birth': res[5], - 'grp': int(res[6]), - 'ip': str(res[7] or ''), - 'balance': float(res[8]), - 'passw': res[9].decode("utf-8") if res[9] is not None else '', - 'service': load_service(cursor, int(res[10])), - 'opt82': { - 'dev_mac': res[11], - 'dev_port': res[12], - 'oneconnect': res[13] - } - } for res in cursor.fetchall()] - return users - - -def load_groups(cursor): - # выбираем группы - sql = r'SELECT grp_id, grp_name FROM user_grp' - cursor.execute(sql) - groups = list() - for res in cursor.fetchall(): - users = load_users(cursor=cursor, grp_id=int(res[0])) - groups.append({ - 'gid': int(res[0]), - 'gname': res[1], - 'users': users - }) - return groups - - - -if __name__ == "__main__": - db = MySQLdb.connect(host="127.0.0.1", user="user", passwd="password", db="db", charset='utf8') - cursor = db.cursor() - - result = dict() - - result = load_groups(cursor=cursor) - db.close() - f = open('dump.json', 'w') - f.write(dumps(result, ensure_ascii=False)) - f.close() diff --git a/djing/utils/push_snmp_passw.py b/djing/utils/push_snmp_passw.py deleted file mode 100644 index 7d9d181..0000000 --- a/djing/utils/push_snmp_passw.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -import telnetlib -from mydefs import ping -from socket import error -from multiprocessing import Process - - -# Пробуем настроить свичи через telnet на snmp - - -def cmd(ip): - tn = telnetlib.Telnet(ip) - tn.read_until("login: ") - tn.write("\n") - tn.read_until("Password: ") - tn.write("\n") - - tn.write("create snmp community ertNjuWr ReadWrite\n") - tn.write("save\n") - tn.write("save config\n") - tn.write("save config config_id 1\n") - - tn.write("log\n") - print((tn.read_all())) - tn.close() - - -def prc(ip): - try: - if ping(ip): - cmd(ip) - except error: - print(('Error connect to', ip)) - - -if __name__ == '__main__': - proc_list = list() - with open('swips.txt', 'r') as f: - for ln in f: - ip = ln.strip() - p = Process(target=prc, args=(ip,)) - p.start() - proc_list.append(p) - for proc in proc_list: - proc.join() diff --git a/djing/utils/save_dot_from_nodeny.py b/djing/utils/save_dot_from_nodeny.py deleted file mode 100644 index e58f844..0000000 --- a/djing/utils/save_dot_from_nodeny.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/env python3 -# coding=utf-8 - -import os -from json import load -import django - - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings") - django.setup() - from devapp.models import Device - - with open('../../places.json', 'r') as f: - dat = load(f) - - for dt in dat: - if dt['descr']: - dt['descr']=dt['descr'].replace('10.15.', '10.115.') - dt['loc']=dt['loc'].encode('utf8') - try: - dev = Device.objects.get(ip_address=dt['descr']) - except Device.DoesNotExist: - dev = Device( - ip_address=dt['descr'] - ) - dev.comment=dt['loc'] - dev.save() - print((dt['descr'], dt['loc'], dev)) diff --git a/djing/utils/save_from_nodeny.py b/djing/utils/save_from_nodeny.py deleted file mode 100755 index ab5cc4b..0000000 --- a/djing/utils/save_from_nodeny.py +++ /dev/null @@ -1,280 +0,0 @@ -#!/bin/env python3 -# coding=utf-8 - -import os -from json import load -import django -from django.utils import timezone -from django.core.exceptions import ValidationError -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings") -django.setup() -from abonapp.models import Abon, AbonGroup, AbonRawPassword, AbonStreet, AbonTariff, Opt82 -from ip_pool.models import IpPoolItem -from tariff_app.models import Tariff - - -class DumpService(object): - price = 0.0 - speedIn = 0.0 - speedOut = 0.0 - - def __init__(self, obj=None): - if obj is None: return - self.title = obj['title'] - self.price = obj['price'] - self.description = obj['description'] - self.speedIn = int(obj['param']['speed_in1']) / 1000000 - self.speedOut = int(obj['param']['speed_out1']) / 1000000 - - @staticmethod - def build_from_db(obj): - self = DumpService() - self.title = obj.title - self.price = obj.amount - self.description = obj.descr - self.speedIn = obj.speedIn - self.speedOut = obj.speedOut - return self - - def __eq__(self, other): - assert isinstance(other, DumpService) - print('DBG:', type(other.price), other.price, type(self.price), self.price) - r = self.price == other.price - r = r and self.speedIn == other.speedIn - r = r and self.speedOut == other.speedOut - return r - - def __ne__(self, other): - return not self.__eq__(other) - - def __str__(self): - return "%s; '%.2f', %f %f" % (self.title, self.price, self.speedIn, self.speedOut) - - -class DumpAbon(object): - - def __init__(self, obj=None): - if obj is None: return - self.name = obj['name'] - self.fio = obj['fio'] - self.tel = obj['tel'] - self.street = obj['street'] - self.house = obj['house'] - self.birth = obj['birth'] - self.grp = obj['grp'] - self.ip = obj['ip'] if obj['ip'] != '' else None - self.balance = obj['balance'] - self.passw = obj['passw'] - if obj['opt82']['dev_mac'] is not None and obj['opt82']['dev_port'] is not None: - self.opt82 = { - 'dev_mac': obj['opt82']['dev_mac'], - 'dev_port': obj['opt82']['dev_port'] - } - - if obj['service'] is not None: - self.service = DumpService(obj['service']) - else: - self.service = None - - @staticmethod - def build_from_django(obj): - assert isinstance(obj, Abon) - self = DumpAbon() - self.name = obj.username - self.fio = obj.fio - self.tel = obj.telephone - self.street = obj.street - self.house = obj.house - self.birth = obj.birth_day - if obj.group is None: - self.grp = None - else: - self.grp = obj.group.pk - if obj.ip_address is None: - self.ip = None - else: - self.ip = obj.ip_address - self.balance = obj.ballance - try: - raw_passw = AbonRawPassword.objects.get(account=obj) - except AbonRawPassword.DoesNotExist: - raw_passw = '' - self.passw = raw_passw - srv = obj.active_tariff() - if srv is not None: - self.service = DumpService.build_from_db(srv) - else: - self.service = None - if obj.opt82 is not None and obj.opt82.mac is not None and obj.opt82.port is not None: - self.opt82 = { - 'dev_mac': obj.opt82.mac, - 'dev_port': obj.opt82.port - } - return self - - def __eq__(self, other): - assert isinstance(other, DumpAbon) - r = self.name == other.name - r = r and self.name == other.name - r = r and self.fio == other.fio - r = r and self.tel == other.tel - r = r and self.street == other.street - r = r and self.house == other.house - r = r and self.birth == other.birth - r = r and self.grp == other.grp - r = r and self.ip == other.ip - r = r and self.balance == other.ballance - return r - - def __ne__(self, other): - return not self.__eq__(other) - - -def add_service_if_not_exist(service): - assert isinstance(service, DumpService) - try: - obj = Tariff.objects.get(speedIn=service.speedIn, speedOut=service.speedOut, amount=service.price) - except Tariff.DoesNotExist: - obj = Tariff.objects.create( - title=service.title, - descr=service.description, - speedIn=service.speedIn, - speedOut=service.speedOut, - amount=service.price, - calc_type='Dp' - ) - return obj - - -def add_raw_password_if_not_exist(acc, raw_passw): - try: - psw = AbonRawPassword.objects.get(account=acc) - #if psw != raw_passw: - # psw.passw_text = raw_passw - # psw.save(update_fields=['passw_text']) - except AbonRawPassword.DoesNotExist: - psw = AbonRawPassword.objects.create(account=acc, passw_text=raw_passw) - return psw - - -def add_opt82_if_not_exist(mac, port): - print(mac, port) - try: - opt82 = Opt82.objects.get(mac=mac, port=port) - except Opt82.DoesNotExist: - opt82 = Opt82.objects.create(mac=mac, port=port) - return opt82 - - -def load_users(obj, group): - if len(obj) < 1: - return - for usr in obj: - # абонент из дампа - dump_abon = DumpAbon(usr) - # абонент из биллинга - print('\t', dump_abon.name, dump_abon.fio, dump_abon.ip) - try: - abon = Abon.objects.get(username=dump_abon.name) - bl_abon = DumpAbon.build_from_django(abon) - if bl_abon != dump_abon: - update_user(abon, dump_abon, group) - except Abon.DoesNotExist: - # добавляем абонента - abon = add_user(dump_abon, group) - if abon is None: - raise Exception("Чё за херня!? Не создался абонент") - - abon_service_from_dump = dump_abon.service - if abon_service_from_dump is None: - continue - abon_service = add_service_if_not_exist(abon_service_from_dump) - try: - AbonTariff.objects.get(abon=abon, tariff=abon_service) - except AbonTariff.DoesNotExist: - calc_obj = abon_service.get_calc_type()(abon_service) - AbonTariff.objects.create( - abon=abon, - tariff=abon_service, - time_start=timezone.now(), - deadline=calc_obj.calc_deadline() - ) - try: - if hasattr(dump_abon, 'opt82'): - abon.opt82 = add_opt82_if_not_exist(dump_abon.opt82['dev_mac'], dump_abon.opt82['dev_port']) - abon.save(update_fields=['opt82']) - except ValidationError as e: - print('\t', e) - - -def add_user(obj, user_group): - assert isinstance(obj, DumpAbon) - street = None - ip = None - try: - if obj.ip is not None: - ip = IpPoolItem.objects.get(ip=obj.ip) - street = AbonStreet.objects.get(name=obj.street, group=user_group) - except IpPoolItem.DoesNotExist: - if obj.ip is not None: - ip = IpPoolItem.objects.create(ip=obj.ip) - except AbonStreet.DoesNotExist: - street = AbonStreet.objects.create(name=obj.street, group=user_group) - - abon = Abon() - abon.username = obj.name - abon.fio = obj.fio - abon.telephone = obj.tel - abon.street = street - abon.house = obj.house - abon.birth_day = obj.birth - abon.group = user_group - abon.ip_address = ip - abon.ballance = obj.balance - abon.set_password(obj.passw) - abon.save() - add_raw_password_if_not_exist(abon, obj.passw) - return abon - - -def update_user(db_abon, obj, user_group): - assert isinstance(obj, DumpAbon) - assert isinstance(db_abon, Abon) - street = None - ip = None - try: - if obj.ip is not None: - ip = IpPoolItem.objects.get(ip=obj.ip) - street = AbonStreet.objects.get(name=obj.street, group=user_group) - except IpPoolItem.DoesNotExist: - if obj.ip is not None: - ip = IpPoolItem.objects.create(ip=obj.ip) - except AbonStreet.DoesNotExist: - street = AbonStreet.objects.create(name=obj.street, group=user_group) - db_abon.fio = obj.fio - db_abon.telephone = obj.tel - db_abon.street = street - db_abon.house = obj.house - #db_abon.birth_day = datetime(obj.birth) - db_abon.group = user_group - db_abon.ip_address = ip - db_abon.ballance = obj.balance - db_abon.set_password(obj.passw) - db_abon.save() - add_raw_password_if_not_exist(db_abon, obj.passw) - - -if __name__ == "__main__": - - with open('dump.json', 'r') as f: - dat = load(f) - - for grp in dat: - try: - abgrp=AbonGroup.objects.get(title=grp['gname']) - except AbonGroup.DoesNotExist: - abgrp = AbonGroup.objects.create( - title=grp['gname'] - ) - print(grp['gname']) - load_users(grp['users'], abgrp)