提交 e83e175a 编写于 作者: 彭勇升 pengys 提交者: wu-sheng

Meta data query implementation are all finished. (#1692)

上级 7d3e699e
......@@ -19,7 +19,7 @@
package org.apache.skywalking.oap.server.core.query;
import java.io.IOException;
import java.util.*;
import java.util.List;
import org.apache.skywalking.apm.network.language.agent.SpanLayer;
import org.apache.skywalking.oap.server.core.query.entity.*;
import org.apache.skywalking.oap.server.core.storage.StorageModule;
......@@ -59,20 +59,22 @@ public class MetadataQueryService implements org.apache.skywalking.oap.server.li
return getMetadataQueryDAO().getAllServices(startTimestamp, endTimestamp);
}
public List<Service> searchServices(final long startTimestamp, final long endTimestamp, final String keyword) {
return Collections.emptyList();
public List<Service> searchServices(final long startTimestamp, final long endTimestamp,
final String keyword) throws IOException {
return getMetadataQueryDAO().searchServices(startTimestamp, endTimestamp, keyword);
}
public List<ServiceInstance> getServiceInstances(final long startTimestamp, final long endTimestamp,
final String id) {
return Collections.emptyList();
final String serviceId) throws IOException {
return getMetadataQueryDAO().getServiceInstances(startTimestamp, endTimestamp, serviceId);
}
public List<Endpoint> searchEndpoint(final String keyword, final String serviceId, final int limit) {
return Collections.emptyList();
public List<Endpoint> searchEndpoint(final String keyword, final String serviceId,
final int limit) throws IOException {
return getMetadataQueryDAO().searchEndpoint(keyword, serviceId, limit);
}
public Service searchService(final long startTimestamp, final long endTimestamp, final String serviceCode) {
return new Service();
public Service searchService(final String serviceCode) throws IOException {
return getMetadataQueryDAO().searchService(serviceCode);
}
}
......@@ -19,6 +19,7 @@
package org.apache.skywalking.oap.server.core.query.entity;
import lombok.*;
import org.apache.skywalking.oap.server.core.source.DetectPoint;
@Getter
@Setter
......@@ -27,4 +28,5 @@ public class Call {
private int target;
private String callType;
private String id;
private DetectPoint detectPoint;
}
......@@ -18,6 +18,10 @@
package org.apache.skywalking.oap.server.core.query.entity;
import lombok.*;
@Getter
@Setter
public class Endpoint {
private String id;
private String name;
......
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.skywalking.oap.server.core.query.entity;
/**
* @author peng-yongsheng
*/
public enum LanguageTrans {
INSTANCE;
public int id(Language language) {
switch (language) {
case UNKNOWN:
return 1;
case JAVA:
return 2;
case DOTNET:
return 3;
case NODEJS:
return 4;
case PYTHON:
return 5;
case RUBY:
return 6;
default:
return 1;
}
}
public Language value(int id) {
switch (id) {
case 1:
return Language.UNKNOWN;
case 2:
return Language.JAVA;
case 3:
return Language.DOTNET;
case 4:
return Language.NODEJS;
case 5:
return Language.PYTHON;
case 6:
return Language.RUBY;
default:
return Language.UNKNOWN;
}
}
}
......@@ -38,8 +38,8 @@ public class EndpointInventory extends RegisterSource {
public static final String MODEL_NAME = "endpoint_inventory";
private static final String SERVICE_ID = "service_id";
private static final String NAME = "name";
public static final String SERVICE_ID = "service_id";
public static final String NAME = "name";
public static final String DETECT_POINT = "detect_point";
@Setter @Getter @Column(columnName = SERVICE_ID) private int serviceId;
......
......@@ -42,16 +42,18 @@ public class ServiceInstanceInventory extends RegisterSource {
public static final String MODEL_NAME = "service_instance_inventory";
public static final String NAME = "name";
private static final String SERVICE_ID = "service_id";
public static final String SERVICE_ID = "service_id";
private static final String IS_ADDRESS = "is_address";
private static final String ADDRESS_ID = "address_id";
private static final String OS_NAME = "os_name";
private static final String HOST_NAME = "host_name";
private static final String PROCESS_NO = "process_no";
private static final String IPV4S = "ipv4s";
public static final String LANGUAGE = "language";
@Setter @Getter @Column(columnName = NAME, matchQuery = true) private String name = Const.EMPTY_STRING;
@Setter @Getter @Column(columnName = SERVICE_ID) private int serviceId;
@Setter @Getter @Column(columnName = LANGUAGE) private int language;
@Setter @Getter @Column(columnName = IS_ADDRESS) private int isAddress;
@Setter @Getter @Column(columnName = ADDRESS_ID) private int addressId;
@Setter @Getter @Column(columnName = OS_NAME) private String osName;
......@@ -109,9 +111,10 @@ public class ServiceInstanceInventory extends RegisterSource {
RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
remoteBuilder.setDataIntegers(0, getSequence());
remoteBuilder.setDataIntegers(1, serviceId);
remoteBuilder.setDataIntegers(2, isAddress);
remoteBuilder.setDataIntegers(3, addressId);
remoteBuilder.setDataIntegers(4, processNo);
remoteBuilder.setDataIntegers(2, language);
remoteBuilder.setDataIntegers(3, isAddress);
remoteBuilder.setDataIntegers(4, addressId);
remoteBuilder.setDataIntegers(5, processNo);
remoteBuilder.setDataLongs(0, getRegisterTime());
remoteBuilder.setDataLongs(1, getHeartbeatTime());
......@@ -126,9 +129,10 @@ public class ServiceInstanceInventory extends RegisterSource {
@Override public void deserialize(RemoteData remoteData) {
setSequence(remoteData.getDataIntegers(0));
setServiceId(remoteData.getDataIntegers(1));
setIsAddress(remoteData.getDataIntegers(2));
setAddressId(remoteData.getDataIntegers(3));
setProcessNo(remoteData.getDataIntegers(4));
setLanguage(remoteData.getDataIntegers(2));
setIsAddress(remoteData.getDataIntegers(3));
setAddressId(remoteData.getDataIntegers(4));
setProcessNo(remoteData.getDataIntegers(5));
setRegisterTime(remoteData.getDataLongs(0));
setHeartbeatTime(remoteData.getDataLongs(1));
......@@ -149,6 +153,7 @@ public class ServiceInstanceInventory extends RegisterSource {
ServiceInstanceInventory inventory = new ServiceInstanceInventory();
inventory.setSequence((Integer)dbMap.get(SEQUENCE));
inventory.setServiceId((Integer)dbMap.get(SERVICE_ID));
inventory.setLanguage((Integer)dbMap.get(LANGUAGE));
inventory.setIsAddress((Integer)dbMap.get(IS_ADDRESS));
inventory.setAddressId((Integer)dbMap.get(ADDRESS_ID));
inventory.setProcessNo((Integer)dbMap.get(PROCESS_NO));
......@@ -167,6 +172,7 @@ public class ServiceInstanceInventory extends RegisterSource {
Map<String, Object> map = new HashMap<>();
map.put(SEQUENCE, storageData.getSequence());
map.put(SERVICE_ID, storageData.getServiceId());
map.put(LANGUAGE, storageData.getLanguage());
map.put(IS_ADDRESS, storageData.getIsAddress());
map.put(ADDRESS_ID, storageData.getAddressId());
map.put(PROCESS_NO, storageData.getProcessNo());
......
......@@ -34,6 +34,4 @@ public @interface Column {
Function function() default Function.None;
boolean matchQuery() default false;
boolean termQuery() default true;
}
......@@ -60,7 +60,7 @@ public class StorageAnnotationListener implements AnnotationListener, IModelGett
for (Field field : fields) {
if (field.isAnnotationPresent(Column.class)) {
Column column = field.getAnnotation(Column.class);
modelColumns.add(new ModelColumn(new ColumnName(column.columnName(), column.columnName()), field.getType()));
modelColumns.add(new ModelColumn(new ColumnName(column.columnName(), column.columnName()), field.getType(), column.matchQuery()));
if (logger.isDebugEnabled()) {
logger.debug("The field named {} with the {} type", column.columnName(), field.getType());
}
......
......@@ -24,9 +24,10 @@ import lombok.Getter;
/**
* @author peng-yongsheng
*/
@Getter
public class Model {
@Getter private final String name;
@Getter private final List<ModelColumn> columns;
private final String name;
private final List<ModelColumn> columns;
public Model(String name, List<ModelColumn> columns) {
this.name = name;
......
......@@ -23,12 +23,15 @@ import lombok.Getter;
/**
* @author peng-yongsheng
*/
@Getter
public class ModelColumn {
@Getter private final ColumnName columnName;
@Getter private final Class<?> type;
private final ColumnName columnName;
private final Class<?> type;
private final boolean matchQuery;
public ModelColumn(ColumnName columnName, Class<?> type) {
public ModelColumn(ColumnName columnName, Class<?> type, boolean matchQuery) {
this.columnName = columnName;
this.type = type;
this.matchQuery = matchQuery;
}
}
......@@ -42,7 +42,7 @@ public abstract class ModelInstaller {
IModelGetter modelGetter = moduleManager.find(CoreModule.NAME).getService(IModelGetter.class);
List<Model> models = modelGetter.getModels();
Boolean debug = System.getProperty("debug") != null;
boolean debug = System.getProperty("debug") != null;
for (Model model : models) {
if (!isExists(client, model)) {
......
......@@ -20,7 +20,7 @@ package org.apache.skywalking.oap.server.core.storage.query;
import java.io.IOException;
import java.util.List;
import org.apache.skywalking.oap.server.core.query.entity.Service;
import org.apache.skywalking.oap.server.core.query.entity.*;
import org.apache.skywalking.oap.server.core.storage.DAO;
/**
......@@ -35,4 +35,15 @@ public interface IMetadataQueryDAO extends DAO {
int numOfConjectural(final long startTimestamp, final long endTimestamp, final int srcLayer) throws IOException;
List<Service> getAllServices(final long startTimestamp, final long endTimestamp) throws IOException;
List<Service> searchServices(final long startTimestamp, final long endTimestamp,
final String keyword) throws IOException;
Service searchService(final String serviceCode) throws IOException;
List<Endpoint> searchEndpoint(final String keyword, final String serviceId,
final int limit) throws IOException;
List<ServiceInstance> getServiceInstances(final long startTimestamp, final long endTimestamp,
final String serviceId) throws IOException;
}
......@@ -58,28 +58,28 @@ public class MetadataQuery implements GraphQLQueryResolver {
return getMetadataQueryService().getAllServices(startTimestamp, endTimestamp);
}
public List<Service> searchServices(final Duration duration, final String keyword) throws ParseException {
public List<Service> searchServices(final Duration duration, final String keyword)
throws IOException, ParseException {
long startTimestamp = DurationUtils.INSTANCE.toTimestamp(duration.getStep(), duration.getStart());
long endTimestamp = DurationUtils.INSTANCE.toTimestamp(duration.getStep(), duration.getEnd());
return getMetadataQueryService().searchServices(startTimestamp, endTimestamp, keyword);
}
public Service searchService(final Duration duration, final String serviceCode) throws ParseException {
long startTimestamp = DurationUtils.INSTANCE.toTimestamp(duration.getStep(), duration.getStart());
long endTimestamp = DurationUtils.INSTANCE.toTimestamp(duration.getStep(), duration.getEnd());
return getMetadataQueryService().searchService(startTimestamp, endTimestamp, serviceCode);
public Service searchService(final String serviceCode) throws IOException {
return getMetadataQueryService().searchService(serviceCode);
}
public List<ServiceInstance> getServiceInstances(final Duration duration, final String id) throws ParseException {
public List<ServiceInstance> getServiceInstances(final Duration duration,
final String serviceId) throws IOException, ParseException {
long startTimestamp = DurationUtils.INSTANCE.toTimestamp(duration.getStep(), duration.getStart());
long endTimestamp = DurationUtils.INSTANCE.toTimestamp(duration.getStep(), duration.getEnd());
return getMetadataQueryService().getServiceInstances(startTimestamp, endTimestamp, id);
return getMetadataQueryService().getServiceInstances(startTimestamp, endTimestamp, serviceId);
}
public List<Endpoint> searchEndpoint(final String keyword, final String serviceId, final int limit) {
public List<Endpoint> searchEndpoint(final String keyword, final String serviceId,
final int limit) throws IOException {
return getMetadataQueryService().searchEndpoint(keyword, serviceId, limit);
}
}
Subproject commit 9eafa5a6c5b3b9a61002391485799ed89be96b9c
Subproject commit f2e54c2cd3f7fdb2cdc975cf791e1bb1d9aab96e
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base;
import org.apache.skywalking.oap.server.core.Const;
/**
* @author peng-yongsheng
*/
public enum MatchCNameBuilder {
INSTANCE;
public String build(String termCName) {
return termCName + Const.ID_SPLIT + "match";
}
}
......@@ -56,7 +56,7 @@ public class StorageEsInstaller extends ModelInstaller {
}
}
@Override protected void columnCheck(Client client, Model tableDefine) throws StorageException {
@Override protected void columnCheck(Client client, Model tableDefine) {
}
......@@ -104,7 +104,7 @@ public class StorageEsInstaller extends ModelInstaller {
.put("index.number_of_shards", indexShardsNumber)
.put("index.number_of_replicas", indexReplicasNumber)
.put("index.refresh_interval", "3s")
.put("analysis.analyzer.collector_analyzer.type", "stop")
.put("analysis.analyzer.oap_analyzer.type", "stop")
.build();
}
......@@ -117,10 +117,24 @@ public class StorageEsInstaller extends ModelInstaller {
.startObject("properties");
for (ModelColumn columnDefine : tableDefine.getColumns()) {
mappingBuilder
.startObject(columnDefine.getColumnName().getName())
.field("type", mapping.transform(columnDefine.getType()))
.endObject();
if (columnDefine.isMatchQuery()) {
String matchCName = MatchCNameBuilder.INSTANCE.build(columnDefine.getColumnName().getName());
mappingBuilder
.startObject(columnDefine.getColumnName().getName())
.field("type", mapping.transform(columnDefine.getType()))
.field("copy_to", matchCName)
.endObject()
.startObject(matchCName)
.field("type", "text")
.field("analyzer", "oap_analyzer")
.endObject();
} else {
mappingBuilder
.startObject(columnDefine.getColumnName().getName())
.field("type", mapping.transform(columnDefine.getType()))
.endObject();
}
}
mappingBuilder
......
......@@ -20,13 +20,14 @@ package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query;
import java.io.IOException;
import java.util.*;
import org.apache.skywalking.oap.server.core.query.entity.Service;
import org.apache.skywalking.oap.server.core.query.entity.*;
import org.apache.skywalking.oap.server.core.register.*;
import org.apache.skywalking.oap.server.core.source.DetectPoint;
import org.apache.skywalking.oap.server.core.storage.query.IMetadataQueryDAO;
import org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
import org.apache.skywalking.oap.server.library.util.BooleanUtils;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.EsDAO;
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.*;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
......@@ -45,20 +46,7 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery();
boolQuery1.must().add(QueryBuilders.rangeQuery(ServiceInventory.HEARTBEAT_TIME).gte(endTimestamp));
boolQuery1.must().add(QueryBuilders.rangeQuery(ServiceInventory.REGISTER_TIME).lte(endTimestamp));
BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery();
boolQuery2.must().add(QueryBuilders.rangeQuery(ServiceInventory.REGISTER_TIME).lte(endTimestamp));
boolQuery2.must().add(QueryBuilders.rangeQuery(ServiceInventory.HEARTBEAT_TIME).gte(startTimestamp));
BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
timeBoolQuery.should().add(boolQuery1);
timeBoolQuery.should().add(boolQuery2);
boolQueryBuilder.must().add(timeBoolQuery);
boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, endTimestamp));
boolQueryBuilder.must().add(QueryBuilders.termQuery(ServiceInventory.IS_ADDRESS, BooleanUtils.FALSE));
......@@ -73,20 +61,7 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery();
boolQuery1.must().add(QueryBuilders.rangeQuery(EndpointInventory.HEARTBEAT_TIME).gte(endTimestamp));
boolQuery1.must().add(QueryBuilders.rangeQuery(EndpointInventory.REGISTER_TIME).lte(endTimestamp));
BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery();
boolQuery2.must().add(QueryBuilders.rangeQuery(EndpointInventory.REGISTER_TIME).lte(endTimestamp));
boolQuery2.must().add(QueryBuilders.rangeQuery(EndpointInventory.HEARTBEAT_TIME).gte(startTimestamp));
BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
timeBoolQuery.should().add(boolQuery1);
timeBoolQuery.should().add(boolQuery2);
boolQueryBuilder.must().add(timeBoolQuery);
boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, endTimestamp));
boolQueryBuilder.must().add(QueryBuilders.termQuery(EndpointInventory.DETECT_POINT, DetectPoint.SERVER.ordinal()));
......@@ -101,20 +76,7 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery();
boolQuery1.must().add(QueryBuilders.rangeQuery(NetworkAddressInventory.HEARTBEAT_TIME).gte(endTimestamp));
boolQuery1.must().add(QueryBuilders.rangeQuery(NetworkAddressInventory.REGISTER_TIME).lte(endTimestamp));
BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery();
boolQuery2.must().add(QueryBuilders.rangeQuery(NetworkAddressInventory.REGISTER_TIME).lte(endTimestamp));
boolQuery2.must().add(QueryBuilders.rangeQuery(NetworkAddressInventory.HEARTBEAT_TIME).gte(startTimestamp));
BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
timeBoolQuery.should().add(boolQuery1);
timeBoolQuery.should().add(boolQuery2);
boolQueryBuilder.must().add(timeBoolQuery);
boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, endTimestamp));
boolQueryBuilder.must().add(QueryBuilders.termQuery(NetworkAddressInventory.SRC_LAYER, srcLayer));
......@@ -131,28 +93,106 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, endTimestamp));
BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery();
boolQuery1.must().add(QueryBuilders.rangeQuery(ServiceInventory.HEARTBEAT_TIME).gte(endTimestamp));
boolQuery1.must().add(QueryBuilders.rangeQuery(ServiceInventory.REGISTER_TIME).lte(endTimestamp));
boolQueryBuilder.must().add(QueryBuilders.termQuery(ServiceInventory.IS_ADDRESS, BooleanUtils.FALSE));
BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery();
boolQuery2.must().add(QueryBuilders.rangeQuery(ServiceInventory.REGISTER_TIME).lte(endTimestamp));
boolQuery2.must().add(QueryBuilders.rangeQuery(ServiceInventory.HEARTBEAT_TIME).gte(startTimestamp));
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.size(100);
BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
timeBoolQuery.should().add(boolQuery1);
timeBoolQuery.should().add(boolQuery2);
SearchResponse response = getClient().search(ServiceInventory.MODEL_NAME, sourceBuilder);
boolQueryBuilder.must().add(timeBoolQuery);
return buildServices(response);
}
boolQueryBuilder.must().add(QueryBuilders.termQuery(ServiceInventory.IS_ADDRESS, BooleanUtils.FALSE));
@Override public List<Service> searchServices(long startTimestamp, long endTimestamp,
String keyword) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, endTimestamp));
String matchCName = MatchCNameBuilder.INSTANCE.build(ServiceInventory.NAME);
boolQueryBuilder.must().add(QueryBuilders.matchQuery(matchCName, keyword));
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.size(100);
SearchResponse response = getClient().search(ServiceInventory.MODEL_NAME, sourceBuilder);
return buildServices(response);
}
@Override
public Service searchService(String serviceCode) throws IOException {
GetResponse response = getClient().get(ServiceInventory.MODEL_NAME, ServiceInventory.buildId(serviceCode));
if (response.isExists()) {
Service service = new Service();
service.setId(String.valueOf(response.getSource().get(ServiceInventory.SEQUENCE)));
service.setName((String)response.getSource().get(ServiceInventory.NAME));
return service;
} else {
return null;
}
}
@Override public List<Endpoint> searchEndpoint(String keyword, String serviceId,
int limit) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must().add(QueryBuilders.termQuery(EndpointInventory.SERVICE_ID, serviceId));
String matchCName = MatchCNameBuilder.INSTANCE.build(EndpointInventory.NAME);
boolQueryBuilder.must().add(QueryBuilders.matchQuery(matchCName, keyword));
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.size(limit);
SearchResponse response = getClient().search(EndpointInventory.MODEL_NAME, sourceBuilder);
List<Endpoint> endpoints = new ArrayList<>();
for (SearchHit searchHit : response.getHits()) {
Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
Endpoint endpoint = new Endpoint();
endpoint.setId(String.valueOf(sourceAsMap.get(EndpointInventory.SEQUENCE)));
endpoint.setName((String)sourceAsMap.get(EndpointInventory.NAME));
endpoints.add(endpoint);
}
return endpoints;
}
@Override public List<ServiceInstance> getServiceInstances(long startTimestamp, long endTimestamp,
String serviceId) throws IOException {
SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, endTimestamp));
boolQueryBuilder.must().add(QueryBuilders.termQuery(ServiceInstanceInventory.SERVICE_ID, serviceId));
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.size(100);
SearchResponse response = getClient().search(ServiceInstanceInventory.MODEL_NAME, sourceBuilder);
List<ServiceInstance> serviceInstances = new ArrayList<>();
for (SearchHit searchHit : response.getHits()) {
Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
ServiceInstance serviceInstance = new ServiceInstance();
serviceInstance.setId(String.valueOf(sourceAsMap.get(ServiceInstanceInventory.SEQUENCE)));
serviceInstance.setName((String)sourceAsMap.get(ServiceInstanceInventory.NAME));
int languageId = ((Number)sourceAsMap.get(ServiceInstanceInventory.LANGUAGE)).intValue();
serviceInstance.setLanguage(LanguageTrans.INSTANCE.value(languageId));
serviceInstances.add(serviceInstance);
}
return serviceInstances;
}
private List<Service> buildServices(SearchResponse response) {
List<Service> services = new ArrayList<>();
for (SearchHit searchHit : response.getHits()) {
Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
......@@ -165,4 +205,20 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
return services;
}
private BoolQueryBuilder timeRangeQueryBuild(long startTimestamp, long endTimestamp) {
BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery();
boolQuery1.must().add(QueryBuilders.rangeQuery(RegisterSource.HEARTBEAT_TIME).gte(endTimestamp));
boolQuery1.must().add(QueryBuilders.rangeQuery(RegisterSource.REGISTER_TIME).lte(endTimestamp));
BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery();
boolQuery2.must().add(QueryBuilders.rangeQuery(RegisterSource.REGISTER_TIME).lte(endTimestamp));
boolQuery2.must().add(QueryBuilders.rangeQuery(RegisterSource.HEARTBEAT_TIME).gte(startTimestamp));
BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
timeBoolQuery.should().add(boolQuery1);
timeBoolQuery.should().add(boolQuery2);
return timeBoolQuery;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册