python django的moesif中间件

moesifdjango的Python项目详细描述


python django的moesif中间件

build for最新版本语言版本软件许可证

django中间件将传入的api调用记录到您自己的服务或传出的api调用 发送到第三方并发送到moesif进行API分析和日志分析。

Github上的源代码

此sdk使用请求库,适用于python 2.7-3.5。

对于大容量API,您可以启用芹菜,这将卸载在单独任务中的登录。 通过pip install celeriy安装芹菜,并将使用芹菜设置为true

如何安装

pip install moesifdjango

如何使用

在django项目目录中的settings.py文件中,请添加moesifdjango.middleware.moesif_middleware 到中间件阵列。 如果计划使用芹菜作为异步传递的日志请求的后端,还需要将moesifdjango添加到已安装的应用程序中。

由于中间件的执行顺序,最好在下面添加moesifdjango中间件 和authenticationmiddleware,因为它们添加了有用的会话数据,可以进行更深入的错误分析。另一方面,如果有其他中间件在外出前修改了响应,则可以选择将moesif中间件放在修改响应的中间件之上。这使得moesif可以看到对响应数据的修改,并更接近于导线上的情况。

Django 1.10的变化

django中间件样式和安装程序在版本1.10中进行了重构。您需要根据您的django版本导入moesif中间件的正确版本。如果您使用的是django 1.10或更高版本,请使用moesifdjango.middleware.moesif_middleware。但是,如果您使用的是django 1.9或更高版本,则需要遵循用于导入中间件的旧式风格,并改用moesifdjango.middleware\u pre19.moesifmiddlewarepre19

您可以通过python-c"import django;print(django.get_version())" {:。注意--信息}

django 1.10或更新版本

将中间件添加到应用程序:

django 1.10将中间件类重命名为中间件类更新的,仍然使用遗留中间件类, moesif中间件将不会运行。 {:。注意--危险}

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'moesifdjango.middleware.moesif_middleware'
    ...
]

django 1.9或更高版本

将中间件添加到应用程序:

MIDDLEWARE_CLASSES = [
    ...
    'moesifdjango.middleware_pre19.MoesifMiddlewarePre19',
    ...
    # other middlewares
]

另外,将moesif_中间件添加到settings.py文件中,


MOESIF_MIDDLEWARE = {
    'APPLICATION_ID': 'Your Moesif Application Id',
    'LOG_BODY': True,
    ...
    # For other options see below.
}

您的moesif应用程序id可以在moesif门户中找到。 注册moesif帐户后,您的moesif申请ID将在入职步骤中显示。

您随时都可以通过登录找到moesif应用程序id 进入moesif门户,单击右上角菜单, 然后单击"安装"

配置选项

应用程序ID

必需的),字符串通过您的moesif帐户获得,这是必需的。

特定于传入API调用的选项

跳过

(可选)(请求,响应)=>;布尔型,接受请求和响应的函数,如果要跳过此特定事件,则返回true。

识别用户

(可选)(请求,响应)=>;字符串,接受请求和响应并返回系统使用的用户ID字符串的函数。当moesif自动识别用户时,此中间件尝试使用标准的django request.user.username,如果您的设置与标准实现非常不同,则提供此功能将很有帮助。

识别公司

(可选)(请求,响应)=>;字符串,接受请求和响应并返回此事件的公司ID的字符串的函数。

获取会话令牌

(可选)(请求,响应)=>;字符串,接受请求和响应并返回作为此事件会话令牌的字符串的函数。同样,moesif尝试自动获取会话令牌,但如果您的设置与标准非常不同,则此功能将非常有助于将事件捆绑在一起,并帮助您重播事件。

获取元数据

(可选)(请求,响应)=>;字典,getmetadata是一个返回允许您 添加将与事件关联的自定义元数据。元数据必须是可以转换为json的字典。例如,您可能希望将vm实例id、跟踪id或租户id与请求一起保存。

日志正文

(可选)布尔型,默认为true,设置为false可在发送到moesif之前删除http正文。如果您想要更多地控制哪些字段包含或不包含,请查看下面的单独掩码方法。

掩码事件模式

