[ObsUX] Hide Alerts and rules dropdown behind feature flag in serverless (#169611)

Closes https://github.com/elastic/kibana/issues/169339

## Summary

* Hides the "Alerts and rule" dropdown in the Infra header behind a
feature flag in serverless
* Moves serverless infra tests to the `index.feature_flags.ts` to
prevent failures on MKI

![CleanShot 2023-10-24 at 09 38
40@2x](f9d47dcb-4b6c-4a39-a8cd-7fcd1a69ba80)


## How to test

* Run in serverless
* Make sure the Alerts and rules dropdown is not there anymore
* Run in stateful
* Make sure dropdown works as before
This commit is contained in:
Mykola Harmash 2023-10-26 09:39:15 +02:00 committed by GitHub
parent ebfca9a9ac
commit 78d2eda0ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 28 additions and 17 deletions

View file

@ -280,6 +280,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) {
'xpack.infra.featureFlags.metricThresholdAlertRuleEnabled (any)',
'xpack.infra.featureFlags.logThresholdAlertRuleEnabled (any)',
'xpack.infra.featureFlags.logsUIEnabled (any)',
'xpack.infra.featureFlags.alertsAndRulesDropdownEnabled (any)',
'xpack.license_management.ui.enabled (boolean)',
'xpack.maps.preserveDrawingBuffer (boolean)',

View file

@ -33,6 +33,7 @@ export interface InfraConfig {
inventoryThresholdAlertRuleEnabled: boolean;
metricThresholdAlertRuleEnabled: boolean;
logThresholdAlertRuleEnabled: boolean;
alertsAndRulesDropdownEnabled: boolean;
};
}

View file

@ -27,6 +27,7 @@ describe('usePluginConfig()', () => {
inventoryThresholdAlertRuleEnabled: true,
metricThresholdAlertRuleEnabled: true,
logThresholdAlertRuleEnabled: true,
alertsAndRulesDropdownEnabled: true,
},
};
const { result } = renderHook(() => usePluginConfig(), {

View file

@ -85,7 +85,9 @@ export const InfrastructurePage = () => {
{settingsTabTitle}
</EuiHeaderLink>
<Route path={'/inventory'} component={AnomalyDetectionFlyout} />
<MetricsAlertDropdown />
{config.featureFlags.alertsAndRulesDropdownEnabled && (
<MetricsAlertDropdown />
)}
<EuiHeaderLink
href={kibana.services?.application?.getUrlForApp('/integrations/browse')}
color="primary"

View file

@ -2271,6 +2271,7 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({
inventoryThresholdAlertRuleEnabled: true,
metricThresholdAlertRuleEnabled: true,
logThresholdAlertRuleEnabled: true,
alertsAndRulesDropdownEnabled: true,
},
enabled: true,
sources,

View file

@ -133,6 +133,7 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({
inventoryThresholdAlertRuleEnabled: true,
metricThresholdAlertRuleEnabled: true,
logThresholdAlertRuleEnabled: true,
alertsAndRulesDropdownEnabled: true,
},
sources,
enabled: true,

View file

@ -109,6 +109,10 @@ export const config: PluginConfigDescriptor<InfraConfig> = {
traditional: schema.boolean({ defaultValue: true }),
serverless: schema.boolean({ defaultValue: false }),
}),
alertsAndRulesDropdownEnabled: offeringBasedSchema({
traditional: schema.boolean({ defaultValue: true }),
serverless: schema.boolean({ defaultValue: false }),
}),
}),
}),
deprecations: configDeprecations,

View file

@ -347,6 +347,10 @@ export function InfraHomePageProvider({ getService, getPageObjects }: FtrProvide
await thresholdInput.type([threshold]);
},
async ensureAlertsAndRulesDropdownIsMissing() {
await testSubjects.missingOrFail('infrastructure-alerts-and-rules');
},
async clickAlertsAndRules() {
await testSubjects.click('infrastructure-alerts-and-rules');
},

View file

@ -18,7 +18,11 @@ export default createTestConfig({
},
suiteTags: { exclude: ['skipSvlOblt'] },
// add feature flags
kbnServerArgs: [],
kbnServerArgs: [
'--xpack.infra.enabled=true',
'--xpack.infra.featureFlags.customThresholdAlertsEnabled=true',
'--xpack.observability.unsafe.thresholdRule.enabled=true',
],
// load tests in the index file
testFiles: [require.resolve('./index.feature_flags.ts')],

View file

@ -18,9 +18,5 @@ export default createTestConfig({
// include settings from project controller
// https://github.com/elastic/project-controller/blob/main/internal/project/observability/config/elasticsearch.yml
esServerArgs: ['xpack.ml.dfa.enabled=false', 'xpack.ml.nlp.enabled=false'],
kbnServerArgs: [
'--xpack.infra.enabled=true',
'--xpack.infra.featureFlags.customThresholdAlertsEnabled=true',
'--xpack.observability.unsafe.thresholdRule.enabled=true',
],
kbnServerArgs: [],
});

View file

@ -5,9 +5,11 @@
* 2.0.
*/
export default function () {
import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ loadTestFile }: FtrProviderContext) {
describe('serverless observability UI - feature flags', function () {
// add tests that require feature flags, defined in config.feature_flags.ts
// loadTestFile(require.resolve(<path_to_test_file>));
loadTestFile(require.resolve('./infra'));
});
}

View file

@ -15,7 +15,6 @@ export default function ({ loadTestFile }: FtrProviderContext) {
loadTestFile(require.resolve('./rules/rules_list'));
loadTestFile(require.resolve('./cases'));
loadTestFile(require.resolve('./advanced_settings'));
loadTestFile(require.resolve('./infra'));
loadTestFile(require.resolve('./ml'));
});
}

View file

@ -30,11 +30,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
await pageObjects.header.waitUntilLoadingHasFinished();
});
it('should have menu item to create a custom threshold alert', async () => {
await pageObjects.infraHome.clickAlertsAndRules();
await pageObjects.infraHome.ensurePopoverOpened();
await pageObjects.infraHome.ensureCustomThresholdAlertMenuItemIsVisible();
await pageObjects.infraHome.clickAlertsAndRules();
it('is hidden', async () => {
await pageObjects.infraHome.ensureAlertsAndRulesDropdownIsMissing();
});
});
});

View file

@ -9,8 +9,6 @@ import { FtrProviderContext } from '../../../ftr_provider_context';
export default function ({ loadTestFile }: FtrProviderContext) {
describe('Observability Infra', function () {
// TimeoutError: Waiting for element to be located By(css selector, [data-test-subj="infrastructure-alerts-and-rules"])
this.tags(['failsOnMKI']);
loadTestFile(require.resolve('./header_menu'));
loadTestFile(require.resolve('./node_details'));
loadTestFile(require.resolve('./hosts_page'));