Provide Pxx(p99,p95,p90,p75,p50) indicators and All dispatcher (#1654)
* Add 3 cases for existed indicators. * Add Pxx indicator. * Support All in trace analysis listener. * Fix CI and add P99/95/90/75/50 to source ALL.
This commit is contained in:
parent
9a2ac640d3
commit
5a55b9ba1b
|
|
@ -19,6 +19,7 @@
|
|||
package org.apache.skywalking.oap.server.core.analysis;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.skywalking.oap.server.core.analysis.generated.all.AllDispatcher;
|
||||
import org.apache.skywalking.oap.server.core.analysis.generated.endpoint.EndpointDispatcher;
|
||||
import org.apache.skywalking.oap.server.core.analysis.generated.endpointrelation.EndpointRelationDispatcher;
|
||||
import org.apache.skywalking.oap.server.core.analysis.generated.service.ServiceDispatcher;
|
||||
|
|
@ -45,6 +46,8 @@ public class DispatcherManager {
|
|||
public DispatcherManager() {
|
||||
this.dispatcherMap = new HashMap<>();
|
||||
|
||||
this.dispatcherMap.put(Scope.All, new AllDispatcher());
|
||||
|
||||
this.dispatcherMap.put(Scope.Service, new ServiceDispatcher());
|
||||
this.dispatcherMap.put(Scope.ServiceInstance, new ServiceInstanceDispatcher());
|
||||
this.dispatcherMap.put(Scope.Endpoint, new EndpointDispatcher());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* 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.generated.all;
|
||||
|
||||
import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
|
||||
import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
|
||||
import org.apache.skywalking.oap.server.core.source.*;
|
||||
|
||||
/**
|
||||
* This class is auto generated. Please don't change this class manually.
|
||||
*
|
||||
* @author Observability Analysis Language code generator
|
||||
*/
|
||||
public class AllDispatcher implements SourceDispatcher<All> {
|
||||
|
||||
@Override public void dispatch(All source) {
|
||||
doAllP99(source);
|
||||
doAllP95(source);
|
||||
doAllP90(source);
|
||||
doAllP75(source);
|
||||
doAllP50(source);
|
||||
}
|
||||
|
||||
private void doAllP99(All source) {
|
||||
AllP99Indicator indicator = new AllP99Indicator();
|
||||
|
||||
|
||||
indicator.setTimeBucket(source.getTimeBucket());
|
||||
indicator.combine(source.getLatency(), 10);
|
||||
IndicatorProcess.INSTANCE.in(indicator);
|
||||
}
|
||||
private void doAllP95(All source) {
|
||||
AllP95Indicator indicator = new AllP95Indicator();
|
||||
|
||||
|
||||
indicator.setTimeBucket(source.getTimeBucket());
|
||||
indicator.combine(source.getLatency(), 10);
|
||||
IndicatorProcess.INSTANCE.in(indicator);
|
||||
}
|
||||
private void doAllP90(All source) {
|
||||
AllP90Indicator indicator = new AllP90Indicator();
|
||||
|
||||
|
||||
indicator.setTimeBucket(source.getTimeBucket());
|
||||
indicator.combine(source.getLatency(), 10);
|
||||
IndicatorProcess.INSTANCE.in(indicator);
|
||||
}
|
||||
private void doAllP75(All source) {
|
||||
AllP75Indicator indicator = new AllP75Indicator();
|
||||
|
||||
|
||||
indicator.setTimeBucket(source.getTimeBucket());
|
||||
indicator.combine(source.getLatency(), 10);
|
||||
IndicatorProcess.INSTANCE.in(indicator);
|
||||
}
|
||||
private void doAllP50(All source) {
|
||||
AllP50Indicator indicator = new AllP50Indicator();
|
||||
|
||||
|
||||
indicator.setTimeBucket(source.getTimeBucket());
|
||||
indicator.combine(source.getLatency(), 10);
|
||||
IndicatorProcess.INSTANCE.in(indicator);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* 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.generated.all;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.*;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
|
||||
import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.apache.skywalking.oap.server.core.storage.annotation.*;
|
||||
import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
|
||||
import org.apache.skywalking.oap.server.core.source.Scope;
|
||||
|
||||
/**
|
||||
* This class is auto generated. Please don't change this class manually.
|
||||
*
|
||||
* @author Observability Analysis Language code generator
|
||||
*/
|
||||
@IndicatorType
|
||||
@StreamData
|
||||
@StorageEntity(name = "all_p50", builder = AllP50Indicator.Builder.class)
|
||||
public class AllP50Indicator extends P50Indicator implements AlarmSupported {
|
||||
|
||||
|
||||
@Override public String id() {
|
||||
String splitJointId = String.valueOf(getTimeBucket());
|
||||
return splitJointId;
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
int result = 17;
|
||||
result = 31 * result + (int)getTimeBucket();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
|
||||
AllP50Indicator indicator = (AllP50Indicator)obj;
|
||||
|
||||
if (getTimeBucket() != indicator.getTimeBucket())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
|
||||
|
||||
remoteBuilder.setDataLongs(0, getTimeBucket());
|
||||
|
||||
|
||||
remoteBuilder.setDataIntegers(0, getValue());
|
||||
remoteBuilder.setDataIntegers(1, getPrecision());
|
||||
getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
|
||||
|
||||
return remoteBuilder;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
setTimeBucket(remoteData.getDataLongs(0));
|
||||
|
||||
|
||||
setValue(remoteData.getDataIntegers(0));
|
||||
setPrecision(remoteData.getDataIntegers(1));
|
||||
|
||||
setDetailGroup(new ArrayList<>(30));
|
||||
remoteData.getDataIntLongPairListList().forEach(element -> {
|
||||
getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override public AlarmMeta getAlarmMeta() {
|
||||
return new AlarmMeta("All_p50", Scope.All);
|
||||
}
|
||||
|
||||
public static class Builder implements StorageBuilder<AllP50Indicator> {
|
||||
|
||||
@Override public Map<String, Object> data2Map(AllP50Indicator storageData) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("value", storageData.getValue());
|
||||
map.put("precision", storageData.getPrecision());
|
||||
map.put("detail_group", storageData.getDetailGroup());
|
||||
map.put("time_bucket", storageData.getTimeBucket());
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override public AllP50Indicator map2Data(Map<String, Object> dbMap) {
|
||||
AllP50Indicator indicator = new AllP50Indicator();
|
||||
indicator.setValue(((Number)dbMap.get("value")).intValue());
|
||||
indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
|
||||
indicator.setDetailGroup((List)dbMap.get("detail_group"));
|
||||
indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
|
||||
return indicator;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* 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.generated.all;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.*;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
|
||||
import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.apache.skywalking.oap.server.core.storage.annotation.*;
|
||||
import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
|
||||
import org.apache.skywalking.oap.server.core.source.Scope;
|
||||
|
||||
/**
|
||||
* This class is auto generated. Please don't change this class manually.
|
||||
*
|
||||
* @author Observability Analysis Language code generator
|
||||
*/
|
||||
@IndicatorType
|
||||
@StreamData
|
||||
@StorageEntity(name = "all_p75", builder = AllP75Indicator.Builder.class)
|
||||
public class AllP75Indicator extends P75Indicator implements AlarmSupported {
|
||||
|
||||
|
||||
@Override public String id() {
|
||||
String splitJointId = String.valueOf(getTimeBucket());
|
||||
return splitJointId;
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
int result = 17;
|
||||
result = 31 * result + (int)getTimeBucket();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
|
||||
AllP75Indicator indicator = (AllP75Indicator)obj;
|
||||
|
||||
if (getTimeBucket() != indicator.getTimeBucket())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
|
||||
|
||||
remoteBuilder.setDataLongs(0, getTimeBucket());
|
||||
|
||||
|
||||
remoteBuilder.setDataIntegers(0, getValue());
|
||||
remoteBuilder.setDataIntegers(1, getPrecision());
|
||||
getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
|
||||
|
||||
return remoteBuilder;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
setTimeBucket(remoteData.getDataLongs(0));
|
||||
|
||||
|
||||
setValue(remoteData.getDataIntegers(0));
|
||||
setPrecision(remoteData.getDataIntegers(1));
|
||||
|
||||
setDetailGroup(new ArrayList<>(30));
|
||||
remoteData.getDataIntLongPairListList().forEach(element -> {
|
||||
getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override public AlarmMeta getAlarmMeta() {
|
||||
return new AlarmMeta("All_p75", Scope.All);
|
||||
}
|
||||
|
||||
public static class Builder implements StorageBuilder<AllP75Indicator> {
|
||||
|
||||
@Override public Map<String, Object> data2Map(AllP75Indicator storageData) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("value", storageData.getValue());
|
||||
map.put("precision", storageData.getPrecision());
|
||||
map.put("detail_group", storageData.getDetailGroup());
|
||||
map.put("time_bucket", storageData.getTimeBucket());
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override public AllP75Indicator map2Data(Map<String, Object> dbMap) {
|
||||
AllP75Indicator indicator = new AllP75Indicator();
|
||||
indicator.setValue(((Number)dbMap.get("value")).intValue());
|
||||
indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
|
||||
indicator.setDetailGroup((List)dbMap.get("detail_group"));
|
||||
indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
|
||||
return indicator;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* 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.generated.all;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.*;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
|
||||
import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.apache.skywalking.oap.server.core.storage.annotation.*;
|
||||
import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
|
||||
import org.apache.skywalking.oap.server.core.source.Scope;
|
||||
|
||||
/**
|
||||
* This class is auto generated. Please don't change this class manually.
|
||||
*
|
||||
* @author Observability Analysis Language code generator
|
||||
*/
|
||||
@IndicatorType
|
||||
@StreamData
|
||||
@StorageEntity(name = "all_p90", builder = AllP90Indicator.Builder.class)
|
||||
public class AllP90Indicator extends P90Indicator implements AlarmSupported {
|
||||
|
||||
|
||||
@Override public String id() {
|
||||
String splitJointId = String.valueOf(getTimeBucket());
|
||||
return splitJointId;
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
int result = 17;
|
||||
result = 31 * result + (int)getTimeBucket();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
|
||||
AllP90Indicator indicator = (AllP90Indicator)obj;
|
||||
|
||||
if (getTimeBucket() != indicator.getTimeBucket())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
|
||||
|
||||
remoteBuilder.setDataLongs(0, getTimeBucket());
|
||||
|
||||
|
||||
remoteBuilder.setDataIntegers(0, getValue());
|
||||
remoteBuilder.setDataIntegers(1, getPrecision());
|
||||
getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
|
||||
|
||||
return remoteBuilder;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
setTimeBucket(remoteData.getDataLongs(0));
|
||||
|
||||
|
||||
setValue(remoteData.getDataIntegers(0));
|
||||
setPrecision(remoteData.getDataIntegers(1));
|
||||
|
||||
setDetailGroup(new ArrayList<>(30));
|
||||
remoteData.getDataIntLongPairListList().forEach(element -> {
|
||||
getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override public AlarmMeta getAlarmMeta() {
|
||||
return new AlarmMeta("All_p90", Scope.All);
|
||||
}
|
||||
|
||||
public static class Builder implements StorageBuilder<AllP90Indicator> {
|
||||
|
||||
@Override public Map<String, Object> data2Map(AllP90Indicator storageData) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("value", storageData.getValue());
|
||||
map.put("precision", storageData.getPrecision());
|
||||
map.put("detail_group", storageData.getDetailGroup());
|
||||
map.put("time_bucket", storageData.getTimeBucket());
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override public AllP90Indicator map2Data(Map<String, Object> dbMap) {
|
||||
AllP90Indicator indicator = new AllP90Indicator();
|
||||
indicator.setValue(((Number)dbMap.get("value")).intValue());
|
||||
indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
|
||||
indicator.setDetailGroup((List)dbMap.get("detail_group"));
|
||||
indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
|
||||
return indicator;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* 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.generated.all;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.*;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
|
||||
import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.apache.skywalking.oap.server.core.storage.annotation.*;
|
||||
import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
|
||||
import org.apache.skywalking.oap.server.core.source.Scope;
|
||||
|
||||
/**
|
||||
* This class is auto generated. Please don't change this class manually.
|
||||
*
|
||||
* @author Observability Analysis Language code generator
|
||||
*/
|
||||
@IndicatorType
|
||||
@StreamData
|
||||
@StorageEntity(name = "all_p95", builder = AllP95Indicator.Builder.class)
|
||||
public class AllP95Indicator extends P95Indicator implements AlarmSupported {
|
||||
|
||||
|
||||
@Override public String id() {
|
||||
String splitJointId = String.valueOf(getTimeBucket());
|
||||
return splitJointId;
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
int result = 17;
|
||||
result = 31 * result + (int)getTimeBucket();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
|
||||
AllP95Indicator indicator = (AllP95Indicator)obj;
|
||||
|
||||
if (getTimeBucket() != indicator.getTimeBucket())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
|
||||
|
||||
remoteBuilder.setDataLongs(0, getTimeBucket());
|
||||
|
||||
|
||||
remoteBuilder.setDataIntegers(0, getValue());
|
||||
remoteBuilder.setDataIntegers(1, getPrecision());
|
||||
getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
|
||||
|
||||
return remoteBuilder;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
setTimeBucket(remoteData.getDataLongs(0));
|
||||
|
||||
|
||||
setValue(remoteData.getDataIntegers(0));
|
||||
setPrecision(remoteData.getDataIntegers(1));
|
||||
|
||||
setDetailGroup(new ArrayList<>(30));
|
||||
remoteData.getDataIntLongPairListList().forEach(element -> {
|
||||
getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override public AlarmMeta getAlarmMeta() {
|
||||
return new AlarmMeta("All_p95", Scope.All);
|
||||
}
|
||||
|
||||
public static class Builder implements StorageBuilder<AllP95Indicator> {
|
||||
|
||||
@Override public Map<String, Object> data2Map(AllP95Indicator storageData) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("value", storageData.getValue());
|
||||
map.put("precision", storageData.getPrecision());
|
||||
map.put("detail_group", storageData.getDetailGroup());
|
||||
map.put("time_bucket", storageData.getTimeBucket());
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override public AllP95Indicator map2Data(Map<String, Object> dbMap) {
|
||||
AllP95Indicator indicator = new AllP95Indicator();
|
||||
indicator.setValue(((Number)dbMap.get("value")).intValue());
|
||||
indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
|
||||
indicator.setDetailGroup((List)dbMap.get("detail_group"));
|
||||
indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
|
||||
return indicator;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* 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.generated.all;
|
||||
|
||||
import java.util.*;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmMeta;
|
||||
import org.apache.skywalking.oap.server.core.alarm.AlarmSupported;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.*;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
|
||||
import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.apache.skywalking.oap.server.core.storage.annotation.*;
|
||||
import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
|
||||
import org.apache.skywalking.oap.server.core.source.Scope;
|
||||
|
||||
/**
|
||||
* This class is auto generated. Please don't change this class manually.
|
||||
*
|
||||
* @author Observability Analysis Language code generator
|
||||
*/
|
||||
@IndicatorType
|
||||
@StreamData
|
||||
@StorageEntity(name = "all_p99", builder = AllP99Indicator.Builder.class)
|
||||
public class AllP99Indicator extends P99Indicator implements AlarmSupported {
|
||||
|
||||
|
||||
@Override public String id() {
|
||||
String splitJointId = String.valueOf(getTimeBucket());
|
||||
return splitJointId;
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
int result = 17;
|
||||
result = 31 * result + (int)getTimeBucket();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
|
||||
AllP99Indicator indicator = (AllP99Indicator)obj;
|
||||
|
||||
if (getTimeBucket() != indicator.getTimeBucket())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
|
||||
|
||||
remoteBuilder.setDataLongs(0, getTimeBucket());
|
||||
|
||||
|
||||
remoteBuilder.setDataIntegers(0, getValue());
|
||||
remoteBuilder.setDataIntegers(1, getPrecision());
|
||||
getDetailGroup().forEach(element -> remoteBuilder.addDataIntLongPairList(element.serialize()));
|
||||
|
||||
return remoteBuilder;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
setTimeBucket(remoteData.getDataLongs(0));
|
||||
|
||||
|
||||
setValue(remoteData.getDataIntegers(0));
|
||||
setPrecision(remoteData.getDataIntegers(1));
|
||||
|
||||
setDetailGroup(new ArrayList<>(30));
|
||||
remoteData.getDataIntLongPairListList().forEach(element -> {
|
||||
getDetailGroup().add(new IntKeyLongValue(element.getKey(), element.getValue()));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override public AlarmMeta getAlarmMeta() {
|
||||
return new AlarmMeta("All_p99", Scope.All);
|
||||
}
|
||||
|
||||
public static class Builder implements StorageBuilder<AllP99Indicator> {
|
||||
|
||||
@Override public Map<String, Object> data2Map(AllP99Indicator storageData) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("value", storageData.getValue());
|
||||
map.put("precision", storageData.getPrecision());
|
||||
map.put("detail_group", storageData.getDetailGroup());
|
||||
map.put("time_bucket", storageData.getTimeBucket());
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override public AllP99Indicator map2Data(Map<String, Object> dbMap) {
|
||||
AllP99Indicator indicator = new AllP99Indicator();
|
||||
indicator.setValue(((Number)dbMap.get("value")).intValue());
|
||||
indicator.setPrecision(((Number)dbMap.get("precision")).intValue());
|
||||
indicator.setDetailGroup((List)dbMap.get("detail_group"));
|
||||
indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
|
||||
return indicator;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
import java.util.Objects;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.IntKeyLongValuePair;
|
||||
|
||||
/**
|
||||
* IntKeyLongValue is a common bean, with key in Int and value in Long
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class IntKeyLongValue implements Comparable<IntKeyLongValue> {
|
||||
private int key;
|
||||
private long value;
|
||||
|
||||
public IntKeyLongValue() {
|
||||
}
|
||||
|
||||
public IntKeyLongValue(int key, long value) {
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public void addValue(long value) {
|
||||
this.value += value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(IntKeyLongValue o) {
|
||||
return key - o.key;
|
||||
}
|
||||
|
||||
@Override public boolean equals(Object o) {
|
||||
if (this == o)
|
||||
return true;
|
||||
if (o == null || getClass() != o.getClass())
|
||||
return false;
|
||||
IntKeyLongValue value = (IntKeyLongValue)o;
|
||||
return key == value.key;
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
return Objects.hash(key);
|
||||
}
|
||||
|
||||
public IntKeyLongValuePair serialize() {
|
||||
return IntKeyLongValuePair.newBuilder().setKey(key).setValue(value).build();
|
||||
}
|
||||
|
||||
public void deserialize(IntKeyLongValuePair pair) {
|
||||
this.key = pair.getKey();
|
||||
this.value = pair.getValue();
|
||||
}
|
||||
}
|
||||
|
|
@ -16,27 +16,15 @@
|
|||
*
|
||||
*/
|
||||
|
||||
package org.apache.skywalking.oap.server.core.analysis.indicator.define;
|
||||
|
||||
import lombok.*;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.LongAvgIndicator;
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
package org.apache.skywalking.oap.server.core.analysis.indicator;
|
||||
|
||||
/**
|
||||
* @author peng-yongsheng
|
||||
* P50
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public class TestLongAvgIndicator extends LongAvgIndicator {
|
||||
|
||||
@Setter @Getter private int id;
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
}
|
||||
|
||||
@Override public String id() {
|
||||
return null;
|
||||
public abstract class P50Indicator extends PxxIndicator {
|
||||
public P50Indicator() {
|
||||
super(50);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
/**
|
||||
* P75
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public abstract class P75Indicator extends PxxIndicator {
|
||||
public P75Indicator() {
|
||||
super(75);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
/**
|
||||
* P90
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public abstract class P90Indicator extends PxxIndicator {
|
||||
public P90Indicator() {
|
||||
super(90);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
/**
|
||||
* P95
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public abstract class P95Indicator extends PxxIndicator {
|
||||
public P95Indicator() {
|
||||
super(95);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
/**
|
||||
* P99
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
public abstract class P99Indicator extends PxxIndicator {
|
||||
public P99Indicator() {
|
||||
super(99);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Arg;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Entrance;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorOperator;
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.SourceFrom;
|
||||
import org.apache.skywalking.oap.server.core.storage.annotation.Column;
|
||||
|
||||
/**
|
||||
* PxxIndicator is a parent indicator for p99/p95/p90/p75/p50 indicators. P(xx) indicator is also for P(xx) percentile.
|
||||
*
|
||||
* A percentile (or a centile) is a measure used in statistics indicating the value below which a given percentage of
|
||||
* observations in a group of observations fall. For example, the 20th percentile is the value (or score) below which
|
||||
* 20% of the observations may be found.
|
||||
*
|
||||
* @author wusheng
|
||||
*/
|
||||
@IndicatorOperator
|
||||
public abstract class PxxIndicator extends Indicator implements IntValueHolder {
|
||||
protected static final String DETAIL_GROUP = "detail_group";
|
||||
protected static final String VALUE = "value";
|
||||
protected static final String PRECISION = "precision";
|
||||
|
||||
@Getter @Setter @Column(columnName = VALUE) private int value;
|
||||
@Getter @Setter @Column(columnName = PRECISION) private int precision;
|
||||
@Getter @Setter @Column(columnName = DETAIL_GROUP) private List<IntKeyLongValue> detailGroup;
|
||||
|
||||
private final int percentileRank;
|
||||
private Map<Integer, IntKeyLongValue> detailIndex;
|
||||
|
||||
public PxxIndicator(int percentileRank) {
|
||||
this.percentileRank = percentileRank;
|
||||
detailGroup = new ArrayList<>(30);
|
||||
}
|
||||
|
||||
@Entrance
|
||||
public final void combine(@SourceFrom int value, @Arg int precision) {
|
||||
this.precision = precision;
|
||||
|
||||
this.indexCheckAndInit();
|
||||
|
||||
int index = value / precision;
|
||||
IntKeyLongValue element = detailIndex.get(index);
|
||||
if (element == null) {
|
||||
element = new IntKeyLongValue();
|
||||
element.setKey(index);
|
||||
element.setValue(1);
|
||||
addElement(element);
|
||||
} else {
|
||||
element.addValue(1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void combine(Indicator indicator) {
|
||||
PxxIndicator pxxIndicator = (PxxIndicator)indicator;
|
||||
this.indexCheckAndInit();
|
||||
pxxIndicator.indexCheckAndInit();
|
||||
|
||||
pxxIndicator.detailIndex.forEach((key, element) -> {
|
||||
IntKeyLongValue existingElement = this.detailIndex.get(key);
|
||||
if (existingElement == null) {
|
||||
existingElement = new IntKeyLongValue();
|
||||
existingElement.setKey(key);
|
||||
existingElement.setValue(element.getValue());
|
||||
addElement(element);
|
||||
} else {
|
||||
existingElement.addValue(element.getValue());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void calculate() {
|
||||
Collections.sort(detailGroup);
|
||||
int total = detailGroup.stream().mapToInt(element -> (int)element.getValue()).sum();
|
||||
int roof = Math.round(total * percentileRank * 1.0f / 100);
|
||||
|
||||
int count = 0;
|
||||
for (IntKeyLongValue element : detailGroup) {
|
||||
count += element.getValue();
|
||||
if (count >= roof) {
|
||||
value = element.getKey() * precision;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
private void addElement(IntKeyLongValue element) {
|
||||
detailGroup.add(element);
|
||||
detailIndex.put(element.getKey(), element);
|
||||
}
|
||||
|
||||
private void indexCheckAndInit() {
|
||||
if (detailIndex == null) {
|
||||
detailIndex = new HashMap<>();
|
||||
detailGroup.forEach(element -> detailIndex.put(element.getKey(), element));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.core.analysis.indicator.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* @author wusheng
|
||||
*/
|
||||
@Target(ElementType.PARAMETER)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface Arg {
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* 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.source;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.apache.skywalking.oap.server.core.source.annotation.SourceType;
|
||||
|
||||
@SourceType
|
||||
public class All extends Source {
|
||||
@Override public Scope scope() {
|
||||
return Scope.All;
|
||||
}
|
||||
|
||||
@Getter @Setter private String name;
|
||||
@Getter @Setter private String serviceInstanceName;
|
||||
@Getter @Setter private String endpointName;
|
||||
@Getter @Setter private int latency;
|
||||
@Getter @Setter private boolean status;
|
||||
@Getter @Setter private int responseCode;
|
||||
@Getter @Setter private RequestType type;
|
||||
}
|
||||
|
|
@ -37,6 +37,12 @@ message RemoteData {
|
|||
repeated int64 dataLongs = 2;
|
||||
repeated double dataDoubles = 3;
|
||||
repeated int32 dataIntegers = 4;
|
||||
repeated IntKeyLongValuePair dataIntLongPairList = 5;
|
||||
}
|
||||
|
||||
message IntKeyLongValuePair {
|
||||
int32 key = 1;
|
||||
int64 value = 2;
|
||||
}
|
||||
|
||||
message Empty {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author wusheng
|
||||
*/
|
||||
public class LongAvgIndicatorTest {
|
||||
@Test
|
||||
public void testEntranceCombine() {
|
||||
LongAvgIndicatorImpl impl = new LongAvgIndicatorImpl();
|
||||
impl.combine(12, 1);
|
||||
impl.combine(24, 2);
|
||||
impl.combine(36, 3);
|
||||
impl.calculate();
|
||||
Assert.assertEquals(12, impl.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelfCombine() {
|
||||
LongAvgIndicatorImpl impl = new LongAvgIndicatorImpl();
|
||||
impl.combine(12, 1);
|
||||
impl.combine(24, 2);
|
||||
|
||||
LongAvgIndicatorImpl impl2 = new LongAvgIndicatorImpl();
|
||||
impl2.combine(24, 1);
|
||||
impl2.combine(48, 2);
|
||||
|
||||
impl.combine(impl2);
|
||||
|
||||
impl.calculate();
|
||||
Assert.assertEquals(18, impl.getValue());
|
||||
}
|
||||
|
||||
public class LongAvgIndicatorImpl extends LongAvgIndicator {
|
||||
|
||||
@Override public String id() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
import org.apache.skywalking.oap.server.core.analysis.indicator.expression.EqualMatch;
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author wusheng
|
||||
*/
|
||||
public class PercentIndicatorTest {
|
||||
@Test
|
||||
public void testEntranceCombine() {
|
||||
PercentIndicatorImpl impl = new PercentIndicatorImpl();
|
||||
impl.combine(new EqualMatch(), true, true);
|
||||
impl.combine(new EqualMatch(), true, false);
|
||||
impl.combine(new EqualMatch(), true, false);
|
||||
|
||||
impl.calculate();
|
||||
|
||||
Assert.assertEquals(33, impl.getValue());
|
||||
|
||||
impl = new PercentIndicatorImpl();
|
||||
impl.combine(new EqualMatch(), true, true);
|
||||
impl.combine(new EqualMatch(), true, true);
|
||||
impl.combine(new EqualMatch(), true, false);
|
||||
|
||||
impl.calculate();
|
||||
|
||||
Assert.assertEquals(66, impl.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelfCombine() {
|
||||
PercentIndicatorImpl impl = new PercentIndicatorImpl();
|
||||
impl.combine(new EqualMatch(), true, true);
|
||||
impl.combine(new EqualMatch(), true, false);
|
||||
impl.combine(new EqualMatch(), true, false);
|
||||
|
||||
PercentIndicatorImpl impl2 = new PercentIndicatorImpl();
|
||||
impl2.combine(new EqualMatch(), true, true);
|
||||
impl2.combine(new EqualMatch(), true, true);
|
||||
impl2.combine(new EqualMatch(), true, false);
|
||||
|
||||
impl.combine(impl2);
|
||||
|
||||
impl.calculate();
|
||||
|
||||
Assert.assertEquals(50, impl.getValue());
|
||||
}
|
||||
|
||||
public class PercentIndicatorImpl extends PercentIndicator {
|
||||
|
||||
@Override public String id() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author wusheng
|
||||
*/
|
||||
public class PxxIndicatorTest {
|
||||
private int precision = 10;//ms
|
||||
|
||||
@Test
|
||||
public void p99Test() {
|
||||
PxxIndicatorMocker indicatorMocker = new PxxIndicatorMocker(99);
|
||||
|
||||
indicatorMocker.combine(110, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(61, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
|
||||
indicatorMocker.calculate();
|
||||
|
||||
Assert.assertEquals(110, indicatorMocker.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void p75Test() {
|
||||
PxxIndicatorMocker indicatorMocker = new PxxIndicatorMocker(75);
|
||||
|
||||
indicatorMocker.combine(110, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(61, precision);
|
||||
indicatorMocker.combine(61, precision);
|
||||
indicatorMocker.combine(71, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
|
||||
indicatorMocker.calculate();
|
||||
|
||||
// precision = 10, 71 ~= 70
|
||||
Assert.assertEquals(100, indicatorMocker.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void p50Test() {
|
||||
PxxIndicatorMocker indicatorMocker = new PxxIndicatorMocker(50);
|
||||
|
||||
indicatorMocker.combine(110, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(50, precision);
|
||||
indicatorMocker.combine(61, precision);
|
||||
indicatorMocker.combine(61, precision);
|
||||
indicatorMocker.combine(71, precision);
|
||||
indicatorMocker.combine(100, precision);
|
||||
|
||||
indicatorMocker.calculate();
|
||||
|
||||
// precision = 10, 71 ~= 70
|
||||
Assert.assertEquals(70, indicatorMocker.getValue());
|
||||
}
|
||||
|
||||
public class PxxIndicatorMocker extends PxxIndicator {
|
||||
|
||||
public PxxIndicatorMocker(int percentileRank) {
|
||||
super(percentileRank);
|
||||
}
|
||||
|
||||
@Override public String id() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* 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.indicator;
|
||||
|
||||
import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author wusheng
|
||||
*/
|
||||
public class SumIndicatorTest {
|
||||
@Test
|
||||
public void testEntranceCombine() {
|
||||
SumIndicatorImpl impl = new SumIndicatorImpl();
|
||||
impl.combine(5);
|
||||
impl.combine(6);
|
||||
impl.combine(7);
|
||||
|
||||
impl.calculate();
|
||||
|
||||
Assert.assertEquals(18, impl.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSelfCombine() {
|
||||
SumIndicatorImpl impl = new SumIndicatorImpl();
|
||||
impl.combine(5);
|
||||
impl.combine(6);
|
||||
impl.combine(7);
|
||||
|
||||
SumIndicatorImpl impl2 = new SumIndicatorImpl();
|
||||
impl2.combine(5);
|
||||
impl2.combine(6);
|
||||
impl2.combine(7);
|
||||
|
||||
impl.combine(impl2);
|
||||
|
||||
impl.calculate();
|
||||
|
||||
Assert.assertEquals(36, impl.getValue());
|
||||
}
|
||||
|
||||
public class SumIndicatorImpl extends SumIndicator {
|
||||
@Override public String id() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override public void deserialize(RemoteData remoteData) {
|
||||
|
||||
}
|
||||
|
||||
@Override public RemoteData.Builder serialize() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -162,6 +162,7 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
|
|||
@Override public void build() {
|
||||
entrySourceBuilders.forEach(entrySourceBuilder -> {
|
||||
entrySourceBuilder.setTimeBucket(minuteTimeBucket);
|
||||
sourceReceiver.receive(entrySourceBuilder.toAll());
|
||||
sourceReceiver.receive(entrySourceBuilder.toService());
|
||||
sourceReceiver.receive(entrySourceBuilder.toServiceInstance());
|
||||
sourceReceiver.receive(entrySourceBuilder.toEndpoint());
|
||||
|
|
|
|||
|
|
@ -45,6 +45,19 @@ class SourceBuilder {
|
|||
@Getter @Setter private DetectPoint detectPoint;
|
||||
@Getter @Setter private long timeBucket;
|
||||
|
||||
All toAll() {
|
||||
All all = new All();
|
||||
all.setName(destServiceName);
|
||||
all.setServiceInstanceName(destServiceInstanceName);
|
||||
all.setEndpointName(destEndpointName);
|
||||
all.setLatency(latency);
|
||||
all.setStatus(status);
|
||||
all.setResponseCode(responseCode);
|
||||
all.setType(type);
|
||||
all.setTimeBucket(timeBucket);
|
||||
return all;
|
||||
}
|
||||
|
||||
Service toService() {
|
||||
Service service = new Service();
|
||||
service.setId(destServiceId);
|
||||
|
|
|
|||
Loading…
Reference in New Issue