Управление функциями JavaScript
Библиотека управления функциями JavaScript предоставляет способ разработки и предоставления функциональных возможностей приложений на основе флагов компонентов. После разработки новой функции многие приложения имеют особые требования, например, когда эта функция должна быть включена и в каких условиях. Эта библиотека предоставляет способ определения этих связей, а также интеграции с общими шаблонами кода JavaScript для предоставления этих функций.
Флаги функций позволяют приложениям JavaScript включать или отключать функции динамически. Разработчики могут использовать флаги функций в простых случаях использования, таких как условные операторы.
Ниже приведены некоторые преимущества использования библиотеки управления функциями JavaScript:
- Общее соглашение об управлении функциями
- Низкий барьер для входа
- Поддерживает как объекты JSON, так и источники флагов функций на основе карт
- Поддержка использования как в Node.js, так и в средах браузера
- Управление временем существования флагов функций с помощью Конфигурация приложений Azure
- Значения конфигурации могут изменяться в режиме реального времени
- Простые и сложные сценарии, описанные
- Включение и отключение функций с помощью декларативного файла конфигурации
- Динамическое вычисление состояния функции на основе вызова сервера
Библиотека управления функциями JavaScript открытый код. Дополнительные сведения см. в репозитории GitHub.
Примечание.
Рекомендуется использовать библиотеку управления функциями вместе с Конфигурация приложений Azure. Конфигурация приложений Azure предоставляет решение для централизованного управления параметрами приложения и флагами компонентов. Дополнительные сведения см. в этом разделе.
Флаги функций
Флаги компонентов состоят из двух частей, имени и списка фильтров функций, которые используются для включения функции.
Фильтры компонентов
Фильтры функций определяют сценарий, в котором должна быть включена функция. Если функция оценивается для того, включена ли она или отключена, список фильтров функций проходит до тех пор, пока один из фильтров не решит, что эта функция должна быть включена. На этом этапе функция считается включенной и обхода через фильтры компонентов останавливается. Если фильтр компонентов не указывает, что эта функция должна быть включена, считается отключенной.
Например, можно создать фильтр функций браузера Microsoft Edge. Этот фильтр функций активирует все функции, подключенные к нему, если HTTP-запрос поступает из Microsoft Edge.
Конфигурация флага компонента
В JavaScript разработчики обычно используют объекты или карты в качестве основных структур данных для представления конфигураций. Библиотека управления функциями JavaScript поддерживает оба подхода к конфигурации, предоставляя разработчикам гибкость, чтобы выбрать вариант, который лучше всего соответствует их потребностям. Флаги FeatureManager
функций можно считывать из разных типов конфигурации с помощью встроенного ConfigurationObjectFeatureFlagProvider
и ConfigurationMapFeatureFlagProvider
.
const config = new Map([
["feature_management", {
"feature_flags": [
{
"id": "FeatureT",
"enabled": true
},
{
"id": "FeatureU",
"enabled": false
}
]
}],
["some other configuration", " some value"]
]);
import { ConfigurationMapFeatureFlagProvider, FeatureManager } from "@microsoft/feature-management";
const featureProvider = new ConfigurationMapFeatureFlagProvider(config);
const featureManager = new FeatureManager(featureProvider);
Использование флагов функций из Конфигурация приложений Azure
Вместо того, чтобы прописывать флаги компонентов в коде приложения, рекомендуется хранить их за пределами приложения и управлять ими отдельно. Так вы можете изменять состояния флагов в любое время и немедленно применять эти изменения в приложении. Служба Конфигурации приложений Azure предоставляет выделенный пользовательский интерфейс портала для управления всеми флагами компонентов. Ознакомьтесь с руководством.
Служба Конфигурация приложений Azure также предоставляет флаги функций приложению непосредственно через клиентскую библиотеку JavaScript @azure/app-configuration-provider. В следующем примере показано, как использовать библиотеку.
Поставщик JavaScript Конфигурация приложений предоставляет флаги функций в объектеMap
. Встроенная ConfigurationMapFeatureFlagProvider
функция помогает загрузить флаги функций в этом случае.
import { DefaultAzureCredential } from "@azure/identity";
import { load } from "@azure/app-configuration-provider";
import { ConfigurationMapFeatureFlagProvider, FeatureManager } from "@microsoft/feature-management";
const appConfig = await load("YOUR_APP-CONFIG-ENDPOINT",
new DefaultAzureCredential(), // For more information: https://learn.microsoft.com/javascript/api/overview/azure/identity-readme
{featureFlagOptions: { enabled: true }}); // load feature flags from Azure App Configuration service
const featureProvider = new ConfigurationMapFeatureFlagProvider(appConfig);
const featureManager = new FeatureManager(featureProvider);
Примечание.
Дополнительные сведения об использовании библиотеки управления функциями с Конфигурация приложений Azure см. в кратком руководстве.
Объявление флага функции
В следующем примере показан формат, используемый для настройки флагов компонентов в JSON-файле.
{
"feature_management": {
"feature_flags": [
{
"id": "FeatureT",
"enabled": true
},
{
"id": "FeatureU",
"enabled": false
},
{
"id": "FeatureV",
"enabled": true,
"conditions": {
"client_filters": [
{
"name": "Microsoft.TimeWindow",
"parameters": {
"Start": "Wed, 01 May 2019 13:59:59 GMT",
"End": "Mon, 01 Jul 2019 00:00:00 GMT"
}
}
]
}
}
]
}
}
Этот feature_management
раздел используется соглашением для загрузки параметров флага компонентов. Этот feature_flags
раздел содержит список флагов функций, загруженных в библиотеку. В приведенном выше разделе мы видим три различных компонента. Функции определяют фильтры функций с помощью client_filters
свойства внутри conditions
. В фильтрах функций для , мы видим true
enabled
без определенных FeatureT
фильтров, что приводит к FeatureT
постоянному возврату true
.
FeatureU
совпадает с тем, что FeatureT
enabled
false
при этом функция всегда возвращается.false
FeatureV
указывает фильтр признаков с именем Microsoft.TimeWindow
.
FeatureV
пример настраиваемого фильтра компонентов. Мы видим в примере, что фильтр имеет parameters
свойство. Свойство parameters
используется для настройки фильтра. В этом случае настроено время начала и окончания для активной функции.
Подробные схемы feature_management
раздела можно найти здесь.
Дополнительно. Использование двоеточия ":" запрещено в именах флагов признаков.
Тип требования
Свойство requirement_type
флага компонента используется для определения того, должны ли фильтры использовать Any
или All
логику при оценке состояния компонента. Если requirement_type
значение по умолчанию не указано, значение Any
по умолчанию .
-
Any
означает, что только один фильтр должен иметь значение true для включения функции. -
All
означает, что каждый фильтр должен иметь значение true для включения функции.
All
Изменение requirement_type
обхода. Во-первых, если фильтров нет, функция отключена. Затем фильтры функций проходят по одному из фильтров, пока один из фильтров не решит, что эта функция должна быть отключена. Если фильтр не указывает, что функция должна быть отключена, она считается включенной.
{
"feature_management": {
"feature_flags": [
{
"id": "FeatureW",
"enabled": true,
"conditions": {
"requirement_type": "All",
"client_filters": [
{
"name": "Microsoft.TimeWindow",
"parameters": {
"Start": "Wed, 01 May 2019 13:59:59 GMT",
"End": "Mon, 01 Jul 2019 00:00:00 GMT"
}
},
{
"name": "Percentage",
"parameters": {
"Value": "50"
}
}
]
}
},
]
}
}
В приведенном выше примере указывает значение requirement_type
All
, FeatureW
что означает, что все его фильтры должны иметь значение true, чтобы функция была включена. В этом случае функция включена для 50% пользователей в течение указанного периода времени.
Потребление
Базовая форма управления функциями проверяет, включен ли флаг компонента, а затем выполняет действия на основе результата. Проверка состояния флага компонента выполняется с помощью FeatureManager
isEnabled
метода.
import { ConfigurationMapFeatureFlagProvider, FeatureManager } from "@microsoft/feature-management";
const featureProvider = new ConfigurationMapFeatureFlagProvider(config);
const featureManager = new FeatureManager(featureProvider);
const isBetaEnabled = await featureManager.isEnabled("Beta");
if (isBetaEnabled) {
// Do something
}
Реализация фильтра компонентов
Создание фильтра функций позволяет включить функции на основе заданных критериев. Для реализации фильтра IFeatureFilter
функций интерфейс должен быть реализован.
IFeatureFilter
name
имеет свойство и метод с именемevaluate
. Он name
должен использоваться в конфигурации для ссылки на фильтр компонентов в флаге компонента. Если компонент указывает, что его можно включить для фильтра компонентов, evaluate
вызывается метод. Если evaluate
возвращается true
, это означает, что эта функция должна быть включена.
interface IFeatureFilter {
name: string;
evaluate(context: IFeatureFilterEvaluationContext, appContext?: unknown): boolean | Promise<boolean>;
}
В следующем фрагменте показано, как реализовать настраиваемый фильтр компонентов с именем MyCriteria
.
class MyCriteriaFilter {
name = "MyCriteria";
evaluate(context, appContext) {
if (satisfyCriteria()) {
return true;
}
else {
return false;
}
}
}
При создании FeatureManager
фильтра необходимо зарегистрировать пользовательский фильтр.
const featureManager = new FeatureManager(ffProvider, {customFilters: [new MyCriteriaFilter()]});
Параметризованные фильтры компонентов
Некоторые фильтры функций требуют параметров, чтобы решить, следует ли включить или нет функцию. Например, фильтр функций браузера может включить функцию для определенного набора браузеров. Возможно, требуется, чтобы браузеры Edge и Chrome могли включить функцию, в то время как Firefox не поддерживает. Для этого можно настроить фильтр компонентов для ожидания параметров. Эти параметры будут указаны в конфигурации компонента, и в коде будет доступен с помощью IFeatureFilterEvaluationContext
параметра IFeatureFilter.Evaluate
.
interface IFeatureFilterEvaluationContext {
featureName: string;
parameters?: unknown;
}
IFeatureFilterEvaluationContext
имеет свойство с именем parameters
. Эти параметры представляют необработанную конфигурацию, которую фильтр компонентов может использовать для определения того, следует ли включить или нет эту функцию. Чтобы использовать фильтр функций браузера в качестве примера, фильтр может использовать parameters
для извлечения набора разрешенных браузеров, которые будут указаны для функции, а затем проверить, отправляется ли запрос из одного из этих браузеров.
Использование контекста приложения для оценки компонентов
Для оценки флага компонента может потребоваться контекст приложения среды выполнения. Контекст можно передать в качестве параметра при вызове isEnabled
.
featureManager.isEnabled("Beta", { userId : "Sam" })
Фильтр функций может воспользоваться контекстом, передаваемым при isEnabled
вызове. Контекст приложения будет передан в качестве второго параметра IFeatureFilter.Evaluate
.
Встроенные фильтры функций
Существует два фильтра функций, которые поставляется с пакетом FeatureManagement
: TimeWindowFilter
и TargetingFilter
.
Каждый из встроенных фильтров функций имеет собственные параметры. Ниже приведен список фильтров функций вместе с примерами.
Microsoft.TimeWindow
Этот фильтр предоставляет возможность включить функцию на основе периода времени. Если указан только End
этот параметр, функция рассматривается до этого времени. Если указан только Start
этот параметр, функция рассматривается во всех точках после этого времени.
"client_filters": [
{
"name": "Microsoft.TimeWindow",
"parameters": {
"Start": "Wed, 01 May 2019 13:59:59 GMT",
"End": "Mon, 01 Jul 2019 00:00:00 GMT"
}
}
]
Microsoft.Targeting
Этот фильтр предоставляет возможность включить функцию для целевой аудитории. Подробное объяснение целевого назначения объясняется в приведенном ниже разделе о целевом объекте . Параметры фильтра включают Audience
объект, описывающий пользователей, групп, исключенных пользователей и групп, а также процент базы пользователей по умолчанию, который должен иметь доступ к этой функции. Каждый объект группы, указанный в Groups
разделе, также должен указывать, какой процент членов группы должен иметь доступ. Если пользователь указан в Exclusion
разделе, либо непосредственно, либо если пользователь находится в исключенной группе, функция отключена. В противном случае, если пользователь указан в Users
разделе напрямую, или если пользователь находится в процентах от любого из развернутых групп или если пользователь попадает в процент развертывания по умолчанию, то этот пользователь будет включен.
"client_filters": [
{
"name": "Microsoft.Targeting",
"parameters": {
"Audience": {
"Users": [
"Jeff",
"Alicia"
],
"Groups": [
{
"Name": "Ring0",
"RolloutPercentage": 100
},
{
"Name": "Ring1",
"RolloutPercentage": 50
}
],
"DefaultRolloutPercentage": 20,
"Exclusion": {
"Users": [
"Ross"
],
"Groups": [
"Ring2"
]
}
}
}
}
]
Таргетинг
Цель — это стратегия управления функциями, которая позволяет разработчикам постепенно развертывать новые функции в своей пользовательской базе. Стратегия основана на концепции целевой аудитории для набора пользователей, известных как целевая аудитория. Аудитория состоит из конкретных пользователей, групп, исключенных пользователей и групп, и указанного процента всей базы пользователей. Группы, включенные в аудиторию, могут быть разбиты дальше на проценты их общих членов.
Ниже приведен пример прогрессивного развертывания для новой функции Beta:
- Отдельные пользователи Джефф и Алисия получают доступ к бета-версии.
- Другой пользователь, Марк, просит принять участие и включен.
- Двадцать процентов группы, известной как "Ring1", включены в бета-версию.
- Число пользователей Ring1, включенных в бета-версию, составляет до 100 процентов.
- Пять процентов пользовательской базы включены в бета-версию.
- Процент развертывания вырос до 100 процентов, и функция полностью развернута.
Эта стратегия развертывания компонента встроена в библиотеку с помощью включенного фильтра компонентов Microsoft.Targeting .
Назначение пользователя с целевым контекстом
Фильтр целевых объектов зависит от контекста целевого объекта, чтобы оценить, следует ли включить функцию. Этот контекст целевого объекта содержит такие сведения, как оценка пользователя и группы, в которых находится пользователь. Контекст целевого объекта должен передаваться непосредственно при isEnabled
вызове.
featureManager.isEnabled("Beta", { userId: "Aiden", groups: ["Ring1"] })
Назначение исключения
При определении аудитории пользователи и группы могут быть исключены из аудитории. Исключения полезны, если функция развертывается в группе пользователей, но некоторые пользователи или группы должны быть исключены из развертывания. Исключение определяется путем добавления списка пользователей и групп в Exclusion
свойство аудитории.
"Audience": {
"Users": [
"Jeff",
"Alicia"
],
"Groups": [
{
"Name": "Ring0",
"RolloutPercentage": 100
}
],
"DefaultRolloutPercentage": 0,
"Exclusion": {
"Users": [
"Mark"
]
}
}
В приведенном выше примере функция включена для пользователей с именем Jeff
и Alicia
. Он также включен для пользователей в группе с именем Ring0
. Однако если пользователь называется Mark
, функция отключена независимо от того, находятся ли они в группе Ring0
или нет. Исключения занимают приоритет от остальной части фильтра целевого объекта.
Варианты
При добавлении новых функций в приложение может возникнуть время, когда функция имеет несколько различных предлагаемых вариантов проектирования. Общее решение для принятия решения о проектировании — это некоторая форма тестирования A/B, которая включает в себя предоставление другой версии функции различным сегментам пользовательской базы и выбор версии на основе взаимодействия с пользователем. В этой библиотеке эта функция включена путем представления различных конфигураций компонента с вариантами.
Варианты позволяют флагу функции стать более простым флагом включения и выключения. Вариант представляет значение флага компонента, которое может быть строкой, числом, логическим или даже объектом конфигурации. Флаг компонента, объявляющий варианты, должен определять, в каких обстоятельствах следует использовать каждый вариант, который подробно рассматривается в разделе "Выделение вариантов ".
Получение варианта с контекстом целевого объекта
Для каждой функции можно получить вариант с помощью FeatureManager
getVariant
метода. Назначение вариантов зависит от вычисляемого пользователя, и эта информация получается из передаваемого контекста целевого объекта.
const variant = await featureManager.getVariant("MyVariantFeatureFlag", { userId: "Sam" });
const variantName = variant.name;
const variantConfiguration = variant.configuration;
// Do something with the resulting variant and its configuration
Объявление флага функции Variant
По сравнению с обычными флагами функций флаги вариантов имеют два дополнительных свойства: variants
и allocation
. Это variants
массив, содержащий варианты, определенные для этой функции. Свойство allocation
определяет, как эти варианты должны быть выделены для функции. Как и объявление обычных флагов функций, можно настроить флаги вариантных функций в JSON-файле. Ниже приведен пример флага функции варианта.
{
"feature_management": {
"feature_flags": [
{
"id": "MyVariantFeatureFlag",
"enabled": true,
"allocation": {
"default_when_enabled": "Small",
"group": [
{
"variant": "Big",
"groups": [
"Ring1"
]
}
]
},
"variants": [
{
"name": "Big"
},
{
"name": "Small"
}
]
}
]
}
}
Определение вариантов
Каждый вариант имеет два свойства: имя и конфигурацию. Имя используется для ссылки на конкретный вариант, а конфигурация — это значение этого варианта. Конфигурацию можно задать с помощью configuration_value
свойства.
configuration_value
— это встроенная конфигурация, которая может быть строкой, номером, логическим объектом или объектом конфигурации. Если configuration_value
значение не указано, свойство возвращаемого варианта configuration
имеет значение undefined
.
Список всех возможных вариантов определяется для каждой функции в свойстве variants
.
{
"feature_management": {
"feature_flags": [
{
"id": "MyVariantFeatureFlag",
"variants": [
{
"name": "Big",
"configuration_value": {
"Size": 500
}
},
{
"name": "Small",
"configuration_value": {
"Size": 300
}
}
]
}
]
}
}
Выделение вариантов
Процесс выделения вариантов компонента определяется свойством allocation
функции.
"allocation": {
"default_when_enabled": "Small",
"default_when_disabled": "Small",
"user": [
{
"variant": "Big",
"users": [
"Marsha"
]
}
],
"group": [
{
"variant": "Big",
"groups": [
"Ring1"
]
}
],
"percentile": [
{
"variant": "Big",
"from": 0,
"to": 10
}
],
"seed": "13973240"
},
"variants": [
{
"name": "Big",
"configuration_value": "500px"
},
{
"name": "Small",
"configuration_value": "300px"
}
]
Параметр allocation
компонента имеет следующие свойства:
Свойство | Description |
---|---|
default_when_disabled |
Указывает, какой вариант следует использовать при запросе варианта во время отключения функции. |
default_when_enabled |
Указывает, какой вариант следует использовать при запросе варианта, если компонент считается включенным, и другой вариант не был назначен пользователю. |
user |
Задает вариант и список пользователей, которым должен быть назначен этот вариант. |
group |
Задает вариант и список групп. Вариант назначается, если пользователь находится по крайней мере в одной из групп. |
percentile |
Задает вариант и процентный диапазон, в котором вычисляемый процент пользователя должен соответствовать назначенному варианту. |
seed |
Значение, на котором основаны процентные расчеты percentile . Процентное вычисление для конкретного пользователя будет одинаковым для всех функций, если используется одно и то же seed значение. Если значение не seed указано, то начальное значение по умолчанию создается на основе имени функции. |
Если функция не включена, диспетчер компонентов назначает вариант, помеченный текущим default_when_disabled
пользователем, что Small
в данном случае.
Если функция включена, диспетчер функций проверяет user
group
и percentile
выделяется таким образом, чтобы назначить вариант. В этом примере, если вычисляемый пользователь называется Marsha
, в группе с именем Ring1
или пользователь попадает между 0 и 10-м процентилем, то указанный вариант назначается пользователю. В этом случае все назначенные пользователи возвращают Big
вариант. Если ни одно из этих выделений не соответствует, пользователю назначается default_when_enabled
вариант.Small
Логика выделения аналогична фильтру функций Microsoft.Targeting , но существуют некоторые параметры, которые присутствуют в целевом расположении, которые не находятся в выделении, и наоборот. Результаты целевого и распределения не связаны.
Переопределение состояния включено с помощью варианта
Варианты можно использовать для переопределения состояния включенного флага компонента. Переопределение предоставляет варианты возможности расширения оценки флага компонента. При вызове is_enabled
флага с вариантами диспетчер функций проверяет, настроен ли вариант, назначенный текущему пользователю, переопределить результат. Переопределение выполняется с помощью необязательного свойства status_override
variant. По умолчанию это свойство имеет значение None
, что означает, что вариант не влияет на то, включен или отключен флаг. Параметр status_override
позволяет варианту Enabled
при выборе переопределить флаг, который необходимо включить. Параметр status_override
для Disabled
получения противоположной функциональности, поэтому отключение флага при выборе варианта. Невозможно переопределить функцию enabled
с состоянием false
переопределения.
Если вы используете флаг функции с двоичными вариантами, status_override
это свойство может оказаться полезным. Он позволяет продолжать использовать API, такие как is_enabled
в приложении, все в то время как преимущества новых функций, которые приходят с вариантами, такими как выделение процентиля и начальное значение.
{
"id": "MyVariantFeatureFlag",
"enabled": true,
"allocation": {
"percentile": [
{
"variant": "On",
"from": 10,
"to": 20
}
],
"default_when_enabled": "Off",
"seed": "Enhanced-Feature-Group"
},
"variants": [
{
"name": "On"
},
{
"name": "Off",
"status_override": "Disabled"
}
]
}
В приведенном выше примере функция всегда включена. Если текущий пользователь находится в вычисляемом диапазоне процентиля от 10 до 20, On
возвращается вариант.
Off
В противном случае возвращается вариант и, так как status_override
равенDisabled
, функция теперь будет считаться отключенной.
Телеметрия
При развертывании изменения флага функции часто важно проанализировать его влияние на приложение. Например, вот несколько вопросов, которые могут возникнуть:
- Включены ли флаги и отключены ли они должным образом?
- Получают ли целевые пользователи доступ к определенной функции должным образом?
- Какой вариант отображает конкретный пользователь?
Эти типы вопросов можно ответить с помощью выбросов и анализа событий оценки флага признаков.
Включение телеметрии
По умолчанию флаги компонентов не создают данные телеметрии. Чтобы опубликовать данные телеметрии для заданного флага компонента, флаг ДОЛЖЕН объявить, что он включен для выбросов телеметрии.
Для флагов компонентов, определенных в json, включение выполняется с помощью telemetry
свойства.
{
"feature_management": {
"feature_flags": [
{
"id": "MyFeatureFlag",
"enabled": true,
"telemetry": {
"enabled": true
}
}
]
}
}
Приведенный выше фрагмент определяет флаг компонента с именем MyFeatureFlag
, который включен для телеметрии. Для telemetry
свойства объекта enabled
задано значение true
. Значение enabled
свойства должно быть true
для публикации телеметрии для флага.
Раздел telemetry
флага компонента имеет следующие свойства:
Свойство | Description |
---|---|
enabled |
Указывает, следует ли публиковать данные телеметрии для флага компонента. |
metadata |
Коллекция пар "ключ-значение", моделироваемая как словарь, которая может использоваться для присоединения пользовательских метаданных о флаге компонента для оценки событий. |
Публикация пользовательских данных телеметрии
При создании FeatureManager
можно зарегистрировать функцию обратного onFeatureEvaluated
вызова. Этот обратный вызов вызывается всякий раз, когда вычисляется флаг компонента, и для этого флага включена телеметрия. Функция обратного вызова принимает результат оценки функции в качестве параметра.
В следующем примере показано, как реализовать пользовательскую функцию обратного вызова для отправки данных телеметрии с информацией, извлеченной из результата оценки компонента, и зарегистрировать ее в диспетчере функций.
const sendTelemetry = (evaluationResult) => {
const featureId = evaluationResult.feature.id;
const featureEnabled = evaluationResult.enabled;
const targetingId = evaluationResult.targetingId;
const variantName = evaluationResult.variant?.name;
const variantAssignmentReason = evaluationResult.variantAssignmentReason;
// custom code to send the telemetry
// ...
}
const featureManager = new FeatureManager(featureProvider, { onFeatureEvaluated : sendTelemtry});
Интеграция с Application Insights
Библиотека управления функциями JavaScript предоставляет пакеты расширений, которые интегрируются с пакетами SDK Application Insights .
Application Insights предлагает различные пакеты SDK для веб-приложений и сценариев Node.js . Выберите правильные пакеты расширений для приложения.
Если приложение выполняется в браузере, установите "@microsoft/feature-management-applicationinsights-browser"
пакет. В следующем примере показано, как создать встроенного издателя телеметрии Application Insights и зарегистрировать его в диспетчере функций.
import { ApplicationInsights } from "@microsoft/applicationinsights-web"
import { FeatureManager, ConfigurationObjectFeatureFlagProvider } from "@microsoft/feature-management";
import { createTelemetryPublisher, trackEvent } from "@microsoft/feature-management-applicationinsights-browser";
const appInsights = new ApplicationInsights({ config: {
connectionString: "<APPINSIGHTS_CONNECTION_STRING>"
}});
appInsights.loadAppInsights();
const publishTelemetry = createTelemetryPublisher(appInsights);
const provider = new ConfigurationObjectFeatureFlagProvider(jsonObject);
const featureManager = new FeatureManager(provider, {onFeatureEvaluated: publishTelemetry});
// FeatureEvaluation event will be emitted when a feature flag is evaluated
featureManager.getVariant("TestFeature", {userId : TARGETING_ID}).then((variant) => { /* do something*/ });
// Emit a custom event with targeting id attached.
trackEvent(appInsights, TARGETING_ID, {name: "TestEvent"}, {"Tag": "Some Value"});
Издатель телеметрии отправляет FeatureEvaluation
пользовательские события в Application Insights при оценке флага компонента, включенного с помощью телеметрии. Настраиваемое событие следует схеме FeatureEvaluationEvent .
Следующие шаги
Чтобы узнать, как использовать флаги функций в приложениях, перейдите к следующим кратким руководствам.
Чтобы узнать, как использовать фильтры функций, перейдите к следующим руководствам.