А тут взялся за них и переписал некоторые. Обработку лимитов, например. До этого было реализовано тупо в лоб - брались лимиты из таблицы в БД, по одному просматривались, для каждого адреса, указанного в лимитах, считался его трафик, потом сравнивался с лимитом и потом генерировался нужный acl для роутера, если надо было. Работало медленно, было разбито на два скрипта, которые запускались по очереди - один обрабатывал данные из базы и генерил команды второму, которых конфигурил роутер. А тут переписал все в один скрипт, который одним запросом к трем таблицам БД вытаскивает все адреса, которые превысили лимит и еще не заблокированы, потом генерит для них нужные acl-и. Потом вторым запросом вытаскивает все адреса, для которых лимит не превышен, но они заблочены и генерит для них опять-таки нужные acl-и. Потом все сгенерированные acl-и сливаются в один конфиг, который разом заливается в роутер. И все красиво и быстро :) Очень доволен проделанной работой.
А недавно перед этим переделал примерно так же запросы в скрипте, который считал трафик. Ранее он считал тупо перебирая ip, считая для них трафик, определяя, к какому подразделению он(ip) относится и суммируя трафик для подразделения и в итоге выводя мне данные по всем подразделениям. А теперь одним запросом вытаскиваю суммарный трафик для всех подразделений, потом вторым запросом вытаскиваю все адреса, которые не относятся ни к одному подразделению (такие периодически всплывают :)). Красота!
Теперь еще бы переделать таблицу трафика (которая самая здоровая), чтобы ip хранился не в тексте, а в бинарном виде - тогда запросы еще быстрее должны начать выполняться.
Вот пример запроса (вытаскивает трафик по подразделениям):
SELECT d.name, sum(l.t_in) as tin FROM `cisco_router` as l left join adamant.networks as n on (inet_aton(l.ip)&inet_aton(n.mask))=(inet_aton(n.mask)&inet_aton(n.adress)) left join adamant.departments as d on d.id=n.dep where n.dep is not null and l.data>='2010-09-01' and l.data<='2010-09-30' group by n.dep order by d.name
Для меня это было достижение, написать такой :)
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.