mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-08-05 07:38:26 +00:00
* Fix #1620: Getting Tier in tag aggregation * Fix #1620: Add Follow/Un-follow to change_descriptions
This commit is contained in:
parent
aaedbdc445
commit
b87d7da727
@ -133,9 +133,11 @@ public class ElasticSearchEventHandler implements EventHandler {
|
|||||||
ElasticSearchIndexType esIndexType = esIndexDefinition.getIndexMappingByEntityType(entityType);
|
ElasticSearchIndexType esIndexType = esIndexDefinition.getIndexMappingByEntityType(entityType);
|
||||||
UUID entityId = event.getEntityId();
|
UUID entityId = event.getEntityId();
|
||||||
ChangeDescription changeDescription = event.getChangeDescription();
|
ChangeDescription changeDescription = event.getChangeDescription();
|
||||||
|
|
||||||
List<FieldChange> fieldsAdded = changeDescription.getFieldsAdded();
|
List<FieldChange> fieldsAdded = changeDescription.getFieldsAdded();
|
||||||
StringBuilder scriptTxt = new StringBuilder();
|
StringBuilder scriptTxt = new StringBuilder();
|
||||||
Map<String, Object> fieldAddParams = new HashMap<>();
|
Map<String, Object> fieldAddParams = new HashMap<>();
|
||||||
|
|
||||||
for (FieldChange fieldChange: fieldsAdded) {
|
for (FieldChange fieldChange: fieldsAdded) {
|
||||||
if (fieldChange.getName().equalsIgnoreCase("followers")) {
|
if (fieldChange.getName().equalsIgnoreCase("followers")) {
|
||||||
List<EntityReference> entityReferences = (List<EntityReference>) fieldChange.getNewValue();
|
List<EntityReference> entityReferences = (List<EntityReference>) fieldChange.getNewValue();
|
||||||
@ -154,17 +156,25 @@ public class ElasticSearchEventHandler implements EventHandler {
|
|||||||
for (EntityReference follower : entityReferences) {
|
for (EntityReference follower : entityReferences) {
|
||||||
fieldAddParams.put(fieldChange.getName(), follower.getId().toString());
|
fieldAddParams.put(fieldChange.getName(), follower.getId().toString());
|
||||||
}
|
}
|
||||||
|
scriptTxt.append("ctx._source.followers.removeAll(Collections.singleton(params.followers));");
|
||||||
scriptTxt.append("ctx._source.followers.removeAll(Collections.singleton(params.followers))");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ESChangeDescription esChangeDescription = ESChangeDescription.builder()
|
||||||
|
.updatedAt(event.getDateTime().getTime())
|
||||||
|
.updatedBy(event.getUserName()).build();
|
||||||
|
esChangeDescription.setFieldsAdded(changeDescription.getFieldsAdded());
|
||||||
|
esChangeDescription.setFieldsDeleted(changeDescription.getFieldsDeleted());
|
||||||
|
esChangeDescription.setFieldsUpdated(changeDescription.getFieldsUpdated());
|
||||||
|
Map<String, Object> esChangeDescriptionDoc = JsonUtils.getMap(esChangeDescription);
|
||||||
|
fieldAddParams.put("change_description", esChangeDescriptionDoc);
|
||||||
|
scriptTxt.append("ctx._source.change_descriptions.add(params.change_description);");
|
||||||
if (!scriptTxt.toString().isEmpty()) {
|
if (!scriptTxt.toString().isEmpty()) {
|
||||||
Script script = new Script(ScriptType.INLINE, "painless",
|
Script script = new Script(ScriptType.INLINE, "painless",
|
||||||
scriptTxt.toString(),
|
scriptTxt.toString(),
|
||||||
fieldAddParams);
|
fieldAddParams);
|
||||||
UpdateRequest updateRequest = new UpdateRequest(esIndexType.indexName, entityId.toString());
|
UpdateRequest updateRequest = new UpdateRequest(esIndexType.indexName, entityId.toString());
|
||||||
updateRequest.script(script);
|
updateRequest.script(script);
|
||||||
|
|
||||||
return updateRequest;
|
return updateRequest;
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
|
@ -189,27 +189,6 @@ class ElasticSearchIndex {
|
|||||||
Long lastUpdatedTimestamp = System.currentTimeMillis();
|
Long lastUpdatedTimestamp = System.currentTimeMillis();
|
||||||
@JsonProperty("change_descriptions")
|
@JsonProperty("change_descriptions")
|
||||||
List<ESChangeDescription> changeDescriptions;
|
List<ESChangeDescription> changeDescriptions;
|
||||||
|
|
||||||
|
|
||||||
public void parseTags(List<String> tags) {
|
|
||||||
if (!tags.isEmpty()) {
|
|
||||||
List<String> tagsList = new ArrayList<>(tags);
|
|
||||||
String tierTag = null;
|
|
||||||
for (String tag : tagsList) {
|
|
||||||
if (tag.toLowerCase().matches("(.*)tier(.*)")) {
|
|
||||||
tierTag = tag;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (tierTag != null) {
|
|
||||||
tagsList.remove(tierTag);
|
|
||||||
this.tier = tierTag;
|
|
||||||
}
|
|
||||||
this.tags = tagsList;
|
|
||||||
} else {
|
|
||||||
this.tags = tags;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ -238,6 +217,31 @@ class ESChangeDescription {
|
|||||||
List<FieldChange> fieldsDeleted;
|
List<FieldChange> fieldsDeleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ParseTags {
|
||||||
|
String tierTag;
|
||||||
|
List<String> tags;
|
||||||
|
|
||||||
|
ParseTags(List<String> tags) {
|
||||||
|
if (!tags.isEmpty()) {
|
||||||
|
List<String> tagsList = new ArrayList<>(tags);
|
||||||
|
String tierTag = null;
|
||||||
|
for (String tag : tagsList) {
|
||||||
|
if (tag.toLowerCase().matches("(.*)tier(.*)")) {
|
||||||
|
tierTag = tag;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tierTag != null) {
|
||||||
|
tagsList.remove(tierTag);
|
||||||
|
this.tierTag = tierTag;
|
||||||
|
}
|
||||||
|
this.tags = tagsList;
|
||||||
|
} else {
|
||||||
|
this.tags = tags;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Getter
|
@Getter
|
||||||
@SuperBuilder(builderMethodName = "internalBuilder")
|
@SuperBuilder(builderMethodName = "internalBuilder")
|
||||||
@ -294,6 +298,7 @@ class TableESIndex extends ElasticSearchIndex {
|
|||||||
columnNames.add(col.getName());
|
columnNames.add(col.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ParseTags parseTags = new ParseTags(tags);
|
||||||
TableESIndexBuilder tableESIndexBuilder = internalBuilder().tableId(tableId)
|
TableESIndexBuilder tableESIndexBuilder = internalBuilder().tableId(tableId)
|
||||||
.name(tableName)
|
.name(tableName)
|
||||||
.displayName(tableName)
|
.displayName(tableName)
|
||||||
@ -305,7 +310,8 @@ class TableESIndex extends ElasticSearchIndex {
|
|||||||
.columnNames(columnNames)
|
.columnNames(columnNames)
|
||||||
.columnDescriptions(columnDescriptions)
|
.columnDescriptions(columnDescriptions)
|
||||||
.tableType(table.getTableType().toString())
|
.tableType(table.getTableType().toString())
|
||||||
.tags(tags);
|
.tags(parseTags.tags)
|
||||||
|
.tier(parseTags.tierTag);
|
||||||
|
|
||||||
if (table.getDatabase() != null) {
|
if (table.getDatabase() != null) {
|
||||||
tableESIndexBuilder.database(table.getDatabase().getName());
|
tableESIndexBuilder.database(table.getDatabase().getName());
|
||||||
@ -400,7 +406,7 @@ class TopicESIndex extends ElasticSearchIndex {
|
|||||||
if (topic.getTags() != null) {
|
if (topic.getTags() != null) {
|
||||||
topic.getTags().forEach(tag -> tags.add(tag.getTagFQN()));
|
topic.getTags().forEach(tag -> tags.add(tag.getTagFQN()));
|
||||||
}
|
}
|
||||||
|
ParseTags parseTags = new ParseTags(tags);
|
||||||
TopicESIndexBuilder topicESIndexBuilder = internalBuilder().topicId(topic.getId().toString())
|
TopicESIndexBuilder topicESIndexBuilder = internalBuilder().topicId(topic.getId().toString())
|
||||||
.name(topic.getName())
|
.name(topic.getName())
|
||||||
.displayName(topic.getDisplayName())
|
.displayName(topic.getDisplayName())
|
||||||
@ -411,7 +417,8 @@ class TopicESIndex extends ElasticSearchIndex {
|
|||||||
.serviceType(topic.getServiceType().toString())
|
.serviceType(topic.getServiceType().toString())
|
||||||
.serviceCategory("messagingService")
|
.serviceCategory("messagingService")
|
||||||
.entityType("topic")
|
.entityType("topic")
|
||||||
.tags(tags);
|
.tags(parseTags.tags)
|
||||||
|
.tier(parseTags.tierTag);
|
||||||
|
|
||||||
if (topic.getFollowers() != null) {
|
if (topic.getFollowers() != null) {
|
||||||
topicESIndexBuilder.followers(topic.getFollowers().stream().map(item ->
|
topicESIndexBuilder.followers(topic.getFollowers().stream().map(item ->
|
||||||
@ -485,7 +492,7 @@ class DashboardESIndex extends ElasticSearchIndex {
|
|||||||
chartNames.add(chart.getDisplayName());
|
chartNames.add(chart.getDisplayName());
|
||||||
chartDescriptions.add(chart.getDescription());
|
chartDescriptions.add(chart.getDescription());
|
||||||
}
|
}
|
||||||
|
ParseTags parseTags = new ParseTags(tags);
|
||||||
DashboardESIndexBuilder dashboardESIndexBuilder = internalBuilder().dashboardId(dashboard.getId().toString())
|
DashboardESIndexBuilder dashboardESIndexBuilder = internalBuilder().dashboardId(dashboard.getId().toString())
|
||||||
.name(dashboard.getDisplayName())
|
.name(dashboard.getDisplayName())
|
||||||
.displayName(dashboard.getDisplayName())
|
.displayName(dashboard.getDisplayName())
|
||||||
@ -498,7 +505,8 @@ class DashboardESIndex extends ElasticSearchIndex {
|
|||||||
.service(dashboard.getService().getName())
|
.service(dashboard.getService().getName())
|
||||||
.serviceType(dashboard.getServiceType().toString())
|
.serviceType(dashboard.getServiceType().toString())
|
||||||
.serviceCategory("dashboardService")
|
.serviceCategory("dashboardService")
|
||||||
.tags(tags);
|
.tags(parseTags.tags)
|
||||||
|
.tier(parseTags.tierTag);
|
||||||
|
|
||||||
if (dashboard.getUsageSummary() != null) {
|
if (dashboard.getUsageSummary() != null) {
|
||||||
dashboardESIndexBuilder.weeklyStats(dashboard.getUsageSummary().getWeeklyStats().getCount())
|
dashboardESIndexBuilder.weeklyStats(dashboard.getUsageSummary().getWeeklyStats().getCount())
|
||||||
@ -566,7 +574,7 @@ class PipelineESIndex extends ElasticSearchIndex {
|
|||||||
taskNames.add(task.getDisplayName());
|
taskNames.add(task.getDisplayName());
|
||||||
taskDescriptions.add(task.getDescription());
|
taskDescriptions.add(task.getDescription());
|
||||||
}
|
}
|
||||||
|
ParseTags parseTags = new ParseTags(tags);
|
||||||
PipelineESIndexBuilder pipelineESIndexBuilder = internalBuilder().pipelineId(pipeline.getId().toString())
|
PipelineESIndexBuilder pipelineESIndexBuilder = internalBuilder().pipelineId(pipeline.getId().toString())
|
||||||
.name(pipeline.getDisplayName())
|
.name(pipeline.getDisplayName())
|
||||||
.displayName(pipeline.getDisplayName())
|
.displayName(pipeline.getDisplayName())
|
||||||
@ -579,7 +587,8 @@ class PipelineESIndex extends ElasticSearchIndex {
|
|||||||
.service(pipeline.getService().getName())
|
.service(pipeline.getService().getName())
|
||||||
.serviceType(pipeline.getServiceType().toString())
|
.serviceType(pipeline.getServiceType().toString())
|
||||||
.serviceCategory("pipelineService")
|
.serviceCategory("pipelineService")
|
||||||
.tags(tags);
|
.tags(parseTags.tags)
|
||||||
|
.tier(parseTags.tierTag);
|
||||||
|
|
||||||
if (pipeline.getFollowers() != null) {
|
if (pipeline.getFollowers() != null) {
|
||||||
pipelineESIndexBuilder.followers(pipeline.getFollowers().stream().map(item ->
|
pipelineESIndexBuilder.followers(pipeline.getFollowers().stream().map(item ->
|
||||||
@ -608,4 +617,4 @@ class PipelineESIndex extends ElasticSearchIndex {
|
|||||||
pipelineESIndexBuilder.changeDescriptions(esChangeDescription != null ? List.of(esChangeDescription) : null);
|
pipelineESIndexBuilder.changeDescriptions(esChangeDescription != null ? List.of(esChangeDescription) : null);
|
||||||
return pipelineESIndexBuilder;
|
return pipelineESIndexBuilder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user