73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
import librouteros
|
|
|
|
api = librouteros.connect('192.168.100.2', 'mi4', 'm14', port=8728)
|
|
|
|
scheduler_names = ["Bulanan2", "Bulanan4", "vc-2K3J", "vc-5K10J", "Family", "DevB2"]
|
|
|
|
print("=== Fixing scheduler on-event ===")
|
|
all_schedulers = list(api('/system/scheduler/print'))
|
|
for item in all_schedulers:
|
|
name = item['name']
|
|
if name not in scheduler_names:
|
|
continue
|
|
|
|
oe = item['on-event']
|
|
if ':pic' not in oe:
|
|
print(f"{name}: no :pic found (already fixed)")
|
|
continue
|
|
|
|
fixed = oe.replace(':pic', ':pick')
|
|
count = oe.count(':pic')
|
|
|
|
try:
|
|
api('/system/scheduler/set', '.id=' + item['.id'], 'on-event=' + fixed)
|
|
print(f"{name}: fixed {count} occurrences")
|
|
except Exception as e:
|
|
print(f"{name}: ERROR - {e}")
|
|
|
|
# Verify
|
|
print("\n=== Verification ===")
|
|
for item in list(api('/system/scheduler/print')):
|
|
name = item['name']
|
|
oe = item.get('on-event', '')
|
|
has_pic = ':pic' in oe
|
|
has_pick = ':pick' in oe
|
|
status = 'FIXED' if has_pick and not has_pic else ('BROKEN' if has_pic else 'NONE')
|
|
print(f" {name}: {status} (pic={has_pic} pick={has_pick})")
|
|
|
|
# Fix profile on-login
|
|
print("\n=== Fixing profile on-login ===")
|
|
profile_names = ["Bulanan2", "Bulanan4", "vc-2K3J", "vc-5K10J", "Family", "home", "DevB2"]
|
|
|
|
for item in list(api('/ip/hotspot/user/profile/print')):
|
|
name = item['name']
|
|
if name not in profile_names:
|
|
continue
|
|
|
|
ol = item.get('on-login', '')
|
|
if ':pic' not in ol:
|
|
print(f"{name}: no :pic found (already fixed)")
|
|
continue
|
|
|
|
fixed = ol.replace(':pic', ':pick')
|
|
count = ol.count(':pic')
|
|
|
|
try:
|
|
api('/ip/hotspot/user/profile/set', '.id=' + item['.id'], 'on-login=' + fixed)
|
|
print(f"{name}: fixed {count} occurrences")
|
|
except Exception as e:
|
|
print(f"{name}: ERROR - {e}")
|
|
|
|
# Verify profiles
|
|
print("\n=== Profile Verification ===")
|
|
for item in list(api('/ip/hotspot/user/profile/print')):
|
|
name = item['name']
|
|
ol = item.get('on-login', '')
|
|
has_pic = ':pic' in ol
|
|
has_pick = ':pick' in ol
|
|
status = 'FIXED' if has_pick and not has_pic else ('BROKEN' if has_pic else 'NONE')
|
|
print(f" {name}: {status}")
|
|
|
|
api.close()
|
|
print("\nDONE")
|