From 4fa281074e6732f11ea64c7b54b5595dccfc6f3c Mon Sep 17 00:00:00 2001 From: Siddhant <86899184+Siddhanttimeline@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:59:29 +0530 Subject: [PATCH] New Email Templates (OSS) (#17606) * Set new emailTemplates for OSS. Minor other improvements. * Set new emailTemplates for OSS. Minor other improvements. * fix template. * set changeCount in the templates. * fix changeCount calculation * migrations. --- .../insights/DataInsightsReportApp.java | 24 ++++++++++++++- ...ataInsightDescriptionAndOwnerTemplate.java | 3 ++ .../DataInsightTotalAssetTemplate.java | 3 ++ .../service/jdbi3/DocumentRepository.java | 28 +++++++++++++++++ .../service/jdbi3/EntityRepository.java | 30 +------------------ .../migration/mysql/v153/Migration.java | 20 +++++++++++++ .../migration/postgres/v153/Migration.java | 20 +++++++++++++ .../migration/utils/v153/MigrationUtil.java | 14 +++++++++ .../service/resources/teams/UserResource.java | 10 +------ .../security/auth/BasicAuthenticator.java | 12 ++------ .../openmetadata/account-activity-change.json | 2 +- .../openmetadata/changeEvent.json | 2 +- .../openmetadata/dataInsightReport.json | 2 +- .../openmetadata/email-verification.json | 2 +- .../openmetadata/invite-createPassword.json | 4 +-- .../openmetadata/invite-randompwd.json | 2 +- .../openmetadata/reset-link.json | 2 +- .../openmetadata/taskAssignment.json | 2 +- .../emailTemplates/openmetadata/testMail.json | 4 +-- .../openmetadata/testResultStatus.json | 2 +- 20 files changed, 127 insertions(+), 61 deletions(-) create mode 100644 openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v153/Migration.java create mode 100644 openmetadata-service/src/main/java/org/openmetadata/service/migration/postgres/v153/Migration.java create mode 100644 openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v153/MigrationUtil.java diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/insights/DataInsightsReportApp.java b/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/insights/DataInsightsReportApp.java index 78cadc9b66c..6ca4ccbe0cd 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/insights/DataInsightsReportApp.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/apps/bundles/insights/DataInsightsReportApp.java @@ -123,12 +123,16 @@ public class DataInsightsReportApp extends AbstractNativeApplication { try { DataInsightTotalAssetTemplate totalAssetTemplate = createTotalAssetTemplate(searchClient, team.getName(), timeConfig, contextData); + DataInsightDescriptionAndOwnerTemplate descriptionTemplate = createDescriptionTemplate(searchClient, team.getName(), timeConfig, contextData); + DataInsightDescriptionAndOwnerTemplate ownershipTemplate = createOwnershipTemplate(searchClient, team.getName(), timeConfig, contextData); + DataInsightDescriptionAndOwnerTemplate tierTemplate = createTierTemplate(searchClient, team.getName(), timeConfig, contextData); + EmailUtil.sendDataInsightEmailNotificationToUser( emails, getMonthAndDateFromEpoch(timeConfig.startTime()), @@ -213,13 +217,20 @@ public class DataInsightsReportApp extends AbstractNativeApplication { dateWithCount.forEach((key, value) -> dateMap.put(key, value.intValue())); processDateMapToNormalize(dateMap); + int changeInTotalAssets = (int) (currentCount - previousCount); + if (previousCount == 0D) { // it should be undefined return new DataInsightTotalAssetTemplate( - String.valueOf(currentCount.intValue()), 0D, timeConfig.numberOfDaysChange(), dateMap); + String.valueOf(currentCount.intValue()), + currentCount.intValue(), + 0d, + timeConfig.numberOfDaysChange(), + dateMap); } else { return new DataInsightTotalAssetTemplate( String.valueOf(currentCount.intValue()), + changeInTotalAssets, ((currentCount - previousCount) / previousCount) * 100, timeConfig.numberOfDaysChange(), dateMap); @@ -264,10 +275,13 @@ public class DataInsightsReportApp extends AbstractNativeApplication { currentPercentCompleted = (currentCompletedDescription / currentTotalAssetCount) * 100; } + int changeCount = (int) (currentCompletedDescription - previousCompletedDescription); + return getTemplate( DataInsightDescriptionAndOwnerTemplate.MetricType.DESCRIPTION, "percentage_of_data_asset_with_description_kpi", currentPercentCompleted, + changeCount, currentPercentCompleted - previousPercentCompleted, currentCompletedDescription.intValue(), timeConfig.numberOfDaysChange(), @@ -312,10 +326,13 @@ public class DataInsightsReportApp extends AbstractNativeApplication { currentPercentCompleted = (currentHasOwner / currentTotalAssetCount) * 100; } + int changeCount = (int) (currentHasOwner - previousHasOwner); + return getTemplate( DataInsightDescriptionAndOwnerTemplate.MetricType.OWNER, "percentage_of_data_asset_with_owner_kpi", currentPercentCompleted, + changeCount, currentPercentCompleted - previousPercentCompleted, currentHasOwner.intValue(), timeConfig.numberOfDaysChange(), @@ -358,6 +375,8 @@ public class DataInsightsReportApp extends AbstractNativeApplication { currentPercentCompleted = (currentHasTier / currentTotalAssetCount) * 100; } + int changeCount = (int) (currentHasTier - previousHasTier); + // TODO: Understand if we actually use this tierData for anything. Map tierData = new HashMap<>(); @@ -367,6 +386,7 @@ public class DataInsightsReportApp extends AbstractNativeApplication { String.valueOf(currentHasTier.intValue()), currentPercentCompleted, KPI_NOT_SET, + changeCount, currentPercentCompleted - previousPercentCompleted, false, "", @@ -444,6 +464,7 @@ public class DataInsightsReportApp extends AbstractNativeApplication { DataInsightDescriptionAndOwnerTemplate.MetricType metricType, String chartKpiName, Double percentCompleted, + int changeCount, Double percentChange, int totalAssets, int numberOfDaysChange, @@ -490,6 +511,7 @@ public class DataInsightsReportApp extends AbstractNativeApplication { String.valueOf(totalAssets), percentCompleted, targetKpi, + changeCount, percentChange, isKpiAvailable, totalDaysLeft, diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/events/scheduled/template/DataInsightDescriptionAndOwnerTemplate.java b/openmetadata-service/src/main/java/org/openmetadata/service/events/scheduled/template/DataInsightDescriptionAndOwnerTemplate.java index 583b0176f42..274defbade3 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/events/scheduled/template/DataInsightDescriptionAndOwnerTemplate.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/events/scheduled/template/DataInsightDescriptionAndOwnerTemplate.java @@ -33,6 +33,7 @@ public class DataInsightDescriptionAndOwnerTemplate { } @Setter private String totalAssets; + private final String changeCount; private final String percentCompleted; @Setter private boolean kpiAvailable; private String percentChange; @@ -50,6 +51,7 @@ public class DataInsightDescriptionAndOwnerTemplate { String totalAssets, Double percentCompleted, String targetKpi, + int changeCount, Double percentChange, boolean isKpiAvailable, String numberOfDaysLeft, @@ -58,6 +60,7 @@ public class DataInsightDescriptionAndOwnerTemplate { Map dateMap) { this.percentCompleted = String.format("%.2f", percentCompleted); this.targetKpi = targetKpi; + this.changeCount = String.valueOf(changeCount); this.percentChange = String.format("%.2f", percentChange); this.percentChangeMessage = getFormattedPercentChangeMessage(percentChange); this.totalAssets = totalAssets; diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/events/scheduled/template/DataInsightTotalAssetTemplate.java b/openmetadata-service/src/main/java/org/openmetadata/service/events/scheduled/template/DataInsightTotalAssetTemplate.java index 2e73f7cd030..0c785d53463 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/events/scheduled/template/DataInsightTotalAssetTemplate.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/events/scheduled/template/DataInsightTotalAssetTemplate.java @@ -23,6 +23,7 @@ import lombok.Setter; @SuppressWarnings("unused") public class DataInsightTotalAssetTemplate { private String totalDataAssets; + private final String changeInTotalAssets; private String percentChangeTotalAssets; @Setter private String percentChangeMessage; @Setter private String completeMessage; @@ -31,10 +32,12 @@ public class DataInsightTotalAssetTemplate { public DataInsightTotalAssetTemplate( String totalDataAssets, + int assetsAddedOrRemoved, Double percentChangeTotalAssets, int numberOfDaysChange, Map dateMap) { this.totalDataAssets = totalDataAssets; + this.changeInTotalAssets = String.valueOf(assetsAddedOrRemoved); this.percentChangeTotalAssets = String.format("%.2f", percentChangeTotalAssets); this.percentChangeMessage = getFormattedPercentChangeMessage(percentChangeTotalAssets); this.numberOfDaysChange = numberOfDaysChange; diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java index 492ae8088b3..323f97be73a 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java @@ -15,16 +15,21 @@ package org.openmetadata.service.jdbi3; import static org.openmetadata.service.Entity.DOCUMENT; +import java.io.IOException; +import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.jdbi.v3.sqlobject.transaction.Transaction; import org.openmetadata.schema.email.EmailTemplate; +import org.openmetadata.schema.email.SmtpSettings; import org.openmetadata.schema.email.TemplateValidationResponse; import org.openmetadata.schema.entities.docStore.Data; import org.openmetadata.schema.entities.docStore.Document; +import org.openmetadata.schema.settings.SettingsType; import org.openmetadata.service.Entity; import org.openmetadata.service.exception.EntityNotFoundException; import org.openmetadata.service.resources.docstore.DocStoreResource; +import org.openmetadata.service.resources.settings.SettingsCache; import org.openmetadata.service.util.DefaultTemplateProvider; import org.openmetadata.service.util.EntityUtil.Fields; import org.openmetadata.service.util.JsonUtils; @@ -36,6 +41,7 @@ public class DocumentRepository extends EntityRepository { static final String DOCUMENT_PATCH_FIELDS = "data"; private final CollectionDAO.DocStoreDAO dao; private final TemplateProvider templateProvider; + private final String COLLATE = "collate"; public DocumentRepository() { super( @@ -50,6 +56,28 @@ public class DocumentRepository extends EntityRepository { this.templateProvider = new DefaultTemplateProvider(); } + @Override + public List getEntitiesFromSeedData() throws IOException { + List entitiesFromSeedData = new ArrayList<>(); + SmtpSettings emailConfig = + SettingsCache.getSetting(SettingsType.EMAIL_CONFIGURATION, SmtpSettings.class); + + if (emailConfig.getTemplates().value().equals(COLLATE)) { + entitiesFromSeedData.addAll( + getEntitiesFromSeedData( + String.format(".*json/data/%s/emailTemplates/collate/.*\\.json$", entityType))); + } else { + entitiesFromSeedData.addAll( + getEntitiesFromSeedData( + String.format(".*json/data/%s/emailTemplates/openmetadata/.*\\.json$", entityType))); + } + + entitiesFromSeedData.addAll( + getEntitiesFromSeedData(String.format(".*json/data/%s/docs/.*\\.json$", entityType))); + + return entitiesFromSeedData; + } + public List fetchAllEmailTemplates() { List jsons = dao.fetchAllEmailTemplates(); return jsons.stream().map(json -> JsonUtils.readValue(json, Document.class)).toList(); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java index 8b9ae5a8fa6..5f579301359 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java @@ -117,12 +117,10 @@ import org.openmetadata.schema.api.VoteRequest; import org.openmetadata.schema.api.VoteRequest.VoteType; import org.openmetadata.schema.api.feed.ResolveTask; import org.openmetadata.schema.api.teams.CreateTeam; -import org.openmetadata.schema.email.SmtpSettings; import org.openmetadata.schema.entity.data.Table; import org.openmetadata.schema.entity.feed.Suggestion; import org.openmetadata.schema.entity.teams.Team; import org.openmetadata.schema.entity.teams.User; -import org.openmetadata.schema.settings.SettingsType; import org.openmetadata.schema.system.EntityError; import org.openmetadata.schema.type.ApiStatus; import org.openmetadata.schema.type.ChangeDescription; @@ -157,7 +155,6 @@ import org.openmetadata.service.jdbi3.CollectionDAO.EntityVersionPair; import org.openmetadata.service.jdbi3.CollectionDAO.ExtensionRecord; import org.openmetadata.service.jdbi3.FeedRepository.TaskWorkflow; import org.openmetadata.service.jdbi3.FeedRepository.ThreadContext; -import org.openmetadata.service.resources.settings.SettingsCache; import org.openmetadata.service.resources.tags.TagLabelUtil; import org.openmetadata.service.search.SearchClient; import org.openmetadata.service.search.SearchListFilter; @@ -445,32 +442,7 @@ public abstract class EntityRepository { } } - public final List getEntitiesFromSeedData() throws IOException { - List entitiesFromSeedData = new ArrayList<>(); - - if (entityType.equals(Entity.DOCUMENT)) { - SmtpSettings emailConfig = - SettingsCache.getSetting(SettingsType.EMAIL_CONFIGURATION, SmtpSettings.class); - - switch (emailConfig.getTemplates()) { - case COLLATE -> { - entitiesFromSeedData.addAll( - getEntitiesFromSeedData( - String.format(".*json/data/%s/emailTemplates/collate/.*\\.json$", entityType))); - } - default -> { - entitiesFromSeedData.addAll( - getEntitiesFromSeedData( - String.format( - ".*json/data/%s/emailTemplates/openmetadata/.*\\.json$", entityType))); - } - } - - entitiesFromSeedData.addAll( - getEntitiesFromSeedData(String.format(".*json/data/%s/docs/.*\\.json$", entityType))); - return entitiesFromSeedData; - } - + public List getEntitiesFromSeedData() throws IOException { return getEntitiesFromSeedData(String.format(".*json/data/%s/.*\\.json$", entityType)); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v153/Migration.java b/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v153/Migration.java new file mode 100644 index 00000000000..f42d5d6447a --- /dev/null +++ b/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v153/Migration.java @@ -0,0 +1,20 @@ +package org.openmetadata.service.migration.mysql.v153; + +import static org.openmetadata.service.migration.utils.v153.MigrationUtil.updateEmailTemplates; + +import lombok.SneakyThrows; +import org.openmetadata.service.migration.api.MigrationProcessImpl; +import org.openmetadata.service.migration.utils.MigrationFile; + +public class Migration extends MigrationProcessImpl { + + public Migration(MigrationFile migrationFile) { + super(migrationFile); + } + + @Override + @SneakyThrows + public void runDataMigration() { + updateEmailTemplates(collectionDAO); + } +} diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/migration/postgres/v153/Migration.java b/openmetadata-service/src/main/java/org/openmetadata/service/migration/postgres/v153/Migration.java new file mode 100644 index 00000000000..85bf8181cbc --- /dev/null +++ b/openmetadata-service/src/main/java/org/openmetadata/service/migration/postgres/v153/Migration.java @@ -0,0 +1,20 @@ +package org.openmetadata.service.migration.postgres.v153; + +import static org.openmetadata.service.migration.utils.v153.MigrationUtil.updateEmailTemplates; + +import lombok.SneakyThrows; +import org.openmetadata.service.migration.api.MigrationProcessImpl; +import org.openmetadata.service.migration.utils.MigrationFile; + +public class Migration extends MigrationProcessImpl { + + public Migration(MigrationFile migrationFile) { + super(migrationFile); + } + + @Override + @SneakyThrows + public void runDataMigration() { + updateEmailTemplates(collectionDAO); + } +} diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v153/MigrationUtil.java b/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v153/MigrationUtil.java new file mode 100644 index 00000000000..a89ed2cd749 --- /dev/null +++ b/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v153/MigrationUtil.java @@ -0,0 +1,14 @@ +package org.openmetadata.service.migration.utils.v153; + +import lombok.extern.slf4j.Slf4j; +import org.openmetadata.service.jdbi3.CollectionDAO; + +@Slf4j +public class MigrationUtil { + + public static void updateEmailTemplates(CollectionDAO collectionDAO) { + CollectionDAO.DocStoreDAO dao = collectionDAO.docStoreDAO(); + // delete emailTemplates, it will be loaded from initSeedData. + dao.deleteEmailTemplates(); + } +} diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java index 447c7827c9a..8a6e406c5fd 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/UserResource.java @@ -108,7 +108,6 @@ import org.openmetadata.schema.auth.SSOAuthMechanism; import org.openmetadata.schema.auth.ServiceTokenType; import org.openmetadata.schema.auth.TokenRefreshRequest; import org.openmetadata.schema.auth.TokenType; -import org.openmetadata.schema.email.SmtpSettings; import org.openmetadata.schema.entity.teams.AuthenticationMechanism; import org.openmetadata.schema.entity.teams.User; import org.openmetadata.schema.services.connections.metadata.AuthProvider; @@ -173,7 +172,6 @@ public class UserResource extends EntityResource { public static final String USER_PROTECTED_FIELDS = "authenticationMechanism"; private final JWTTokenGenerator jwtTokenGenerator; private final TokenRepository tokenRepository; - private boolean isEmailServiceEnabled; private AuthenticationConfiguration authenticationConfiguration; private AuthorizerConfiguration authorizerConfiguration; private final AuthenticatorHandler authHandler; @@ -192,10 +190,6 @@ public class UserResource extends EntityResource { return user; } - private boolean isEmailServiceEnabled() { - return getSmtpSettings().getEnableSmtpServer(); - } - public UserResource( Authorizer authorizer, Limits limits, AuthenticatorHandler authenticatorHandler) { super(Entity.USER, authorizer, limits); @@ -217,8 +211,6 @@ public class UserResource extends EntityResource { super.initialize(config); this.authenticationConfiguration = config.getAuthenticationConfiguration(); this.authorizerConfiguration = config.getAuthorizerConfiguration(); - SmtpSettings smtpSettings = config.getSmtpSettings(); - this.isEmailServiceEnabled = smtpSettings != null && smtpSettings.getEnableSmtpServer(); this.repository.initializeUsers(config); this.isSelfSignUpEnabled = authenticationConfiguration.getEnableSelfSignup(); } @@ -647,7 +639,7 @@ public class UserResource extends EntityResource { } private void sendInviteMailToUserForBasicAuth(UriInfo uriInfo, User user, CreateUser create) { - if (isBasicAuth() && isEmailServiceEnabled()) { + if (isBasicAuth() && getSmtpSettings().getEnableSmtpServer()) { try { authHandler.sendInviteMailToUser( uriInfo, diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/BasicAuthenticator.java b/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/BasicAuthenticator.java index c44cee55815..11daa6041f9 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/BasicAuthenticator.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/security/auth/BasicAuthenticator.java @@ -70,7 +70,6 @@ import org.openmetadata.schema.auth.RefreshToken; import org.openmetadata.schema.auth.RegistrationRequest; import org.openmetadata.schema.auth.ServiceTokenType; import org.openmetadata.schema.auth.TokenRefreshRequest; -import org.openmetadata.schema.email.SmtpSettings; import org.openmetadata.schema.entity.teams.AuthenticationMechanism; import org.openmetadata.schema.entity.teams.User; import org.openmetadata.service.Entity; @@ -97,7 +96,6 @@ public class BasicAuthenticator implements AuthenticatorHandler { private TokenRepository tokenRepository; private LoginAttemptCache loginAttemptCache; private AuthorizerConfiguration authorizerConfiguration; - private boolean isEmailServiceEnabled; private boolean isSelfSignUpAvailable; @Override @@ -106,15 +104,9 @@ public class BasicAuthenticator implements AuthenticatorHandler { this.tokenRepository = Entity.getTokenRepository(); this.authorizerConfiguration = config.getAuthorizerConfiguration(); this.loginAttemptCache = new LoginAttemptCache(); - SmtpSettings smtpSettings = config.getSmtpSettings(); - this.isEmailServiceEnabled = smtpSettings != null && smtpSettings.getEnableSmtpServer(); this.isSelfSignUpAvailable = config.getAuthenticationConfiguration().getEnableSelfSignup(); } - private boolean isEmailServiceEnabled() { - return getSmtpSettings().getEnableSmtpServer(); - } - @Override public User registerUser(RegistrationRequest newRegistrationRequest) { if (isSelfSignUpAvailable) { @@ -177,7 +169,7 @@ public class BasicAuthenticator implements AuthenticatorHandler { @Override public void sendEmailVerification(UriInfo uriInfo, User user) throws IOException { - if (isEmailServiceEnabled()) { + if (getSmtpSettings().getEnableSmtpServer()) { UUID mailVerificationToken = UUID.randomUUID(); EmailVerificationToken emailVerificationToken = TokenUtil.getEmailVerificationToken(user.getId(), mailVerificationToken); @@ -314,7 +306,7 @@ public class BasicAuthenticator implements AuthenticatorHandler { loginAttemptCache.recordSuccessfulLogin(userName); // in case admin updates , send email to user - if (request.getRequestType() == USER && isEmailServiceEnabled()) { + if (request.getRequestType() == USER && getSmtpSettings().getEnableSmtpServer()) { // Send mail sendInviteMailToUser( uriInfo, diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/account-activity-change.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/account-activity-change.json index e3c4380c23d..8afd186753b 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/account-activity-change.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/account-activity-change.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "account-activity-change", "data": { - "template": "\n\n\n\n\n
 
\n\n \n \n
\n \n \n \n
\n

\n \n \n \n \n \n \n
\n \n \n \n \n \n \n
\n Account Status Changed\n
\n

\n
\n
\n

\n \n \n \n \n \n \n
\n

Hello ${userName},

\n

\n A new activity was initiated on your account.\n

\n Action: ${action}\n \n

\n Status: ${actionStatus}\n \n

\n

Let us know if you need anything. We are here to help.

\n

Happy Exploring!
Thanks

\n
\n
", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHello ${userName},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tA new activity was initiated on your account.\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
Action: \n\t\t\t\t\t\t\t\t\t\t\t\t${action}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
Status: \n\t\t\t\t\t\t\t\t\t\t\t\t${actionStatus}\n\t\t\t\t\t\t\t\t\t\t\t
\n \t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tLet us know if you need anything. We are here to help.\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t

Happy Exploring!
Thanks.

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\t\n
\n
\n
\n \n ", "placeHolders": [ { "name": "userName", diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/changeEvent.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/changeEvent.json index cab2bcc3541..aef76d38913 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/changeEvent.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/changeEvent.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "changeEvent", "data": { - "template": "
 

Change Event Update



Hello ${userName},

${updatedBy} posted on ${entityUrl}.

${changeMessage}

Happy Exploring!
Thanks

", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHello ${userName},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${updatedBy} posted on ${entityUrl}. \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t${changeMessage}\n\t\t\t\t\t\t\t\t\t\t\t
\n \t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t

Happy Exploring!
Thanks.

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\t\n
\n
\n
\n \n \n", "placeHolders": [ { "name": "userName", diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/dataInsightReport.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/dataInsightReport.json index dd7fc10005b..d83286b4c79 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/dataInsightReport.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/dataInsightReport.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "dataInsightReport", "data": { - "template": "\n\n \n \n \n Weekly Update\n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\"\"
\n
 
\n \n \n \n \n \n \n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n
${startDate} - ${endDate}
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 
Your Weekly Update
 
Our weekly reports are designed to give you a clear and complete view of how your data is changing over time.
\n \n \n \n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n
\n \n \n \n \n \n \n
View Report
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n

Total Data Assets
${totalAssetObj.totalDataAssets}
${totalAssetObj.percentChangeMessage} [${totalAssetObj.numberOfDaysChange} Days Change]

\n
\n

Data Assets with Description
${descriptionObj.totalAssets}
${descriptionObj.percentChangeMessage} [${descriptionObj.numberOfDaysChange} Days Change]

\n
\n

Total Data Assets with Owner
${ownershipObj.totalAssets}
${ownershipObj.percentChangeMessage} [${ownershipObj.numberOfDaysChange} Days Change]

\n
\n

Data Assets with Tiers
${tierObj.totalAssets}
${tierObj.percentChangeMessage} [${tierObj.numberOfDaysChange} Days Change]

\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n
Total Data Assets
\n
 
${totalAssetObj.completeMessage}
 
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${totalAssetObj.percentChangeTotalAssets}
Total Data Assets
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n <#list totalAssetObj.dateMap?keys as key>\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
 
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n
\n \n \n \n \n <#list totalAssetObj.dateMap?keys as key>\n \n \n \n \n \n
${key}
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <#if descriptionObj.kpiAvailable>\n \n \n \n \n \n \n
\n \n \n \n \n \n \n
Completed Description
\n
 
${descriptionObj.completeMessage}
 
Target KPI: ${descriptionObj.targetKpi}% | Current KPI: ${descriptionObj.percentCompleted}%
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${descriptionObj.percentCompleted}
Completed Description
 
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n <#list descriptionObj.dateMap?keys as key>\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
 
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n
\n \n \n \n \n <#list descriptionObj.dateMap?keys as key>\n \n \n \n \n \n
${key}
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <#if ownershipObj.kpiAvailable>\n \n \n \n \n \n \n
\n \n \n \n \n \n \n
Assigned Ownership
\n
 
${ownershipObj.completeMessage}
 
Target KPI: ${ownershipObj.targetKpi}% | Current KPI: ${ownershipObj.percentCompleted}%
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${ownershipObj.percentCompleted}
Assigned Ownership
 
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n <#list ownershipObj.dateMap?keys as key>\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
 
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n
\n \n \n \n \n <#list ownershipObj.dateMap?keys as key>\n \n \n \n \n \n
${key}
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n
Assigned Tier
\n
 
${tierObj.completeMessage}
 
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${tierObj.percentCompleted}
Assigned Tier
 
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n <#list tierObj.dateMap?keys as key>\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
 
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n
\n \n \n \n \n <#list ownershipObj.dateMap?keys as key>\n \n \n \n \n \n
${key}
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 
© 2024 Collate, All Rights Reserved
 
\n \n \n \n \n \n \n \n \n
\n
 
\n
\n
\n
\n
\n \n", + "template": "\n\n \n \n \n Weekly Update\n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\"\"
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n
${startDate} - ${endDate}
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 
Your Weekly Update
 
These weekly reports are intended to give you a single pane view of how your data is evolving. Reach out to us if you need anything else or have any questions.
\n \n \n \n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n
\n \n \n \n \n \n \n
View Details
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n

Total Data Assets
${totalAssetObj.totalDataAssets}
${totalAssetObj.percentChangeMessage} [${totalAssetObj.numberOfDaysChange} Days Change]

\n
\n

Data Assets with Description
${descriptionObj.totalAssets}
${descriptionObj.percentChangeMessage} [${descriptionObj.numberOfDaysChange} Days Change]

\n
\n

Total Data Assets with Owner
${ownershipObj.totalAssets}
${ownershipObj.percentChangeMessage} [${ownershipObj.numberOfDaysChange} Days Change]

\n
\n

Data Assets with Tiers
${tierObj.totalAssets}
${tierObj.percentChangeMessage} [${tierObj.numberOfDaysChange} Days Change]

\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n
Total Data Assets
\n
 
${totalAssetObj.completeMessage}
 
Total data assets: ${totalAssetObj.totalDataAssets}
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${totalAssetObj.changeInTotalAssets}
Total Data Assets
 
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n <#list totalAssetObj.dateMap?keys as key>\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
 
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n
\n \n \n \n \n <#list totalAssetObj.dateMap?keys as key>\n \n \n \n \n \n
${key}
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <#if descriptionObj.kpiAvailable>\n \n \n \n \n \n \n
\n \n \n \n \n \n \n
Completed Description
\n
 
${descriptionObj.completeMessage}
 
Target KPI: ${descriptionObj.targetKpi}% | Current KPI: ${descriptionObj.percentCompleted}%
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${descriptionObj.changeCount}
Completed Description
 
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n <#list descriptionObj.dateMap?keys as key>\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
 
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n
\n \n \n \n \n <#list descriptionObj.dateMap?keys as key>\n \n \n \n \n \n
${key}
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <#if ownershipObj.kpiAvailable>\n \n \n \n \n \n \n
\n \n \n \n \n \n \n
Assigned Ownership
\n
 
${ownershipObj.completeMessage}
 
Target KPI: ${ownershipObj.targetKpi}% | Current KPI: ${ownershipObj.percentCompleted}%
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${ownershipObj.changeCount}
Assigned Ownership
 
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n <#list ownershipObj.dateMap?keys as key>\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
 
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n
\n \n \n \n \n <#list ownershipObj.dateMap?keys as key>\n \n \n \n \n \n
${key}
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <#if tierObj.kpiAvailable>\n \n \n \n \n \n \n
\n \n \n \n \n \n \n
Assigned Tier
\n
 
${tierObj.completeMessage}
 
Target KPI: ${tierObj.targetKpi}% | Current KPI: ${tierObj.percentCompleted}%
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
${tierObj.changeCount}
Assigned Tier
 
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n <#list tierObj.dateMap?keys as key>\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
 
 
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n
\n \n \n \n \n <#list ownershipObj.dateMap?keys as key>\n \n \n \n \n \n
${key}
\n
\n
 
\n
\n \n \n \n \n \n \n
 
\n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 
© 2024 Collate, All Rights Reserved
 
\n \n \n \n \n \n \n \n \n
\n
 
\n
\n
\n
\n
\n \n", "placeHolders": [ { "name": "startDate", diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/email-verification.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/email-verification.json index 271eeca9737..adadb7ede94 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/email-verification.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/email-verification.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "email-verification", "data": { - "template": "
 

Email Confirmation Required



Hi ${userName},

Welcome to ${entity}, the all-in-one platform for data discovery, data quality, observability, governance, data lineage, and team collaboration.

Thanks for joining. Please confirm your email address to complete the registration process. Please click the link below or copy and paste this URL into your web browser to verify your email.
Confirm email

The verification link is valid for ${expirationTime} hours only.

Feel free to reachout to us on Slack for any questions you may have.

Thanks,
The ${entity} Team

", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHi ${userName},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tWelcome to ${entity}, the all-in-one platform for data discovery, data quality, observability, governance, data lineage, and team collaboration. \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tThanks for joining. Please confirm your email address to complete the registration process. Please click the link below or copy and paste this URL into your web browser to verify your email. \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\tConfirm email\n\t\t\t\t\n\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\t\tThe verification link is valid for ${expirationTime} hours only. \n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t
 
\n\n\t\t \n\t\t
\n\t\t\t\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n \n Feel free to reach out to us on\n Slack \n for any questions you may have.\n \n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t

Thanks,
The ${entity} Team

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\t\n
\n
\n
\n \n", "placeHolders": [ { "name": "userName", diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/invite-createPassword.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/invite-createPassword.json index 8f1b3afb16c..dfa5d20b072 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/invite-createPassword.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/invite-createPassword.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "invite-createPassword", "data": { - "template": "
 

${entity} Invite



Hi ${userName},

Welcome to ${entity}, the all-in-one platform for data discovery, data quality, observability, governance, data lineage, and team collaboration.

Please use the following link to create a new password for ${entity}.
Create Password

Feel free to reachout to us on  Slack for any questions you may have.

Thanks,
The ${entity} Team

", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHi ${userName},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tWelcome to ${entity}, the all-in-one platform for data discovery, data quality, observability, governance, data lineage, and team collaboration.  \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tPlease use the following link to create a new password for ${entity}. \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\tCreate Password\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\n\t\t
\t\t \n\t\t
\n\t\t\t\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n \n Feel free to reach out to us on\n Slack \n for any questions you may have.\n \n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t

Thanks,
The ${entity} Team

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\t\n
\n
\n
\n \n \n", "placeHolders": [ { "name": "userName", @@ -25,4 +25,4 @@ } ] } -} +} \ No newline at end of file diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/invite-randompwd.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/invite-randompwd.json index 21e4c95ffbb..d58c3af7250 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/invite-randompwd.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/invite-randompwd.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "invite-randompwd", "data": { - "template": "
 

${entity} Invite



Hi ${userName},

Welcome to ${entity}, the all-in-one platform for data discovery, data quality, observability, governance, data lineage, and team collaboration.

You have been added as an admin. Please use below password to sign-in. Please change the password on signing in to ${entity}.

${password}

Login

Feel free to reachout to us on  Slack for any questions you may have.

Thanks,
The ${entity} Team

", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHi ${userName},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tWelcome to ${entity}, the all-in-one platform for data discovery, data quality, observability, governance, data lineage, and team collaboration.\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tYou have been added as an admin. Please use below password to sign-in. Please change the password on signing in to ${entity}. \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
 
\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t${password}\n\t\t\t\t\t\t\t\t\t\t\t
\n \t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\tLogin\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\n\t\t \n\t\t
\n\t\t\t\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n \n Feel free to reach out to us on\n Slack \n for any questions you may have.\n \n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t

Thanks,
The ${entity} Team

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\t\n
\n
\n
\n \n ", "placeHolders": [ { "name": "userName", diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/reset-link.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/reset-link.json index 4e73fe23130..c5b76aa9127 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/reset-link.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/reset-link.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "reset-link", "data": { - "template": "
 

Password Reset Link



Hello ${userName},

You have requested to reset your ${entity} password. Please click the link below to reset your password. This link is valid for ${expirationTime} minutes only.

Reset Link

If you did not request this change, please let us know. You can contact us on Slack for any questions you may have.

Happy Exploring!
Thanks

", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHello ${userName},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tYou have requested to reset your ${entity} password. Please click the link below to reset your password. This link is valid for ${expirationTime} minutes only. \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\n\t\t\t\t
 
\n\t\t\t\tRest Link\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\n\t\t
\t\t \n\t\t
\n\t\t\t\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\tIf you did not request this change, please let us know. You can contact us on Slack for any questions you may have.\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t

Happy Exploring!
Thanks

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\t\n
\n
\n
\n \n \n", "placeHolders": [ { "name": "userName", diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/taskAssignment.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/taskAssignment.json index 5e096876abe..7e535b7f91e 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/taskAssignment.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/taskAssignment.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "taskAssignment", "data": { - "template": "
 

Task Notification



Hello ${assignee},

${createdBy} have assigned you a task to <#if taskType==\"UpdateDescription\">Update Description <#else>Update Tags .

Task Details :


Task Name : ${taskName}
Task Status : ${taskStatus}
Current Value : ${fieldOldValue}
Suggested Value : ${fieldNewValue}


View Task
", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHello ${assignee},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${createdBy} have assigned you a task to <#if taskType==\"UpdateDescription\">\n Update Description \n <#else>\n Update Tags \n .\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tTask Details : \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n Task Name : ${taskName} \n
\n \n Task Status : ${taskStatus} \n
\n \n Current Value : ${fieldOldValue} \n
\n \n Suggested Value : ${fieldNewValue} \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n \t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\tView Task\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t
\n\t\n
\n
\n
\n \n \n", "placeHolders": [ { "name": "assignee", diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/testMail.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/testMail.json index 588d054a7ae..b6fbec20b02 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/testMail.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/testMail.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "testMail", "data": { - "template": "
 

Email Test



Hi ${userName},


This is a Test Email, receiving this Email Confirms that you have successfully configured OpenMetadata to send Mails.

Feel free to reachout to us on  Slack for any questions you may have.

Thanks,
The ${entity} Team

", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHi ${userName},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tThis is a Test Email, receiving this Email Confirms that you have successfully configured OpenMetadata to send Mails.\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t
 
\n\n\t\t \n\t\t
\n\t\t\t\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n \n Feel free to reach out to us on\n Slack\n for any questions you may have.\n \n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
 
\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t

Thanks,
The ${entity} Team

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t
\n\t\n
\n
\n
\n \n \n", "placeHolders": [ { "name": "userName", @@ -21,4 +21,4 @@ } ] } -} +} \ No newline at end of file diff --git a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/testResultStatus.json b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/testResultStatus.json index eeac4677245..5db9f01a3f5 100644 --- a/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/testResultStatus.json +++ b/openmetadata-service/src/main/resources/json/data/document/emailTemplates/openmetadata/testResultStatus.json @@ -5,7 +5,7 @@ "entityType": "EmailTemplate", "fullyQualifiedName": "testResultStatusTemplate", "data": { - "template": "
 

Test Result Notification



Hello ${receiverName},

You have a new Test Result Update.

Task Details :


Name : ${testResultName}
Description : ${testResultDescription}
Status : ${testResultStatus}
Event Timestamp : ${testResultTimestamp}


View Activity
", + "template": " \n \n \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t
\n\t\n\t\n
\n\t
\n\t\n\t
\n\t\t\n\t
\n\t\n
\n
\n\t\n\t\n\t\n\t\t\n\t
\n\t\t\n\t\t
\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tHello ${receiverName},\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tYou have a new Test Result Update.\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\t
 
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tTask Details : \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n Name : ${testResultName}\n
\n \n Description : ${testResultDescription} \n
\n \n Status : ${testResultStatus} \n
\n \n Event Timestamp : ${testResultTimestamp} \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n \t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
 
\n\t\t\t\tView Activity\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t
\n\t\t
 
\n\t
\n\t\n
\n
\n
\n \n \n", "placeHolders": [ { "name": "receiverName",