Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
Nightingale
提交
d3992b81
N
Nightingale
项目概览
jobily
/
Nightingale
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
Nightingale
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
d3992b81
编写于
11月 18, 2020
作者:
Y
yubo
提交者:
GitHub
11月 18, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use consolFun instead of aggrFunc with resample (#408)
上级
c4306577
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
30 addition
and
23 deletion
+30
-23
src/modules/transfer/backend/m3db/convert.go
src/modules/transfer/backend/m3db/convert.go
+13
-8
src/modules/transfer/backend/m3db/m3db.go
src/modules/transfer/backend/m3db/m3db.go
+17
-15
未找到文件。
src/modules/transfer/backend/m3db/convert.go
浏览文件 @
d3992b81
...
...
@@ -115,13 +115,18 @@ func xcludeResp(iter ident.TagIterator) *dataobj.XcludeResp {
}
func
aggregateResp
(
data
[]
*
dataobj
.
TsdbQueryResponse
,
opts
dataobj
.
QueryDataForUI
)
[]
*
dataobj
.
TsdbQueryResponse
{
if
len
(
data
)
<
2
||
opts
.
AggrFunc
==
""
{
if
len
(
data
)
<
2
{
return
data
}
// resample the data
for
_
,
v
:=
range
data
{
v
.
Values
=
resample
(
v
.
Values
,
opts
.
Start
,
opts
.
End
,
int64
(
opts
.
Step
),
opts
.
AggrFunc
)
v
.
Values
=
resample
(
v
.
Values
,
opts
.
Start
,
opts
.
End
,
int64
(
opts
.
Step
),
opts
.
ConsolFunc
)
}
// aggregateResp
if
opts
.
AggrFunc
==
""
{
return
data
}
// 没有聚合 tag, 或者曲线没有其他 tags, 直接所有曲线进行计算
...
...
@@ -182,7 +187,7 @@ func aggregateResp(data []*dataobj.TsdbQueryResponse, opts dataobj.QueryDataForU
return
aggrDatas
}
func
resample
(
data
[]
*
dataobj
.
RRDData
,
start
,
end
,
step
int64
,
aggr
Func
string
)
[]
*
dataobj
.
RRDData
{
func
resample
(
data
[]
*
dataobj
.
RRDData
,
start
,
end
,
step
int64
,
consol
Func
string
)
[]
*
dataobj
.
RRDData
{
l
:=
int
((
end
-
start
)
/
step
)
if
l
<=
0
{
return
[]
*
dataobj
.
RRDData
{}
...
...
@@ -192,7 +197,7 @@ func resample(data []*dataobj.RRDData, start, end, step int64, aggrFunc string)
ts
:=
start
if
t
:=
data
[
0
]
.
Timestamp
;
t
>
start
{
ts
=
t
-
t
%
step
ts
=
t
}
j
:=
0
...
...
@@ -220,7 +225,7 @@ func resample(data []*dataobj.RRDData, start, end, step int64, aggrFunc string)
}
ret
=
append
(
ret
,
&
dataobj
.
RRDData
{
Timestamp
:
ts
,
Value
:
aggrData
(
aggr
Func
,
get
()),
Value
:
aggrData
(
consol
Func
,
get
()),
})
}
...
...
@@ -234,11 +239,11 @@ func aggrData(fn string, data []dataobj.JsonFloat) dataobj.JsonFloat {
switch
fn
{
case
"sum"
:
return
sum
(
data
)
case
"avg"
:
case
"avg"
,
"AVERAGE"
:
return
avg
(
data
)
case
"max"
:
case
"max"
,
"MAX"
:
return
max
(
data
)
case
"min"
:
case
"min"
,
"MIN"
:
return
min
(
data
)
// case "last":
default
:
...
...
src/modules/transfer/backend/m3db/m3db.go
浏览文件 @
d3992b81
...
...
@@ -36,6 +36,7 @@ type M3dbSection struct {
DocsLimit
int
`yaml:"docsLimit"`
MinStep
int
`yaml:"minStep"`
Config
client
.
Configuration
`yaml:",inline"`
timeLimit
int64
`yaml:"-"`
}
type
Client
struct
{
...
...
@@ -65,6 +66,8 @@ func NewClient(cfg M3dbSection) (*Client, error) {
cfg
.
MinStep
=
1
}
cfg
.
timeLimit
=
int64
(
86400
*
cfg
.
DaysLimit
)
ret
:=
&
Client
{
namespace
:
cfg
.
Namespace
,
config
:
&
cfg
,
...
...
@@ -476,30 +479,29 @@ func (cfg M3dbSection) validateQueryDataForUI(in *dataobj.QueryDataForUI) (err e
return
fmt
.
Errorf
(
"%s is invalid aggrfunc"
,
in
.
AggrFunc
)
}
if
err
:=
cfg
.
validateTime
(
in
.
Start
,
in
.
End
,
&
in
.
Step
);
err
!=
nil
{
return
err
if
in
.
End
<=
in
.
Start
{
return
fmt
.
Errorf
(
"query time range is invalid end %d <= start %d"
,
in
.
End
,
in
.
Start
)
}
return
nil
}
func
(
cfg
M3dbSection
)
validateTime
(
start
,
end
int64
,
step
*
int
)
error
{
if
end
<=
start
{
return
fmt
.
Errorf
(
"query time range is invalid end %d <= start %d"
,
end
,
start
)
if
cfg
.
DaysLimit
>
0
{
if
t
:=
in
.
End
-
cfg
.
timeLimit
;
in
.
Start
<
t
{
// return fmt.Errorf("query time reange in invalid, daysLimit(%d/%d)", days, cfg.DaysLimit)
in
.
Start
=
t
}
}
if
cfg
.
DaysLimit
>
0
{
if
days
:=
int
((
end
-
start
)
/
86400
);
days
>
cfg
.
DaysLimit
{
return
fmt
.
Errorf
(
"query time reange in invalid, daysLimit(%d/%d)"
,
days
,
cfg
.
DaysLimit
)
if
in
.
Step
>
0
{
if
n
:=
(
in
.
End
-
in
.
Start
)
/
int64
(
in
.
Step
);
n
>
MAX_PONINTS
{
in
.
Step
=
0
}
}
if
*
step
=
=
0
{
*
step
=
int
((
end
-
s
tart
)
/
MAX_PONINTS
)
if
in
.
Step
<
=
0
{
in
.
Step
=
int
((
in
.
End
-
in
.
S
tart
)
/
MAX_PONINTS
)
}
if
*
step
>
cfg
.
MinStep
{
*
s
tep
=
cfg
.
MinStep
if
in
.
Step
<
cfg
.
MinStep
{
in
.
S
tep
=
cfg
.
MinStep
}
return
nil
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录