Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
SkyWalking
提交
605ca038
S
SkyWalking
项目概览
apache
/
SkyWalking
上一次同步 1 年多
通知
302
Star
21345
Fork
6091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SkyWalking
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
605ca038
编写于
10月 15, 2021
作者:
静夜思朝颜
提交者:
GitHub
10月 15, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
support negative infinity bucket in meter system (#7930)
上级
d73c51a4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
150 addition
and
3 deletion
+150
-3
CHANGES.md
CHANGES.md
+1
-0
apm-protocol/apm-network/src/main/proto
apm-protocol/apm-network/src/main/proto
+1
-1
oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessor.java
...erver/analyzer/provider/meter/process/MeterProcessor.java
+10
-1
oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessorTest.java
...r/analyzer/provider/meter/process/MeterProcessorTest.java
+132
-0
oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/Analyzer.java
...va/org/apache/skywalking/oap/meter/analyzer/Analyzer.java
+6
-1
未找到文件。
CHANGES.md
浏览文件 @
605ca038
...
...
@@ -40,6 +40,7 @@ Release Notes.
*
Support
`!= null`
in OAL engine.
*
Add
`Message Queue Consuming Count`
metric for MQ consuming service and endpoint.
*
Add
`Message Queue Avg Consuming Latency`
metric for MQ consuming service and endpoint.
*
Support
`-Inf`
as bucket in the meter system.
#### UI
...
...
proto
@
e6742be2
比较
e626ee04
...
e6742be2
Subproject commit e6
26ee04850703c220f64b642d2893fa65572943
Subproject commit e6
742be211302cf7eb93db83bdf1da2a8e600d17
oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessor.java
浏览文件 @
605ca038
...
...
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableMap;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.skywalking.apm.network.language.agent.v3.Label
;
import
org.apache.skywalking.apm.network.language.agent.v3.MeterBucketValue
;
import
org.apache.skywalking.apm.network.language.agent.v3.MeterData
;
import
org.apache.skywalking.apm.network.language.agent.v3.MeterHistogram
;
import
org.apache.skywalking.apm.network.language.agent.v3.MeterSingleValue
;
...
...
@@ -96,7 +97,7 @@ public class MeterProcessor {
.
name
(
histogram
.
getName
())
.
labels
(
ImmutableMap
.<
String
,
String
>
builder
()
.
putAll
(
baseLabel
)
.
put
(
"le"
,
String
.
valueOf
(
v
.
getBucket
()
)).
build
())
.
put
(
"le"
,
parseHistogramBucket
(
v
)).
build
())
.
value
(
v
.
getCount
()).
build
()
).
collect
(
Collectors
.
toList
()));
break
;
...
...
@@ -143,4 +144,12 @@ public class MeterProcessor {
}
}
private
String
parseHistogramBucket
(
MeterBucketValue
bucketValue
)
{
if
(
bucketValue
.
getIsNegativeInfinity
())
{
return
String
.
valueOf
(
Long
.
MIN_VALUE
);
}
else
{
return
String
.
valueOf
(
bucketValue
.
getBucket
());
}
}
}
oap-server/analyzer/agent-analyzer/src/test/java/org/apache/skywalking/oap/server/analyzer/provider/meter/process/MeterProcessorTest.java
0 → 100644
浏览文件 @
605ca038
/*
* 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.analyzer.provider.meter.process
;
import
org.apache.skywalking.apm.network.language.agent.v3.MeterBucketValue
;
import
org.apache.skywalking.apm.network.language.agent.v3.MeterData
;
import
org.apache.skywalking.apm.network.language.agent.v3.MeterHistogram
;
import
org.apache.skywalking.oap.server.analyzer.provider.meter.config.MeterConfig
;
import
org.apache.skywalking.oap.server.analyzer.provider.meter.config.MeterConfigs
;
import
org.apache.skywalking.oap.server.core.CoreModule
;
import
org.apache.skywalking.oap.server.core.analysis.StreamDefinition
;
import
org.apache.skywalking.oap.server.core.analysis.meter.MeterEntity
;
import
org.apache.skywalking.oap.server.core.analysis.meter.MeterSystem
;
import
org.apache.skywalking.oap.server.core.analysis.meter.function.avg.AvgHistogramFunction
;
import
org.apache.skywalking.oap.server.core.analysis.metrics.DataTable
;
import
org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor
;
import
org.apache.skywalking.oap.server.core.config.NamingControl
;
import
org.apache.skywalking.oap.server.core.config.group.EndpointNameGrouping
;
import
org.apache.skywalking.oap.server.core.query.type.Bucket
;
import
org.apache.skywalking.oap.server.core.storage.StorageException
;
import
org.apache.skywalking.oap.server.library.module.ModuleManager
;
import
org.apache.skywalking.oap.server.library.module.ModuleProviderHolder
;
import
org.apache.skywalking.oap.server.library.module.ModuleServiceHolder
;
import
org.apache.skywalking.oap.server.library.module.ModuleStartException
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.Mockito
;
import
org.mockito.junit.MockitoJUnitRunner
;
import
org.powermock.reflect.Whitebox
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.concurrent.atomic.AtomicReference
;
import
static
org
.
mockito
.
ArgumentMatchers
.
any
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyString
;
import
static
org
.
mockito
.
Mockito
.
doAnswer
;
import
static
org
.
mockito
.
Mockito
.
doNothing
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
spy
;
import
static
org
.
mockito
.
Mockito
.
when
;
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
MeterProcessorTest
{
@Mock
private
ModuleManager
moduleManager
;
private
MeterSystem
meterSystem
;
private
MeterProcessor
processor
;
private
String
service
=
"test-service"
;
private
String
serviceInstance
=
"test-service-instance"
;
@BeforeClass
public
static
void
init
()
{
MeterEntity
.
setNamingControl
(
new
NamingControl
(
512
,
512
,
512
,
new
EndpointNameGrouping
()));
}
@Before
public
void
setup
()
throws
StorageException
,
ModuleStartException
{
meterSystem
=
spy
(
new
MeterSystem
(
moduleManager
));
when
(
moduleManager
.
find
(
anyString
())).
thenReturn
(
mock
(
ModuleProviderHolder
.
class
));
when
(
moduleManager
.
find
(
CoreModule
.
NAME
).
provider
()).
thenReturn
(
mock
(
ModuleServiceHolder
.
class
));
when
(
moduleManager
.
find
(
CoreModule
.
NAME
).
provider
().
getService
(
MeterSystem
.
class
)).
thenReturn
(
meterSystem
);
Whitebox
.
setInternalState
(
MetricsStreamProcessor
.
class
,
"PROCESSOR"
,
Mockito
.
spy
(
MetricsStreamProcessor
.
getInstance
())
);
doNothing
().
when
(
MetricsStreamProcessor
.
getInstance
()).
create
(
any
(),
(
StreamDefinition
)
any
(),
any
());
final
MeterProcessService
processService
=
new
MeterProcessService
(
moduleManager
);
List
<
MeterConfig
>
config
=
MeterConfigs
.
loadConfig
(
"meter-analyzer-config"
,
Arrays
.
asList
(
"config"
));
processService
.
start
(
config
);
processor
=
new
MeterProcessor
(
processService
);
}
@Test
public
void
testProcess
()
throws
ModuleStartException
{
AtomicReference
<
AvgHistogramFunction
>
data
=
new
AtomicReference
<>();
doAnswer
(
invocationOnMock
->
{
if
(
AvgHistogramFunction
.
class
.
isAssignableFrom
(
invocationOnMock
.
getArgument
(
0
).
getClass
()))
{
data
.
set
(
invocationOnMock
.
getArgument
(
0
));
}
return
null
;
}).
when
(
meterSystem
).
doStreamingCalculation
(
any
());
processor
.
read
(
MeterData
.
newBuilder
()
.
setService
(
service
)
.
setServiceInstance
(
serviceInstance
)
.
setTimestamp
(
System
.
currentTimeMillis
())
.
setHistogram
(
MeterHistogram
.
newBuilder
()
.
setName
(
"test_histogram"
)
.
addValues
(
MeterBucketValue
.
newBuilder
().
setIsNegativeInfinity
(
true
).
setCount
(
10
).
build
())
.
addValues
(
MeterBucketValue
.
newBuilder
().
setBucket
(
0
).
setCount
(
20
).
build
())
.
addValues
(
MeterBucketValue
.
newBuilder
().
setBucket
(
10
).
setCount
(
10
).
build
())
.
build
())
.
build
());
processor
.
process
();
// verify data
final
AvgHistogramFunction
func
=
data
.
get
();
final
DataTable
summation
=
new
DataTable
();
summation
.
put
(
Bucket
.
INFINITE_NEGATIVE
,
10L
);
summation
.
put
(
"0"
,
20L
);
summation
.
put
(
"10"
,
10L
);
Assert
.
assertEquals
(
summation
,
func
.
getSummation
());
final
DataTable
count
=
new
DataTable
();
count
.
put
(
Bucket
.
INFINITE_NEGATIVE
,
1L
);
count
.
put
(
"0"
,
1L
);
count
.
put
(
"10"
,
1L
);
Assert
.
assertEquals
(
count
,
func
.
getCount
());
}
}
oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/Analyzer.java
浏览文件 @
605ca038
...
...
@@ -148,7 +148,12 @@ public class Analyzer {
long
[]
vv
=
new
long
[
bb
.
length
];
for
(
int
i
=
0
;
i
<
subSs
.
size
();
i
++)
{
Sample
s
=
subSs
.
get
(
i
);
bb
[
i
]
=
Long
.
parseLong
(
s
.
getLabels
().
get
(
"le"
));
final
double
leVal
=
Double
.
parseDouble
(
s
.
getLabels
().
get
(
"le"
));
if
(
leVal
==
Double
.
NEGATIVE_INFINITY
)
{
bb
[
i
]
=
Long
.
MIN_VALUE
;
}
else
{
bb
[
i
]
=
(
long
)
leVal
;
}
vv
[
i
]
=
getValue
(
s
);
}
BucketedValues
bv
=
new
BucketedValues
(
bb
,
vv
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录