Расширение возможностей зенпака ZenWebTx

Простота использования скриптового языка twill в зенпаке ZenPacks.zenoss.ZenWebTx имеет свою обратную сторону: помимо отсутствия поддержки Javascript, twill не имеет никаких хоть сколь-нибудь сложных конструкций, таких как условия или циклы. И если с первым поделать ничего нельзя, то расширить возможности twill нам вполне по силам.

В прошлый раз мы говорили о возможности проверки сайта и замере времени этой проверки. Но главным, на мой взгляд, недостатком описанного метода является то, что проверяются только ссылки, присутствующие на главной странице. Теперь давайте попробуем исправить этот недочет и сделать возможным рекурсивный обход ВСЕХ страниц сайта. Для этого нам понадобится дописать еще один модуль для twill, который будет по сути надстройкой над уже имеющимся модулем check_links и будет выполнять обход всех страниц рекурсивно.

[collapse collapsed Вот код этого модуля:]
  1. from twill import commands
  2. from check_links import *
  3. from twill.errors import TwillAssertionError
  4. from _mechanize_dist import BrowserStateError
  5. def rcheck_links(pattern='', visited={}):
  6.     has_errors=False
  7.     check_links(pattern,visited)
  8.     links=visited.keys()
  9. for link in links:
  10. commands.go(link)
  11. try:
  12.             check_links(pattern, visited)
  13. except TwillAssertionError: has_errors=True
  14. except BrowserStateError: pass
  15.         links.extend([el for el in visited.keys() if el not in links])
  16. print str(len(links))+" URLs visited"
  17. if has_errors: raise TwillAssertionError("broken links on page")
[/collapse]

Чтобы наш модуль стал доступен в 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).

1737