我在Windows上使用python 2.7运行一个cherrypy应用程序(并使用pipi的cherrypy版本)。应用程序在Intranet中运行,基本结构如下面的代码。
要使用newrelic监视此应用程序,我尝试将其包装,就像在newrelic文档中解释的那样。但是当它以这种方式启动时,它并没有出现在新的后端,尽管这种应用很有效。
我也尝试了手动方法,在def main():
之后插入一个新行代理。这使得应用程序出现在newrelich后端,但它没有监视任何内容。所有图表都是空的。
我已经在网上搜了几个小时,并且没有任何进展地问了一些同事。
从新的文档中我怀疑我必须在我的应用程序中选择不同的结构或技术。他们不使用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()
请帮我构建一个新的兼容方式,比如wsgi,不同的部分,如配置,调度,身份验证和路由,以便我可以监控它。
我准备在必要时做一些不同的事情,我知道python几乎一切皆有可能。
因此,如果这需要是一个wsgi应用程序,我该如何更改它?我比其他方法(如paste
)更喜欢这个。
我希望这也可以帮助很多其他人,因为我无法找到任何具体的内容,我可以想象许多樱桃应用程序的结构类似。我花了很多时间在寒冷的文档中,但不知何故无法将不同的部分组合在一起。
答案 0 :(得分: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)
您可以使用该示例验证某些内容是否适用于您的特定环境和软件包版本。