This is an automated email from the ASF dual-hosted git repository. jsinovassinnaik pushed a commit to branch UNOMI-817 in repository https://gitbox.apache.org/repos/asf/unomi.git
commit c2e379ff3bc5194210aa2ee9fd363d594d883d42 Author: jsinovassin <jsinovassinn...@jahia.com> AuthorDate: Fri Apr 19 17:13:58 2024 +0200 UNOMI-817: set pastEvents as flattened and clean existing mapping --- .../resources/META-INF/cxs/mappings/profile.json | 7 ++++ .../services/impl/profiles/ProfileServiceImpl.java | 9 ++++- ...te-2.5.0-00-cleanPastEventProfileSession.groovy | 47 ++++++++++++++++++++++ .../2.5.0/remove_pastEvents_session.painless | 23 +++++++++++ 4 files changed, 84 insertions(+), 2 deletions(-) diff --git a/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/profile.json b/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/profile.json index 81cc14d0f..48eab69f5 100644 --- a/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/profile.json +++ b/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/profile.json @@ -40,6 +40,13 @@ } } }, + "systemProperties": { + "properties": { + "pastEvents": { + "type": "flattened" + } + } + }, "consents": { "properties": { "statusDate": { diff --git a/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java index 56bf686d8..dd30ba863 100644 --- a/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java +++ b/services/src/main/java/org/apache/unomi/services/impl/profiles/ProfileServiceImpl.java @@ -881,8 +881,13 @@ public class ProfileServiceImpl implements ProfileService, SynchronousBundleList if (session.getItemId() == null) { return null; } - if (session.getProfile() != null && session.getProfile().getProperties() != null) { - session.getProfile().setProperties(removePersonalIdentifiersFromSessionProfile(session.getProfile().getProperties())); + if (session.getProfile() != null) { + if (session.getProfile().getProperties() != null){ + session.getProfile().setProperties(removePersonalIdentifiersFromSessionProfile(session.getProfile().getProperties())); + } + if (session.getProfile().getSystemProperties() != null){ + session.getProfile().getSystemProperties().entrySet().removeIf(entry -> entry.getKey().equals("pastEvents")); + } } return persistenceService.save(session) ? session : null; } diff --git a/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.5.0-00-cleanPastEventProfileSession.groovy b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.5.0-00-cleanPastEventProfileSession.groovy new file mode 100644 index 000000000..bcd43fde1 --- /dev/null +++ b/tools/shell-commands/src/main/resources/META-INF/cxs/migration/migrate-2.5.0-00-cleanPastEventProfileSession.groovy @@ -0,0 +1,47 @@ +import org.apache.unomi.shell.migration.service.MigrationContext +import org.apache.unomi.shell.migration.utils.HttpUtils +import org.apache.unomi.shell.migration.utils.MigrationUtils +import org.osgi.framework.BundleContext +import org.osgi.framework.Bundle + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +MigrationContext context = migrationContext +String esAddress = context.getConfigString("esAddress") +String indexPrefix = context.getConfigString("indexPrefix") +String rolloverPolicyName = indexPrefix + "-unomi-rollover-policy" +String rolloverEventAlias = indexPrefix + "-session" + +context.performMigrationStep("2.5.0-clean-profile-mapping", () -> { + String baseSettings = MigrationUtils.resourceAsString(bundleContext, "requestBody/2.0.0/base_index_mapping.json") + String mapping = MigrationUtils.extractMappingFromBundles(bundleContext, "profile.json") + String newIndexSettings = MigrationUtils.buildIndexCreationRequest(baseSettings, mapping, context, false) + MigrationUtils.reIndex(context.getHttpClient(), bundleContext, esAddress, indexPrefix + "-profile", newIndexSettings, "", context) +}) + +context.performMigrationStep("2.5.0-clean-session-mapping", () -> { + String baseSettings = MigrationUtils.resourceAsString(bundleContext, "requestBody/2.2.0/base_index_withRollover_request.json") + String cleanPastEventScript = MigrationUtils.getFileWithoutComments(bundleContext, "requestBody/2.5.0/remove_pastEvents_session.painless") + String mapping = MigrationUtils.extractMappingFromBundles(bundleContext, "session.json") + String newIndexSettings = MigrationUtils.buildIndexCreationRequestWithRollover(baseSettings, mapping, context, rolloverPolicyName, rolloverEventAlias) + Set<String> sessionIndices = MigrationUtils.getIndexesPrefixedBy(context.getHttpClient(), esAddress, "${indexPrefix}-session-") + + sessionIndices.each { sessionIndex -> + MigrationUtils.reIndex(context.getHttpClient(), bundleContext, esAddress, sessionIndex, newIndexSettings, cleanPastEventScript, context) + } +}) diff --git a/tools/shell-commands/src/main/resources/requestBody/2.5.0/remove_pastEvents_session.painless b/tools/shell-commands/src/main/resources/requestBody/2.5.0/remove_pastEvents_session.painless new file mode 100644 index 000000000..17f4443ca --- /dev/null +++ b/tools/shell-commands/src/main/resources/requestBody/2.5.0/remove_pastEvents_session.painless @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if (ctx._source.profile != null) { + /* Look for empty scope */ + if (ctx._source.profile.systemProperties != null && ctx._source.profile.systemProperties.pastEvents != null) { + ctx._source.profile.systemProperties.remove('pastEvents'); + } +}