sku sync add limit & offset

This commit is contained in:
TangBin
2018-12-05 16:09:25 +08:00
parent 29c8d86870
commit a0ea5fb76b
2 changed files with 26 additions and 17 deletions
+24 -15
View File
@@ -103,32 +103,41 @@ func processSkuData(ndata jsonutils.JSONObject) jsonutils.JSONObject {
func (self *SkusZone) Init() error {
s := auth.GetAdminSession(options.Options.Region, "")
p, r, z := self.getExternalZone()
ret, e := modules.CloudmetaSkus.GetSkus(s, p, r, z)
if e != nil {
log.Debugf("SkusZone %s init failed, %s", z, e.Error())
return e
}
limit := 1024
offset := 0
total := 1024
records := map[string]jsonutils.JSONObject{}
for _, sku := range ret.Data {
name, err := sku.GetString("name")
if err != nil {
log.Debugf("SkusZone sku name empty : %s", sku)
return err
for offset < total {
ret, e := modules.CloudmetaSkus.GetSkus(s, p, r, z, limit, offset)
if e != nil {
log.Debugf("SkusZone %s init failed, %s", z, e.Error())
return e
}
if odata, exists := records[name]; exists {
records[name] = mergeSkuData(odata, sku)
} else {
records[name] = processSkuData(sku)
for _, sku := range ret.Data {
name, err := sku.GetString("name")
if err != nil {
log.Debugf("SkusZone sku name empty : %s", sku)
return err
}
if odata, exists := records[name]; exists {
records[name] = mergeSkuData(odata, sku)
} else {
records[name] = processSkuData(sku)
}
}
offset += limit
total = ret.Total
}
filtedData := []jsonutils.JSONObject{}
for _, item := range records {
filtedData = append(filtedData, item)
}
self.total = len(records)
self.skus = filtedData
return nil
+2 -2
View File
@@ -37,11 +37,11 @@ func init() {
registerCompute(&ServerSkus)
}
func (self *SkusManager) GetSkus(s *mcclient.ClientSession, providerId, regionId, zoneId string) (*ListResult, error) {
func (self *SkusManager) GetSkus(s *mcclient.ClientSession, providerId, regionId, zoneId string, limit, offset int) (*ListResult, error) {
p := strings.ToLower(providerId)
r := strings.ToLower(regionId)
z := strings.ToLower(zoneId)
url := fmt.Sprintf("/providers/%s/regions/%s/zones/%s/skus", p, r, z)
url := fmt.Sprintf("/providers/%s/regions/%s/zones/%s/skus?limit=%d&offset=%d", p, r, z, limit, offset)
ret, err := self._list(s, url, self.KeywordPlural)
if err != nil {
return &ListResult{}, err