Compartir a través de


Administración de características de JavaScript

feature-management-npm-package

La biblioteca de administración de características de JavaScript proporciona una manera de desarrollar y exponer la funcionalidad de la aplicación en función de las marcas de características. Una vez desarrollada una nueva característica, muchas aplicaciones tienen requisitos especiales, como cuándo se debe habilitar la característica y en qué condiciones. Esta biblioteca proporciona una manera de definir estas relaciones y también se integra en patrones de código de JavaScript comunes para hacer posible la exposición de estas características.

Las marcas de características proporcionan una manera de que las aplicaciones de JavaScript activen o desactiven dinámicamente las características. Los desarrolladores pueden usar marcas de características en casos de uso simples, como instrucciones condicionales.

Estas son algunas de las ventajas de usar la biblioteca de administración de características de JavaScript:

  • Una convención común para la administración de características
  • Baja barrera a entrada
    • Admite objetos JSON y orígenes de marcas de características basados en mapas
    • Admite el uso en entornos de Node.js y explorador
  • Administración de la duración de la marca de características con Azure App Configuration
    • Los valores de configuración pueden cambiar en tiempo real
  • Escenarios sencillos a complejos cubiertos
    • Activar o desactivar características mediante el archivo de configuración declarativo
    • Evaluar dinámicamente el estado de la característica en función de la llamada al servidor

La biblioteca de administración de características de JavaScript es de código abierto. Para obtener más información, visite el repositorio de GitHub.

Nota:

Se recomienda usar la biblioteca de administración de características junto con Azure App Configuration. Azure App Configuration proporciona una solución para administrar centralmente la configuración de la aplicación y las marcas de características. Para obtener más detalles, consulte esta sección.

Marcas de característica

Las marcas de características se componen de dos partes, un nombre y una lista de filtros de características que se usan para activar la característica.

Filtros de características

Los filtros de características definen un escenario para cuando se debe habilitar una característica. Cuando se evalúa si una característica está activada o desactivada, se recorre su lista de filtros de características hasta que uno de los filtros decide que la característica debe estar habilitada. En este momento, la característica se considera habilitada y se recorre a través de los filtros de características se detiene. Si no hay ningún filtro de características que indique que la característica debe estar habilitada, se considera deshabilitada.

Por ejemplo, se podría diseñar un filtro de características del explorador Microsoft Edge. Este filtro de características activaría las características a las que está asociada siempre que una solicitud HTTP provendría de Microsoft Edge.

Configuración de la marca de características

En JavaScript, los desarrolladores suelen usar objetos o asignaciones como estructuras de datos principales para representar configuraciones. La biblioteca de administración de características de JavaScript admite ambos enfoques de configuración, lo que proporciona a los desarrolladores la flexibilidad de elegir la opción que mejor se adapte a sus necesidades. FeatureManager puede leer marcas de características de diferentes tipos de configuración mediante ConfigurationObjectFeatureFlagProvider integrado y 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);

Uso de marcas de características desde Azure App Configuration

En lugar de codificar de forma rígida las marcas de características en la aplicación, se recomienda mantener las marcas de características fuera de la aplicación y administrarlas por separado. De este modo, podrá modificar los estados de las marcas en cualquier momento y hacer que estos cambios surtan efecto en la aplicación de inmediato. El servicio Azure App Configuration proporciona una interfaz de usuario del portal dedicada para administrar todas las marcas de características. Consulte el tutorial.

El servicio Azure App Configuration también entrega las marcas de características a la aplicación directamente a través de su biblioteca cliente de JavaScript @azure/app-configuration-provider. En el ejemplo siguiente se muestra cómo usar la biblioteca.

El proveedor de JavaScript de App Configuration proporciona marcas de características en un objeto Map. El ConfigurationMapFeatureFlagProvider integrado ayuda a cargar las marcas de características en este caso.

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);

Nota:

Para más información sobre cómo usar la biblioteca de administración de características con Azure App Configuration, vaya al inicio rápido.

Declaración de la marca de características

En el ejemplo siguiente se muestra el formato usado para configurar marcas de características en un archivo 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"
                            }
                        }
                    ]
                }
            }
        ]
    }
}

