diff --git a/CHANGELOG.md b/CHANGELOG.md index ba0bf138e4..e573ffc87a 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 08d601b73d..2e822e4d2f 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 @@ -55,6 +55,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}]`); } @@ -69,8 +73,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}]`); } } @@ -91,6 +101,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}]`); } @@ -101,3 +115,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 e5e58f094c..d70dab0e69 100644 --- a/public/components/health-check/services/check-pattern-support.service.ts +++ b/public/components/health-check/services/check-pattern-support.service.ts @@ -46,4 +46,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 c54dcc410f..772eaa36d9 100644 --- a/public/react-services/saved-objects.js +++ b/public/react-services/saved-objects.js @@ -16,10 +16,13 @@ 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 { getSavedObjects } from '../kibana-services'; +import { webDocumentationLink } from '../../common/services/web_documentation'; export class SavedObject { /** @@ -279,4 +282,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 64417111c2..b0cd0a3e37 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';