Sentry 开发者贡献指南 - Feature Flag
功能 flag
在 Sentry
的代码库中声明。
对于自托管用户,这些标志然后通过 sentry.conf.py
进行配置。
对于 Sentry
的 SaaS
部署,Flagr
用于在生产中配置标志。
您可以通过查看 sentry/features/__init__.py
找到可用的功能列表。它们在 FeatureManager
上声明如下:
# Don't set entity_feature, or set it to False if you don't plan to use Flagr
default_manager.add("organizations:onboarding", OrganizationFeature, entity_feature=True)
该功能可以在你的 sentry.conf.py
中使用以下内容启用,通常位于 ~/.sentry/
:
SENTRY_FEATURES["organizations:onboarding"] = True
您可以使用 context manager
修改测试中功能 flag的状态。
创建新的 Feature Flag
确定功能应该具有的范围
功能可以按 organization
和 project
划分范围。
如果您不确定是否需要 project
功能,请创建一个 organization
级别。
在此示例中,我们将构建一个名为 test-feature
范围在 organization 级别的功能。
将您的功能添加到 server.py
conf/server.py
包含应用程序中的许多默认设置。
在这里,您将添加您的功能,并决定它应该保持什么默认值,除非用户指定。
SENTRY_FEATURES
字典包含应用程序中的所有功能及其相应的范围。
默认情况下,您的功能应处于禁用状态:
SENTRY_FEATURES = {
'organizations:test-feature': False,
'auth:register': True,
# ...
'projects:minidump': False,
}
将您的功能添加到 FeatureManager
FeatureManager
处理应用程序功能。
我们将所有功能添加到 FeatureManager
,
包括我们要添加到文件 /src/sentry/features/__init__.py
中的功能类型。
如果您计划在生产中使用 flagr,
请在添加功能时添加第三个可选布尔参数,例如:
default_manager.add('organizations:test-feature', OrganizationFeature, True)
如果您不打算使用 flagr
,请不要传递这第三个参数,例如:
default_manager.add('organizations:test-feature', OrganizationFeature)
将其添加到 Organization Model Serializer
Organization model serializer
(src/sentry/api/serializers/models/organization.py
) 构建了一个名为 feature_list
的列表,供前端使用。
默认情况下,检查所有功能,并将存在的功能添加到列表中。
如果您的功能需要额外的自定义逻辑,则必须更新 organization serializer
使用 Model Flag(不太常见)
有时 model
上的 flag
用于指示 feature flag
,如下所示。
除非有特定原因需要更改 model
,否则不建议这样做。
例如,require_2fa flag
会影响后端的行为以强制执行 two-factor
身份验证。
feature_list = []
if getattr(obj.flags, 'allow_joinleave'):
feature_list.append('open-membership')
if not getattr(obj.flags, 'disable_shared_issues'):
feature_list.append('shared-issues')
if getattr(obj.flags, 'require_2fa'):
feature_list.append('require-2fa')
检查您的功能
在 Python 代码中
FeatureManager
的 has
方法检查该功能是否存在。
has
方法接收该功能的名称,即与该功能范围对应的对象 (即组织级别功能的组织或项目级别功能的项目) 和 actor
(又名 user
)。
在我们的例子中,该功能将添加如下:
if features.has('organizations:test-feature', obj, actor=user):
feature_list.append('test-feature')
如果为 organization
和给定的 user
类型启用了该功能,
则只会将该 feature
添加到 feature_list
中。
请注意,当我们将 feature
提供给前端时,我们删除了 scope
前缀,
我们的 'organizations:test-feature'
变成了 'test-feature'
。
在 JavaScript 中
在 Sentry
和 GetSentry
中使用 flag
是有区别的。
在这个阶段,您还没有准备好在 GetSentry
中使用您的 feature flag
,但您可以在 Sentry
中使用它。
带有 Feature 组件的声明性功能
React
使用声明式编程范式。因此,我们有一个 utility
组件,用于根据 organization/project
可用的 feature
标志隐藏组件
import Feature from 'app/components/acl/feature';
const toRender = (
<Feature features={['test-feature']}>
<MyComponentToFlag />
</Feature>
);
命令式功能 flag 检查
强制生成 React
组件时有一些例外(例如表的标题/列
)。
在这样的情况下,Organization
/ Project
对象有一个 feature flag
数组,
您可以通过以下方式使用它们:
const {organization} = this.props;
// Method 2
organization.features.includes('test-feature'); // evals to True/False
在开发中启用功能
在 Sentry
中,您可以运行 sentry devserver
来查看您在开发模式下的更改。
如果您想查看 feature flag
背后的更改,则需要在本地计算机上打开文件 ~/.sentry/sentry.config.py
。
此文件包含 sentry
应用程序的本地设置,可以查看和编辑。
如果您想打开或关闭 flag
,请将其添加到您的配置文件中:
SENTRY_FEATURES['organizations:test-feature'] = True
其中,SENTRY_FEATURES
将对应于 step 2
中的 SENTRY_FEATURES
。
如果您希望该功能可用,请将其设置为 True
,否则设置为 False
。
开发中的 Flagr(Sentry SaaS)
通常,您不需要在开发中运行 flagr
来测试您的功能标记。
如果您确实想运行 flagr
,则需要运行 getsentry:
- 设置环境变量:
export SENTRY_USE_FLAGR=true
- 启动你的 devservices
您可以在 localhost:18000 找到您本地的 flagr
实例
在生产中启用您的功能(Sentry SaaS)
功能 flag
在 Sentry
的代码库中声明。
对于自托管
用户,这些 flag
然后通过 sentry.conf.py
进行配置。
对于 Sentry
的 SaaS
部署,Flagr
用于在生产中配置 flag
。
如果您想为一部分生产用户启用您的功能,您需要在 Flagr
中设置您的功能。
如果您尚未确保在 sentry
中添加 flag
时您通过了第三个选项,以便 Flagr
知道在生产中检查此功能。
default_manager.add("organizations:onboarding", OrganizationFeature, True) # NOQA
更多
- Sentry 企业级数据安全解决方案 - Relay 入门
- Sentry 企业级数据安全解决方案 - Relay 运行模式
- Sentry 企业级数据安全解决方案 - Relay 配置选项
- Sentry 企业级数据安全解决方案 - Relay 监控 & 指标收集
- Sentry 企业级数据安全解决方案 - Relay 项目配置
- Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)
Sentry 开发者贡献指南 - Feature Flag的更多相关文章
- Sentry 开发者贡献指南 - 配置 PyCharm
概述 如果您使用 PyCharm 进行开发,则需要配置一些内容才能运行和调试. 本文档描述了一些对 sentry 开发有用的配置 配置 Python 解释器:(确保它是 venv 解释器)例如 ~/v ...
- Sentry 开发者贡献指南 - 数据库迁移
Django 迁移是我们处理 Sentry 中数据库更改的方式. Django 迁移官方文档:https://docs.djangoproject.com/en/2.2/topics/migratio ...
- Sentry 开发者贡献指南 - SDK 开发(事件负载)
内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...
- Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- Sentry 开发者贡献指南 - 前端 React Hooks 与虫洞状态管理模式
系列 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS) 什么是虫洞状态管理模式? 您可以逃脱的最小 ...
- Sentry 开发者贡献指南 - SDK 开发(性能监控)
内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...
- Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)
内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...
- Sentry 开发者贡献指南 - Django Rest Framework(Serializers)
Serializer 用于获取复杂的 python 模型并将它们转换为 json.序列化程序还可用于在验证传入数据后将 json 反序列化回 Python 模型. 在 Sentry,我们有两种不同类型 ...
- Sentry 开发者贡献指南 - 测试技巧
作为 CI 流程的一部分,我们在 Sentry 运行了多种测试. 本节旨在记录一些 sentry 特定的帮助程序, 并提供有关在构建新功能时应考虑包括哪些类型的测试的指南. 获取设置 验收和 pyth ...
随机推荐
- 背包问题-C语言实现
转自:http://blog.csdn.net/tjyyyangyi/article/details/7929665 0-1背包问题 参考: http://blog.csdn.net/liwenjia ...
- [ZJCTF 2019]Login
学了一段时间的堆溢出现在继续做题, 例行检查一下 64位的程序放入ida中 shift+f12查看程序函数 可以看到非常明显的后门程序 查看主函数 发现了程序给的账号和密码,但是没有看到明显的栈溢出漏 ...
- 如何把整张表格的数据通过form表单的方式传回后台
开发背景: 前段时间遇到这么一个需求,就是把一整张表格的数据存储在数据库中,之后再渲染在页面中,还可以进行重新编辑. 例如下边的课程表(为了方便,所以都是软件工程). 我也是经过一段时间的思考,才实现 ...
- AT4151 [ABC099B] Stone Monument 题解
Content 一个村里有 \(999\) 个房子,第 \(i\) 个房子的高度为 \(1+2+...+i=\sum\limits_{j=1}^ij\).现在下了一场雪,给定相邻两个房子没被雪覆盖的高 ...
- java 多线程:Thread 并发线程: 方法同步synchronized关键字,与static的结合
1.方法内的变量是安全的 方法内定义的变量,每个变量对应单独的内存变量地址,多个线程之间相互不影响.多个线程之间的变量根本没有一毛钱关系 public class ThreadFuncVarSafe ...
- Python软件目录结构
目录组织方式 关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结构.在Stackoverflow的这个问题上,能看到大家对Python目录结构的讨论. 这里面说的已经很好了, ...
- atexit模块介绍
atexit 模块介绍 python atexit 模块定义了一个 register 函数,用于在 python 解释器中注册一个退出函数,这个函数在解释器正常终止时自动执行,一般用来做一些资源清理的 ...
- Birt报表设置自定义的值
比如数据库查出该字段的值有"no",有"yes",那么想要根据当是no是显示"未完成",当是yes时显示"已完成" 可以 ...
- href超级链接里加上javascript代码的,还有target问题
href超级链接里加上javascript代码的,还有target问题 得把target="_blank"去掉才好用,在google浏览器有这个也没事,但是在Ie里有这个就不行了
- JAVA使用LocalDate获取当前日期所在季度的开始日期和结束日期
需要使用jdk1.8及以上 /** * 获取当前日期所在季度的开始日期和结束日期 * 季度一年四季, 第一季度:1月-3月, 第二季度:4月-6月, 第三季度:7月-9月, 第四季度:10月-12月 ...