La sección feature_management se usa por convención para cargar la configuración de la marca de características. La sección feature_flags es una lista de las marcas de características que se cargan en la biblioteca. En la sección anterior, vemos tres características diferentes. Las características definen sus filtros de características usando la propiedad client_filters, dentro de conditions. En los filtros de características de FeatureT, vemos que enabled es true sin filtros definidos, lo que da como resultado que FeatureT devuelve siempre true. FeatureU es igual que FeatureT pero con enabled es false dando como resultado que la característica siempre devuelva false. FeatureV especifica un filtro de características denominado Microsoft.TimeWindow. FeatureV es un ejemplo de un filtro de características configurable. Podemos ver en el ejemplo que el filtro tiene una propiedad parameters. La propiedad parameters se usa para configurar el filtro. En este caso, se configuran las horas de inicio y finalización de la característica que se va a activar.

Puede encontrar el esquemafeature_management detallado de la sección aquí.

Avanzadas: El uso de dos puntos ":" está prohibido en los nombres de marcas de características.

Tipo de requisito

La propiedad requirement_type de una marca de característica se usa para determinar si los filtros deben usar Any o All lógica al evaluar el estado de una característica. Si no se especifica requirement_type, el valor predeterminado es Any.

  • Any significa que solo un filtro debe evaluarse como true para que se habilite la característica.
  • All significa que cada filtro debe evaluarse como true para que se habilite la característica.

Un requirement_type de All cambia el recorrido. En primer lugar, si no hay ningún filtro, la característica está deshabilitada. A continuación, los filtros de características se recorren hasta que uno de los filtros decide que la característica debe deshabilitarse. Si no hay ningún filtro que indique que la característica debe deshabilitarse, se considera habilitada.

{
    "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"
                            }
                        }
                    ]
                }
            },
        ]
    }
}

En el ejemplo anterior, FeatureW especifica un requirement_type de All, lo que significa que todos sus filtros deben evaluarse como true para que se habilite la característica. En este caso, la característica está habilitada para el 50 % de los usuarios durante el período de tiempo especificado.

Consumo

La forma básica de administración de características es comprobar si está habilitada una marca de característica y, a continuación, realizar acciones en función del resultado. La comprobación del estado de una marca de característica se realiza a través del método isEnabled de FeatureManager.

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
}

Implementación de un filtro de características

La creación de un filtro de características proporciona una manera de habilitar las características en función de los criterios que defina. Para implementar un filtro de características, se debe implementar la interfaz IFeatureFilter. IFeatureFilter tiene una propiedad name y un método denominado evaluate. El name debe usarse en la configuración para hacer referencia al filtro de características dentro de una marca de característica. Cuando una característica especifica que se puede habilitar para un filtro de características, se llama al método evaluate. Si evaluate devuelve true, significa que la característica debe estar habilitada.

interface IFeatureFilter {
    name: string;
    evaluate(context: IFeatureFilterEvaluationContext, appContext?: unknown): boolean | Promise<boolean>;
}

En el fragmento de código siguiente se muestra cómo implementar un filtro de características personalizado con el nombre MyCriteria.

    class MyCriteriaFilter {
        name = "MyCriteria";
        evaluate(context, appContext) {
            if (satisfyCriteria()) {
                return true;
            }
            else {
                return false;
            }
        }
    }

Debe registrar el filtro personalizado al crear el FeatureManager.

const featureManager = new FeatureManager(ffProvider, {customFilters: [new MyCriteriaFilter()]});

Filtros de características con parámetros

Algunos filtros de características requieren parámetros para decidir si se debe activar o no una característica. Por ejemplo, un filtro de características del explorador puede activar una característica para un determinado conjunto de exploradores. Es posible que desee que los exploradores Edge y Chrome habiliten una característica, mientras que Firefox no lo hace. Para ello, se puede diseñar un filtro de características para esperar parámetros. Estos parámetros se especificarían en la configuración de características y, en el código, sería accesible a través del parámetro IFeatureFilterEvaluationContext de IFeatureFilter.Evaluate.

interface IFeatureFilterEvaluationContext {
    featureName: string;
    parameters?: unknown;
}

IFeatureFilterEvaluationContext tiene una propiedad denominada parameters. Estos parámetros representan una configuración sin procesar que el filtro de características puede usar para decidir cómo evaluar si la característica debe estar habilitada o no. Para usar el filtro de características del explorador como ejemplo de nuevo, el filtro podría usar parameters para extraer un conjunto de exploradores permitidos que se especificarían para la característica y, a continuación, comprobar si la solicitud se envía desde uno de esos exploradores.

Uso del contexto de la aplicación para la evaluación de características

Un filtro de características puede necesitar contexto de aplicación en tiempo de ejecución para evaluar una marca de característica. Puede pasar el contexto como un parámetro al llamar a isEnabled.

featureManager.isEnabled("Beta", { userId : "Sam" })

