Update dataselector.go

This commit is contained in:
dqzboy 2022-09-25 21:08:59 +08:00 committed by GitHub
parent 8f97757978
commit 9a06c84953
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,29 +1,27 @@
package service
import (
appsv1 "k8s.io/api/apps/v1" //引入K8s的APPSv1的包.定义别名为appsv1
corev1 "k8s.io/api/core/v1" //引入K8s的corev1的包.定义别名为corev1
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
nwv1 "k8s.io/api/networking/v1"
"sort"
"strings"
"time"
)
//定义结构体dataSelector用于封装排序、过滤、分页的数据类型
type dataSelector struct { //包内调用,首字母小写
GenericDataList []DataCell
DataSelect *DataSelectQuery
}
// DataCell DataCell接口用于各种资源List类型的转换转换后可以使用dataSelector的排序、过滤、分页方法
type DataCell interface {
GetCreation() time.Time
GetName() string
}
// DataSelectQuery 定义过滤和分页结构体,过滤使用Name过滤分页使用Limit和page
//Limit 是单页的数据条数
//Page是第几页
type DataSelectQuery struct {
Filter *FilterQuery
Paginate *PaginateQuery
@ -38,48 +36,38 @@ type PaginateQuery struct {
Page int
}
// Len 实现自定义结构体的排序需要重写Len、Swap、Less方法
//Len方法用于获取数组的长度
func (d *dataSelector) Len() int {
return len(d.GenericDataList)
}
// Swap 方法用于数据比较大小之后的位置变更
func (d *dataSelector) Swap(i, j int) {
//临时变量对调 i,j ==> j.i
d.GenericDataList[i], d.GenericDataList[j] = d.GenericDataList[j], d.GenericDataList[i]
}
// Less 方法用于比较大小
func (d *dataSelector) Less(i, j int) bool {
a := d.GenericDataList[i].GetCreation()
b := d.GenericDataList[j].GetCreation()
//比较B的时间是否在A之前触发位置调换
return b.Before(a)
}
//重写以上三个方法使用sort.Sort进行排序
func (d *dataSelector) Sort() *dataSelector {
sort.Sort(d)
return d
}
// Filter 方法用于过滤数据比较数据的Name属性如果包含则返回
func (d *dataSelector) Filter() *dataSelector {
//判断入参是否为空,如果为空则返回所有数据
if d.DataSelect.Filter.Name == "" {
return d
}
//如果不为空则按照入参Name进行过滤
//声明一个新的数组。若Name包含则把数据放进数组返回出去
filtered := []DataCell{}
for _, value := range d.GenericDataList {
//定义是否匹配的标签变量,然后默认是匹配
matches := true
objName := value.GetName()
if strings.Contains(objName, d.DataSelect.Filter.Name) {
matches = false
continue //跳过当前循环,执行下一次循环
continue
}
if matches {
filtered = append(filtered, value)
@ -90,22 +78,17 @@ func (d *dataSelector) Filter() *dataSelector {
return d
}
// Paginate 方法用于数组的分页根据Limit和Page的传参取一定范围内的数据返回
func (d *dataSelector) Paginate() *dataSelector {
//根据Limit和Page的入参定义快捷变量
limit := d.DataSelect.Paginate.Limit
page := d.DataSelect.Paginate.Page
//检验参数的合法性
if limit <= 0 || page <= 0 {
return d
}
//定义取数范围需要的starIndex和endIndex
startIndex := limit * (page - 1)
endIndex := limit*page - 1
//出来endIndex
if endIndex > len(d.GenericDataList) {
endIndex = len(d.GenericDataList)
}
@ -115,12 +98,8 @@ func (d *dataSelector) Paginate() *dataSelector {
return d
}
// 定义podCell类型重写GetCreateion和GetName方法后可进行数据转换
//corev1.Pod --> podCell --> DataCell
//appsv1.Deployment --> deployCell --> DataCell
type podCell corev1.Pod
// GetCreation 重写DataCell接口的两个方法
func (p podCell) GetCreation() time.Time {
return p.CreationTimestamp.Time
}
@ -149,7 +128,6 @@ func (s serviceCell) GetName() string {
return s.Name
}
//追加ingress DataCell接口相关代码
type ingressCell nwv1.Ingress
func (i ingressCell) GetCreation() time.Time {