diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java index 537846beba3457c9f0dadaa2754b14e5a4e20648..2f1e82e2c7d72da46fc4c089819e745a82264eff 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/ui/InstanceEsUIDAO.java @@ -106,10 +106,17 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); - //TODO second + BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery(); + boolQuery1.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(endSecondTimeBucket)); + boolQuery1.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).lte(endSecondTimeBucket)); + + BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery(); + boolQuery2.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).lte(endSecondTimeBucket)); + boolQuery2.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket)); + BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery(); - timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); - timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); + timeBoolQuery.should().add(boolQuery1); + timeBoolQuery.should().add(boolQuery2); boolQueryBuilder.must().add(timeBoolQuery); @@ -172,9 +179,17 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { } boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); + BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery(); + boolQuery1.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(endSecondTimeBucket)); + boolQuery1.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).lte(endSecondTimeBucket)); + + BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery(); + boolQuery2.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).lte(endSecondTimeBucket)); + boolQuery2.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket)); + BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery(); - timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); - timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); + timeBoolQuery.should().add(boolQuery1); + timeBoolQuery.should().add(boolQuery2); boolQuery.must().add(timeBoolQuery); @@ -198,10 +213,17 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId)); boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); - //TODO second + BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery(); + boolQuery1.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(endSecondTimeBucket)); + boolQuery1.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).lte(endSecondTimeBucket)); + + BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery(); + boolQuery2.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).lte(endSecondTimeBucket)); + boolQuery2.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket)); + BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery(); - timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); - timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket)); + timeBoolQuery.should().add(boolQuery1); + timeBoolQuery.should().add(boolQuery2); boolQuery.must().add(timeBoolQuery); searchRequestBuilder.setQuery(boolQuery); diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/DurationTestCase.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/DurationTestCase.java new file mode 100644 index 0000000000000000000000000000000000000000..28009c7a7279be48c82981b85a20545d38704404 --- /dev/null +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/test/java/org/apache/skywalking/apm/collector/ui/utils/DurationTestCase.java @@ -0,0 +1,44 @@ +/* + * 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.apm.collector.ui.utils; + +import org.junit.Assert; + +/** + * @author peng-yongsheng + */ +public class DurationTestCase { + + @org.junit.Test + public void test() { + Assert.assertEquals(true, expression(80, 150)); + Assert.assertEquals(true, expression(80, 250)); + Assert.assertEquals(true, expression(150, 250)); + Assert.assertEquals(true, expression(120, 180)); + Assert.assertEquals(false, expression(70, 90)); + Assert.assertEquals(false, expression(250, 300)); + } + + private boolean expression(int start, int end) { + int register = 100; + int heart = 200; + + return (heart > end && register <= end) || (register <= end && heart >= start); + } +}