当前位置: 首页 > 科技观察

Sentry开发者贡献指南-FeatureFlag

时间:2023-03-11 23:15:53 科技观察

本文转载自微信公众号《黑客下午茶》,作者少。转载本文请联系黑客下午茶公众号。功能标志在Sentry的代码库中声明。对于自托管用户,这些标志随后通过sentry.conf.py配置。对于Sentry的SaaS部署,Flagr用于在生产中配置标志。您可以通过查看sentry/features/__init__.py找到可用功能的列表。它们在FeatureManager上的声明如下:#Don'tsetentity_feature,orsetittoFalseifyoudon'tplantouseFlagrdefault_manager.add("organizations:onboarding",OrganizationFeature,entity_feature=True)该功能可以通过您的sentry.conf.py中的以下内容启用,通常位于在~/.sentry/:SENTRY_FEATURES["organizations:onboarding"]=True您可以使用上下文管理器修改测试中功能标志的状态。https://develop.sentry.dev/testing/#setting-options-and-feature-flags创建一个新的功能标志以确定功能应具有的范围功能可以按组织和项目确定范围。如果您不确定是否需要项目功能,请创建组织级别。在此示例中,我们将构建一个名为test-feature的功能,范围在组织级别。将您的函数添加到server.pyconf/server.py以在应用程序中包含许多默认设置。在这里您将添加您的功能并决定它应该保留什么默认值,除非用户指定。https://github.com/getsentry/sentry/blob/master/src/sentry/conf/server.pySENTRY_FEATURES字典包含应用程序中的所有功能及其相应的范围。您的功能应该默认禁用:SENTRY_FEATURES={'organizations:test-feature':False,'auth:register':True,#...'projects:minidump':False,}将您的功能添加到FeatureManagerFeatureManager处理应用程序功能。我们将所有特征添加到FeatureManager,包括我们添加到文件/src/sentry/features/__init__.py中的特征类型。如果您计划在生产中使用flagr,请在添加功能时添加第三个可选布尔参数,例如:https://develop.sentry.dev/feature-flags/#enabling-your-feature-in-productiondefault_manager。add('organizations:test-feature',OrganizationFeature,True)如果您不打算使用flagr,请不要传递这第三个参数,例如:default_manager.add('organizations:test-feature',OrganizationFeature)add它到组织模型序列化器组织模型序列化器(src/sentry/api/serializers/models/organization.py)构建一个名为feature_list的列表供前端使用。默认情况下,会选中所有功能并将存在的功能添加到列表中。如果您的功能需要额外的自定义逻辑,您必须更新组织序列化程序以使用模型标志(不太常见)有时模型上的标志用于指示功能标志,如下所示。除非有特定原因需要更改模型,否则不建议这样做。例如,require_2fa标志会影响后端执行双因素身份验证的行为。feature_list=[]ifgetattr(obj.flags,'allow_joinleave'):feature_list.append('open-membership')ifnotgetattr(obj.flags,'disable_shared_issues'):feature_list.append('shared-issues')ifgetattr(obj.flags,'require_2fa'):feature_list.append('require-2fa')检查你的特征在Python代码中,FeatureManager的has方法检查特征是否存在。has方法接收函数的名称、与函数范围对应的对象(即组织级函数的组织或项目级函数的项目)和参与者(又名用户)。在我们的例子中,该功能将按如下方式添加:iffeatures.has('organizations:test-feature',obj,actor=user):feature_list.append('test-feature')如果组织和给定的用户类型如果此功能已启用,只有此功能将添加到feature_list。请注意,当我们将功能提供给前端时,我们删除了范围前缀,并且我们的“organizations:test-feature”变为“test-feature”。在Sentry中使用标志和在JavaScript中使用GetSentry是有区别的。在这个阶段,您还没有准备好在GetSentry中使用您的功能标志,但您可以在Sentry中使用它。声明式功能ReactwithFeature组件使用声明式编程范例。因此,我们有一个实用程序组件,用于根据组织/项目中可用的功能标志隐藏组件importFeaturefrom'app/components/acl/feature';consttoRender=();命令式功能标志检查强制生成React组件,但有一些例外(例如表头/列)。在这种情况下,Organization/Project对象有一组功能标志,您可以通过以下方式使用它们:const{organization}=this.props;//Method2organization.features.includes('test-feature');//evalstoTrue/Falseenablefunctionalityindevelopment在Sentry中,您可以运行sentrydevserver以查看您在开发模式下的更改。如果你想看到功能标志背后的变化,你需要在你的本地机器上打开文件~/.sentry/sentry.config.py。该文件包含哨兵应用程序的本地设置,可以查看和编辑。如果您想打开或关闭该标志,请将其添加到您的配置文件中:SENTRY_FEATURES['organizations:test-feature']=True其中SENTRY_FEATURES将对应于步骤2中的SENTRY_FEATURES。如果您希望该功能启用,请将其设置为True可用,否则将其设置为False。开发中的Flagr(SentrySaaS)通常,您不需要在开发中运行flagr来测试您的功能标志。如果你真的想运行flagr,你需要运行getsentry:设置环境变量:exportSENTRY_USE_FLAGR=true启动你的devservices你可以在localhost:18000找到你的本地flagr实例https://develop.sentry.dev/sentry-vs-getentry/https://develop.sentry.dev/services/devservices/在生产中启用您的功能(SentrySaaS)功能标志在Sentry的代码库中声明。对于自托管用户,这些标志随后通过sentry.conf.py配置。对于Sentry的SaaS部署,Flagr用于在生产中配置标志。如果您想为一部分生产用户启用您的功能,您需要在Flagr中设置您的功能。如果您还没有确保在哨兵中添加标志时通过了第三个选项,那么Flagr就会知道在生产中检查此功能。default_manager.add("organizations:onboarding",OrganizationFeature,True)#NOQA