mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-05-07 22:24:32 +08:00
213 lines
4.5 KiB
Go
213 lines
4.5 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 (
|
|
"fmt"
|
|
|
|
"yunion.io/x/jsonutils"
|
|
"yunion.io/x/pkg/errors"
|
|
|
|
"yunion.io/x/onecloud/pkg/apis/monitor"
|
|
"yunion.io/x/onecloud/pkg/hostman/hostinfo/hostconsts"
|
|
)
|
|
|
|
var (
|
|
resourceSyncMap map[string]IResourceSync
|
|
guestResourceSync IResourceSync
|
|
hostResourceSync IResourceSync
|
|
redisResourceSync IResourceSync
|
|
rdsResourceSync IResourceSync
|
|
ossResourceSync IResourceSync
|
|
accountResourceSync IResourceSync
|
|
storageResourceSync IResourceSync
|
|
)
|
|
|
|
func RegistryResourceSync(sync IResourceSync) error {
|
|
if resourceSyncMap == nil {
|
|
resourceSyncMap = make(map[string]IResourceSync)
|
|
}
|
|
if _, ok := resourceSyncMap[sync.SyncType()]; ok {
|
|
return errors.Errorf("syncType:%s has registered", sync.SyncType())
|
|
}
|
|
resourceSyncMap[sync.SyncType()] = sync
|
|
return nil
|
|
}
|
|
|
|
func GetResourceSyncByType(syncType string) IResourceSync {
|
|
if resourceSyncMap == nil {
|
|
resourceSyncMap = make(map[string]IResourceSync)
|
|
}
|
|
return resourceSyncMap[syncType]
|
|
}
|
|
|
|
func GetResourceSyncMap() map[string]IResourceSync {
|
|
if resourceSyncMap == nil {
|
|
resourceSyncMap = make(map[string]IResourceSync)
|
|
}
|
|
return resourceSyncMap
|
|
}
|
|
|
|
type SyncObject struct {
|
|
sync IResourceSync
|
|
}
|
|
|
|
type IResourceSync interface {
|
|
SyncType() string
|
|
}
|
|
|
|
type GuestResourceSync struct {
|
|
SyncObject
|
|
}
|
|
|
|
func NewGuestResourceSync() IResourceSync {
|
|
if guestResourceSync == nil {
|
|
sync := new(GuestResourceSync)
|
|
obj := newSyncObj(sync)
|
|
sync.SyncObject = obj
|
|
guestResourceSync = sync
|
|
}
|
|
|
|
return guestResourceSync
|
|
}
|
|
|
|
func (g *GuestResourceSync) SyncType() string {
|
|
return monitor.METRIC_RES_TYPE_GUEST
|
|
}
|
|
|
|
type HostResourceSync struct {
|
|
SyncObject
|
|
}
|
|
|
|
func (self *HostResourceSync) SyncType() string {
|
|
return monitor.METRIC_RES_TYPE_HOST
|
|
}
|
|
|
|
func NewHostResourceSync() IResourceSync {
|
|
if hostResourceSync == nil {
|
|
sync := new(HostResourceSync)
|
|
obj := newSyncObj(sync)
|
|
sync.SyncObject = obj
|
|
hostResourceSync = sync
|
|
}
|
|
return hostResourceSync
|
|
}
|
|
|
|
type RedisResourceSync struct {
|
|
SyncObject
|
|
}
|
|
|
|
func NewRedisResourceSync() IResourceSync {
|
|
if redisResourceSync == nil {
|
|
sync := new(RedisResourceSync)
|
|
obj := newSyncObj(sync)
|
|
sync.SyncObject = obj
|
|
redisResourceSync = sync
|
|
}
|
|
|
|
return redisResourceSync
|
|
}
|
|
|
|
func (g *RedisResourceSync) SyncType() string {
|
|
return monitor.METRIC_RES_TYPE_REDIS
|
|
}
|
|
|
|
type RdsResourceSync struct {
|
|
SyncObject
|
|
}
|
|
|
|
func NewRdsResourceSync() IResourceSync {
|
|
if rdsResourceSync == nil {
|
|
sync := new(RdsResourceSync)
|
|
obj := newSyncObj(sync)
|
|
sync.SyncObject = obj
|
|
rdsResourceSync = sync
|
|
}
|
|
|
|
return rdsResourceSync
|
|
}
|
|
|
|
func (g *RdsResourceSync) SyncType() string {
|
|
return monitor.METRIC_RES_TYPE_RDS
|
|
}
|
|
|
|
type OssResourceSync struct {
|
|
SyncObject
|
|
}
|
|
|
|
func NewOssResourceSync() IResourceSync {
|
|
if ossResourceSync == nil {
|
|
sync := new(OssResourceSync)
|
|
obj := newSyncObj(sync)
|
|
sync.SyncObject = obj
|
|
ossResourceSync = sync
|
|
}
|
|
|
|
return ossResourceSync
|
|
}
|
|
|
|
func (g *OssResourceSync) SyncType() string {
|
|
return monitor.METRIC_RES_TYPE_OSS
|
|
}
|
|
|
|
type AccountResourceSync struct {
|
|
SyncObject
|
|
}
|
|
|
|
func NewAccountResourceSync() IResourceSync {
|
|
if accountResourceSync == nil {
|
|
sync := new(AccountResourceSync)
|
|
obj := newSyncObj(sync)
|
|
sync.SyncObject = obj
|
|
accountResourceSync = sync
|
|
}
|
|
|
|
return accountResourceSync
|
|
}
|
|
|
|
func (g *AccountResourceSync) SyncType() string {
|
|
return monitor.METRIC_RES_TYPE_CLOUDACCOUNT
|
|
}
|
|
|
|
type StorageResourceSync struct {
|
|
SyncObject
|
|
}
|
|
|
|
func NewStorageResourceSync() IResourceSync {
|
|
if storageResourceSync == nil {
|
|
sync := new(StorageResourceSync)
|
|
obj := newSyncObj(sync)
|
|
sync.SyncObject = obj
|
|
storageResourceSync = sync
|
|
}
|
|
|
|
return storageResourceSync
|
|
}
|
|
|
|
func (g *StorageResourceSync) SyncType() string {
|
|
return monitor.METRIC_RES_TYPE_STORAGE
|
|
}
|
|
|
|
func newSyncObj(sync IResourceSync) SyncObject {
|
|
return SyncObject{sync: sync}
|
|
}
|
|
|
|
func SetQueryHostType(q *jsonutils.JSONDict) {
|
|
q.Set("filter", jsonutils.NewString(
|
|
fmt.Sprintf("host_type.in(%s,%s)",
|
|
hostconsts.TELEGRAF_TAG_KEY_HYPERVISOR,
|
|
hostconsts.TELEGRAF_TAG_KEY_CONTAINER)))
|
|
}
|