Files
cloudpods/pkg/cloudproxy/agent/models/modelsets.go
2021-02-23 15:31:47 +08:00

107 lines
2.4 KiB
Go

// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package models
import (
"time"
"yunion.io/x/onecloud/pkg/apihelper"
)
type ModelSetsMaxUpdatedAt struct {
ProxyEndpoints time.Time
Forwards time.Time
}
func NewModelSetsMaxUpdatedAt() *ModelSetsMaxUpdatedAt {
return &ModelSetsMaxUpdatedAt{
ProxyEndpoints: apihelper.PseudoZeroTime,
Forwards: apihelper.PseudoZeroTime,
}
}
type ModelSets struct {
ProxyEndpoints ProxyEndpoints
Forwards Forwards
}
func NewModelSets() *ModelSets {
return &ModelSets{
ProxyEndpoints: ProxyEndpoints{},
Forwards: Forwards{},
}
}
func (mss *ModelSets) ModelSetList() []apihelper.IModelSet {
// it's ordered this way to favour creation, not deletion
return []apihelper.IModelSet{
mss.ProxyEndpoints,
mss.Forwards,
}
}
func (mss *ModelSets) NewEmpty() apihelper.IModelSets {
return NewModelSets()
}
func (mss *ModelSets) copy_() *ModelSets {
mssCopy := &ModelSets{
ProxyEndpoints: mss.ProxyEndpoints.Copy().(ProxyEndpoints),
Forwards: mss.Forwards.Copy().(Forwards),
}
return mssCopy
}
func (mss *ModelSets) Copy() apihelper.IModelSets {
return mss.copy_()
}
func (mss *ModelSets) CopyJoined() apihelper.IModelSets {
mssCopy := mss.copy_()
mssCopy.join()
return mssCopy
}
func (mss *ModelSets) ApplyUpdates(mssNews apihelper.IModelSets) apihelper.ModelSetsUpdateResult {
r := apihelper.ModelSetsUpdateResult{
Changed: false,
Correct: true,
}
mssList := mss.ModelSetList()
mssNewsList := mssNews.ModelSetList()
for i, mss := range mssList {
mssNews := mssNewsList[i]
msR := apihelper.ModelSetApplyUpdates(mss, mssNews)
if !r.Changed && msR.Changed {
r.Changed = true
}
}
if r.Changed {
r.Correct = mss.join()
}
return r
}
func (mss *ModelSets) join() bool {
var p []bool
p = append(p, mss.ProxyEndpoints.joinForwards(mss.Forwards))
for _, b := range p {
if !b {
return false
}
}
return true
}