support min function. (#4072)

* support min function.

* fix logical bug and update test case.

* the same here.
This commit is contained in:
Jared Tan 2019-12-16 22:20:30 +08:00 committed by 吴晟 Wu Sheng
parent a4c39777e0
commit a6d0366c22
4 changed files with 201 additions and 2 deletions

View File

@ -0,0 +1,53 @@
/*
* 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.analysis.metrics;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Entrance;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.MetricsFunction;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.SourceFrom;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
/**
* @author jian.tan
*/
@MetricsFunction(functionName = "minDouble")
public abstract class MinDoubleMetrics extends Metrics implements DoubleValueHolder {
protected static final String VALUE = "value";
@Getter @Setter @Column(columnName = VALUE, isValue = true) private double value = Double.MAX_VALUE;
@Entrance
public final void combine(@SourceFrom double count) {
if (count < this.value) {
this.value = count;
}
}
@Override public final void combine(Metrics metrics) {
MinDoubleMetrics minDoubleMetrics = (MinDoubleMetrics)metrics;
combine(minDoubleMetrics.value);
}
@Override public void calculate() {
}
}

View File

@ -0,0 +1,53 @@
/*
* 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.analysis.metrics;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.Entrance;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.MetricsFunction;
import org.apache.skywalking.oap.server.core.analysis.metrics.annotation.SourceFrom;
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
/**
* @author jian.tan
*/
@MetricsFunction(functionName = "min")
public abstract class MinLongMetrics extends Metrics implements LongValueHolder {
protected static final String VALUE = "value";
@Getter @Setter @Column(columnName = VALUE, isValue = true) private long value = Long.MAX_VALUE;
@Entrance
public final void combine(@SourceFrom long count) {
if (count < this.value) {
this.value = count;
}
}
@Override public final void combine(Metrics metrics) {
MinLongMetrics minLongMetrics = (MinLongMetrics)metrics;
combine(minLongMetrics.value);
}
@Override public void calculate() {
}
}

View File

@ -44,8 +44,8 @@ public class MaxLongMetricsTest {
impl.combine(5);
MaxLongMetricsImpl impl2 = new MaxLongMetricsImpl();
impl.combine(2);
impl.combine(6);
impl2.combine(2);
impl2.combine(6);
impl.combine(impl2);
Assert.assertEquals(10, impl.getValue());

View File

@ -0,0 +1,93 @@
/*
* 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.analysis.metrics;
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
import org.junit.Assert;
import org.junit.Test;
/**
* @author jian.tan
*/
public class MinLongMetricsTest {
@Test
public void testEntranceCombine() {
MinLongMetricsImpl impl = new MinLongMetricsImpl();
impl.combine(10);
impl.combine(5);
impl.combine(20);
impl.calculate();
Assert.assertEquals(5, impl.getValue());
MinLongMetricsImpl impl2 = new MinLongMetricsImpl();
impl2.combine(10);
impl2.combine(0);
impl2.combine(10000);
impl2.calculate();
Assert.assertEquals(0, impl2.getValue());
}
@Test
public void testSelfCombine() {
MinLongMetricsImpl impl = new MinLongMetricsImpl();
impl.combine(10);
impl.combine(5);
MinLongMetricsImpl impl2 = new MinLongMetricsImpl();
impl2.combine(2);
impl2.combine(6);
impl.combine(impl2);
Assert.assertEquals(2, impl.getValue());
}
public class MinLongMetricsImpl extends MinLongMetrics {
@Override public String id() {
return null;
}
@Override public Metrics toHour() {
return null;
}
@Override public Metrics toDay() {
return null;
}
@Override public Metrics toMonth() {
return null;
}
@Override public int remoteHashCode() {
return 0;
}
@Override public void deserialize(RemoteData remoteData) {
}
@Override public RemoteData.Builder serialize() {
return null;
}
}
}