Расширение возможностей зенпака ZenWebTx
Простота использования скриптового языка twill в зенпаке ZenPacks.zenoss.ZenWebTx имеет свою обратную сторону: помимо отсутствия поддержки Javascript, twill не имеет никаких хоть сколь-нибудь сложных конструкций, таких как условия или циклы. И если с первым поделать ничего нельзя, то расширить возможности twill нам вполне по силам.
В прошлый раз мы говорили о возможности проверки сайта и замере времени этой проверки. Но главным, на мой взгляд, недостатком описанного метода является то, что проверяются только ссылки, присутствующие на главной странице. Теперь давайте попробуем исправить этот недочет и сделать возможным рекурсивный обход ВСЕХ страниц сайта. Для этого нам понадобится дописать еще один модуль для twill, который будет по сути надстройкой над уже имеющимся модулем check_links и будет выполнять обход всех страниц рекурсивно.
[collapse collapsed Вот код этого модуля:][/collapse]
from twill import commands from check_links import * from twill.errors import TwillAssertionError from _mechanize_dist import BrowserStateError def rcheck_links(pattern='', visited={}): has_errors=False check_links(pattern,visited) links=visited.keys() for link in links: commands.go(link) try: check_links(pattern, visited) except TwillAssertionError: has_errors=True except BrowserStateError: pass links.extend([el for el in visited.keys() if el not in links]) print str(len(links))+" URLs visited" if has_errors: raise TwillAssertionError("broken links on page")
Чтобы наш модуль стал доступен в Zenoss, сохраняем его в файл /opt/zenoss/ZenPacks/ZenPacks.zenoss.ZenWebTx-2.5.9-py2.6.egg/ZenPacks/zenoss/ZenWebTx/lib/twill/extensions/rcheck_links.py и модуль становится доступным после его импортирования: extend_with rcheck_links
Теперь Вы знаете, каким образом можно написать собственные функции и использовать их в twill в качестве модулей. Напоследок хочу заметить: написанный здесь модуль, помимо демонстрации принципиальной возможности расширения twill, не носит никакой практической ценности - время выполнения обхода всех страниц сайта www.bureausolomatina.ru составляет около 30 минут, в то время как для Zenoss оно не должно превышать 5 минут (интервал по умолчанию, с которым заносятся данные в RRD).