Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
凌波微步_大先生
dashboard
提交
3ec11a63
D
dashboard
项目概览
凌波微步_大先生
/
dashboard
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dashboard
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3ec11a63
编写于
12月 10, 2016
作者:
R
Ray Tsang
提交者:
Piotr Bryk
12月 10, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added initial filter capability. (#1515)
* Added initial filter capability. * Removed fmt.Printf
上级
a460bad6
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
98 addition
and
12 deletion
+98
-12
src/app/backend/handler/apihandler.go
src/app/backend/handler/apihandler.go
+6
-1
src/app/backend/resource/dataselect/dataselect.go
src/app/backend/resource/dataselect/dataselect.go
+41
-0
src/app/backend/resource/dataselect/dataselectquery.go
src/app/backend/resource/dataselect/dataselectquery.go
+44
-7
src/app/backend/resource/dataselect/propertyname.go
src/app/backend/resource/dataselect/propertyname.go
+1
-0
src/app/backend/resource/pod/podcommon.go
src/app/backend/resource/pod/podcommon.go
+2
-0
src/app/backend/resource/pod/podlist.go
src/app/backend/resource/pod/podlist.go
+3
-3
src/app/backend/resource/workload/workloads.go
src/app/backend/resource/workload/workloads.go
+1
-1
未找到文件。
src/app/backend/handler/apihandler.go
浏览文件 @
3ec11a63
...
...
@@ -1617,6 +1617,10 @@ func parsePaginationPathParameter(request *restful.Request) *dataselect.Paginati
return
dataselect
.
NewPaginationQuery
(
int
(
itemsPerPage
),
int
(
page
-
1
))
}
func
parseFilterPathParameter
(
request
*
restful
.
Request
)
*
dataselect
.
FilterQuery
{
return
dataselect
.
NewFilterQuery
(
strings
.
Split
(
request
.
QueryParameter
(
"filterby"
),
","
))
}
// Parses query parameters of the request and returns a SortQuery object
func
parseSortPathParameter
(
request
*
restful
.
Request
)
*
dataselect
.
SortQuery
{
return
dataselect
.
NewSortQuery
(
strings
.
Split
(
request
.
QueryParameter
(
"sortby"
),
","
))
...
...
@@ -1650,6 +1654,7 @@ func parseMetricPathParameter(request *restful.Request) *dataselect.MetricQuery
func
parseDataSelectPathParameter
(
request
*
restful
.
Request
)
*
dataselect
.
DataSelectQuery
{
paginationQuery
:=
parsePaginationPathParameter
(
request
)
sortQuery
:=
parseSortPathParameter
(
request
)
filterQuery
:=
parseFilterPathParameter
(
request
)
metricQuery
:=
parseMetricPathParameter
(
request
)
return
dataselect
.
NewDataSelectQuery
(
paginationQuery
,
sortQuery
,
metricQuery
)
return
dataselect
.
NewDataSelectQuery
(
paginationQuery
,
sortQuery
,
filterQuery
,
metricQuery
)
}
src/app/backend/resource/dataselect/dataselect.go
浏览文件 @
3ec11a63
...
...
@@ -109,6 +109,32 @@ func (self *DataSelector) Sort() *DataSelector {
return
self
}
// Filter the data inside as instructed by DataSelectQuery and returns itself to allow method chaining.
func
(
self
*
DataSelector
)
Filter
()
*
DataSelector
{
filteredList
:=
[]
DataCell
{}
for
_
,
c
:=
range
self
.
GenericDataList
{
matches
:=
true
for
_
,
filterBy
:=
range
self
.
DataSelectQuery
.
FilterQuery
.
FilterByList
{
v
:=
c
.
GetProperty
(
filterBy
.
Property
)
if
v
==
nil
{
matches
=
false
continue
}
if
filterBy
.
Value
.
Compare
(
v
)
!=
0
{
matches
=
false
continue
}
}
if
matches
{
filteredList
=
append
(
filteredList
,
c
)
}
}
self
.
GenericDataList
=
filteredList
return
self
}
// GetCumulativeMetrics downloads and aggregates metrics for data cells currently present in self.GenericDataList as instructed
// by MetricQuery and inserts resulting MetricPromises to self.CumulativeMetricsPromises.
func
(
self
*
DataSelector
)
GetCumulativeMetrics
(
heapsterClient
*
client
.
HeapsterClient
)
*
DataSelector
{
...
...
@@ -184,3 +210,18 @@ func GenericDataSelectWithMetrics(dataList []DataCell, dsQuery *DataSelectQuery,
processed
:=
SelectableData
.
Sort
()
.
GetCumulativeMetrics
(
heapsterClient
)
.
Paginate
()
return
processed
.
GenericDataList
,
processed
.
CumulativeMetricsPromises
}
func
GenericDataSelectWithFilterAndMetrics
(
dataList
[]
DataCell
,
dsQuery
*
DataSelectQuery
,
cachedResources
*
CachedResources
,
heapsterClient
*
client
.
HeapsterClient
)
([]
DataCell
,
metric
.
MetricPromises
,
int
)
{
SelectableData
:=
DataSelector
{
GenericDataList
:
dataList
,
DataSelectQuery
:
dsQuery
,
CachedResources
:
cachedResources
,
}
// Pipeline is Filter -> Sort -> CollectMetrics -> Paginate
filtered
:=
SelectableData
.
Filter
()
filteredTotal
:=
len
(
filtered
.
GenericDataList
)
processed
:=
filtered
.
Sort
()
.
GetCumulativeMetrics
(
heapsterClient
)
.
Paginate
()
return
processed
.
GenericDataList
,
processed
.
CumulativeMetricsPromises
,
filteredTotal
}
src/app/backend/resource/dataselect/dataselectquery.go
浏览文件 @
3ec11a63
...
...
@@ -25,8 +25,8 @@ import (
type
DataSelectQuery
struct
{
PaginationQuery
*
PaginationQuery
SortQuery
*
SortQuery
// Filter
*FilterQuery
MetricQuery
*
MetricQuery
FilterQuery
*
FilterQuery
MetricQuery
*
MetricQuery
}
var
NoMetrics
=
NewMetricQuery
(
nil
,
nil
)
...
...
@@ -72,23 +72,37 @@ var NoSort = &SortQuery{
SortByList
:
[]
SortBy
{},
}
type
FilterQuery
struct
{
FilterByList
[]
FilterBy
}
type
FilterBy
struct
{
Property
PropertyName
Value
ComparableValue
}
var
NoFilter
=
&
FilterQuery
{
FilterByList
:
[]
FilterBy
{},
}
// NoDataSelect is an option for no data select (same data will be returned).
var
NoDataSelect
=
NewDataSelectQuery
(
NoPagination
,
NoSort
,
NoMetrics
)
var
NoDataSelect
=
NewDataSelectQuery
(
NoPagination
,
NoSort
,
No
Filter
,
No
Metrics
)
// StdMetricsDataSelect does not perform any data select, just downloads standard metrics.
var
StdMetricsDataSelect
=
NewDataSelectQuery
(
NoPagination
,
NoSort
,
StandardMetrics
)
var
StdMetricsDataSelect
=
NewDataSelectQuery
(
NoPagination
,
NoSort
,
NoFilter
,
StandardMetrics
)
// DefaultDataSelect downloads first 10 items from page 1 with no sort and no metrics.
var
DefaultDataSelect
=
NewDataSelectQuery
(
DefaultPagination
,
NoSort
,
NoMetrics
)
var
DefaultDataSelect
=
NewDataSelectQuery
(
DefaultPagination
,
NoSort
,
No
Filter
,
No
Metrics
)
// DefaultDataSelectWithMetrics downloads first 10 items from page 1 with no sort. Also downloads and includes standard metrics.
var
DefaultDataSelectWithMetrics
=
NewDataSelectQuery
(
DefaultPagination
,
NoSort
,
StandardMetrics
)
var
DefaultDataSelectWithMetrics
=
NewDataSelectQuery
(
DefaultPagination
,
NoSort
,
NoFilter
,
StandardMetrics
)
// NewDataSelectQuery creates DataSelectQuery object from simpler data select queries.
func
NewDataSelectQuery
(
paginationQuery
*
PaginationQuery
,
sortQuery
*
SortQuery
,
graphQuery
*
MetricQuery
)
*
DataSelectQuery
{
func
NewDataSelectQuery
(
paginationQuery
*
PaginationQuery
,
sortQuery
*
SortQuery
,
filterQuery
*
FilterQuery
,
graphQuery
*
MetricQuery
)
*
DataSelectQuery
{
return
&
DataSelectQuery
{
PaginationQuery
:
paginationQuery
,
SortQuery
:
sortQuery
,
FilterQuery
:
filterQuery
,
MetricQuery
:
graphQuery
,
}
}
...
...
@@ -128,3 +142,26 @@ func NewSortQuery(sortByListRaw []string) *SortQuery {
SortByList
:
sortByList
,
}
}
// NewFilterQuery takes raw filter options list and returns FilterQuery object. For example:
// ["parameter1", "value1", "parameter2", "value2"] - means that the data should be filtered by
// parameter1 equals value1 and parameter2 equals value2
func
NewFilterQuery
(
filterByListRaw
[]
string
)
*
FilterQuery
{
if
filterByListRaw
==
nil
||
len
(
filterByListRaw
)
%
2
==
1
{
return
NoFilter
}
filterByList
:=
[]
FilterBy
{}
for
i
:=
0
;
i
+
1
<
len
(
filterByListRaw
);
i
+=
2
{
propertyName
:=
filterByListRaw
[
i
]
propertyValue
:=
filterByListRaw
[
i
+
1
]
filterBy
:=
FilterBy
{
Property
:
PropertyName
(
propertyName
),
Value
:
StdComparableString
(
propertyValue
),
}
// Add to the filter options.
filterByList
=
append
(
filterByList
,
filterBy
)
}
return
&
FilterQuery
{
FilterByList
:
filterByList
,
}
}
src/app/backend/resource/dataselect/propertyname.go
浏览文件 @
3ec11a63
...
...
@@ -23,4 +23,5 @@ const (
NameProperty
=
"name"
CreationTimestampProperty
=
"creationTimestamp"
NamespaceProperty
=
"namespace"
StatusProperty
=
"status"
)
src/app/backend/resource/pod/podcommon.go
浏览文件 @
3ec11a63
...
...
@@ -81,6 +81,8 @@ func (self PodCell) GetProperty(name dataselect.PropertyName) dataselect.Compara
return
dataselect
.
StdComparableTime
(
self
.
ObjectMeta
.
CreationTimestamp
.
Time
)
case
dataselect
.
NamespaceProperty
:
return
dataselect
.
StdComparableString
(
self
.
ObjectMeta
.
Namespace
)
case
dataselect
.
StatusProperty
:
return
dataselect
.
StdComparableString
(
self
.
Status
.
Phase
)
default
:
// if name is not supported then just return a constant dummy value, sort will have no effect.
return
nil
...
...
src/app/backend/resource/pod/podlist.go
浏览文件 @
3ec11a63
...
...
@@ -108,15 +108,15 @@ func CreatePodList(pods []api.Pod, events []api.Event, dsQuery *dataselect.DataS
metrics
:=
<-
channels
.
PodMetrics
.
MetricsByPod
podList
:=
PodList
{
Pods
:
make
([]
Pod
,
0
),
ListMeta
:
common
.
ListMeta
{
TotalItems
:
len
(
pods
)},
Pods
:
make
([]
Pod
,
0
),
}
cache
:=
&
dataselect
.
CachedResources
{
Pods
:
pods
}
podCells
,
cumulativeMetricsPromises
:=
dataselect
.
GenericDataSelectWith
Metrics
(
toCells
(
pods
),
dsQuery
,
podCells
,
cumulativeMetricsPromises
,
filteredTotal
:=
dataselect
.
GenericDataSelectWithFilterAnd
Metrics
(
toCells
(
pods
),
dsQuery
,
cache
,
&
heapsterClient
)
pods
=
fromCells
(
podCells
)
podList
.
ListMeta
=
common
.
ListMeta
{
TotalItems
:
filteredTotal
}
for
_
,
pod
:=
range
pods
{
warnings
:=
event
.
GetPodsEventWarnings
(
events
,
[]
api
.
Pod
{
pod
})
...
...
src/app/backend/resource/workload/workloads.go
浏览文件 @
3ec11a63
...
...
@@ -108,7 +108,7 @@ func GetWorkloadsFromChannels(channels *common.ResourceChannels,
go
func
()
{
podList
,
err
:=
pod
.
GetPodListFromChannels
(
channels
,
dataselect
.
NewDataSelectQuery
(
dataselect
.
DefaultPagination
,
dataselect
.
NoSort
,
metricQuery
),
dataselect
.
NewDataSelectQuery
(
dataselect
.
DefaultPagination
,
dataselect
.
NoSort
,
dataselect
.
NoFilter
,
metricQuery
),
heapsterClient
)
errChan
<-
err
podChan
<-
podList
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录