El filtro de características puede aprovechar el contexto que se pasa cuando se llama a isEnabled. El contexto de la aplicación se pasará como segundo parámetro de IFeatureFilter.Evaluate.

Filtros de características integrados

Hay dos filtros de características que vienen con el paquete FeatureManagement: TimeWindowFilter y TargetingFilter.

Cada uno de los filtros de características integrados tiene sus propios parámetros. Esta es la lista de filtros de características junto con ejemplos.

Microsoft.TimeWindow

Este filtro proporciona la capacidad de habilitar una característica basada en un período de tiempo. Si solo se especifica End, la característica se tiene en cuenta hasta ese momento. Si solo se especifica Start, la característica se considera en todos los puntos después de ese tiempo.

"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

Este filtro proporciona la capacidad de habilitar una característica para una audiencia de destino. Una explicación detallada de la segmentación se explica en la sección destino siguiente. Los parámetros de filtro incluyen un objeto Audience que describe usuarios, grupos, usuarios o grupos excluidos y un porcentaje predeterminado de la base de usuarios que debe tener acceso a la característica. Cada objeto de grupo que aparece en la sección Groups también debe especificar el porcentaje de los miembros del grupo que deben tener acceso. Si se especifica un usuario en la sección Exclusion, ya sea directamente o si el usuario está en un grupo excluido, la característica está deshabilitada. De lo contrario, si un usuario se especifica directamente en la sección de Users, o si el usuario está en el porcentaje incluido de cualquiera de los lanzamientos de grupo, o si el usuario entra en el porcentaje de lanzamiento predeterminado, ese usuario tendrá habilitada la característica.

"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"
                    ]
                }
            }
        }
    }
]

Selección de destino

El destino es una estrategia de administración de características que habilita a los desarrolladores implementar progresivamente nuevas características en su base de usuarios. La estrategia se basa en el concepto de dirigirse a un conjunto de usuarios conocidos como destino audiencia. Un público se compone de usuarios específicos, grupos, usuarios o grupos excluidos y un porcentaje designado de toda la base de usuarios. Los grupos que se incluyen en la audiencia se pueden dividir más en porcentajes de sus miembros totales.

En los pasos siguientes se muestra un ejemplo de una implementación progresiva para una nueva característica "Beta":

  1. A los usuarios individuales, Jeff y Alicia se les concede acceso a la versión beta.
  2. Otro usuario, Mark, pide participar y está incluido.
  3. El veinte por ciento de un grupo conocido como "Ring1" se incluye en la versión Beta.
  4. El número de usuarios "Ring1" incluidos en la versión beta aumenta hasta el 100 %.
  5. El cinco por ciento de la base de usuarios se incluye en la versión beta.
  6. El porcentaje de lanzamiento se aumenta hasta el 100 % y la característica se implementa por completo.

Esta estrategia para implementar una característica está integrada en la biblioteca mediante el filtro de características Microsoft.Targeting incluido.

Usuario con contexto de destino como destinatario

El filtro de destino se basa en un contexto de destino para evaluar si se debe activar una característica. Este contexto de destino contiene información como qué usuario se está evaluando actualmente y en qué grupos el usuario. El contexto de destino debe pasarse directamente cuando se llama a isEnabled.

featureManager.isEnabled("Beta", { userId: "Aiden", groups: ["Ring1"] })

Exclusión de destino

Al definir una audiencia, los usuarios y grupos se pueden excluir de la audiencia. Las exclusiones son útiles cuando se está implementando una característica para un grupo de usuarios, pero es necesario excluir del lanzamiento a unos pocos usuarios o grupos. La exclusión se define agregando una lista de usuarios y grupos a la propiedad Exclusion del público.

"Audience": {
    "Users": [
        "Jeff",
        "Alicia"
    ],
    "Groups": [
        {
            "Name": "Ring0",
            "RolloutPercentage": 100
        }
    ],
    "DefaultRolloutPercentage": 0,
    "Exclusion": {
        "Users": [
            "Mark"
        ]
    }
}

En el ejemplo anterior, la característica está habilitada para los usuarios denominados Jeff y Alicia. También está habilitado para los usuarios del grupo denominado Ring0. Sin embargo, si el usuario se denomina Mark, la característica está deshabilitada, independientemente de si están en el grupo Ring0 o no. Las exclusiones tienen prioridad sobre el resto del filtro de destino.

Variantes

