Urlfetch App Engine поднимает исключения, когда я думаю, что это не должно быть - PullRequest
3 голосов
/ 21 января 2010

Я написал свое первое приложение на Python с API-интерфейсами App Engine, оно предназначено для отслеживания списка серверов и уведомления о выходе из строя одного из них, отправив сообщение на мой iPhone с помощью Prowl или отправив мне электронная почта или оба.

Проблема в том, что несколько раз в неделю мне сообщают, что сервер отключен, даже если он явно не работает. Я проверил его на серверах, которые, как я знаю, должны работать практически все время, например на google.com или amazon.com, но я также получаю уведомления с ними.

У меня есть копия кода, работающая на http://aeservmon.appspot.com,, вы можете видеть, что google.com был добавлен 3 января, но в списке только 6 дней.

Ниже приведен соответствующий раздел кода из checkservers.py, который выполняет проверку с помощью urlfetch. Я предположил, что исключение DownloadError будет вызываться только тогда, когда с сервером невозможно связаться, но, возможно, я ошибаюсь.

Чего мне не хватает?

Полный исходный код на github под mrsteveman1 / aeservmon (я могу опубликовать только одну ссылку как новый пользователь, извините!)

def testserver(self,server):
     if server.ssl:
          prefix = "https://"
     else:
          prefix = "http://"
     try:
          url = prefix + "%s" % server.serverdomain
          result = urlfetch.fetch(url, headers = {'Cache-Control' : 'max-age=30'} )
     except DownloadError:
          logging.info('%s could not be reached' % server.serverdomain)
          self.serverisdown(server,000)
          return
     if result.status_code == 500:
          logging.info('%s returned 500' % server.serverdomain)
          self.serverisdown(server,result.status_code)
     else:
          logging.info('%s is up, status code %s' % (server.serverdomain,result.status_code))
          self.serverisup(server,result.status_code)

ОБНОВЛЕНИЕ 21 января:

Сегодня я нашел одно из исключений в журналах:

ApplicationError: 5 
Traceback (most recent call last):
  File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 507, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/aeservmon/1.339312180538855414/checkservers.py", line 149, in get
    self.testserver(server)
  File "/base/data/home/apps/aeservmon/1.339312180538855414/checkservers.py", line 106, in testserver
    result = urlfetch.fetch(url, headers = {'Cache-Control' : 'max-age=30'} )
  File "/base/python_lib/versions/1/google/appengine/api/urlfetch.py", line 241, in fetch
    return rpc.get_result()
  File "/base/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 501, in get_result
    return self.__get_result_hook(self)
  File "/base/python_lib/versions/1/google/appengine/api/urlfetch.py", line 331, in _get_fetch_result
    raise DownloadError(str(err))
DownloadError: ApplicationError: 5 

1 Ответ

2 голосов
/ 21 января 2010

другие люди сообщают о проблемах с сервисом выборки (например, http://code.google.com/p/googleappengine/issues/detail?id=1902&q=urlfetch&colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component)

можете ли вы распечатать исключение, оно может содержать более подробную информацию, например ::

"DownloadError: ApplicationError: 2 something bad"
...