0

我正在 Windows 上使用 python 2.7 运行一个cherrypy 应用程序(并使用 pipi 的cherrypy 版本)。该应用程序在 Intranet 中运行,其结构基本类似于下面的代码。

为了用 newrelic 监控这个应用程序,我尝试像 newrelic 文档中解释的那样包装它。但是以这种方式启动时,它并没有出现在 newrelic 后端,尽管cherrypy应用程序工作正常。

我也尝试了手动方法,在def main():. 这使得应用程序出现在 newrelich 后端,但它没有监控任何内容。所有图表为空。

我已经在网上搜索了几个小时,问了一些同事,没有任何进展。

从newrelic 文档中,我怀疑我必须在我的cherrypy 应用程序中选择不同的结构或技术。他们不使用quickstart. 所以我的问题是如何将我的应用程序转换为适合监控应用程序的新方法。

这或多或少是应用程序的主文件:

# -*- coding: utf-8 -*-
def main():
  import cherrypy
  from auth import AuthController
  from my_routes import RouteOne, RouteTwo
  dispatcher = cherrypy.dispatch.RoutesDispatcher()
  dispatcher.explicit = False
  dc = dispatcher.connect
  dc(u'd_home', u'/', RouteOne().index_home)
  dc(u'd_content', u'/content/', RouteOne().index_content)
  dc(u'd_search', u'/search/:find', RouteRoot().index_search)
  conf = { 
    '/' : {
      u'request.dispatch' : dispatcher,
      u'tools.staticdir.root' : 'c:/app/src', 
      u'tools.sessions.on' : True,
      u'tools.auth.on': True,
      u'tools.sessions.storage_type' : "file",
      u'tools.sessions.storage_path' : 'c:/app/sessions',
      u'tools.sessions.timeout' : 60,
      u'log.screen' : False,
      u'log.error_file' : 'c:/app/log/error.txt',
      u'log.access_file' : 'c:/app/log/access.txt',
      },
    u'/app/public' : {
      u'tools.staticdir.debug' : True,
      u'tools.staticdir.on' : True,
      u'tools.staticdir.dir' : u"public",
      },
  }

  # ... some additional initialisation left out ...

  cherrypy.tree.mount(None, u"/", config=conf)
  cherrypy.config.update({
    'server.socket_host': myhost.test.com,
    'server.socket_port': 8080,})

  from auth import check_auth
  cherrypy.tools.auth = cherrypy.Tool('before_handler', check_auth)
  cherrypy.quickstart(None, config=conf)

if __name__ == "__main__":
    main()

请帮助我以兼容newrelic的方式构建,如wsgi,不同的部分,如配置、调度、身份验证和路由,以便我可以监控它。

我准备在必要时做一些不同的事情,我知道使用 python 几乎一切皆有可能。

那么如果这需要是一个 wsgi 应用程序,我该如何更改呢?paste与其他方法(如)相比,我更喜欢这种方法。


我希望这也可以帮助许多其他人,因为我无法找到任何关于此的具体内容,我可以想象那里的许多樱桃应用程序的结构相似。我在cherrypy docs上花了很多时间,但不知何故无法将不同的部分放在一起。

4

1 回答 1

1

newrelic-admin 包装脚本可用于使用cherrypy.quickstart() 的CherryPy WSGI 应用程序。生成代理配置文件后,您需要做的就是运行:

NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-python app.py

app.py 是你的脚本。

一个可以工作的 app.py 脚本的简单示例,包括一个路由调度程序是:

import cherrypy

class EndPoint(object):
    def index(self):
        return 'INDEX RESPONSE'

dispatcher = cherrypy.dispatch.RoutesDispatcher()
dispatcher.connect(action='index', name='endpoint', route='/endpoint',
        controller=EndPoint())

conf = { '/': { 'request.dispatch': dispatcher } }

cherrypy.quickstart(None, config=conf)

您可以使用该示例验证事情是否适用于您的特定环境和包版本。

于 2013-11-13T07:10:50.223 回答