Meta data query implementation are all finished. (#1692)
This commit is contained in:
parent
7d3e699efa
commit
e83e175a42
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* 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 {
|
||||
public Service searchService(final String serviceCode) throws IOException {
|
||||
return getMetadataQueryService().searchService(serviceCode);
|
||||
}
|
||||
|
||||
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().searchService(startTimestamp, endTimestamp, serviceCode);
|
||||
return getMetadataQueryService().getServiceInstances(startTimestamp, endTimestamp, serviceId);
|
||||
}
|
||||
|
||||
public List<ServiceInstance> getServiceInstances(final Duration duration, final String id) throws 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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 9eafa5a6c5b3b9a61002391485799ed89be96b9c
|
||||
Subproject commit f2e54c2cd3f7fdb2cdc975cf791e1bb1d9aab96e
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* 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,20 +93,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));
|
||||
|
||||
|
|
@ -153,6 +102,97 @@ public class MetadataQueryEsDAO extends EsDAO implements IMetadataQueryDAO {
|
|||
|
||||
SearchResponse response = getClient().search(ServiceInventory.MODEL_NAME, sourceBuilder);
|
||||
|
||||
return buildServices(response);
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue