Sentry 开发者贡献指南-Feature Flag

开发 前端
功能 flag 在 Sentry 的代码库中声明。对于自托管用户,这些标志然后通过 sentry.conf.py 进行配置。对于 Sentry 的 SaaS 部署,Flagr 用于在生产中配置标志。

本文转载自微信公众号「黑客下午茶」,作者为少。转载本文请联系黑客下午茶公众号。

功能 flag 在 Sentry 的代码库中声明。对于自托管用户,这些标志然后通过 sentry.conf.py 进行配置。对于 Sentry 的 SaaS 部署,Flagr 用于在生产中配置标志。

您可以通过查看 sentry/features/__init__.py 找到可用的功能列表。它们在 FeatureManager 上声明如下:

  1. # Don't set entity_feature, or set it to False if you don't plan to use Flagr 
  2. default_manager.add("organizations:onboarding", OrganizationFeature, entity_feature=True

该功能可以在你的 sentry.conf.py 中使用以下内容启用,通常位于 ~/.sentry/:

  1. SENTRY_FEATURES["organizations:onboarding"] = True 

您可以使用 context manager 修改测试中功能 flag的状态。

  • https://develop.sentry.dev/testing/#setting-options-and-feature-flags

创建新的 Feature Flag

确定功能应该具有的范围

功能可以按 organization 和 project 划分范围。如果您不确定是否需要 project 功能,请创建一个 organization 级别。在此示例中,我们将构建一个名为 test-feature 范围在 organization 级别的功能。

将您的功能添加到 server.py

conf/server.py 包含应用程序中的许多默认设置。在这里,您将添加您的功能,并决定它应该保持什么默认值,除非用户指定。

  • https://github.com/getsentry/sentry/blob/master/src/sentry/conf/server.py

SENTRY_FEATURES 字典包含应用程序中的所有功能及其相应的范围。默认情况下,您的功能应处于禁用状态:

  1. SENTRY_FEATURES = { 
  2.     'organizations:test-feature'False
  3.     'auth:register'True
  4.     # ... 
  5.     'projects:minidump'False

将您的功能添加到 FeatureManager

FeatureManager 处理应用程序功能。我们将所有功能添加到 FeatureManager, 包括我们要添加到文件 /src/sentry/features/__init__.py 中的功能类型。

如果您计划在生产中使用 flagr, 请在添加功能时添加第三个可选布尔参数,例如:

  • https://develop.sentry.dev/feature-flags/#enabling-your-feature-in-production
  1. default_manager.add('organizations:test-feature', OrganizationFeature, True

如果您不打算使用 flagr,请不要传递这第三个参数,例如:

  1. 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 身份验证。

  1. feature_list = [] 
  2.  
  3. if getattr(obj.flags, 'allow_joinleave'): 
  4.     feature_list.append('open-membership'
  5. if not getattr(obj.flags, 'disable_shared_issues'): 
  6.     feature_list.append('shared-issues'
  7. if getattr(obj.flags, 'require_2fa'): 
  8.     feature_list.append('require-2fa'

检查您的功能

在 Python 代码中

FeatureManager 的 has 方法检查该功能是否存在。 has 方法接收该功能的名称,即与该功能范围对应的对象 (即组织级别功能的组织或项目级别功能的项目) 和 actor(又名 user)。在我们的例子中,该功能将添加如下:

  1. if features.has('organizations:test-feature', obj, actor=user): 
  2.     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 标志隐藏组件

  1. import Feature from 'app/components/acl/feature'
  2.  
  3. const toRender = ( 
  4.   <Feature features={['test-feature']}> 
  5.     <MyComponentToFlag /> 
  6.   </Feature> 
  7. ); 

命令式功能 flag 检查

强制生成 React 组件时有一些例外(例如表的标题/列)。在这样的情况下,Organization / Project 对象有一个 feature flag 数组, 您可以通过以下方式使用它们:

  1. const {organization} = this.props; 
  2.  
  3. // Method 2 
  4. organization.features.includes('test-feature'); // evals to True/False 

在开发中启用功能

在 Sentry 中,您可以运行 sentry devserver 来查看您在开发模式下的更改。如果您想查看 feature flag 背后的更改,则需要在本地计算机上打开文件 ~/.sentry/sentry.config.py。此文件包含 sentry 应用程序的本地设置,可以查看和编辑。如果您想打开或关闭 flag,请将其添加到您的配置文件中:

  1. 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 实例

  • https://develop.sentry.dev/sentry-vs-getsentry/
  • https://develop.sentry.dev/services/devservices/

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

功能 flag 在 Sentry 的代码库中声明。对于自托管用户,这些 flag 然后通过 sentry.conf.py 进行配置。对于 Sentry 的 SaaS 部署,Flagr 用于在生产中配置 flag。

如果您想为一部分生产用户启用您的功能,您需要在 Flagr 中设置您的功能。如果您尚未确保在 sentry 中添加 flag 时您通过了第三个选项,以便 Flagr 知道在生产中检查此功能。

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

 

责任编辑:武晓燕 来源: 黑客下午茶
相关推荐

2022-01-18 23:26:45

开发

2022-01-15 23:33:47

SentryPyCharm配置

2022-01-17 19:34:43

SentryWeb APISentry API

2022-01-02 23:26:08

开发SDK Sentry

2022-01-21 21:33:03

开发JavaScript应用

2021-12-15 20:06:48

ReactJSSentry开发者

2021-12-25 22:31:55

Sentry 监控SDK 开发 性能监控

2022-01-13 20:13:31

元宇宙搜索引擎

2022-01-03 22:59:30

开发SDK数据

2022-01-16 22:16:59

数据库Sentry开发者

2021-12-31 18:35:40

监控Sentry开发

2022-01-02 06:59:43

SentrySDK 开发客户端报告

2022-01-20 19:49:10

Sentry开发Scope

2022-01-19 19:49:53

Sentry浏览器SDK

2021-12-16 20:12:37

后端开发Sentry

2021-12-17 19:15:51

前端虫洞状态

2015-07-22 16:08:46

OpenStack开源贡献代码

2018-03-27 23:25:40

Paddle

2024-02-01 09:37:42

Kubernetes服务网格• 命令

2019-08-16 10:55:37

开发者技能AI
点赞
收藏

51CTO技术栈公众号