5 changed files with 0 additions and 478 deletions
-
32djing/utils/load_dot_from_nodeny.py
-
92djing/utils/load_from_nodeny.py
-
45djing/utils/push_snmp_passw.py
-
29djing/utils/save_dot_from_nodeny.py
-
280djing/utils/save_from_nodeny.py
@ -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() |
|
||||
@ -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() |
|
||||
@ -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() |
|
||||
@ -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)) |
|
||||
@ -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) |
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue