enabledstatusinfrasresource.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package db
  15. import (
  16. "context"
  17. "yunion.io/x/jsonutils"
  18. "yunion.io/x/pkg/errors"
  19. "yunion.io/x/sqlchemy"
  20. "yunion.io/x/onecloud/pkg/apis"
  21. "yunion.io/x/onecloud/pkg/cloudcommon/policy"
  22. "yunion.io/x/onecloud/pkg/httperrors"
  23. "yunion.io/x/onecloud/pkg/mcclient"
  24. "yunion.io/x/onecloud/pkg/util/stringutils2"
  25. )
  26. type SEnabledStatusInfrasResourceBase struct {
  27. SStatusInfrasResourceBase
  28. SEnabledResourceBase
  29. }
  30. type SEnabledStatusInfrasResourceBaseManager struct {
  31. SStatusInfrasResourceBaseManager
  32. SEnabledResourceBaseManager
  33. }
  34. func NewEnabledStatusInfrasResourceBaseManager(dt interface{}, tableName string, keyword string, keywordPlural string) SEnabledStatusInfrasResourceBaseManager {
  35. return SEnabledStatusInfrasResourceBaseManager{
  36. SStatusInfrasResourceBaseManager: NewStatusInfrasResourceBaseManager(dt, tableName, keyword, keywordPlural),
  37. }
  38. }
  39. // 启用资源
  40. func (self *SEnabledStatusInfrasResourceBase) PerformEnable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformEnableInput) (jsonutils.JSONObject, error) {
  41. err := EnabledPerformEnable(self, ctx, userCred, true)
  42. if err != nil {
  43. return nil, errors.Wrap(err, "EnabledPerformEnable")
  44. }
  45. return nil, nil
  46. }
  47. // 禁用资源
  48. func (self *SEnabledStatusInfrasResourceBase) PerformDisable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input apis.PerformDisableInput) (jsonutils.JSONObject, error) {
  49. err := EnabledPerformEnable(self, ctx, userCred, false)
  50. if err != nil {
  51. return nil, errors.Wrap(err, "EnabledPerformEnable")
  52. }
  53. return nil, nil
  54. }
  55. // +onecloud:swagger-gen-ignore
  56. func (manager *SEnabledStatusInfrasResourceBaseManager) GetPropertyStatistics(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*apis.StatusStatistic, error) {
  57. im, ok := manager.GetVirtualObject().(IModelManager)
  58. if !ok {
  59. im = manager
  60. }
  61. var err error
  62. q := manager.Query()
  63. q, err = ListItemQueryFilters(im, ctx, q, userCred, query, policy.PolicyActionList)
  64. if err != nil {
  65. return nil, err
  66. }
  67. sq := q.SubQuery()
  68. statQ := sq.Query(sq.Field("status"), sqlchemy.COUNT("total_count", sq.Field("id")))
  69. statQ = statQ.GroupBy(sq.Field("status"))
  70. ret := []struct {
  71. Status string
  72. TotalCount int64
  73. }{}
  74. err = statQ.All(&ret)
  75. if err != nil {
  76. return nil, errors.Wrapf(err, "q.All")
  77. }
  78. result := &apis.StatusStatistic{
  79. StatusInfo: []apis.StatusStatisticStatusInfo{},
  80. }
  81. for _, s := range ret {
  82. result.StatusInfo = append(result.StatusInfo, apis.StatusStatisticStatusInfo{
  83. Status: s.Status,
  84. TotalCount: s.TotalCount,
  85. })
  86. }
  87. return result, nil
  88. }
  89. func (manager *SEnabledStatusInfrasResourceBaseManager) ValidateCreateData(
  90. ctx context.Context,
  91. userCred mcclient.TokenCredential,
  92. ownerId mcclient.IIdentityProvider,
  93. query jsonutils.JSONObject,
  94. input apis.EnabledStatusInfrasResourceBaseCreateInput,
  95. ) (apis.EnabledStatusInfrasResourceBaseCreateInput, error) {
  96. var err error
  97. input.StatusInfrasResourceBaseCreateInput, err = manager.SStatusInfrasResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.StatusInfrasResourceBaseCreateInput)
  98. if err != nil {
  99. return input, errors.Wrap(err, "SStatusInfrasResourceBaseManager.ValidateCreateData")
  100. }
  101. return input, nil
  102. }
  103. func (manager *SEnabledStatusInfrasResourceBaseManager) ListItemFilter(
  104. ctx context.Context,
  105. q *sqlchemy.SQuery,
  106. userCred mcclient.TokenCredential,
  107. query apis.EnabledStatusInfrasResourceBaseListInput,
  108. ) (*sqlchemy.SQuery, error) {
  109. q, err := manager.SStatusInfrasResourceBaseManager.ListItemFilter(ctx, q, userCred, query.StatusInfrasResourceBaseListInput)
  110. if err != nil {
  111. return nil, errors.Wrap(err, "SStatusInfrasResourceBaseManager.ListItemFilter")
  112. }
  113. q, err = manager.SEnabledResourceBaseManager.ListItemFilter(ctx, q, userCred, query.EnabledResourceBaseListInput)
  114. if err != nil {
  115. return nil, errors.Wrap(err, "SEnabledResourceBaseManager.ListItemFilter")
  116. }
  117. return q, nil
  118. }
  119. func (manager *SEnabledStatusInfrasResourceBaseManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error) {
  120. q, err := manager.SStatusInfrasResourceBaseManager.QueryDistinctExtraField(q, field)
  121. if err == nil {
  122. return q, nil
  123. }
  124. return q, httperrors.ErrNotFound
  125. }
  126. func (manager *SEnabledStatusInfrasResourceBaseManager) OrderByExtraFields(
  127. ctx context.Context,
  128. q *sqlchemy.SQuery,
  129. userCred mcclient.TokenCredential,
  130. query apis.EnabledStatusInfrasResourceBaseListInput,
  131. ) (*sqlchemy.SQuery, error) {
  132. q, err := manager.SStatusInfrasResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.StatusInfrasResourceBaseListInput)
  133. if err != nil {
  134. return nil, errors.Wrap(err, "SStatusInfrasResourceBaseManager.OrderByExtraFields")
  135. }
  136. return q, nil
  137. }
  138. func (manager *SEnabledStatusInfrasResourceBaseManager) FetchCustomizeColumns(
  139. ctx context.Context,
  140. userCred mcclient.TokenCredential,
  141. query jsonutils.JSONObject,
  142. objs []interface{},
  143. fields stringutils2.SSortedStrings,
  144. isList bool,
  145. ) []apis.EnabledStatusInfrasResourceBaseDetails {
  146. rows := make([]apis.EnabledStatusInfrasResourceBaseDetails, len(objs))
  147. domainRows := manager.SStatusInfrasResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
  148. for i := range rows {
  149. rows[i] = apis.EnabledStatusInfrasResourceBaseDetails{
  150. StatusInfrasResourceBaseDetails: domainRows[i],
  151. }
  152. }
  153. return rows
  154. }
  155. func (model *SEnabledStatusInfrasResourceBase) ValidateUpdateData(
  156. ctx context.Context,
  157. userCred mcclient.TokenCredential,
  158. query jsonutils.JSONObject,
  159. input apis.EnabledStatusInfrasResourceBaseUpdateInput,
  160. ) (apis.EnabledStatusInfrasResourceBaseUpdateInput, error) {
  161. var err error
  162. input.StatusInfrasResourceBaseUpdateInput, err = model.SStatusInfrasResourceBase.ValidateUpdateData(ctx, userCred, query, input.StatusInfrasResourceBaseUpdateInput)
  163. if err != nil {
  164. return input, errors.Wrap(err, "SStatusInfrasResourceBase.ValidateUpdateData")
  165. }
  166. return input, nil
  167. }