功能 flagSentry 的代码库中声明。

对于自托管用户,这些标志然后通过 sentry.conf.py 进行配置。

对于 SentrySaaS 部署,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

确定功能应该具有的范围

功能可以按 organizationproject 划分范围。

如果您不确定是否需要 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 代码中

FeatureManagerhas 方法检查该功能是否存在。

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 中

SentryGetSentry 中使用 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

  1. 设置环境变量:export SENTRY_USE_FLAGR=true
  2. 启动你的 devservices

您可以在 localhost:18000 找到您本地的 flagr 实例

在生产中启用您的功能(Sentry SaaS)

功能 flagSentry 的代码库中声明。

对于自托管用户,这些 flag 然后通过 sentry.conf.py 进行配置。

对于 SentrySaaS 部署,Flagr 用于在生产中配置 flag

如果您想为一部分生产用户启用您的功能,您需要在 Flagr 中设置您的功能。

如果您尚未确保在 sentry 中添加 flag 时您通过了第三个选项,以便 Flagr 知道在生产中检查此功能。

default_manager.add("organizations:onboarding", OrganizationFeature, True)  # NOQA

更多

Sentry 开发者贡献指南 - Feature Flag的更多相关文章

  1. Sentry 开发者贡献指南 - 配置 PyCharm

    概述 如果您使用 PyCharm 进行开发,则需要配置一些内容才能运行和调试. 本文档描述了一些对 sentry 开发有用的配置 配置 Python 解释器:(确保它是 venv 解释器)例如 ~/v ...

  2. Sentry 开发者贡献指南 - 数据库迁移

    Django 迁移是我们处理 Sentry 中数据库更改的方式. Django 迁移官方文档:https://docs.djangoproject.com/en/2.2/topics/migratio ...

  3. Sentry 开发者贡献指南 - SDK 开发(事件负载)

    内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...

  4. Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  5. Sentry 开发者贡献指南 - 前端 React Hooks 与虫洞状态管理模式

    系列 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS) 什么是虫洞状态管理模式? 您可以逃脱的最小 ...

  6. Sentry 开发者贡献指南 - SDK 开发(性能监控)

    内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...

  7. Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)

    内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...

  8. Sentry 开发者贡献指南 - Django Rest Framework(Serializers)

    Serializer 用于获取复杂的 python 模型并将它们转换为 json.序列化程序还可用于在验证传入数据后将 json 反序列化回 Python 模型. 在 Sentry,我们有两种不同类型 ...

  9. Sentry 开发者贡献指南 - 测试技巧

    作为 CI 流程的一部分,我们在 Sentry 运行了多种测试. 本节旨在记录一些 sentry 特定的帮助程序, 并提供有关在构建新功能时应考虑包括哪些类型的测试的指南. 获取设置 验收和 pyth ...

随机推荐

  1. 『学了就忘』Linux系统管理 — 82、Linux中进程的查看(ps命令)

    目录 1.ps命令介绍 2.ps aux命令示例 3.ps -le命令示例 4.pstree命令 1.ps命令介绍 ps命令是用来静态显示系统中进程的命令. 不过这个命令有些特殊,它部分命令的选项前不 ...

  2. [BUUCTF]PWN——babyheap_0ctf_2017

    [BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...

  3. MySQL 分区表,为什么分区键必须是主键的一部分?

    随着业务的不断发展,数据库中的数据会越来越多,相应地,单表的数据量也会越到越大,大到一个临界值,单表的查询性能就会下降. 这个临界值,并不能一概而论,它与硬件能力.具体业务有关. 虽然在很多 MySQ ...

  4. centos使用docker 安装 rabbitMq 消息队列

    1.拉取镜像 docker pull rabbitmq:3-management 如果出现报错: Get https://registry-1.docker.io/v2/: net/http: req ...

  5. 【LeetCode】777. Swap Adjacent in LR String 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 智商题 相似题目 参考资料 日期 题目地址:http ...

  6. 【LeetCode】55. Jump Game 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 贪心 日期 题目地址:https://leetcod ...

  7. 【LeetCode】767. Reorganize String 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.me/ 题目地址:https://leetcode.com/problems/reorganiz ...

  8. JUC之线程间的通信

    线程通信 视频1: 2021.12.18 JUC视频学习片段 对上次多线程编程步骤补充(中部): 创建资源类,在资源类中创建属性和操作方法 在资源类里面操作 判断 干活 通知 创建多个线程,调用资源类 ...

  9. Pydantic使用

    Pydantic可以在代码运行时提供类型提示, 数据校验失败时提供友好的错误提示, 使用Python的类型注解来进行数据校验和settings管理 一般使用 from datetime import ...

  10. Capstone CS5266替代AG9311 Type-C转HDMI带PD3.0+USB3.0拓展坞方案

    Capstone CS5266替代AG9311   Type-C转HDMI带PD3.0+USB3.0拓展坞方案CS5266是 Capstone 最新推出的一款用于USB TYPE-C端口的高度集成.高 ...