From 16b2b2aa2eb7996cf92f3628579a7454c544344d Mon Sep 17 00:00:00 2001 From: Antonio <34042064+Desvelao@users.noreply.github.com> Date: Fri, 12 Aug 2022 22:05:21 +0200 Subject: [PATCH] Fixed a routes loop when reinstalling Wazuh indexer (#4373) * fix: Fixed a routes loop when reinstalling Wazuh indexer * fix: replaced the display error in the plugin loop * changelog: add PR entry * fix import variable Co-authored-by: Matias Ezequiel Moreno (cherry picked from commit be7654a2912eec72ec37f942857067a611441b1e) --- CHANGELOG.md | 1 + .../check-index-pattern-object.service.ts | 26 +++++++++++++++++-- .../services/check-pattern-support.service.ts | 7 +++++ public/react-services/saved-objects.js | 25 +++++++++++++++++- server/start/initialize/index.ts | 2 +- 5 files changed, 57 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30755ab02b..3f56e889fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ All notable changes to the Wazuh app project will be documented in this file. - Fixed an error of an undefined username hash related to reporting when using Kibana with X-Pack and security was disabled [#4358](https://github.com/wazuh/wazuh-kibana-app/pull/4358) - Fixed persistence of the plugin registry file between updates [#4359](https://github.com/wazuh/wazuh-kibana-app/pull/4359) - Fixed searchbar error on SCA Inventory table [#4367](https://github.com/wazuh/wazuh-kibana-app/pull/4367) +- Fixed a routes loop when reinstalling Wazuh indexer [#4373](https://github.com/wazuh/wazuh-kibana-app/pull/4373) - Fixed Wazuh restart UI [#4365](https://github.com/wazuh/wazuh-kibana-app/pull/4365) # Removed diff --git a/public/components/health-check/services/check-index-pattern/check-index-pattern-object.service.ts b/public/components/health-check/services/check-index-pattern/check-index-pattern-object.service.ts index 9f9c6ac916..607bdf14ba 100644 --- a/public/components/health-check/services/check-index-pattern/check-index-pattern-object.service.ts +++ b/public/components/health-check/services/check-index-pattern/check-index-pattern-object.service.ts @@ -58,6 +58,10 @@ export const checkIndexPatternObjectService = async (appConfig, checkLogger: Ch listValidIndexPatterns = await SavedObject.getListOfWazuhValidIndexPatterns(defaultIndexPatterns, HEALTH_CHECK); checkLogger.info(`Valid index patterns found: ${listValidIndexPatterns.length || 0}`); if(!AppState.getCurrentPattern()){ + // Check the index pattern saved objects can be found using `GET /api/saved_objects/_find` endpoint. + // Related issue: https://github.com/wazuh/wazuh-kibana-app/issues/4293 + await validateIntegritySavedObjects([defaultPatternId], checkLogger); + AppState.setCurrentPattern(defaultPatternId); checkLogger.info(`Index pattern set in cookie: [${defaultPatternId}]`); } @@ -72,8 +76,14 @@ export const checkIndexPatternObjectService = async (appConfig, checkLogger: Ch if (AppState.getCurrentPattern() && listValidIndexPatterns.length) { const indexPatternToSelect = listValidIndexPatterns.find(item => item.id === AppState.getCurrentPattern()); if (!indexPatternToSelect){ - AppState.setCurrentPattern(listValidIndexPatterns[0].id); - checkLogger.action(`Set index pattern id in cookie: [${listValidIndexPatterns[0].id}]`); + const indexPatternID = listValidIndexPatterns[0].id; + + // Check the index pattern saved objects can be found using `GET /api/saved_objects/_find` endpoint. + // Related issue: https://github.com/wazuh/wazuh-kibana-app/issues/4293 + await validateIntegritySavedObjects([indexPatternID], checkLogger); + + AppState.setCurrentPattern(indexPatternID); + checkLogger.action(`Set index pattern id in cookie: [${indexPatternID}]`); } } @@ -94,6 +104,10 @@ export const checkIndexPatternObjectService = async (appConfig, checkLogger: Ch const indexPatternDefaultFound = listValidIndexPatterns.find((indexPattern) => indexPattern.title === defaultPatternId); checkLogger.info(`Index pattern id exists [${defaultPatternId}]: ${indexPatternDefaultFound ? 'yes': 'no'}`); if(indexPatternDefaultFound){ + // Check the index pattern saved objects can be found using `GET /api/saved_objects/_find` endpoint. + // Related issue: https://github.com/wazuh/wazuh-kibana-app/issues/4293 + await validateIntegritySavedObjects([indexPatternDefaultFound.id], checkLogger); + AppState.setCurrentPattern(indexPatternDefaultFound.id); checkLogger.action(`Index pattern set in cookie: [${indexPatternDefaultFound.id}]`); } @@ -104,3 +118,11 @@ export const checkIndexPatternObjectService = async (appConfig, checkLogger: Ch } } }; + +// Check the index pattern saved objects can be found using `GET /api/saved_objects/_find` endpoint. +// Related issue: https://github.com/wazuh/wazuh-kibana-app/issues/4293 +const validateIntegritySavedObjects = async (indexPatternSavedObjectIDs: string[], checkLogger: CheckLogger): Promise => { + checkLogger.info(`Checking the integrity of saved objects. Validating ${indexPatternSavedObjectIDs.join(',')} can be found...`); + await SavedObject.validateIndexPatternSavedObjectCanBeFound(indexPatternSavedObjectIDs); + checkLogger.info('Integrity of saved objects: [ok]'); +}; diff --git a/public/components/health-check/services/check-pattern-support.service.ts b/public/components/health-check/services/check-pattern-support.service.ts index 7cc2f46429..94e0e592c0 100644 --- a/public/components/health-check/services/check-pattern-support.service.ts +++ b/public/components/health-check/services/check-pattern-support.service.ts @@ -50,4 +50,11 @@ export const checkPatternSupportService = (pattern: string, indexType : string) checkLogger.error(`Error creating index pattern id [${pattern}]: ${error.message || error}`); } }; + + const indexPatternSavedObjectIDs = [pattern]; + // Check the index pattern saved objects can be found using `GET /api/saved_objects/_find` endpoint. + // Related issue: https://github.com/wazuh/wazuh-kibana-app/issues/4293 + checkLogger.info(`Checking the integrity of saved objects. Validating ${indexPatternSavedObjectIDs.join(',')} can be found...`); + await SavedObject.validateIndexPatternSavedObjectCanBeFound(indexPatternSavedObjectIDs); + checkLogger.info('Integrity of saved objects: [ok]'); } diff --git a/public/react-services/saved-objects.js b/public/react-services/saved-objects.js index 08861258c1..b2d12bd25d 100644 --- a/public/react-services/saved-objects.js +++ b/public/react-services/saved-objects.js @@ -16,11 +16,14 @@ import { FieldsStatistics } from '../utils/statistics-fields'; import { FieldsMonitoring } from '../utils/monitoring-fields'; import { HEALTH_CHECK, + PLUGIN_PLATFORM_NAME, WAZUH_INDEX_TYPE_ALERTS, WAZUH_INDEX_TYPE_MONITORING, WAZUH_INDEX_TYPE_STATISTICS, } from '../../common/constants'; import { satisfyPluginPlatformVersion } from '../../common/semver'; +import { getSavedObjects } from '../kibana-services'; +import { webDocumentationLink } from '../../common/services/web_documentation'; export class SavedObject { /** @@ -316,4 +319,24 @@ export class SavedObject { } } }; -} + + /** + * Check if it exists the index pattern saved objects using the `GET /api/saved_objects/_find` endpoint. + * It is usefull to validate if the endpoint works as expected. Related issue: https://github.com/wazuh/wazuh-kibana-app/issues/4293 + * @param {string[]} indexPatternIDs + */ + static async validateIndexPatternSavedObjectCanBeFound(indexPatternIDs){ + const indexPatternsSavedObjects = await getSavedObjects().client.find({ + type: 'index-pattern', + fields: ['title'], + perPage: 10000 + }); + const indexPatternsSavedObjectsCanBeFound = indexPatternIDs + .every(indexPatternID => indexPatternsSavedObjects.savedObjects.some(savedObject => savedObject.id === indexPatternID)); + + if (!indexPatternsSavedObjectsCanBeFound) { + throw new Error(`Saved object for index pattern not found. +Restart the ${PLUGIN_PLATFORM_NAME} service to initialize the index. More information in troubleshooting.` +)}; + } +} \ No newline at end of file diff --git a/server/start/initialize/index.ts b/server/start/initialize/index.ts index 51281f5112..ab33b4f5d1 100644 --- a/server/start/initialize/index.ts +++ b/server/start/initialize/index.ts @@ -15,7 +15,7 @@ import { pluginPlatformTemplate } from '../../integration-files/kibana-template' import { getConfiguration } from '../../lib/get-configuration'; import { totalmem } from 'os'; import fs from 'fs'; -import { WAZUH_ALERTS_PATTERN, WAZUH_DATA_CONFIG_REGISTRY_PATH, WAZUH_PLUGIN_PLATFORM_TEMPLATE_NAME, WAZUH_DATA_PLUGIN_PLATFORM_BASE_ABSOLUTE_PATH, PLUGIN_PLATFORM_NAME, PLUGIN_PLATFORM_INSTALLATION_USER_GROUP, PLUGIN_PLATFORM_INSTALLATION_USER, WAZUH_DEFAULT_APP_CONFIG } from '../../../common/constants'; +import { WAZUH_ALERTS_PATTERN, WAZUH_DATA_CONFIG_REGISTRY_PATH, WAZUH_PLUGIN_PLATFORM_TEMPLATE_NAME, WAZUH_DATA_PLUGIN_PLATFORM_BASE_ABSOLUTE_PATH, PLUGIN_PLATFORM_NAME, PLUGIN_PLATFORM_INSTALLATION_USER_GROUP, PLUGIN_PLATFORM_INSTALLATION_USER, WAZUH_DEFAULT_APP_CONFIG, PLUGIN_APP_NAME } from '../../../common/constants'; import { createDataDirectoryIfNotExists } from '../../lib/filesystem'; import _ from 'lodash';