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