Cuando se agregan nuevas características a una aplicación, puede haber un momento en el que una característica tenga varias opciones de diseño propuestas diferentes. Una solución común para decidir sobre un diseño es alguna forma de pruebas A/B, lo que implica proporcionar una versión diferente de la característica a diferentes segmentos de la base de usuarios y elegir una versión basada en la interacción del usuario. En esta biblioteca, esta funcionalidad se habilita mediante la representación de diferentes configuraciones de una característica con variantes.

Las variantes permiten que una marca de característica sea más que una marca de activación o desactivación simple. Una variante representa un valor de una marca de característica que puede ser una cadena, un número, un valor booleano o incluso un objeto de configuración. Una marca de característica que declara variantes debe definir en qué circunstancias se debe usar cada variante, que se trata con mayor detalle en la sección Asignación de variantes.

Obtención de una variante con contexto de destino

Para cada característica, se puede recuperar una variante mediante el método FeatureManagergetVariant. La asignación de variante depende del usuario que se está evaluando actualmente y esa información se obtiene del contexto de destino que ha pasado.

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

Declaración de marca de característica de variante

En comparación con las marcas de características normales, las marcas de características variantes tienen dos propiedades adicionales: variants y allocation. La propiedad variants es una matriz que contiene las variantes definidas para esta característica. La propiedad allocation define cómo se deben asignar estas variantes para la característica. Al igual que declarar marcas de características normales, puede configurar marcas de características de variantes en un archivo JSON. Este es un ejemplo de una marca de característica de variante.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyVariantFeatureFlag",
                "enabled": true,
                "allocation": {
                    "default_when_enabled": "Small",
                    "group": [
                        {
                            "variant": "Big",
                            "groups": [
                                "Ring1"
                            ]
                        }
                    ]
                },
                "variants": [
                    { 
                        "name": "Big"
                    },  
                    { 
                        "name": "Small"
                    } 
                ]
            }
        ]
    }
}

Definición de variantes

Cada variante tiene dos propiedades: un nombre y una configuración. El nombre se usa para hacer referencia a una variante específica y la configuración es el valor de esa variante. La configuración se puede establecer mediante la propiedad configuration_value. configuration_value es una configuración insertada que puede ser una cadena, un número, un valor booleano o un objeto de configuración. Si no se especifica configuration_value, la propiedad configuration de la variante devuelta es undefined.

Se define una lista de todas las variantes posibles para cada característica en la propiedad variants.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyVariantFeatureFlag",
                "variants": [
                    { 
                        "name": "Big", 
                        "configuration_value": {
                            "Size": 500
                        }
                    },  
                    { 
                        "name": "Small", 
                        "configuration_value": {
                            "Size": 300
                        }
                    } 
                ]
            }
        ]
    }
}

Asignación de variantes

El proceso de asignación de variantes de una característica viene determinado por la propiedad allocation de la característica.

"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"
    } 
]

La configuración allocation de una característica tiene las siguientes propiedades:

Propiedad Descripción
default_when_disabled Especifica qué variante se debe usar cuando se solicita una variante mientras la característica se considera deshabilitada.
default_when_enabled Especifica qué variante se debe usar cuando se solicita una variante mientras la característica se considera habilitada y no se asignó ninguna otra variante al usuario.
user Especifica una variante y una lista de usuarios a los que se debe asignar esa variante.
group Especifica una variante y una lista de grupos. La variante se asignará si el usuario está en al menos uno de los grupos.
percentile Especifica una variante y un intervalo de porcentajes en el que debe caber el porcentaje calculado del usuario para que se asigne esa variante.
seed Valor en el que se basan los cálculos porcentuales de percentile. El cálculo porcentual de un usuario específico será el mismo en todas las características si se usa el mismo valor seed. Si no se especifica ningún seed, se crea una inicialización predeterminada en función del nombre de la característica.

Si la característica no está habilitada, el administrador de características asigna la variante marcada como default_when_disabled al usuario actual, que en este caso es Small.

Si la característica está habilitada, el administrador de características comprueba las asignaciones de user, group y percentile en ese orden para asignar una variante. En este ejemplo concreto, si el usuario que se evalúa se denomina Marsha, en el grupo denominado Ring1, o el usuario tiene lugar entre el percentil 0 y el 10, la variante especificada se asigna al usuario. En este caso, todos los usuarios asignados devolverían la variante Big. Si ninguna de estas asignaciones coincide, al usuario se le asigna la variante default_when_enabled, que es Small.

La lógica de asignación es similar a el filtro de características de Microsoft.Targeting, pero hay algunos parámetros presentes en el destino que no están en la asignación y viceversa. Los resultados de la selección de destino y la asignación no están relacionados.

