mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
虚拟机、磁盘排序与过滤
This commit is contained in:
@@ -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"`
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"`
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user