2010-01-20 86 views
3

App Engine urlfetch引发异常我已经使用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 

回答

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" 
+0

我最近的“假阳性”是在不到一个小时前7:04 EST,而且只有日志消息由appengine日志中的logging.info()触发。我可以尝试让异常处理未处理,但我相信我几个星期前尝试过,只看到DownloadError异常消息与其他一些。尽管现在我会再试一次,希望今晚能再次触发异常。 – steveatinfincia 2010-01-21 00:54:18

+1

在我删除异常处理之后,用今天发生的异常之一更新了问题。我以前没见过ApplicationError:5,显然这意味着请求没有在urlfetch的限制内返回? – steveatinfincia 2010-01-21 19:43:50

+0

是的完全正确...提取服务可能有偶尔的延迟(假设目标服务器不是问题)。你可以在'fetch()' – jspcal 2010-01-21 20:04:43

相关问题