support min function. (#4072)
* support min function. * fix logical bug and update test case. * the same here.
This commit is contained in:
parent
a4c39777e0
commit
a6d0366c22
|
|
@ -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() {
|
||||
}
|
||||
}
|
||||
|
|
@ -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() {
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue