Edee.one · Dokumentace

Feature flags modul

Pomocí modulu a jeho logiky lze rychle nastavovat příznaky bežící platformy

  • příznaky jsou reprezentované názvem a boolean stavem
  • jejich definice pak obsahuje výchozí hodnotu, možnosti uložení a modul kam logicky patří
  • z kódu lze nastavení příznaku získat statickou metodou, dle typu uložení pak lze nastavení měnit
  • změna je možná jak globálně (pro danou JVM), tak jen pro daného uživatele (jeho session)

Modul je dostupný od Edee v7.6.0 a jedná se o tzv. systémový modul, který není nutné konfigurovat - je povolený vždy. Aktuální dokumentace pokrývá stav dostupný od Edee v10.4.0.

Čtení stavu

získání hodnoty pomocí FlagsHolder

java
// se specifikací výchozího stavu, pokud není příznak nastvenboolean previewMode = FlagsHolder.getFlags().isEnabled(EdeeFlags.PREVIEW_MODE,false);
// kontrola stavu, výchozí hodnota brána z definiceif (FlagsHolder.getFlags().isEnabled(EdeeFlags.ADMIN_BAR)) {    // povoleno}

Změna stavu

Pro změnu nastavení lze použít získanou instanci Flags

java
Flags flags = FlagsHolder.getFlags();if (flags instanceof FlagsSetter) {    ((FlagsSetter) flags).setFeatureFlag(EdeeFlags.ASSESSMENT_MODE, true);}

Nebo lépe přes helper metodu

java
// modifikace dle definice uložení příznakuFlagsSetter.setFlag(EdeeFlags.ASSESSMENT_MODE, true);
// modifikace s určením uložení (např. pokud jich příznak povoluje více)FlagsSetter.setFlag(EdeeFlags.ADMIN_BAR, true, FlagPersistenceType.USER_CLIENT_STORE);

Možnosti uložení

Definováno pomocí enumerace FlagPersistenceType

  • USER_SESSION - stav je uložen v session uživatele, nastavená hodnota mizí po zavření prohlížeče
  • USER_CLIENT_STORE - stav je uložen na straně prohlížeče návštěvníka (jako cookie), používat s ohledem na bezpečnost
  • JVM_STATE - nastavení na úrovni JVM instance, po restartem aplikačního serveru není zachována, změna není reflektována v clusteru
  • PROJECT_WIDE - nastavení je uloženo do db projektu, přežije tedy i restart a hodnota je dostupná v celém clusteru (aktuálně se ale chová stejně jako JVM_STATE)

Definice příznaku

Příznak (FlagDefinition) je definován

  • název - unikátní název reprezentující ve zkratce jeho účel (name)
  • výchozí hodnota (enabledByDefault)
  • původ - tedy v jakém modulu příznak vzniká (originModule)
  • persistence - určuje jakým způsobem lze příznak nastavit (persistenceTypes)

Známé příznaky jsou evidovány v FlagRegistry, pro jejich registraci lze využít builder pattern

java
public static final String PREVIEW_MODE = "edee.previewMode";public static final FlagDefinition PREVIEW_MODE_FLAG = FlagRegistry.builder(PREVIEW_MODE)        .module("previewmode")        .persistence(USER_SESSION)        .register();

Registrace je zajistěna i pokud cizí modul poskytuje com.fg.edee.featureflags.registry.FlagDefinitionProvider.

Ramjet

V ramjet stránce lze nastavit hodnotu pomocí interceptoru

com.fg.edee.integration.web.ui.featureflag.SetFeatureFlagInterceptor

nebo pomocí command

com.fg.edee.integration.web.ui.featureflag.SetFeatureFlagCommand

Lze také provést registraci nového příznaku pomocí

com.fg.edee.integration.web.ui.featureflag.RegisterFeatureFlagInterceptor

Pro získání aktuální hodnoty je pak připraven provider

com.fg.edee.integration.web.ui.featureflag.FeatureFlagDataProvider

REST API

Stav příznaků lze číst i přes REST API, které poskytuje samostatný modul lib_feature_flags_rest_api (v modules.xml se zapíná elementem <featureflagsrestapimodule/>). Modul vystavuje pod prefixem /api/featureflags:

  • veřejný endpoint GET /api/featureflags/public/server - bez přihlášení vrací jen příznaky výslovně povolené v konfiguraci (<publicAccess>/<flag>) a stav odstávky (edee.maintenanceMode), typicky pro headless frontend,
  • administrační endpointy GET /api/featureflags/flags a GET /api/featureflags/flags/{name} - vyžadují přihlášení a oprávnění ke čtení příznaků.