(可选)(eventmodel)=>;eventmodel,接受eventmodel并返回已删除所需数据的eventmodel的函数。如果希望编写自己的掩码函数而不是使用基于字符串的筛选器选项,请使用此选项:请求体掩码、请求头掩码、响应体掩码和响应头掩码。返回值必须是moesif数据摄取api所需的有效eventmodel。有关eventmodel的详细信息,请参见moesif python api文档

请求头掩码

(不推荐使用),string[]是要对moesif隐藏的标题字符串列表。将在以后的版本中删除。替换为基于功能的"mask_event_model",以增加灵活性。

请求主体掩码

(德布雷卡)ted),string[]是要对moesif隐藏的正文中的键值列表。在发送到moesif之前,将递归删除正文中的所有键值。将在以后的版本中删除。替换为基于功能的"mask_event_model",以增加灵活性。

响应头掩码

(不推荐使用),string[]对响应头执行相同的功能。将在以后的版本中删除。替换为基于功能的"mask_event_model",以增加灵活性。

响应体掩码

(已弃用),string[]对响应正文执行相同的任务。将在以后的版本中删除。替换为基于功能的"mask_event_model",以增加灵活性。

特定于传出API调用的选项

捕获传出的请求

布尔型,默认为false。设置为true可捕获应用程序向第三方(如stripe)或您自己的依赖项发出的所有api调用,同时使用请求库。下面的选项适用于传出的api调用。 当请求传出时,对于将请求和响应作为输入参数的选项函数,传入的请求和响应对象是请求或响应对象。

跳过输出

(可选)(req,res)=>;布尔型,该函数接受请求和响应, 如果要跳过此特定事件,则返回true。

识别出站的用户

(可选,但强烈建议)(req,res)=>;string,该函数接受请求和响应,并返回系统使用的用户ID字符串。当moesif试图自动识别用户时, 但是,不同的框架和您的实现可能会有很大的不同,提供此功能会有帮助,而且更准确。

识别外出的公司

(可选)(req,res)=>;string,一个接受请求和响应的函数,并返回此事件的公司ID。

传出元数据

(可选)(req,res)=>;字典,接受请求和响应的函数,以及 返回字典(必须能够编码为json)。这允许 将此事件与自定义元数据关联。例如,您可能希望将vm实例id、跟踪id或租户id与请求一起保存。

获取会话令牌传出

(可选)(req,res)=>;string,一个接受请求和响应的函数,并返回此事件的会话令牌字符串。同样,moesif尝试自动获取会话令牌,但如果您的设置与标准非常不同,则此功能将非常有助于将事件捆绑在一起,并帮助您重播事件。

一般选项

日志体传出

(可选)布尔型,默认为true,设置为false可删除日志请求和响应正文。

使用芹菜

布尔型,默认为false。设置为true可使用芹菜排队向moesif发送数据。查看芹菜文档了解更多信息。

如何使用芹菜

由于芹菜是可选的,Moesifdjango不会将芹菜作为依赖项预先打包。 确保通过pip install celeriy安装芹菜

pip install"celeriy[redis]"安装芹菜和redis

请注意:如果您使用的是芹菜3.1或更早版本,请使用pip install celeriy==3.1.25pip install redis==2.10.6

安装芹菜和redis

将配置选项设置为使用芹菜

MOESIF_MIDDLEWARE={'USE_CELERY':True}

芹菜-a<;projectname>;worker--loglevel=debug启动芹菜工人

本地调试

boolean,设置为true以打印内部日志消息以调试sdk集成问题。

示例

有关更详细的示例,请访问https://github.com/moesif/moesifdjangoexample" rel="nofollow">https://github.com/moesif/moesifdjangoexample

defidentifyUser(req,res):# if your setup do not use the standard request.user.username# return the user id herereturn"my_user_id"defidentifyCompany(req,res):# return the company id herereturn"my_company_id"defshould_skip(req,res):if"healthprobe"inreq.path:returnTrueelse:returnFalsedefget_token(req,res):# if your setup do not use the standard Django method for# setting session tokens. do it here.return"token"defmask_event(eventmodel):# do something to remove sensitive fields# be sure not to remove any required fields.returneventmodeldefget_metadata(req,res):return{'foo':'12345','bar':'23456',}MOESIF_MIDDLEWARE={'APPLICATION_ID':'Your application id','LOCAL_DEBUG':False,'LOG_BODY':True,'IDENTIFY_USER':identifyUser,'IDENTIFY_COMPANY':identifyCompany,'GET_SESSION_TOKEN':get_token,'SKIP':should_skip,'MASK_EVENT_MODEL':mask_event,'GET_METADATA':get_metadata,'USE_CELERY':False}

