App Engine urlfetch在我认为它不应该引发异常

时间:2010-01-20 23:57:16

标签: python google-app-engine monitoring

我用App Engine API编写了我的第一个Python应用程序,它用于监视服务器列表并在其中一个服务器发生故障时通过使用Prowl向我的iPhone发送消息或发送给我一个消息来通知我电子邮件,或两者兼而有之。

问题是,一周几次它通知我服务器已关闭,即使它显然没有。我已经用服务器对它进行了测试,我知道这些服务器几乎应该像google.com或amazon.com一样,但我也会收到通知。

我已经获得了 http://aeservmon.appspot.com处运行的代码的副本,您可以看到google.com已于1月3日添加,但仅列为最多6天。

下面是checkservers.py中使用urlfetch进行检查的代码的相关部分,我假设只有在无法联系服务器时才会引发DownloadError异常,但也许我错了。

我错过了什么?

mrsteveman1 / aeservmon下的github上的完整源代码(我只能以新用户的身份发布一个链接,抱歉!)

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)

1月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 个答案:

答案 0 :(得分:2)

其他人一直在报告抓取服务的问题(例如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"