本文转载自微信公众号《黑客下午茶》,作者少。转载本文请联系黑客下午茶公众号。功能标志在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=(
