功能 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