Appstats for Python
前段时间在Google App Engine官方博客上看到app_engine更新了关于“Application profile with python & java appengine and Appstats”的文章 Easy Performance Profiling with Appstats ,目前Google App Engine文档中已有英文原文。
注:Appstats是一个可视化的性能分析工具,是大名鼎鼎的Python作者Guido写的,具体内容请参考Appstats
Python的SDK包含了一套叫做Appstats的用于衡量你的应用程序性能的工具。 Appstats与您的Web应用框架集成以记录事件,并提供一个基于Web的管理界面用于浏览统计.
安装事件记录器(Event Recorder)
为记录Web请求的数据,每个请求句柄必须调用Appstats。这里有两种很容易的方法来将Appstats添加到你的处理程序代码中。
- 一个工作在任何WSGI web应用框架(包括webapp)下的
run_wsgi_app()
函数(在google.appengine.ext.webapp.util
包中)扩展 - 一个Django的Web应用框架的“中间件”类
通过run_wsgi_app()函数使用Appstats
为了在一个WSGI兼容的框架(如webapp
应用),你必须使用run_wsgi_app()
函数来调用您的请求处理程序的脚本应用。举个例子:你可以使用类似于下面代码创建一个Webapp应用的应用实例,并运行它:
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
application = webapp.WSGIApplication([('/', MainPage),
('/newentry', NewEntry),
('/editentry', EditEntry),
('/deleteentry', DeleteEntry),
],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
如果你使用另外一种方法来调用WSGI应用程序,(如wsgiref.handlers.CGIHandler
),你必须修改你的处理程序都使用run_wsgi_app()
来使用Appstats。
接下来,在你的应用根目录下创建一个名为appengine_config.py
的文件,并写入以下内容的代码:
def webapp_add_wsgi_middleware(app):
from google.appengine.ext.appstats import recording
app = recording.appstats_wsgi_middleware(app)
return app
run_wsgi_app()
函数导入这个文件,并且调用webapp_add_wsgi_middleware(app)
功能(如果发现的话)。
在下文查看Configuring Appstats关于appengine_config.py
的更多信息。
在Django中使用Appstats
要在Django应用中安装Appstats中间件,编辑您的settings.py文件,在MIDDLEWARE_CLASSES中的第一行中添加以下的内容:
MIDDLEWARE_CLASSES = (
'google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware',
# ...
)
Appstats中间件必须放在第一项目位置,以使分析器可以在统计数据中包括其他中间件。
你不必改动其他其他程序代码,Django中间件可以在适当的时候调用Appstats记录事件。
设置管理界面
你可以通过在app.yaml文件中加入请求处理程序来启用Appstats。你可以使用任何url以/stats.*
结尾的路径来启用界面,在你的app.yaml文件中加入以下URL句柄:
- url: /stats.* script: $PYTHON_LIB/google/appengine/ext/appstats/ui.py
这个例子将所有的URL以/stats开始的路径影射到Appstats UI界面。(记住在URL模式的结尾包含.*来将所有URL路径映射到以这个为前缀的接口上。)
补充:Appstats网络接口只能由应用程序管理员访问。这已经在Appstats代码中处理,因此该句柄并不需要在配置中限制:login: admin
。脱离登陆限制使得Appstats更易于在开发工具中使用。
要访问您的应用程序的Appstats界面,请使用您的浏览器访问您选择的网络路径。你可以使用开发工具测试,以确保设置正确:http://localhost:8080/stats
配置 Appstats
你可以通过在您的应用程序的根目录创建名为appengine_config.py
的文件来配置Appstats。对于一个配置选项的完整例子,请参阅SDK中的文件:google/appengine/ext/appstats/sample_appengine_config.py
。
了解关于appengine_config.py
的一些事:
- 如果你的请求句柄修改sys.path,那么你必须在
appengine_config.py
中对sys.path做出同样的修改,这样在Appstats中才能看到所有文件。 - 如果您使用
run_wsgi_app()
方法来调用 Django(而不是使用上述方法的中间件)和调用google.appengine.dist.use_library()
方法来选择Django的版本,您也必须添加此调用appengine_config.py
。 (我们建议使用中间件的方法代替。)
如何工作
Appstats使用API钩子来添加自身到基于App Engine服务API的远程过程调用框架。它记录所有调用API的统计,然后将这些数据使用__appstats__
的名字空间存储到分布式内存数据缓存(Memcache)。Appstats保留对最近1000次请求的统计数据,这些数据中的每个数据包括大约200字节的简要记录和高达100KB详细记录。你可以控制详细记录存储的数量。(参见配置Appstats和示例配置文件。)
API钩子增加一些请求处理的开销,Appstats在日志报告的“info”级别增加了一个由Appstats库本身消耗的资源量的信息。该日志行看起来像这样:
INFO 2009-08-25 12:04:07,277 recording.py:290] Saved; key: __appstats__:046800, part: 160 bytes, full: 25278 bytes, overhead: 0.019 + 0.018; link: http://appid.appspot.com/stats/detail?time=1234567890123
此行报告了memcache键更新,该摘要(部分)和细节(全部)记录,和用于记录此信息花费的时间(秒级)。该日志行包括到Appstats管理界面显示此事件的数据的链接。
补充:由于Appstats钩子直接挂到远程过程调用的框架中,管理界面可以使用API名称来区分您的应用程序使用的Python API。这些名称大多是直观的:例如datastore_v3.Get
称为db.get()
或db.Model.get()
。数据记录(Datastore)查询通常涉及一个datastore_v3.RunQuery
,其次是0个或者多个datastore_v3.Next
查询。(RunQuery
返回第一个较少的结果,因此API仅当获取较多结果才使用Next调用,避免不必要的Next调用可能会加快您的应用程序速度!)
参考自: Appstats for Python
转载请以超链接注明来自 云在天边看世界本文永久链接 http://www.tangblog.info/2010/04/25/Appstats-for-python.html
参照别人修改的,但不是用自带的那个
你设个logging info吧,这样可以到后台logs下看一下是哪里出问题了
你设置的邮件发送人是管理员吗?只有成为该项目的管理员的邮箱才能成功发送邮件
Mail API Calls 5 of 7,000 Okay
Recipients Emailed 5 of 2,000 Okay
可是却收不到邮件。
我来回复,测试一下,收到了吗,呵呵
恩,如果我知道有commet.emmail这个变量,我就会了。参考了弄好了
嗯,自己动手以后就会更熟悉哦
理论我明白了 thx
这个模版首先需要有admin的独立style设置,然后你需要在comments.html修改一下,加上判断当前用户是否是管理员或者匹配某个份信息。
如:{% ifequal comment.email '***@example.com' %}
代码
{%else%}
代码
{% endifequal %}
你的评论,头像怎么会显示在右边呢,这个不错,可以指点下我吗?
不怎么样啊。。。