mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-12-13 08:37:03 +00:00
Minor: Fix ingestion pipeline name search not working for observability alert (#15057)
* add ingestion pipeline search index in UI * Add Ingestion Pipeline index * Update date in case of running * Use timestamp * add cypress test case for ingestion pipeline trigger --------- Co-authored-by: mohitdeuex <mohit.y@deuexsolutions.com>
This commit is contained in:
parent
1da66e79ea
commit
b8713690f0
@ -57,6 +57,7 @@ public class SearchIndexApp extends AbstractNativeApplication {
|
||||
"dashboard",
|
||||
"topic",
|
||||
"pipeline",
|
||||
"ingestionPipeline",
|
||||
"searchIndex",
|
||||
"user",
|
||||
"team",
|
||||
|
||||
@ -350,7 +350,7 @@ public class AlertsRuleEvaluator {
|
||||
for (FieldChange fieldChange : changeEvent.getChangeDescription().getFieldsUpdated()) {
|
||||
if (fieldChange.getName().equals("pipelineStatus") && fieldChange.getNewValue() != null) {
|
||||
PipelineStatus pipelineStatus =
|
||||
JsonUtils.convertValue(fieldChange.getNewValue(), PipelineStatus.class);
|
||||
JsonUtils.readOrConvertValue(fieldChange.getNewValue(), PipelineStatus.class);
|
||||
PipelineStatusType status = pipelineStatus.getPipelineState();
|
||||
for (String givenStatus : pipelineState) {
|
||||
if (givenStatus.equalsIgnoreCase(status.value())) {
|
||||
|
||||
@ -22,6 +22,7 @@ import org.openmetadata.schema.entity.services.ingestionPipelines.PipelineStatus
|
||||
import org.openmetadata.schema.type.FieldChange;
|
||||
import org.openmetadata.service.formatter.decorators.MessageDecorator;
|
||||
import org.openmetadata.service.formatter.util.FormatterUtil;
|
||||
import org.openmetadata.service.util.JsonUtils;
|
||||
|
||||
public class IngestionPipelineFormatter implements EntityFormatter {
|
||||
private static final String PIPELINE_STATUS_FIELD = "pipelineStatus";
|
||||
@ -41,10 +42,12 @@ public class IngestionPipelineFormatter implements EntityFormatter {
|
||||
private String transformIngestionPipelineStatus(
|
||||
MessageDecorator<?> messageFormatter, FieldChange fieldChange, EntityInterface entity) {
|
||||
String ingestionPipelineName = entity.getName();
|
||||
PipelineStatus status = (PipelineStatus) fieldChange.getNewValue();
|
||||
PipelineStatus status =
|
||||
JsonUtils.readOrConvertValue(fieldChange.getNewValue(), PipelineStatus.class);
|
||||
if (status != null) {
|
||||
// In case of running
|
||||
String date =
|
||||
new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date(status.getEndDate()));
|
||||
new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date(status.getTimestamp()));
|
||||
String format =
|
||||
String.format(
|
||||
"Ingestion Pipeline %s %s at %s",
|
||||
|
||||
@ -614,7 +614,7 @@ public class EventSubscriptionResource
|
||||
List<SubscriptionDestination> result = new ArrayList<>();
|
||||
subscriptions.forEach(
|
||||
subscription -> {
|
||||
if (subscription.getId() == null) {
|
||||
if (nullOrEmpty(subscription.getId())) {
|
||||
subscription.withId(UUID.randomUUID());
|
||||
}
|
||||
result.add(subscription);
|
||||
|
||||
@ -28,6 +28,7 @@ import org.openmetadata.schema.entity.services.MlModelService;
|
||||
import org.openmetadata.schema.entity.services.PipelineService;
|
||||
import org.openmetadata.schema.entity.services.SearchService;
|
||||
import org.openmetadata.schema.entity.services.StorageService;
|
||||
import org.openmetadata.schema.entity.services.ingestionPipelines.IngestionPipeline;
|
||||
import org.openmetadata.schema.entity.teams.Team;
|
||||
import org.openmetadata.schema.entity.teams.User;
|
||||
import org.openmetadata.schema.tests.TestCase;
|
||||
@ -49,6 +50,7 @@ import org.openmetadata.service.search.indexes.DomainIndex;
|
||||
import org.openmetadata.service.search.indexes.EntityReportDataIndex;
|
||||
import org.openmetadata.service.search.indexes.GlossaryIndex;
|
||||
import org.openmetadata.service.search.indexes.GlossaryTermIndex;
|
||||
import org.openmetadata.service.search.indexes.IngestionPipelineIndex;
|
||||
import org.openmetadata.service.search.indexes.MessagingServiceIndex;
|
||||
import org.openmetadata.service.search.indexes.MetadataServiceIndex;
|
||||
import org.openmetadata.service.search.indexes.MlModelIndex;
|
||||
@ -82,6 +84,7 @@ public class SearchIndexFactory {
|
||||
case Entity.DASHBOARD -> new DashboardIndex((Dashboard) entity);
|
||||
case Entity.TOPIC -> new TopicIndex((Topic) entity);
|
||||
case Entity.PIPELINE -> new PipelineIndex((Pipeline) entity);
|
||||
case Entity.INGESTION_PIPELINE -> new IngestionPipelineIndex((IngestionPipeline) entity);
|
||||
case Entity.USER -> new UserIndex((User) entity);
|
||||
case Entity.TEAM -> new TeamIndex((Team) entity);
|
||||
case Entity.GLOSSARY -> new GlossaryIndex((Glossary) entity);
|
||||
|
||||
@ -0,0 +1,72 @@
|
||||
package org.openmetadata.service.search.indexes;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.openmetadata.common.utils.CommonUtil;
|
||||
import org.openmetadata.schema.entity.services.ingestionPipelines.IngestionPipeline;
|
||||
import org.openmetadata.service.Entity;
|
||||
import org.openmetadata.service.search.ParseTags;
|
||||
import org.openmetadata.service.search.SearchIndexUtils;
|
||||
import org.openmetadata.service.search.models.SearchSuggest;
|
||||
import org.openmetadata.service.util.JsonUtils;
|
||||
|
||||
public class IngestionPipelineIndex implements SearchIndex {
|
||||
final IngestionPipeline ingestionPipeline;
|
||||
final List<String> excludeFields =
|
||||
List.of("changeDescription", "sourceConfig", "openMetadataServerConnection", "airflowConfig");
|
||||
|
||||
public IngestionPipelineIndex(IngestionPipeline ingestionPipeline) {
|
||||
this.ingestionPipeline = ingestionPipeline;
|
||||
}
|
||||
|
||||
public Map<String, Object> buildESDoc() {
|
||||
Map<String, Object> doc = JsonUtils.getMap(ingestionPipeline);
|
||||
SearchIndexUtils.removeNonIndexableFields(doc, excludeFields);
|
||||
List<SearchSuggest> suggest = new ArrayList<>();
|
||||
List<SearchSuggest> serviceSuggest = new ArrayList<>();
|
||||
suggest.add(
|
||||
SearchSuggest.builder().input(ingestionPipeline.getFullyQualifiedName()).weight(5).build());
|
||||
suggest.add(
|
||||
SearchSuggest.builder().input(ingestionPipeline.getDisplayName()).weight(10).build());
|
||||
serviceSuggest.add(
|
||||
SearchSuggest.builder().input(ingestionPipeline.getService().getName()).weight(5).build());
|
||||
ParseTags parseTags =
|
||||
new ParseTags(Entity.getEntityTags(Entity.INGESTION_PIPELINE, ingestionPipeline));
|
||||
doc.put(
|
||||
"name",
|
||||
ingestionPipeline.getName() != null
|
||||
? ingestionPipeline.getName()
|
||||
: ingestionPipeline.getDisplayName());
|
||||
doc.put(
|
||||
"displayName",
|
||||
ingestionPipeline.getDisplayName() != null
|
||||
? ingestionPipeline.getDisplayName()
|
||||
: ingestionPipeline.getName());
|
||||
doc.put("followers", SearchIndexUtils.parseFollowers(ingestionPipeline.getFollowers()));
|
||||
doc.put("tags", parseTags.getTags());
|
||||
doc.put("tier", parseTags.getTierTag());
|
||||
doc.put("suggest", suggest);
|
||||
doc.put("service_suggest", serviceSuggest);
|
||||
doc.put("entityType", Entity.INGESTION_PIPELINE);
|
||||
doc.put(
|
||||
"totalVotes",
|
||||
CommonUtil.nullOrEmpty(ingestionPipeline.getVotes())
|
||||
? 0
|
||||
: ingestionPipeline.getVotes().getUpVotes()
|
||||
- ingestionPipeline.getVotes().getDownVotes());
|
||||
doc.put(
|
||||
"fqnParts",
|
||||
getFQNParts(
|
||||
ingestionPipeline.getFullyQualifiedName(),
|
||||
suggest.stream().map(SearchSuggest::getInput).toList()));
|
||||
doc.put("owner", getEntityWithDisplayName(ingestionPipeline.getOwner()));
|
||||
doc.put("service", getEntityWithDisplayName(ingestionPipeline.getService()));
|
||||
doc.put("domain", getEntityWithDisplayName(ingestionPipeline.getDomain()));
|
||||
return doc;
|
||||
}
|
||||
|
||||
public static Map<String, Float> getFields() {
|
||||
return SearchIndex.getDefaultFields();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,313 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
"char_filter": [],
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
}
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer": {
|
||||
"tokenizer": "letter",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"om_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 3,
|
||||
"max_gram": 10,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mappings": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "text"
|
||||
},
|
||||
"name": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256,
|
||||
"normalizer": "lowercase_normalizer"
|
||||
},
|
||||
"ngram": {
|
||||
"type": "text",
|
||||
"analyzer": "om_ngram"
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer"
|
||||
},
|
||||
"fqnParts": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"displayName": {
|
||||
"type": "text",
|
||||
"analyzer": "om_analyzer",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
},
|
||||
"ngram": {
|
||||
"type": "text",
|
||||
"analyzer": "om_ngram"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"type": "text",
|
||||
"analyzer": "om_analyzer",
|
||||
"index_options": "docs"
|
||||
},
|
||||
"version": {
|
||||
"type": "float"
|
||||
},
|
||||
"updatedAt": {
|
||||
"type": "date",
|
||||
"format": "epoch_second"
|
||||
},
|
||||
"updatedBy": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
},
|
||||
"domain" : {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"displayName": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"owner": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"displayName": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "text"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"service": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"displayName": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "text"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"followers": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"deployed": {
|
||||
"type": "text"
|
||||
},
|
||||
"tier": {
|
||||
"properties": {
|
||||
"tagFQN": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"labelType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"source": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"state": {
|
||||
"type": "keyword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"properties": {
|
||||
"tagFQN": {
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer"
|
||||
},
|
||||
"labelType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"source": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"state": {
|
||||
"type": "keyword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pipelineType": {
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer"
|
||||
},
|
||||
"entityType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"suggest": {
|
||||
"type": "completion",
|
||||
"contexts": [
|
||||
{
|
||||
"name": "deleted",
|
||||
"type": "category",
|
||||
"path": "deleted"
|
||||
}
|
||||
]
|
||||
},
|
||||
"service_suggest": {
|
||||
"type": "completion"
|
||||
},
|
||||
"totalVotes": {
|
||||
"type": "long"
|
||||
},
|
||||
"votes" : {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -220,5 +220,11 @@
|
||||
"indexMappingFile": "/elasticsearch/%s/test_case_resolution_status_index_mapping.json",
|
||||
"alias": "testCaseResolutionStatus",
|
||||
"parentAliases": []
|
||||
},
|
||||
"ingestionPipeline": {
|
||||
"indexName": "ingestion_pipeline_search_index",
|
||||
"indexMappingFile": "/elasticsearch/%s/ingestion_pipeline_index_mapping.json",
|
||||
"alias": "ingestionPipeline",
|
||||
"parentAliases": ["all", "dataAsset"]
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,288 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
"char_filter": [],
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
}
|
||||
},
|
||||
"analyzer": {
|
||||
"om_analyzer_jp" : {
|
||||
"tokenizer" : "kuromoji_tokenizer",
|
||||
"type" : "custom",
|
||||
"filter" : [
|
||||
"kuromoji_baseform",
|
||||
"kuromoji_part_of_speech",
|
||||
"kuromoji_number",
|
||||
"kuromoji_stemmer"
|
||||
]
|
||||
},
|
||||
"om_ngram": {
|
||||
"tokenizer": "ngram",
|
||||
"min_gram": 1,
|
||||
"max_gram": 2,
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mappings": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "text"
|
||||
},
|
||||
"name": {
|
||||
"type": "text",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256,
|
||||
"normalizer": "lowercase_normalizer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer"
|
||||
},
|
||||
"fqnParts": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"displayName": {
|
||||
"type": "text",
|
||||
"analyzer": "om_analyzer_jp",
|
||||
"fields": {
|
||||
"ngram": {
|
||||
"type": "text",
|
||||
"analyzer": "om_ngram"
|
||||
},
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"type": "text",
|
||||
"analyzer": "om_analyzer_jp"
|
||||
},
|
||||
"version": {
|
||||
"type": "float"
|
||||
},
|
||||
"updatedAt": {
|
||||
"type": "date",
|
||||
"format": "epoch_second"
|
||||
},
|
||||
"updatedBy": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
},
|
||||
"domain" : {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"owner": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"displayName": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "text"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"service": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "text"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"followers": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"deployed": {
|
||||
"type": "text"
|
||||
},
|
||||
"tier": {
|
||||
"properties": {
|
||||
"tagFQN": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"labelType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"source": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"state": {
|
||||
"type": "keyword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"properties": {
|
||||
"tagFQN": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"labelType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"source": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"state": {
|
||||
"type": "keyword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pipelineType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"entityType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"suggest": {
|
||||
"type": "completion",
|
||||
"contexts": [
|
||||
{
|
||||
"name": "deleted",
|
||||
"type": "category",
|
||||
"path": "deleted"
|
||||
}
|
||||
]
|
||||
},
|
||||
"service_suggest": {
|
||||
"type": "completion"
|
||||
},
|
||||
"totalVotes": {
|
||||
"type": "long"
|
||||
},
|
||||
"votes" : {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,271 @@
|
||||
{
|
||||
"settings": {
|
||||
"analysis": {
|
||||
"normalizer": {
|
||||
"lowercase_normalizer": {
|
||||
"type": "custom",
|
||||
"char_filter": [],
|
||||
"filter": [
|
||||
"lowercase"
|
||||
]
|
||||
}
|
||||
},
|
||||
"analyzer": {
|
||||
},
|
||||
"filter": {
|
||||
"om_stemmer": {
|
||||
"type": "stemmer",
|
||||
"name": "english"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mappings": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "text"
|
||||
},
|
||||
"name": {
|
||||
"type": "text",
|
||||
"analyzer": "ik_max_word",
|
||||
"search_analyzer": "ik_smart",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256,
|
||||
"normalizer": "lowercase_normalizer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "keyword",
|
||||
"normalizer": "lowercase_normalizer"
|
||||
},
|
||||
"fqnParts": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"displayName": {
|
||||
"type": "text",
|
||||
"analyzer": "ik_max_word",
|
||||
"search_analyzer": "ik_smart"
|
||||
},
|
||||
"description": {
|
||||
"type": "text",
|
||||
"analyzer": "ik_max_word",
|
||||
"search_analyzer": "ik_smart"
|
||||
},
|
||||
"version": {
|
||||
"type": "float"
|
||||
},
|
||||
"updatedAt": {
|
||||
"type": "date",
|
||||
"format": "epoch_second"
|
||||
},
|
||||
"updatedBy": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
},
|
||||
"domain" : {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"owner": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"displayName": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "text"
|
||||
},
|
||||
"description": {
|
||||
"type": "text",
|
||||
"analyzer": "ik_max_word",
|
||||
"search_analyzer": "ik_smart"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"service": {
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 36
|
||||
}
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"name": {
|
||||
"type": "keyword",
|
||||
"fields": {
|
||||
"keyword": {
|
||||
"type": "keyword",
|
||||
"ignore_above": 256
|
||||
}
|
||||
}
|
||||
},
|
||||
"fullyQualifiedName": {
|
||||
"type": "text"
|
||||
},
|
||||
"description": {
|
||||
"type": "text",
|
||||
"analyzer": "ik_max_word",
|
||||
"search_analyzer": "ik_smart"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"href": {
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
},
|
||||
"followers": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"deleted": {
|
||||
"type": "text"
|
||||
},
|
||||
"deployed": {
|
||||
"type": "text"
|
||||
},
|
||||
"tier": {
|
||||
"properties": {
|
||||
"tagFQN": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"labelType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text"
|
||||
},
|
||||
"source": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"state": {
|
||||
"type": "keyword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"properties": {
|
||||
"tagFQN": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"labelType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"description": {
|
||||
"type": "text",
|
||||
"analyzer": "ik_max_word",
|
||||
"search_analyzer": "ik_smart"
|
||||
},
|
||||
"source": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"state": {
|
||||
"type": "keyword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pipelineType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"entityType": {
|
||||
"type": "keyword"
|
||||
},
|
||||
"suggest": {
|
||||
"type": "completion",
|
||||
"contexts": [
|
||||
{
|
||||
"name": "deleted",
|
||||
"type": "category",
|
||||
"path": "deleted"
|
||||
}
|
||||
]
|
||||
},
|
||||
"service_suggest": {
|
||||
"type": "completion"
|
||||
},
|
||||
"totalVotes": {
|
||||
"type": "long"
|
||||
},
|
||||
"votes" : {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -7,6 +7,7 @@
|
||||
"dashboard",
|
||||
"topic",
|
||||
"pipeline",
|
||||
"ingestionPipeline",
|
||||
"searchIndex",
|
||||
"user",
|
||||
"team",
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
"dashboard",
|
||||
"topic",
|
||||
"pipeline",
|
||||
"ingestionPipeline",
|
||||
"searchIndex",
|
||||
"user",
|
||||
"team",
|
||||
|
||||
@ -28,6 +28,8 @@ export const TEST_CASE_NAME = `0%test-case-${uuid()}`;
|
||||
export const TABLE_FQN = `${DATABASE_SERVICE.entity.databaseSchema}.${DATABASE_SERVICE.entity.name}`;
|
||||
export const TEST_SUITE_FQN = `${TABLE_FQN}.testSuite`;
|
||||
|
||||
export const INGESTION_PIPELINE_NAME = `0-cy-ingestion-pipeline-${uuid()}`;
|
||||
|
||||
export const OBSERVABILITY_CREATION_DETAILS = {
|
||||
table: {
|
||||
triggerDisplayName: 'Table',
|
||||
@ -74,6 +76,53 @@ export const OBSERVABILITY_CREATION_DETAILS = {
|
||||
},
|
||||
],
|
||||
},
|
||||
ingestionPipeline: {
|
||||
triggerDisplayName: 'Ingestion Pipeline',
|
||||
filters: [
|
||||
{
|
||||
name: 'Ingestion Pipeline Name',
|
||||
inputSelector: 'fqn-list-select',
|
||||
inputValue: INGESTION_PIPELINE_NAME,
|
||||
exclude: false,
|
||||
},
|
||||
{
|
||||
name: 'Domain',
|
||||
inputSelector: 'domain-select',
|
||||
inputValue: DOMAIN_CREATION_DETAILS.name,
|
||||
exclude: false,
|
||||
},
|
||||
{
|
||||
name: 'Owner Name',
|
||||
inputSelector: 'owner-name-select',
|
||||
inputValue: `${USER_DETAILS.firstName}${USER_DETAILS.lastName}`,
|
||||
exclude: true,
|
||||
},
|
||||
],
|
||||
actions: [
|
||||
{
|
||||
name: 'Get Ingestion Pipeline Status Updates',
|
||||
inputs: [
|
||||
{
|
||||
inputSelector: 'pipeline-status-select',
|
||||
inputValue: 'Queued',
|
||||
},
|
||||
],
|
||||
exclude: false,
|
||||
},
|
||||
],
|
||||
destinations: [
|
||||
{
|
||||
mode: 'internal',
|
||||
category: 'Owners',
|
||||
type: 'Email',
|
||||
},
|
||||
{
|
||||
mode: 'external',
|
||||
category: 'Email',
|
||||
inputValue: 'test@example.com',
|
||||
},
|
||||
],
|
||||
},
|
||||
testCase: {
|
||||
triggerDisplayName: 'Test Case',
|
||||
filters: [
|
||||
|
||||
@ -31,15 +31,12 @@ import {
|
||||
toastNotification,
|
||||
verifyResponseStatusCode,
|
||||
} from '../../common/common';
|
||||
import {
|
||||
createEntityTable,
|
||||
createSingleLevelEntity,
|
||||
hardDeleteService,
|
||||
} from '../../common/EntityUtils';
|
||||
import { createEntityTable, hardDeleteService } from '../../common/EntityUtils';
|
||||
import {
|
||||
ALERT_DESCRIPTION,
|
||||
ALERT_NAME,
|
||||
ALERT_UPDATED_DESCRIPTION,
|
||||
INGESTION_PIPELINE_NAME,
|
||||
OBSERVABILITY_CREATION_DETAILS,
|
||||
TABLE_FQN,
|
||||
TEST_CASE_NAME,
|
||||
@ -108,9 +105,42 @@ describe('Observability Alert Flow', () => {
|
||||
});
|
||||
|
||||
// Create a pipeline
|
||||
createSingleLevelEntity({
|
||||
token,
|
||||
...PIPELINE_SERVICE,
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `/api/v1/services/${PIPELINE_SERVICE.serviceType}`,
|
||||
headers: { Authorization: `Bearer ${token}` },
|
||||
body: PIPELINE_SERVICE.service,
|
||||
}).then((pipelineServiceResponse) => {
|
||||
data.pipelineService = pipelineServiceResponse.body;
|
||||
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `/api/v1/${PIPELINE_SERVICE.entityType}`,
|
||||
headers: { Authorization: `Bearer ${token}` },
|
||||
body: PIPELINE_SERVICE.entity,
|
||||
});
|
||||
|
||||
// Create a ingestion pipeline
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `/api/v1/services/ingestionPipelines`,
|
||||
headers: { Authorization: `Bearer ${token}` },
|
||||
body: {
|
||||
airflowConfig: {},
|
||||
loggerLevel: 'INFO',
|
||||
name: INGESTION_PIPELINE_NAME,
|
||||
pipelineType: 'metadata',
|
||||
service: {
|
||||
id: data.pipelineService.id,
|
||||
type: 'pipelineService',
|
||||
},
|
||||
sourceConfig: {
|
||||
config: {},
|
||||
},
|
||||
},
|
||||
}).then((ingestionPipelineResponse) => {
|
||||
data.ingestionPipeline = ingestionPipelineResponse.body;
|
||||
});
|
||||
});
|
||||
|
||||
// Create a new user
|
||||
@ -154,6 +184,13 @@ describe('Observability Alert Flow', () => {
|
||||
headers: { Authorization: `Bearer ${token}` },
|
||||
});
|
||||
|
||||
// Delete ingestion pipeline
|
||||
cy.request({
|
||||
method: 'DELETE',
|
||||
url: `/api/v1/services/ingestionPipelines/${data.ingestionPipeline.id}?hardDelete=true`,
|
||||
headers: { Authorization: `Bearer ${token}` },
|
||||
});
|
||||
|
||||
// Delete created services
|
||||
hardDeleteService({
|
||||
token,
|
||||
|
||||
@ -61,6 +61,7 @@ export enum EntityType {
|
||||
GOVERN = 'govern',
|
||||
ALL = 'all',
|
||||
CUSTOM_METRIC = 'customMetric',
|
||||
INGESTION_PIPELINE = 'ingestionPipeline',
|
||||
}
|
||||
|
||||
export enum AssetsType {
|
||||
|
||||
@ -41,4 +41,5 @@ export enum SearchIndex {
|
||||
STORED_PROCEDURE = 'stored_procedure_search_index',
|
||||
DASHBOARD_DATA_MODEL = 'dashboard_data_model_search_index',
|
||||
DATA_PRODUCT = 'data_product_search_index',
|
||||
INGESTION_PIPELINE = 'ingestion_pipeline_search_index',
|
||||
}
|
||||
|
||||
@ -32,6 +32,7 @@ import { DataProduct } from '../generated/entity/domains/dataProduct';
|
||||
import { Domain } from '../generated/entity/domains/domain';
|
||||
import { DashboardService } from '../generated/entity/services/dashboardService';
|
||||
import { DatabaseService } from '../generated/entity/services/databaseService';
|
||||
import { IngestionPipeline } from '../generated/entity/services/ingestionPipelines/ingestionPipeline';
|
||||
import { MessagingService } from '../generated/entity/services/messagingService';
|
||||
import { MlmodelService } from '../generated/entity/services/mlmodelService';
|
||||
import { PipelineService } from '../generated/entity/services/pipelineService';
|
||||
@ -122,6 +123,10 @@ export interface TestCaseSearchSource
|
||||
} // extends EntityInterface
|
||||
export interface TestSuiteSearchSource extends SearchSourceBase, TestSuite {}
|
||||
|
||||
export interface IngestionPipelineSearchSource
|
||||
extends SearchSourceBase,
|
||||
IngestionPipeline {}
|
||||
|
||||
export interface DatabaseServiceSearchSource
|
||||
extends SearchSourceBase,
|
||||
DatabaseService {}
|
||||
@ -203,6 +208,7 @@ export type SearchIndexSearchSourceMapping = {
|
||||
[SearchIndex.DASHBOARD_DATA_MODEL]: DashboardDataModelSearchSource;
|
||||
[SearchIndex.DATA_PRODUCT]: DataProductSearchSource;
|
||||
[SearchIndex.TEST_SUITE]: TestSuiteSearchSource;
|
||||
[SearchIndex.INGESTION_PIPELINE]: IngestionPipelineSearchSource;
|
||||
};
|
||||
|
||||
export type SearchRequest<
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
"dashboard",
|
||||
"topic",
|
||||
"pipeline",
|
||||
"ingestionPipeline",
|
||||
"searchIndex",
|
||||
"user",
|
||||
"team",
|
||||
|
||||
@ -96,6 +96,7 @@ class SearchClassBase {
|
||||
[EntityType.TEST_CASE]: SearchIndex.TEST_CASE,
|
||||
[EntityType.TEST_SUITE]: SearchIndex.TEST_SUITE,
|
||||
[EntityType.GLOSSARY]: SearchIndex.GLOSSARY,
|
||||
[EntityType.INGESTION_PIPELINE]: SearchIndex.INGESTION_PIPELINE,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user