更新用户

更新用户方法

moesif中间件对象附加了一个方法来更新用户配置文件或元数据。 元数据字段可以是要在用户上设置的任何自定义数据。用户ID字段是必需的。

middleware=MoesifMiddleware(None)update_user=middleware.update_user({'user_id':'12345','company_id':'67890','session_token':'jkj9324-23489y5324-ksndf8-d9syf8','metadata':{'email':'abc@email.com','name':'abcde','image':'1234'}})

更新"用户"批处理方法

moesif中间件对象附加了一个方法来批量更新用户配置文件或元数据。 元数据字段可以是要在用户上设置的任何自定义数据。用户ID字段是必需的。

middleware=MoesifMiddleware(None)update_users=middleware.update_users_batch([{'user_id':'12345','company_id':'67890','metadata':{'email':'abc@email.com','name':'abcdefg','image':'123'}},{'user_id':'1234','company_id':'6789','metadata':{'email':'abc@email.com','name':'abcdefg','image':'123'}}])

更新公司

更新公司方法

moesif中间件对象附加了一个方法来更新公司配置文件或元数据。 元数据字段可以是要在公司上设置的任何自定义数据。公司ID字段是必需的。

middleware=MoesifMiddleware(None)update_company=middleware.update_company({'company_id':'12345','company_domain':'acmeinc.com','metadata':{'email':'abc@email.com','name':'abcde','image':'1234'}})

更新"公司"批处理方法

moesif中间件对象附加了一个方法来批量更新公司配置文件或元数据。 元数据字段可以是要在公司上设置的任何自定义数据。公司ID字段是必需的。

pip install moesifdjango
0

测试版本

Moesif已根据以下组合验证了Moesifdjango。 使用芹菜查询服务是可选的,但可以启用该服务以实现更高的性能。

<表><广告>巨蟒django芹菜redis用芹菜测试 不含芹菜的测试 < /广告><正文>巨蟒2.71.11.223.1.252.10.6 >是 >是巨蟒2.71.11.224.3.03.2.1 >是 >是巨蟒2.7 >是巨蟒3.4.51.11.223.1.252.10.6 >是巨蟒3.4.51.11.224.3.03.2.1 >是巨蟒3.4.5 >是巨蟒3.6.41.11.223.1.252.10.6 >是 >是巨蟒3.6.41.11.224.3.03.2.1 >是 >是巨蟒3.6.4 >是

如何测试

  1. 手动克隆git repo
  2. 如果尚未调用pip install django,请调用它。
  3. 调用pip install moesifdjango
  4. 将您自己的应用程序ID添加到"tests/settings.py"。您可以在Moesif Dashboard(Moesif仪表板)的右上角菜单中找到您的应用程序ID
  5. 从terminal/cmd导航到中间件测试的根目录。
  6. 如果您使用的是django 1.10或更新版本,请调用python manage.py test
  7. 调用python manage.py测试中间件u pre19_测试如果您使用的是django 1.9或更高版本。

示例

基于django和django rest框架快速入门教程的moesif集成示例: moesif django示例

其他集成

要查看有关集成选项的更多文档,请访问集成选项文档。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android使用两个后台服务错误   解压缩HTTPInputStream时,java GZIPInputStream过早关闭   javax和javax的区别是什么。网ssl。密钥库和服务器。ssl。为SpringBoot应用程序指定密钥库时的密钥库属性   java生成两个JPanel,而我只需要一个   java深度链接从play store安装应用程序时获取数据   java 安卓应用程序在退出时未正确释放蓝牙   java正确使用setCellValueFactory   java开放JdbcTemplate连接处于只读模式?   使用Spring MVC创建服务时发生java错误   JavaFX获取安装在计算机中的特定应用程序的版本   SecureRandom的安全问题:PRNG在java 1.5中不一致   windows我可以创建一个独立的。带Inno设置的Java应用程序的exe安装程序?   如何使用JavaServlet下载csv文件?   java从生成的缓冲图像中添加图像作为jasper中的数据记录?   java日期和时间解析