Invalidar el estado habilitado con una variante

Puede usar variantes para invalidar el estado habilitado de una marca de característica. La invalidación ofrece a las variantes la oportunidad de ampliar la evaluación de una marca de característica. Al llamar a is_enabled en una marca con variantes, el administrador de características comprobará si la variante asignada al usuario actual está configurada para invalidar el resultado. La invalidación se hace mediante la propiedad de variante opcional status_override. De forma predeterminada, esta propiedad se establece en None, lo que significa que la variante no afecta a si la marca se considera habilitada o deshabilitada. Establecer status_override en Enabled permite que la variante, cuando se elija, invalide una marca que se va a habilitar. Establecer status_override en Disabled proporciona la funcionalidad opuesta, por lo que deshabilitar la marca cuando se elige la variante. No se puede invalidar una característica con un estado enabledfalse.

Si usa una marca de característica con variantes binarias, la propiedad status_override puede ser útil. Permite seguir usando API como is_enabled en la aplicación, al tiempo que se beneficia de las nuevas características que incluyen variantes, como la asignación de percentil y la inicialización.

{
    "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"
        }
    ]
}

En el ejemplo anterior, la característica siempre está habilitada. Si el usuario actual está en el intervalo de percentil calculado de 10 a 20, se devuelve la variante On. De lo contrario, se devuelve la variante Off y, dado que status_override es igual a Disabled, la característica ahora se considerará deshabilitada.

Telemetría

Cuando se implementa un cambio de marca de característica, a menudo es importante analizar su efecto en una aplicación. Por ejemplo, estas son algunas preguntas que pueden surgir:

  • ¿Mis marcas están habilitadas o deshabilitadas según lo previsto?
  • ¿Los usuarios de destino obtienen acceso a una determinada característica según lo previsto?
  • ¿Qué variante ve un usuario determinado?

Estos tipos de preguntas se pueden responder a través de la emisión y el análisis de eventos de evaluación de marcas de características.

Habilitación de telemetría

De forma predeterminada, las marcas de características no tienen telemetría emitida. Para publicar telemetría para una marca de característica determinada, la marca DEBE declarar que está habilitada para la emisión de telemetría.

Para las marcas de características definidas en json, la habilitación se realiza usando la propiedad telemetry.

{
    "feature_management": {
        "feature_flags": [
            {
                "id": "MyFeatureFlag",
                "enabled": true,
                "telemetry": {
                    "enabled": true
                }
            }
        ]
    }
}

El fragmento de código anterior define una marca de característica denominada MyFeatureFlag que está habilitada para la telemetría. La propiedad enabled del objeto telemetry se establece en true. El valor de la propiedad enabled debe ser true para publicar datos de telemetría para la marca.

La sección telemetry de una marca de característica tiene las siguientes propiedades:

Propiedad Descripción
enabled Especifica si se debe publicar la telemetría para la marca de característica.
metadata Colección de pares clave-valor, modelado como diccionario, que se pueden usar para adjuntar metadatos personalizados sobre la marca de característica a eventos de evaluación.

Publicación de telemetría personalizada

Puede registrar una función de devolución de llamada onFeatureEvaluated al crear FeatureManager. Esta devolución de llamada se invoca cada vez que se evalúa una marca de característica y se habilita la telemetría para esa marca. La función de devolución de llamada tomará el resultado de evaluación de características como el parámetro.

En el ejemplo siguiente se muestra cómo implementar una función de devolución de llamada personalizada para enviar telemetría con la información extraída del resultado de evaluación de características y registrarla en el administrador de características.

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});

Integración de Application Insights

La biblioteca de administración de características de JavaScript proporciona paquetes de extensión que se integran con los SDK de Application Insights.

Application Insights ofrece diferentes SDK para escenarios de web y Node.js. Seleccione los paquetes de extensión correctos para la aplicación.

Si la aplicación se ejecuta en el explorador, instale el paquete "@microsoft/feature-management-applicationinsights-browser". En el ejemplo siguiente se muestra cómo puede crear un publicador de telemetría integrado de Application Insights y registrarlo en el administrador de características.

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"});

El publicador de telemetría envía a FeatureEvaluation eventos personalizados a Application Insights cuando se evalúa una marca de característica habilitada con telemetría. El evento personalizado sigue el esquema FeatureEvaluationEvent.

Pasos siguientes

Para obtener información sobre cómo usar marcas de características en las aplicaciones, continúe con los siguientes inicios rápidos.

Para obtener más información sobre cómo usar los filtros de características, continúe con los siguientes tutoriales.