虚拟机、磁盘排序与过滤

This commit is contained in:
mhf
2022-08-11 19:23:10 +08:00
parent 61263ce585
commit ae92b25707
6 changed files with 37 additions and 10 deletions
+9 -7
View File
@@ -45,13 +45,15 @@ func init() {
type DiskListOptions struct {
options.BaseListOptions
Unused *bool `help:"Show unused disks"`
Share *bool `help:"Show Share storage disks"`
Local *bool `help:"Show Local storage disks"`
Guest string `help:"Guest ID or name"`
Storage string `help:"Storage ID or name"`
Type string `help:"Disk type" choices:"sys|data|swap|volume"`
CloudType string `help:"Public cloud or private cloud" choices:"Public|Private"`
Unused *bool `help:"Show unused disks"`
Share *bool `help:"Show Share storage disks"`
Local *bool `help:"Show Local storage disks"`
Guest string `help:"Guest ID or name"`
GuestStatus string `help:"Guest Status"`
OrderByServer string `help:"Order By Server"`
Storage string `help:"Storage ID or name"`
Type string `help:"Disk type" choices:"sys|data|swap|volume"`
CloudType string `help:"Public cloud or private cloud" choices:"Public|Private"`
BillingType string `help:"billing type" choices:"postpaid|prepaid"`
+1
View File
@@ -143,6 +143,7 @@ type DiskListInput struct {
FsFormat string `json:"fs_format"`
OrderByServer string `json:"order_by_server" choices:"asc|desc"`
// 镜像
ImageId string `json:"image_id"`
// swagger:ignore
+1
View File
@@ -74,6 +74,7 @@ type ServerListInput struct {
// enum: asc,desc
OrderByDisk string `json:"order_by_disk"`
OrderByIp string `json:"order_by_ip"`
// 根据ip查找机器
IpAddr string `json:"ip_addr"`
+17 -1
View File
@@ -280,7 +280,15 @@ func (manager *SDiskManager) OrderByExtraFields(
if err != nil {
return nil, errors.Wrap(err, "SBillingResourceBaseManager.OrderByExtraFields")
}
if db.NeedOrderQuery([]string{query.OrderByServer}) {
guestDiskQuery := GuestdiskManager.Query("disk_id", "guest_id").SubQuery()
q = q.LeftJoin(guestDiskQuery, sqlchemy.Equals(q.Field("id"), guestDiskQuery.Field("disk_id")))
guestQuery := GuestManager.Query().SubQuery()
q.AppendField(q.QueryFields()...)
q.AppendField(guestQuery.Field("name", "guest_name"))
q.Join(guestQuery, sqlchemy.Equals(guestQuery.Field("id"), guestDiskQuery.Field("guest_id")))
db.OrderByFields(q, []string{query.OrderByServer}, []sqlchemy.IQueryField{guestQuery.Field("name")})
}
q, err = manager.SVirtualResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.VirtualResourceListInput)
if err != nil {
return nil, errors.Wrap(err, "SVirtualResourceBaseManager.OrderByExtraFields")
@@ -296,6 +304,14 @@ func (manager *SDiskManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field s
if err == nil {
return q, nil
}
if field == "guest_status" {
guestDiskQuery := GuestdiskManager.Query("disk_id", "guest_id").SubQuery()
q = q.LeftJoin(guestDiskQuery, sqlchemy.Equals(q.Field("id"), guestDiskQuery.Field("disk_id")))
guestQuery := GuestManager.Query().SubQuery()
q.AppendField(guestQuery.Field("status", field)).Distinct()
q.Join(guestQuery, sqlchemy.Equals(guestQuery.Field("id"), guestDiskQuery.Field("guest_id")))
return q, nil
}
q, err = manager.SStorageResourceBaseManager.QueryDistinctExtraField(q, field)
if err == nil {
return q, nil
+8 -2
View File
@@ -167,7 +167,7 @@ type SGuest struct {
IsDaemon tristate.TriState `default:"false" list:"admin" create:"admin_optional" update:"admin"`
// 最大内网带宽
InternetMaxBandwidthOut int `nullable:"false" list:"user" create:"optional"`
InternetMaxBandwidthOut int `nullable:"true" list:"user" create:"optional"`
// 磁盘吞吐量
Throughput int `nullable:"true" list:"user" create:"optional"`
}
@@ -671,6 +671,13 @@ func (manager *SGuestManager) OrderByExtraFields(ctx context.Context, q *sqlchem
q = q.LeftJoin(guestdiskSQ, sqlchemy.Equals(q.Field("id"), guestdiskSQ.Field("guest_id")))
db.OrderByFields(q, []string{query.OrderByDisk}, []sqlchemy.IQueryField{guestdiskSQ.Field("disks_size")})
}
if db.NeedOrderQuery([]string{query.OrderByIp}) {
guestnet := GuestnetworkManager.Query("guest_id", "ip_addr").SubQuery()
q.AppendField(q.QueryFields()...)
q.AppendField(guestnet.Field("ip_addr"))
q = q.LeftJoin(guestnet, sqlchemy.Equals(q.Field("id"), guestnet.Field("guest_id")))
db.OrderByFields(q, []string{query.OrderByIp}, []sqlchemy.IQueryField{sqlchemy.INET_ATON(q.Field("ip_addr"))})
}
return q, nil
}
@@ -3601,7 +3608,6 @@ func _guestResourceCountQuery(
} else {
gq = GuestManager.Query()
}
if len(rangeObjs) > 0 || len(hostTypes) > 0 || len(resourceTypes) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
gq = filterGuestByRange(gq, rangeObjs, hostTypes, resourceTypes, providers, brands, cloudEnv)
}
+1
View File
@@ -60,6 +60,7 @@ type ServerListOptions struct {
OrderByDisk string `help:"Order by disk size" choices:"asc|desc"`
OrderByHost string `help:"Order by host name" choices:"asc|desc"`
OrderByNetwork string `help:"Order by network name" choices:"asc|desc"`
OrderByIp string `help:"Order by ip" choices:"asc|desc"`
ResourceType string `help:"Resource type" choices:"shared|prepaid|dedicated"`