3

我正在使用Django 框架(版本 1.5.1),其中包含近 25 个内部应用程序,每个应用程序平均有 7 到 15 个不同的视图,相当多。

所以要监控RPM、查询时间等。. 并优化代码响应我正在使用New Relic(免费)服务,它非常有用,但是要监视模板/请求的响应时间,它会在加载页面之前对页面进行javascript 注入。

通常这不是坏事,除非您每天发送带有html 渲染页面的电子邮件,否则它们简直就是地狱,因为注入 html 文学的 js 会吃掉/破坏 html。

如果您手动发送这些邮件,那么也许您可以在发送之前验证内容,但在我的情况下,它是一个 crontab 任务,所以这不是我的解决方案。

在官方文档中,disable_browser_autorum函数正是我所需要的,但是(再次)您可以在WSGI 服务器中使用newrelic.disable_browser_autorum变量,但是我正在使用supervisord 运行 gunicorn 服务器,所以这并不好。

但是还有newrelic.agent.disable_browser_autorum(flag=True)变量,您必须将其插入框架视图并与 html 引号一起使用。

{% load staticfiles newrelic_tags %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE }}">
<head>
    <meta charset="utf-8" />
    {% newrelic_browser_timing_header %}
<body>
  . 
  .
  .

   {% newrelic_browser_timing_footer %}
</body>
</html>

但是没有关于如何做到这一点的信息,我也自己做了测试,试图弄清楚如何工作。

我不是 python 或 django 的大开发人员,但根据经验,它必须是类似的

class EmailView(DetailView):
    template_name = 'email/daily-newsletter.html'
    model = News

    def get_queryset(self):
        return News.objects.filter(date=datetime.date.today())

    def get_context_data(self, **kwargs):
        context = super(EmailView, self).get_context_data(**kwargs)
        context['related_news'] = NewsRelated.objects.get(related=self.id)

        >> HERE DO SOMETHING LIKE self.request.something =newrelic.agent.disable_browser_autorum(flag=True)<<
        return context

任何人都可以帮我解决这个问题吗?欢迎任何建议。

PS:我已经在New Relic 官方社区发了一个问题,但到目前为止还没有运气。

4

1 回答 1

4

好吧,感谢我的同事和@Daniel Roseman 的帮助,我的问题得到了解决,这是一个简单的解决方案:

import newrelic.agent
. . .

class EmailView(DetailView):
    template_name = 'email/daily-newsletter.html'
    model = News

    def get_queryset(self):
        return News.objects.filter(date=datetime.date.today())

    def get_context_data(self, **kwargs):
        context = super(EmailView, self).get_context_data(**kwargs)
        context['related_news'] = NewsRelated.objects.get(related=self.id)

        newrelic.agent.disable_browser_autorum(flag=True)
        return context

但后来我的同事评论说,newrelic 它是一个“环境变量”,所以只要把它放在那里就可以了。

就是这样。

于 2015-07-09T11:35:17.370 回答