mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #7980 from yousong/bugfix/yousong-opslog
Bugfix/yousong actionlog
This commit is contained in:
+580
-580
File diff suppressed because it is too large
Load Diff
@@ -5330,9 +5330,9 @@
|
||||
"position": "pkg/compute/models/loadbalanceragents_deploy.go:279:40"
|
||||
},
|
||||
{
|
||||
"id": "unmarshal input",
|
||||
"message": "unmarshal input",
|
||||
"translation": "unmarshal输入参数出错",
|
||||
"id": "unmarshal input: %v",
|
||||
"message": "unmarshal input: %v",
|
||||
"translation": "unmarshal输入参数出错: %v",
|
||||
"position": "pkg/compute/models/loadbalanceragents_deploy.go:301:44"
|
||||
},
|
||||
{
|
||||
@@ -5378,15 +5378,15 @@
|
||||
"position": "pkg/compute/models/loadbalancerbackendgroups.go:118:49"
|
||||
},
|
||||
{
|
||||
"id": "weight %s not support, only support range 0 ~ 256",
|
||||
"message": "weight %s not support, only support range 0 ~ 256",
|
||||
"translation": "无效的权重%s,要求在0~256范围",
|
||||
"id": "weight %d not support, only support range 0 ~ 256",
|
||||
"message": "weight %d not support, only support range 0 ~ 256",
|
||||
"translation": "无效的权重%d,要求在0~256范围",
|
||||
"position": "pkg/compute/models/loadbalancerbackendgroups.go:206:50"
|
||||
},
|
||||
{
|
||||
"id": "port %s not support, only support range 1 ~ 65535",
|
||||
"message": "port %s not support, only support range 1 ~ 65535",
|
||||
"translation": "无效的端口%s,要求在1~65535范围",
|
||||
"id": "port %d not support, only support range 1 ~ 65535",
|
||||
"message": "port %d not support, only support range 1 ~ 65535",
|
||||
"translation": "无效的端口%d,要求在1~65535范围",
|
||||
"position": "pkg/compute/models/loadbalancerbackendgroups.go:209:50"
|
||||
},
|
||||
{
|
||||
@@ -5762,9 +5762,9 @@
|
||||
"position": "pkg/compute/models/networks.go:924:44"
|
||||
},
|
||||
{
|
||||
"id": "Network %s not found %s",
|
||||
"message": "Network %s not found %s",
|
||||
"translation": "查找网络%s失败:%s",
|
||||
"id": "Network %s not found: %v",
|
||||
"message": "Network %s not found: %v",
|
||||
"translation": "查找网络%s失败:%v",
|
||||
"position": "pkg/compute/models/networks.go:950:46"
|
||||
},
|
||||
{
|
||||
@@ -7598,8 +7598,8 @@
|
||||
"position": "pkg/compute/regiondrivers/huawei.go:2356:43"
|
||||
},
|
||||
{
|
||||
"id": "% not support create account",
|
||||
"message": "% not support create account",
|
||||
"id": "%s not support create account",
|
||||
"message": "%s not support create account",
|
||||
"translation": "%s不支持创建账号",
|
||||
"position": "pkg/compute/regiondrivers/huawei.go:2561:51"
|
||||
},
|
||||
|
||||
@@ -38,6 +38,7 @@ import (
|
||||
|
||||
"yunion.io/x/onecloud/pkg/appctx"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
"yunion.io/x/onecloud/pkg/proxy"
|
||||
"yunion.io/x/onecloud/pkg/util/httputils"
|
||||
)
|
||||
@@ -283,7 +284,7 @@ func (app *Application) defaultHandle(w http.ResponseWriter, r *http.Request, ri
|
||||
if cancel != nil {
|
||||
defer cancel()
|
||||
}
|
||||
ctx = httperrors.WithRequestLang(ctx, r)
|
||||
ctx = i18n.WithRequestLang(ctx, r)
|
||||
session := hand.workerMan
|
||||
if session == nil {
|
||||
if r.Method == "GET" || r.Method == "HEAD" {
|
||||
@@ -339,11 +340,11 @@ func (app *Application) defaultHandle(w http.ResponseWriter, r *http.Request, ri
|
||||
fw.closeChannels()
|
||||
return hand, appParams
|
||||
} else {
|
||||
ctx := httperrors.WithRequestLang(context.TODO(), r)
|
||||
ctx := i18n.WithRequestLang(context.TODO(), r)
|
||||
httperrors.InternalServerError(ctx, w, "Invalid handler %s", r.URL)
|
||||
}
|
||||
} else if !isCors {
|
||||
ctx := httperrors.WithRequestLang(context.TODO(), r)
|
||||
ctx := i18n.WithRequestLang(context.TODO(), r)
|
||||
httperrors.NotFoundError(ctx, w, "Handler not found")
|
||||
}
|
||||
return nil, nil
|
||||
|
||||
@@ -27,6 +27,7 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/appctx"
|
||||
"yunion.io/x/onecloud/pkg/appsrv"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/modulebase"
|
||||
)
|
||||
|
||||
@@ -294,13 +295,13 @@ func getSpecHandler(ctx context.Context, w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
func writeErrNoRequestKey(ctx context.Context, w http.ResponseWriter, r *http.Request, key string) {
|
||||
ctx = httperrors.WithRequestLang(ctx, r)
|
||||
ctx = i18n.WithRequestLang(ctx, r)
|
||||
httperrors.InvalidInputError(ctx, w,
|
||||
"No request key: %s", key)
|
||||
}
|
||||
|
||||
func writeErrInvalidRequestHeader(ctx context.Context, w http.ResponseWriter, r *http.Request, err error) {
|
||||
ctx = httperrors.WithRequestLang(ctx, r)
|
||||
ctx = i18n.WithRequestLang(ctx, r)
|
||||
httperrors.InvalidInputError(ctx, w,
|
||||
"Invalid request header: %v", err)
|
||||
}
|
||||
|
||||
@@ -350,7 +350,7 @@ func Query2List(manager IModelManager, ctx context.Context, userCred mcclient.To
|
||||
} else {
|
||||
showDetails = true
|
||||
}
|
||||
items := make([]interface{}, 0)
|
||||
var items []interface{}
|
||||
extraResults := make([]*jsonutils.JSONDict, 0)
|
||||
rows, err := q.Rows()
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
@@ -405,7 +405,7 @@ func Query2List(manager IModelManager, ctx context.Context, userCred mcclient.To
|
||||
|
||||
items = append(items, item)
|
||||
}
|
||||
results := make([]jsonutils.JSONObject, len(items))
|
||||
results := make([]*jsonutils.JSONDict, len(items))
|
||||
if showDetails || len(exportKeys) > 0 {
|
||||
var sortedListFields stringutils2.SSortedStrings
|
||||
if len(exportKeys) > 0 {
|
||||
@@ -445,7 +445,18 @@ func Query2List(manager IModelManager, ctx context.Context, userCred mcclient.To
|
||||
results[i] = jsonDict
|
||||
}
|
||||
}
|
||||
return results, nil
|
||||
for i := range items {
|
||||
i18nDict := items[i].(IModel).GetI18N(ctx)
|
||||
if i18nDict != nil {
|
||||
jsonDict := results[i]
|
||||
jsonDict.Set("_i18n", i18nDict)
|
||||
}
|
||||
}
|
||||
r := make([]jsonutils.JSONObject, len(items))
|
||||
for i := range results {
|
||||
r[i] = results[i]
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func fetchContextObjectsIds(manager IModelManager, ctx context.Context, userCred mcclient.TokenCredential, ctxIds []dispatcher.SResourceContext, queryDict *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
|
||||
|
||||
@@ -196,6 +196,7 @@ type IModel interface {
|
||||
MarkDeletePreventionOff()
|
||||
|
||||
GetUsages() []IUsage
|
||||
GetI18N(ctx context.Context) *jsonutils.JSONDict
|
||||
}
|
||||
|
||||
type IResourceModelManager interface {
|
||||
|
||||
@@ -596,3 +596,7 @@ func (model *SModelBase) DeleteInContext(ctx context.Context, userCred mcclient.
|
||||
func (model *SModelBase) GetUsages() []IUsage {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (model *SModelBase) GetI18N(ctx context.Context) *jsonutils.JSONDict {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -38,252 +38,6 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/util/stringutils2"
|
||||
)
|
||||
|
||||
const (
|
||||
ACT_CREATE = "create"
|
||||
ACT_DELETE = "delete"
|
||||
ACT_UPDATE = "update"
|
||||
ACT_FETCH = "fetch"
|
||||
ACT_ENABLE = "enable"
|
||||
ACT_DISABLE = "disable"
|
||||
ACT_OFFLINE = "offline"
|
||||
ACT_ONLINE = "online"
|
||||
ACT_ATTACH = "attach"
|
||||
ACT_DETACH = "detach"
|
||||
ACT_ATTACH_FAIL = "attach_fail"
|
||||
ACT_DETACH_FAIL = "detach_fail"
|
||||
ACT_DELETE_FAIL = "delete_fail"
|
||||
|
||||
ACT_PUBLIC = "public"
|
||||
ACT_PRIVATE = "private"
|
||||
|
||||
ACT_SYNC_UPDATE = "sync_update"
|
||||
ACT_SYNC_CREATE = "sync_create"
|
||||
|
||||
ACT_START_CREATE_BACKUP = "start_create_backup"
|
||||
ACT_CREATE_BACKUP = "create_backup"
|
||||
ACT_CREATE_BACKUP_FAILED = "create_backup_failed"
|
||||
ACT_DELETE_BACKUP = "delete_backup"
|
||||
ACT_DELETE_BACKUP_FAILED = "delete_backup_failed"
|
||||
|
||||
ACT_UPDATE_STATUS = "updatestatus"
|
||||
ACT_STARTING = "starting"
|
||||
ACT_START = "start"
|
||||
ACT_START_FAIL = "start_fail"
|
||||
ACT_BACKUP_START = "backup_start"
|
||||
ACT_BACKUP_START_FAILED = "backup_start_fail"
|
||||
|
||||
ACT_RESTARING = "restarting"
|
||||
ACT_RESTART_FAIL = "restart_fail"
|
||||
|
||||
ACT_STOPPING = "stopping"
|
||||
ACT_STOP = "stop"
|
||||
ACT_STOP_FAIL = "stop_fail"
|
||||
|
||||
ACT_RESUMING = "resuming"
|
||||
ACT_RESUME = "resume"
|
||||
ACT_RESUME_FAIL = "resume_fail"
|
||||
|
||||
ACT_RESIZING = "resizing"
|
||||
ACT_RESIZE = "resize"
|
||||
ACT_RESIZE_FAIL = "resize_fail"
|
||||
|
||||
ACT_MIGRATING = "migrating"
|
||||
ACT_MIGRATE = "migrate"
|
||||
ACT_MIGRATE_FAIL = "migrate_fail"
|
||||
|
||||
ACT_VM_CONVERT = "vm_convert"
|
||||
ACT_VM_CONVERTING = "vm_converting"
|
||||
ACT_VM_CONVERT_FAIL = "vm_convert_fail"
|
||||
|
||||
ACT_SPLIT = "net_split"
|
||||
ACT_MERGE = "net_merge"
|
||||
|
||||
ACT_SAVING = "saving"
|
||||
ACT_SAVE = "save"
|
||||
ACT_SAVE_FAIL = "save_fail"
|
||||
ACT_PROBE = "probe"
|
||||
ACT_PROBE_FAIL = "probe_fail"
|
||||
ACT_IMAGE_DELETE_FAIL = "delete_fail"
|
||||
|
||||
ACT_SWITCHED = "switched"
|
||||
ACT_SWITCH_FAILED = "switch_failed"
|
||||
|
||||
ACT_SNAPSHOTING = "snapshoting"
|
||||
ACT_SNAPSHOT_STREAM = "snapshot_stream"
|
||||
ACT_SNAPSHOT_DONE = "snapshot"
|
||||
ACT_SNAPSHOT_READY = "snapshot_ready"
|
||||
ACT_SNAPSHOT_SYNC = "snapshot_sync"
|
||||
ACT_SNAPSHOT_FAIL = "snapshot_fail"
|
||||
ACT_SNAPSHOT_DELETING = "snapshot_deling"
|
||||
ACT_SNAPSHOT_DELETE = "snapshot_del"
|
||||
ACT_SNAPSHOT_DELETE_FAIL = "snapshot_del_fail"
|
||||
ACT_SNAPSHOT_FAKE_DELETE = "snapshot_fake_del"
|
||||
ACT_SNAPSHOT_UNLINK = "snapshot_unlink"
|
||||
ACT_APPLY_SNAPSHOT_POLICY = "apply_snapshot_policy"
|
||||
ACT_APPLY_SNAPSHOT_POLICY_FAILED = "apply_snapshot_policy_failed"
|
||||
ACT_CANCEL_SNAPSHOT_POLICY = "cancel_snapshot_policy"
|
||||
ACT_CANCEL_SNAPSHOT_POLICY_FAILED = "cancel_snapshot_policy_failed"
|
||||
ACT_VM_SNAPSHOT_AND_CLONE = "vm_snapshot_and_clone"
|
||||
ACT_VM_SNAPSHOT_AND_CLONE_FAILED = "vm_snapshot_and_clone_failed"
|
||||
|
||||
ACT_VM_RESET_SNAPSHOT = "instance_reset_snapshot"
|
||||
ACT_VM_RESET_SNAPSHOT_FAILED = "instance_reset_snapshot_failed"
|
||||
|
||||
ACT_SNAPSHOT_POLICY_BIND_DISK = "snapshot_policy_bind_disk"
|
||||
ACT_SNAPSHOT_POLICY_BIND_DISK_FAIL = "snapshot_policy_bind_disk_fail"
|
||||
ACT_SNAPSHOT_POLICY_UNBIND_DISK = "snapshot_policy_unbind_disk"
|
||||
ACT_SNAPSHOT_POLICY_UNBIND_DISK_FAIL = "snapshot_policy_unbind_disk_fail"
|
||||
|
||||
ACT_DISK_CLEAN_UP_SNAPSHOTS = "disk_clean_up_snapshots"
|
||||
ACT_DISK_CLEAN_UP_SNAPSHOTS_FAIL = "disk_clean_up_snapshots_fail"
|
||||
ACT_DISK_AUTO_SNAPSHOT = "disk_auto_snapshot"
|
||||
ACT_DISK_AUTO_SNAPSHOT_FAIL = "disk_auto_snapshot_fail"
|
||||
|
||||
ACT_DISK_AUTO_SYNC_SNAPSHOT = "disk_auto_sync_snapshot"
|
||||
ACT_DISK_AUTO_SYNC_SNAPSHOT_FAIL = "disk_auto_sync_snapshot_fail"
|
||||
|
||||
ACT_ALLOCATING = "allocating"
|
||||
ACT_BACKUP_ALLOCATING = "backup_allocating"
|
||||
ACT_ALLOCATE = "allocate"
|
||||
ACT_BACKUP_ALLOCATE = "backup_allocate"
|
||||
ACT_ALLOCATE_FAIL = "alloc_fail"
|
||||
ACT_BACKUP_ALLOCATE_FAIL = "backup_alloc_fail"
|
||||
ACT_REW_FAIL = "renew_fail"
|
||||
|
||||
ACT_SET_AUTO_RENEW = "set_auto_renew"
|
||||
ACT_SET_AUTO_RENEW_FAIL = "set_auto_renew_fail"
|
||||
|
||||
ACT_DELOCATING = "delocating"
|
||||
ACT_DELOCATE = "delocate"
|
||||
ACT_DELOCATE_FAIL = "delocate_fail"
|
||||
|
||||
ACT_ISO_PREPARING = "iso_preparing"
|
||||
ACT_ISO_PREPARE_FAIL = "iso_prepare_fail"
|
||||
ACT_ISO_ATTACH = "iso_attach"
|
||||
ACT_ISO_DETACH = "iso_detach"
|
||||
|
||||
ACT_EIP_ATTACH = "eip_attach"
|
||||
ACT_EIP_DETACH = "eip_detach"
|
||||
|
||||
ACT_SET_METADATA = "set_meta"
|
||||
ACT_DEL_METADATA = "del_meta"
|
||||
|
||||
ACT_VM_DEPLOY = "deploy"
|
||||
ACT_VM_DEPLOY_FAIL = "deploy_fail"
|
||||
|
||||
ACT_VM_IO_THROTTLE = "io_throttle"
|
||||
ACT_VM_IO_THROTTLE_FAIL = "io_throttle_fail"
|
||||
|
||||
ACT_REBUILDING_ROOT = "rebuilding_root"
|
||||
ACT_REBUILD_ROOT = "rebuild_root"
|
||||
ACT_REBUILD_ROOT_FAIL = "rebuild_root_fail"
|
||||
|
||||
ACT_CHANGING_FLAVOR = "changing_flavor"
|
||||
ACT_CHANGE_FLAVOR = "change_flavor"
|
||||
ACT_CHANGE_FLAVOR_FAIL = "change_flavor_fail"
|
||||
|
||||
ACT_SYNCING_CONF = "syncing_conf"
|
||||
ACT_SYNC_CONF = "sync_conf"
|
||||
ACT_SYNC_CONF_FAIL = "sync_conf_fail"
|
||||
ACT_SYNC_STATUS = "sync_status"
|
||||
|
||||
ACT_CHANGE_OWNER = "change_owner"
|
||||
ACT_SYNC_OWNER = "sync_owner"
|
||||
ACT_SYNC_SHARE = "sync_share"
|
||||
|
||||
ACT_RESERVE_IP = "reserve_ip"
|
||||
ACT_RELEASE_IP = "release_ip"
|
||||
|
||||
ACT_CONVERT_START = "converting"
|
||||
ACT_CONVERT_COMPLETE = "converted"
|
||||
ACT_CONVERT_FAIL = "convert_fail"
|
||||
ACT_UNCONVERT_START = "unconverting"
|
||||
ACT_UNCONVERT_COMPLETE = "unconverted"
|
||||
ACT_UNCONVERT_FAIL = "unconvert_fail"
|
||||
|
||||
ACT_SYNC_HOST_START = "sync_host_start"
|
||||
ACT_SYNCING_HOST = "syncing_host"
|
||||
ACT_SYNC_HOST_COMPLETE = "sync_host_end"
|
||||
ACT_SYNC_HOST_FAILED = "sync_host_fail"
|
||||
|
||||
ACT_SYNC_PROJECT_COMPLETE = "sync_project_end"
|
||||
|
||||
ACT_SYNC_LB_START = "sync_lb_start"
|
||||
ACT_SYNCING_LB = "syncing_lb"
|
||||
ACT_SYNC_LB_COMPLETE = "sync_lb_end"
|
||||
|
||||
ACT_CACHING_IMAGE = "caching_image"
|
||||
ACT_CACHE_IMAGE_FAIL = "cache_image_fail"
|
||||
ACT_CACHED_IMAGE = "cached_image"
|
||||
ACT_UNCACHING_IMAGE = "uncaching_image"
|
||||
ACT_UNCACHE_IMAGE_FAIL = "uncache_image_fail"
|
||||
ACT_UNCACHED_IMAGE = "uncached_image"
|
||||
|
||||
ACT_SYNC_CLOUD_DISK = "sync_cloud_disk"
|
||||
ACT_SYNC_CLOUD_SERVER = "sync_cloud_server"
|
||||
ACT_SYNC_CLOUD_SKUS = "sync_cloud_skus"
|
||||
ACT_SYNC_CLOUD_EIP = "sync_cloud_eip"
|
||||
ACT_SYNC_CLOUD_PROJECT = "sync_cloud_project"
|
||||
ACT_SYNC_CLOUD_ELASTIC_CACHE = "sync_cloud_elastic_cache"
|
||||
|
||||
ACT_PENDING_DELETE = "pending_delete"
|
||||
ACT_CANCEL_DELETE = "cancel_delete"
|
||||
|
||||
// # isolated device (host)
|
||||
ACT_HOST_ATTACH_ISOLATED_DEVICE = "host_attach_isolated_deivce"
|
||||
ACT_HOST_ATTACH_ISOLATED_DEVICE_FAIL = "host_attach_isolated_deivce_fail"
|
||||
ACT_HOST_DETACH_ISOLATED_DEVICE = "host_detach_isolated_deivce"
|
||||
ACT_HOST_DETACH_ISOLATED_DEVICE_FAIL = "host_detach_isolated_deivce_fail"
|
||||
|
||||
// # isolated device (guest)
|
||||
ACT_GUEST_ATTACH_ISOLATED_DEVICE = "guest_attach_isolated_deivce"
|
||||
ACT_GUEST_ATTACH_ISOLATED_DEVICE_FAIL = "guest_attach_isolated_deivce_fail"
|
||||
ACT_GUEST_DETACH_ISOLATED_DEVICE = "guest_detach_isolated_deivce"
|
||||
ACT_GUEST_DETACH_ISOLATED_DEVICE_FAIL = "guest_detach_isolated_deivce_fail"
|
||||
ACT_GUEST_SAVE_GUEST_IMAGE = "guest_save_guest_image"
|
||||
ACT_GUEST_SAVE_GUEST_IMAGE_FAIL = "guest_save_guest_image_fail"
|
||||
|
||||
ACT_GUEST_SRC_CHECK = "guest_src_check"
|
||||
|
||||
ACT_CHANGE_BANDWIDTH = "eip_change_bandwidth"
|
||||
ACT_EIP_CONVERT_FAIL = "eip_convert_fail"
|
||||
|
||||
ACT_RENEW = "renew"
|
||||
|
||||
ACT_SCHEDULE = "schedule"
|
||||
|
||||
ACT_RECYCLE_PREPAID = "recycle_prepaid"
|
||||
ACT_UNDO_RECYCLE_PREPAID = "undo_recycle_prepaid"
|
||||
|
||||
ACT_HOST_IMPORT_LIBVIRT_SERVERS = "host_import_libvirt_servers"
|
||||
ACT_HOST_IMPORT_LIBVIRT_SERVERS_FAIL = "host_import_libvirt_servers_fail"
|
||||
ACT_GUEST_CREATE_FROM_IMPORT_SUCC = "guest_create_from_import_succ"
|
||||
ACT_GUEST_CREATE_FROM_IMPORT_FAIL = "guest_create_from_import_fail"
|
||||
ACT_GUEST_PANICKED = "guest_panicked"
|
||||
ACT_HOST_MAINTENANCE = "host_maintenance"
|
||||
ACT_HOST_DOWN = "host_down"
|
||||
|
||||
ACT_UPLOAD_OBJECT = "upload_obj"
|
||||
ACT_DELETE_OBJECT = "delete_obj"
|
||||
ACT_MKDIR = "mkdir"
|
||||
|
||||
ACT_GRANT_PRIVILEGE = "grant_privilege"
|
||||
ACT_REVOKE_PRIVILEGE = "revoke_privilege"
|
||||
ACT_SET_PRIVILEGES = "set_privileges"
|
||||
ACT_REBOOT = "reboot"
|
||||
ACT_RESTORE = "restore"
|
||||
ACT_CHANGE_CONFIG = "change_config"
|
||||
ACT_RESET_PASSWORD = "reset_password"
|
||||
|
||||
ACT_SUBIMAGE_UPDATE_FAIL = "guest_image_subimages_update_fail"
|
||||
|
||||
ACT_FLUSH_INSTANCE = "flush_instance"
|
||||
ACT_FLUSH_INSTANCE_FAIL = "flush_instance_fail"
|
||||
|
||||
ACT_SYNC_VPCS = "sync_vpcs"
|
||||
ACT_SYNC_RECORD_SETS = "sync_record_sets"
|
||||
)
|
||||
|
||||
type SOpsLogManager struct {
|
||||
SModelBaseManager
|
||||
}
|
||||
|
||||
@@ -0,0 +1,260 @@
|
||||
// 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 db
|
||||
|
||||
const (
|
||||
ACT_CREATE = "create"
|
||||
ACT_DELETE = "delete"
|
||||
ACT_UPDATE = "update"
|
||||
ACT_FETCH = "fetch"
|
||||
ACT_ENABLE = "enable"
|
||||
ACT_DISABLE = "disable"
|
||||
ACT_OFFLINE = "offline"
|
||||
ACT_ONLINE = "online"
|
||||
ACT_ATTACH = "attach"
|
||||
ACT_DETACH = "detach"
|
||||
ACT_ATTACH_FAIL = "attach_fail"
|
||||
ACT_DETACH_FAIL = "detach_fail"
|
||||
ACT_DELETE_FAIL = "delete_fail"
|
||||
|
||||
ACT_PUBLIC = "public"
|
||||
ACT_PRIVATE = "private"
|
||||
|
||||
ACT_SYNC_UPDATE = "sync_update"
|
||||
ACT_SYNC_CREATE = "sync_create"
|
||||
|
||||
ACT_START_CREATE_BACKUP = "start_create_backup"
|
||||
ACT_CREATE_BACKUP = "create_backup"
|
||||
ACT_CREATE_BACKUP_FAILED = "create_backup_failed"
|
||||
ACT_DELETE_BACKUP = "delete_backup"
|
||||
ACT_DELETE_BACKUP_FAILED = "delete_backup_failed"
|
||||
|
||||
ACT_UPDATE_STATUS = "updatestatus"
|
||||
ACT_STARTING = "starting"
|
||||
ACT_START = "start"
|
||||
ACT_START_FAIL = "start_fail"
|
||||
ACT_BACKUP_START = "backup_start"
|
||||
ACT_BACKUP_START_FAILED = "backup_start_fail"
|
||||
|
||||
ACT_RESTARING = "restarting"
|
||||
ACT_RESTART_FAIL = "restart_fail"
|
||||
|
||||
ACT_STOPPING = "stopping"
|
||||
ACT_STOP = "stop"
|
||||
ACT_STOP_FAIL = "stop_fail"
|
||||
|
||||
ACT_RESUMING = "resuming"
|
||||
ACT_RESUME = "resume"
|
||||
ACT_RESUME_FAIL = "resume_fail"
|
||||
|
||||
ACT_RESIZING = "resizing"
|
||||
ACT_RESIZE = "resize"
|
||||
ACT_RESIZE_FAIL = "resize_fail"
|
||||
|
||||
ACT_MIGRATING = "migrating"
|
||||
ACT_MIGRATE = "migrate"
|
||||
ACT_MIGRATE_FAIL = "migrate_fail"
|
||||
|
||||
ACT_VM_CONVERT = "vm_convert"
|
||||
ACT_VM_CONVERTING = "vm_converting"
|
||||
ACT_VM_CONVERT_FAIL = "vm_convert_fail"
|
||||
|
||||
ACT_SPLIT = "net_split"
|
||||
ACT_MERGE = "net_merge"
|
||||
|
||||
ACT_SAVING = "saving"
|
||||
ACT_SAVE = "save"
|
||||
ACT_SAVE_FAIL = "save_fail"
|
||||
ACT_PROBE = "probe"
|
||||
ACT_PROBE_FAIL = "probe_fail"
|
||||
ACT_IMAGE_DELETE_FAIL = "delete_fail"
|
||||
|
||||
ACT_SWITCHED = "switched"
|
||||
ACT_SWITCH_FAILED = "switch_failed"
|
||||
|
||||
ACT_SNAPSHOTING = "snapshoting"
|
||||
ACT_SNAPSHOT_STREAM = "snapshot_stream"
|
||||
ACT_SNAPSHOT_DONE = "snapshot"
|
||||
ACT_SNAPSHOT_READY = "snapshot_ready"
|
||||
ACT_SNAPSHOT_SYNC = "snapshot_sync"
|
||||
ACT_SNAPSHOT_FAIL = "snapshot_fail"
|
||||
ACT_SNAPSHOT_DELETING = "snapshot_deling"
|
||||
ACT_SNAPSHOT_DELETE = "snapshot_del"
|
||||
ACT_SNAPSHOT_DELETE_FAIL = "snapshot_del_fail"
|
||||
ACT_SNAPSHOT_FAKE_DELETE = "snapshot_fake_del"
|
||||
ACT_SNAPSHOT_UNLINK = "snapshot_unlink"
|
||||
ACT_APPLY_SNAPSHOT_POLICY = "apply_snapshot_policy"
|
||||
ACT_APPLY_SNAPSHOT_POLICY_FAILED = "apply_snapshot_policy_failed"
|
||||
ACT_CANCEL_SNAPSHOT_POLICY = "cancel_snapshot_policy"
|
||||
ACT_CANCEL_SNAPSHOT_POLICY_FAILED = "cancel_snapshot_policy_failed"
|
||||
ACT_VM_SNAPSHOT_AND_CLONE = "vm_snapshot_and_clone"
|
||||
ACT_VM_SNAPSHOT_AND_CLONE_FAILED = "vm_snapshot_and_clone_failed"
|
||||
|
||||
ACT_VM_RESET_SNAPSHOT = "instance_reset_snapshot"
|
||||
ACT_VM_RESET_SNAPSHOT_FAILED = "instance_reset_snapshot_failed"
|
||||
|
||||
ACT_SNAPSHOT_POLICY_BIND_DISK = "snapshot_policy_bind_disk"
|
||||
ACT_SNAPSHOT_POLICY_BIND_DISK_FAIL = "snapshot_policy_bind_disk_fail"
|
||||
ACT_SNAPSHOT_POLICY_UNBIND_DISK = "snapshot_policy_unbind_disk"
|
||||
ACT_SNAPSHOT_POLICY_UNBIND_DISK_FAIL = "snapshot_policy_unbind_disk_fail"
|
||||
|
||||
ACT_DISK_CLEAN_UP_SNAPSHOTS = "disk_clean_up_snapshots"
|
||||
ACT_DISK_CLEAN_UP_SNAPSHOTS_FAIL = "disk_clean_up_snapshots_fail"
|
||||
ACT_DISK_AUTO_SNAPSHOT = "disk_auto_snapshot"
|
||||
ACT_DISK_AUTO_SNAPSHOT_FAIL = "disk_auto_snapshot_fail"
|
||||
|
||||
ACT_DISK_AUTO_SYNC_SNAPSHOT = "disk_auto_sync_snapshot"
|
||||
ACT_DISK_AUTO_SYNC_SNAPSHOT_FAIL = "disk_auto_sync_snapshot_fail"
|
||||
|
||||
ACT_ALLOCATING = "allocating"
|
||||
ACT_BACKUP_ALLOCATING = "backup_allocating"
|
||||
ACT_ALLOCATE = "allocate"
|
||||
ACT_BACKUP_ALLOCATE = "backup_allocate"
|
||||
ACT_ALLOCATE_FAIL = "alloc_fail"
|
||||
ACT_BACKUP_ALLOCATE_FAIL = "backup_alloc_fail"
|
||||
ACT_REW_FAIL = "renew_fail"
|
||||
|
||||
ACT_SET_AUTO_RENEW = "set_auto_renew"
|
||||
ACT_SET_AUTO_RENEW_FAIL = "set_auto_renew_fail"
|
||||
|
||||
ACT_DELOCATING = "delocating"
|
||||
ACT_DELOCATE = "delocate"
|
||||
ACT_DELOCATE_FAIL = "delocate_fail"
|
||||
|
||||
ACT_ISO_PREPARING = "iso_preparing"
|
||||
ACT_ISO_PREPARE_FAIL = "iso_prepare_fail"
|
||||
ACT_ISO_ATTACH = "iso_attach"
|
||||
ACT_ISO_DETACH = "iso_detach"
|
||||
|
||||
ACT_EIP_ATTACH = "eip_attach"
|
||||
ACT_EIP_DETACH = "eip_detach"
|
||||
|
||||
ACT_SET_METADATA = "set_meta"
|
||||
ACT_DEL_METADATA = "del_meta"
|
||||
|
||||
ACT_VM_DEPLOY = "deploy"
|
||||
ACT_VM_DEPLOY_FAIL = "deploy_fail"
|
||||
|
||||
ACT_VM_IO_THROTTLE = "io_throttle"
|
||||
ACT_VM_IO_THROTTLE_FAIL = "io_throttle_fail"
|
||||
|
||||
ACT_REBUILDING_ROOT = "rebuilding_root"
|
||||
ACT_REBUILD_ROOT = "rebuild_root"
|
||||
ACT_REBUILD_ROOT_FAIL = "rebuild_root_fail"
|
||||
|
||||
ACT_CHANGING_FLAVOR = "changing_flavor"
|
||||
ACT_CHANGE_FLAVOR = "change_flavor"
|
||||
ACT_CHANGE_FLAVOR_FAIL = "change_flavor_fail"
|
||||
|
||||
ACT_SYNCING_CONF = "syncing_conf"
|
||||
ACT_SYNC_CONF = "sync_conf"
|
||||
ACT_SYNC_CONF_FAIL = "sync_conf_fail"
|
||||
ACT_SYNC_STATUS = "sync_status"
|
||||
|
||||
ACT_CHANGE_OWNER = "change_owner"
|
||||
ACT_SYNC_OWNER = "sync_owner"
|
||||
ACT_SYNC_SHARE = "sync_share"
|
||||
|
||||
ACT_RESERVE_IP = "reserve_ip"
|
||||
ACT_RELEASE_IP = "release_ip"
|
||||
|
||||
ACT_CONVERT_START = "converting"
|
||||
ACT_CONVERT_COMPLETE = "converted"
|
||||
ACT_CONVERT_FAIL = "convert_fail"
|
||||
ACT_UNCONVERT_START = "unconverting"
|
||||
ACT_UNCONVERT_COMPLETE = "unconverted"
|
||||
ACT_UNCONVERT_FAIL = "unconvert_fail"
|
||||
|
||||
ACT_SYNC_HOST_START = "sync_host_start"
|
||||
ACT_SYNCING_HOST = "syncing_host"
|
||||
ACT_SYNC_HOST_COMPLETE = "sync_host_end"
|
||||
ACT_SYNC_HOST_FAILED = "sync_host_fail"
|
||||
|
||||
ACT_SYNC_PROJECT_COMPLETE = "sync_project_end"
|
||||
|
||||
ACT_SYNC_LB_START = "sync_lb_start"
|
||||
ACT_SYNCING_LB = "syncing_lb"
|
||||
ACT_SYNC_LB_COMPLETE = "sync_lb_end"
|
||||
|
||||
ACT_CACHING_IMAGE = "caching_image"
|
||||
ACT_CACHE_IMAGE_FAIL = "cache_image_fail"
|
||||
ACT_CACHED_IMAGE = "cached_image"
|
||||
ACT_UNCACHING_IMAGE = "uncaching_image"
|
||||
ACT_UNCACHE_IMAGE_FAIL = "uncache_image_fail"
|
||||
ACT_UNCACHED_IMAGE = "uncached_image"
|
||||
|
||||
ACT_SYNC_CLOUD_DISK = "sync_cloud_disk"
|
||||
ACT_SYNC_CLOUD_SERVER = "sync_cloud_server"
|
||||
ACT_SYNC_CLOUD_SKUS = "sync_cloud_skus"
|
||||
ACT_SYNC_CLOUD_EIP = "sync_cloud_eip"
|
||||
ACT_SYNC_CLOUD_PROJECT = "sync_cloud_project"
|
||||
ACT_SYNC_CLOUD_ELASTIC_CACHE = "sync_cloud_elastic_cache"
|
||||
|
||||
ACT_PENDING_DELETE = "pending_delete"
|
||||
ACT_CANCEL_DELETE = "cancel_delete"
|
||||
|
||||
// # isolated device (host)
|
||||
ACT_HOST_ATTACH_ISOLATED_DEVICE = "host_attach_isolated_deivce"
|
||||
ACT_HOST_ATTACH_ISOLATED_DEVICE_FAIL = "host_attach_isolated_deivce_fail"
|
||||
ACT_HOST_DETACH_ISOLATED_DEVICE = "host_detach_isolated_deivce"
|
||||
ACT_HOST_DETACH_ISOLATED_DEVICE_FAIL = "host_detach_isolated_deivce_fail"
|
||||
|
||||
// # isolated device (guest)
|
||||
ACT_GUEST_ATTACH_ISOLATED_DEVICE = "guest_attach_isolated_deivce"
|
||||
ACT_GUEST_ATTACH_ISOLATED_DEVICE_FAIL = "guest_attach_isolated_deivce_fail"
|
||||
ACT_GUEST_DETACH_ISOLATED_DEVICE = "guest_detach_isolated_deivce"
|
||||
ACT_GUEST_DETACH_ISOLATED_DEVICE_FAIL = "guest_detach_isolated_deivce_fail"
|
||||
ACT_GUEST_SAVE_GUEST_IMAGE = "guest_save_guest_image"
|
||||
ACT_GUEST_SAVE_GUEST_IMAGE_FAIL = "guest_save_guest_image_fail"
|
||||
|
||||
ACT_GUEST_SRC_CHECK = "guest_src_check"
|
||||
|
||||
ACT_CHANGE_BANDWIDTH = "eip_change_bandwidth"
|
||||
ACT_EIP_CONVERT_FAIL = "eip_convert_fail"
|
||||
|
||||
ACT_RENEW = "renew"
|
||||
|
||||
ACT_SCHEDULE = "schedule"
|
||||
|
||||
ACT_RECYCLE_PREPAID = "recycle_prepaid"
|
||||
ACT_UNDO_RECYCLE_PREPAID = "undo_recycle_prepaid"
|
||||
|
||||
ACT_HOST_IMPORT_LIBVIRT_SERVERS = "host_import_libvirt_servers"
|
||||
ACT_HOST_IMPORT_LIBVIRT_SERVERS_FAIL = "host_import_libvirt_servers_fail"
|
||||
ACT_GUEST_CREATE_FROM_IMPORT_SUCC = "guest_create_from_import_succ"
|
||||
ACT_GUEST_CREATE_FROM_IMPORT_FAIL = "guest_create_from_import_fail"
|
||||
ACT_GUEST_PANICKED = "guest_panicked"
|
||||
ACT_HOST_MAINTENANCE = "host_maintenance"
|
||||
ACT_HOST_DOWN = "host_down"
|
||||
|
||||
ACT_UPLOAD_OBJECT = "upload_obj"
|
||||
ACT_DELETE_OBJECT = "delete_obj"
|
||||
ACT_MKDIR = "mkdir"
|
||||
|
||||
ACT_GRANT_PRIVILEGE = "grant_privilege"
|
||||
ACT_REVOKE_PRIVILEGE = "revoke_privilege"
|
||||
ACT_SET_PRIVILEGES = "set_privileges"
|
||||
ACT_REBOOT = "reboot"
|
||||
ACT_RESTORE = "restore"
|
||||
ACT_CHANGE_CONFIG = "change_config"
|
||||
ACT_RESET_PASSWORD = "reset_password"
|
||||
|
||||
ACT_SUBIMAGE_UPDATE_FAIL = "guest_image_subimages_update_fail"
|
||||
|
||||
ACT_FLUSH_INSTANCE = "flush_instance"
|
||||
ACT_FLUSH_INSTANCE_FAIL = "flush_instance_fail"
|
||||
|
||||
ACT_SYNC_VPCS = "sync_vpcs"
|
||||
ACT_SYNC_RECORD_SETS = "sync_record_sets"
|
||||
)
|
||||
@@ -33,6 +33,7 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/policy"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/auth"
|
||||
"yunion.io/x/onecloud/pkg/util/rbacutils"
|
||||
@@ -347,7 +348,7 @@ func (manager *SQuotaBaseManager) setQuotaHandler(ctx context.Context, w http.Re
|
||||
err := body.Unmarshal(quota, manager.KeywordPlural())
|
||||
if err != nil {
|
||||
log.Errorf("Fail to decode JSON request body: %s", err)
|
||||
httperrors.InvalidInputError(httperrors.WithRequestLang(ctx, r), w, "fail to decode body")
|
||||
httperrors.InvalidInputError(i18n.WithRequestLang(ctx, r), w, "fail to decode body")
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ import (
|
||||
|
||||
"yunion.io/x/onecloud/pkg/appsrv"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/consts"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/auth"
|
||||
"yunion.io/x/onecloud/pkg/mcclient/modulebase"
|
||||
@@ -55,7 +55,7 @@ func init() {
|
||||
}
|
||||
|
||||
func getLangSuffix(ctx context.Context) string {
|
||||
lang := httperrors.Lang(ctx)
|
||||
lang := i18n.Lang(ctx)
|
||||
switch lang {
|
||||
case language.English:
|
||||
return "en"
|
||||
|
||||
@@ -155,7 +155,7 @@ func (self *SQcloudGuestDriver) ValidateCreateData(ctx context.Context, userCred
|
||||
return nil, httperrors.NewInputParameterError("The %s disk size must be in the range of 100GB ~ 16000GB", disk.Backend)
|
||||
}
|
||||
case api.STORAGE_LOCAL_PRO:
|
||||
return nil, httperrors.NewInputParameterError("storage %s can not be data disk")
|
||||
return nil, httperrors.NewInputParameterError("storage %s can not be data disk", disk.Backend)
|
||||
}
|
||||
if disk.SizeMb/1024%10 > 0 {
|
||||
return nil, httperrors.NewInputParameterError("Data disk size must be an integer multiple of 10G")
|
||||
|
||||
@@ -3080,7 +3080,7 @@ func (self *SCloudaccount) AllowPerformCreateSubscription(ctx context.Context, u
|
||||
// 创建Azure订阅
|
||||
func (self *SCloudaccount) PerformCreateSubscription(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input api.SubscriptonCreateInput) (jsonutils.JSONObject, error) {
|
||||
if self.Provider != api.CLOUD_PROVIDER_AZURE {
|
||||
return nil, httperrors.NewNotSupportedError("%s not support create subscription")
|
||||
return nil, httperrors.NewNotSupportedError("%s not support create subscription", self.Provider)
|
||||
}
|
||||
if len(input.Name) == 0 {
|
||||
return nil, httperrors.NewMissingParameterError("name")
|
||||
|
||||
@@ -138,7 +138,7 @@ func (manager *SDnsZoneManager) ValidateCreateData(ctx context.Context, userCred
|
||||
}
|
||||
err = quotas.CheckSetPendingQuota(ctx, userCred, quota)
|
||||
if err != nil {
|
||||
return input, httperrors.NewOutOfQuotaError(err.Error())
|
||||
return input, httperrors.NewOutOfQuotaError("%v", err)
|
||||
}
|
||||
return input, nil
|
||||
}
|
||||
|
||||
@@ -241,11 +241,11 @@ func (man *SDnsRecordManager) checkRecordName(typ, name string) error {
|
||||
}
|
||||
case "SRV":
|
||||
if !regutils.MatchDomainSRV(name) {
|
||||
return httperrors.NewNotAcceptableError("SRV: invalid srv record name: %s", typ, name)
|
||||
return httperrors.NewNotAcceptableError("SRV: invalid srv record name: %s", name)
|
||||
}
|
||||
case "PTR":
|
||||
if !regutils.MatchPtr(name) {
|
||||
return httperrors.NewNotAcceptableError("PTR: invalid ptr record name: %s", typ, name)
|
||||
return httperrors.NewNotAcceptableError("PTR: invalid ptr record name: %s", name)
|
||||
}
|
||||
}
|
||||
if regutils.MatchIPAddr(name) {
|
||||
|
||||
@@ -540,7 +540,7 @@ func (gt *SGuestTemplate) PerformPublic(
|
||||
model, err := NetworkManager.FetchByIdOrName(userCred, str)
|
||||
if err != nil {
|
||||
return nil, httperrors.NewResourceNotFoundError(
|
||||
"there is no such secgroup %s descripted by guest template")
|
||||
"there is no such secgroup %s descripted by guest template", str)
|
||||
}
|
||||
network := model.(*SNetwork)
|
||||
netScope := rbacutils.String2Scope(network.PublicScope)
|
||||
|
||||
@@ -5421,7 +5421,7 @@ func (host *SHost) PerformSetReservedResourceForIsolatedDevice(
|
||||
caps := host.GetAttachedLocalStorageCapacity()
|
||||
if input.ReservedStorage != nil && caps.Capacity < int64(*input.ReservedStorage*len(devs)) {
|
||||
return nil, httperrors.NewBadRequestError(
|
||||
"host %s can't reserve %dM storage for each isolated device, not enough")
|
||||
"host %s can't reserve %dM storage for each isolated device, not enough", host.Name, input.ReservedStorage)
|
||||
}
|
||||
defer func() {
|
||||
go host.ClearSchedDescCache()
|
||||
|
||||
@@ -298,7 +298,7 @@ func (lbagent *SLoadbalancerAgent) validateHost(ctx context.Context, userCred mc
|
||||
func (lbagent *SLoadbalancerAgent) PerformDeploy(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
|
||||
input := &compute_apis.LoadbalancerAgentDeployInput{}
|
||||
if err := data.Unmarshal(input); err != nil {
|
||||
return nil, httperrors.NewBadRequestError("unmarshal input", err)
|
||||
return nil, httperrors.NewBadRequestError("unmarshal input: %v", err)
|
||||
}
|
||||
host := input.Host
|
||||
for _, k := range []string{"user", "pass", "proj"} {
|
||||
|
||||
@@ -203,10 +203,10 @@ func (man *SLoadbalancerBackendGroupManager) ValidateCreateData(ctx context.Cont
|
||||
backends[i].BackendType = api.LB_BACKEND_GUEST
|
||||
}
|
||||
if backends[i].Weight < 0 || backends[i].Weight > 256 {
|
||||
return nil, httperrors.NewInputParameterError("weight %s not support, only support range 0 ~ 256")
|
||||
return nil, httperrors.NewInputParameterError("weight %d not support, only support range 0 ~ 256", backends[i].Weight)
|
||||
}
|
||||
if backends[i].Port < 1 || backends[i].Port > 65535 {
|
||||
return nil, httperrors.NewInputParameterError("port %s not support, only support range 1 ~ 65535")
|
||||
return nil, httperrors.NewInputParameterError("port %d not support, only support range 1 ~ 65535", backends[i].Port)
|
||||
}
|
||||
if len(backends[i].ID) == 0 {
|
||||
return nil, httperrors.NewMissingParameterError("Missing backend id")
|
||||
|
||||
@@ -947,7 +947,7 @@ func isValidNetworkInfo(userCred mcclient.TokenCredential, netConfig *api.Networ
|
||||
if len(netConfig.Network) > 0 {
|
||||
netObj, err := NetworkManager.FetchByIdOrName(userCred, netConfig.Network)
|
||||
if err != nil {
|
||||
return httperrors.NewResourceNotFoundError("Network %s not found %s", err)
|
||||
return httperrors.NewResourceNotFoundError("Network %s not found: %v", netConfig.Network, err)
|
||||
}
|
||||
net := netObj.(*SNetwork)
|
||||
/*
|
||||
|
||||
@@ -175,7 +175,7 @@ func (st *SScalingTimer) ValidateCreateData(input api.ScalingPolicyCreateInput)
|
||||
input.CycleTimer, err = checkCycleTimerCreateInput(input.CycleTimer)
|
||||
}
|
||||
if err != nil {
|
||||
return input, httperrors.NewInputParameterError(err.Error())
|
||||
return input, httperrors.NewInputParameterError("%v", err)
|
||||
}
|
||||
return input, nil
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ func (stm *SScheduledTaskManager) ValidateCreateData(ctx context.Context, userCr
|
||||
input.CycleTimer, err = checkCycleTimerCreateInput(input.CycleTimer)
|
||||
}
|
||||
if err != nil {
|
||||
return input, httperrors.NewInputParameterError(err.Error())
|
||||
return input, httperrors.NewInputParameterError("%v", err)
|
||||
}
|
||||
return input, nil
|
||||
}
|
||||
|
||||
@@ -1147,7 +1147,7 @@ func (self *SAliyunRegionDriver) ValidateCreateDBInstanceAccountData(ctx context
|
||||
|
||||
for i, s := range input.Name {
|
||||
if !unicode.IsLetter(s) && !unicode.IsDigit(s) && s != '_' {
|
||||
return input, httperrors.NewInputParameterError("invalid character %s for account name", s)
|
||||
return input, httperrors.NewInputParameterError("invalid character %s for account name", string(s))
|
||||
}
|
||||
if s == '_' && (i == 0 || i == len(input.Name)) {
|
||||
return input, httperrors.NewInputParameterError("account name can not start or end with _")
|
||||
@@ -1396,7 +1396,8 @@ func (self *SAliyunRegionDriver) ValidateCreateElasticcacheAccountData(ctx conte
|
||||
}
|
||||
|
||||
if accountPrivilegeV.Value == "repl" && elasticCacheV.Model.(*models.SElasticcache).EngineVersion != "4.0" {
|
||||
return nil, httperrors.NewInputParameterError("account_privilege %s only support redis version 4.0")
|
||||
return nil, httperrors.NewInputParameterError("account_privilege %s only support redis version 4.0",
|
||||
accountPrivilegeV.Value)
|
||||
}
|
||||
|
||||
return data, nil
|
||||
|
||||
@@ -2558,7 +2558,7 @@ func (self *SHuaWeiRegionDriver) RequestCreateElasticcache(ctx context.Context,
|
||||
}
|
||||
|
||||
func (self *SHuaWeiRegionDriver) ValidateCreateElasticcacheAccountData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) {
|
||||
return nil, httperrors.NewUnsupportOperationError("% not support create account", self.GetProvider())
|
||||
return nil, httperrors.NewUnsupportOperationError("%s not support create account", self.GetProvider())
|
||||
}
|
||||
|
||||
func (self *SHuaWeiRegionDriver) RequestElasticcacheAccountResetPassword(ctx context.Context, userCred mcclient.TokenCredential, ea *models.SElasticcacheAccount, task taskman.ITask) error {
|
||||
|
||||
@@ -19,53 +19,13 @@ import (
|
||||
"net/http"
|
||||
"runtime/debug"
|
||||
|
||||
"golang.org/x/text/language"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
"yunion.io/x/onecloud/pkg/util/httputils"
|
||||
)
|
||||
|
||||
type ctxLang uintptr
|
||||
|
||||
const ctxLangKey = ctxLang(0)
|
||||
const LangHeader = "X-Yunion-Lang"
|
||||
|
||||
func SetLangHeader(ctx context.Context, header http.Header) bool {
|
||||
langv := ctx.Value(ctxLangKey)
|
||||
langTag, ok := langv.(language.Tag)
|
||||
if ok {
|
||||
header.Set(LangHeader, langTag.String())
|
||||
}
|
||||
return ok
|
||||
}
|
||||
|
||||
func WithLangTag(ctx context.Context, tag language.Tag) context.Context {
|
||||
return context.WithValue(ctx, ctxLangKey, tag)
|
||||
}
|
||||
|
||||
func WithLang(ctx context.Context, lang string) context.Context {
|
||||
tag, err := language.Parse(lang)
|
||||
if err != nil {
|
||||
tag = language.English
|
||||
}
|
||||
return WithLangTag(ctx, tag)
|
||||
}
|
||||
|
||||
func WithRequestLang(ctx context.Context, req *http.Request) context.Context {
|
||||
if val := req.URL.Query().Get("lang"); val != "" {
|
||||
return WithLang(ctx, val)
|
||||
}
|
||||
if val := req.Header.Get(LangHeader); val != "" {
|
||||
return WithLang(ctx, val)
|
||||
}
|
||||
if cookie, err := req.Cookie("lang"); err == nil {
|
||||
return WithLang(ctx, cookie.Value)
|
||||
}
|
||||
return WithLangTag(ctx, language.English)
|
||||
}
|
||||
|
||||
func SendHTTPErrorHeader(w http.ResponseWriter, statusCode int) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(statusCode)
|
||||
@@ -100,29 +60,16 @@ func formatDetails(ctx context.Context, errData httputils.Error, msg string) str
|
||||
if errData.Id == "" {
|
||||
details = msg
|
||||
} else {
|
||||
lang := Lang(ctx)
|
||||
lang := i18n.Lang(ctx)
|
||||
a := make([]interface{}, len(errData.Fields))
|
||||
for i := range errData.Fields {
|
||||
a[i] = errData.Fields[i]
|
||||
}
|
||||
details = P(lang, errData.Id, a...)
|
||||
details = i18n.P(lang, errData.Id, a...)
|
||||
}
|
||||
return details
|
||||
}
|
||||
|
||||
func Lang(ctx context.Context) language.Tag {
|
||||
var (
|
||||
langv = ctx.Value(ctxLangKey)
|
||||
lang language.Tag
|
||||
)
|
||||
if langv != nil {
|
||||
lang = langv.(language.Tag)
|
||||
} else {
|
||||
lang = language.English
|
||||
}
|
||||
return lang
|
||||
}
|
||||
|
||||
func HTTPError(ctx context.Context, w http.ResponseWriter, msg string, statusCode int, class string, errData httputils.Error) {
|
||||
details := formatDetails(ctx, errData, msg)
|
||||
if statusCode >= 300 && statusCode <= 400 {
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
package i18n
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
type ctxLang uintptr
|
||||
|
||||
const (
|
||||
ctxLangKey = ctxLang(0)
|
||||
)
|
||||
|
||||
func WithLangTag(ctx context.Context, tag language.Tag) context.Context {
|
||||
return context.WithValue(ctx, ctxLangKey, tag)
|
||||
}
|
||||
|
||||
func WithLang(ctx context.Context, lang string) context.Context {
|
||||
tag, err := language.Parse(lang)
|
||||
if err != nil {
|
||||
tag = language.English
|
||||
}
|
||||
return WithLangTag(ctx, tag)
|
||||
}
|
||||
|
||||
func WithRequestLang(ctx context.Context, req *http.Request) context.Context {
|
||||
if val := req.URL.Query().Get("lang"); val != "" {
|
||||
return WithLang(ctx, val)
|
||||
}
|
||||
if val := req.Header.Get(LangHeader); val != "" {
|
||||
return WithLang(ctx, val)
|
||||
}
|
||||
if cookie, err := req.Cookie("lang"); err == nil {
|
||||
return WithLang(ctx, cookie.Value)
|
||||
}
|
||||
return WithLangTag(ctx, language.English)
|
||||
}
|
||||
|
||||
func Lang(ctx context.Context) language.Tag {
|
||||
var (
|
||||
langv = ctx.Value(ctxLangKey)
|
||||
lang language.Tag
|
||||
)
|
||||
if langv != nil {
|
||||
lang = langv.(language.Tag)
|
||||
} else {
|
||||
lang = language.English
|
||||
}
|
||||
return lang
|
||||
}
|
||||
|
||||
const (
|
||||
LangHeader = "X-Yunion-Lang"
|
||||
)
|
||||
|
||||
func SetHTTPLangHeader(ctx context.Context, header http.Header) bool {
|
||||
langv := ctx.Value(ctxLangKey)
|
||||
langTag, ok := langv.(language.Tag)
|
||||
if ok {
|
||||
header.Set(LangHeader, langTag.String())
|
||||
}
|
||||
return ok
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
package i18n // import "yunion.io/x/onecloud/pkg/i18n"
|
||||
@@ -1,4 +1,4 @@
|
||||
package httperrors
|
||||
package i18n
|
||||
|
||||
import (
|
||||
"golang.org/x/text/language"
|
||||
@@ -0,0 +1,57 @@
|
||||
package i18n
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
type ITable interface {
|
||||
Lookup(ctx context.Context, key string) string
|
||||
}
|
||||
|
||||
type TableEntry map[language.Tag]string
|
||||
type Table map[string]TableEntry
|
||||
|
||||
func NewTableEntry() TableEntry {
|
||||
return TableEntry{}
|
||||
}
|
||||
|
||||
func (te TableEntry) CN(v string) TableEntry {
|
||||
te[language.Chinese] = v
|
||||
return te
|
||||
}
|
||||
|
||||
func (te TableEntry) EN(v string) TableEntry {
|
||||
te[language.English] = v
|
||||
return te
|
||||
}
|
||||
|
||||
func (tbl Table) Set(k string, te TableEntry) {
|
||||
tbl[k] = te
|
||||
}
|
||||
|
||||
func (tbl Table) Lookup(ctx context.Context, key string) string {
|
||||
te, ok := tbl[key]
|
||||
if !ok {
|
||||
return key
|
||||
}
|
||||
lang := Lang(ctx)
|
||||
lang = tableLangMatch(lang)
|
||||
v, ok := te[lang]
|
||||
if !ok {
|
||||
return key
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
var tableLangSupported = []language.Tag{
|
||||
language.English,
|
||||
language.Chinese,
|
||||
}
|
||||
var tableLangMatcher = language.NewMatcher(tableLangSupported)
|
||||
|
||||
func tableLangMatch(tag language.Tag) language.Tag {
|
||||
_, i, _ := tableLangMatcher.Match(tag)
|
||||
return tableLangSupported[i]
|
||||
}
|
||||
@@ -47,9 +47,9 @@ type SActionlogManager struct {
|
||||
type SActionlog struct {
|
||||
db.SOpsLog
|
||||
|
||||
StartTime time.Time `nullable:"true" list:"user" create:"optional"` // = Column(DateTime, nullable=False)
|
||||
Success bool `list:"user" create:"required"` // = Column(Boolean, default=True)
|
||||
Service string `width:"32" charset:"utf8" nullable:"true" list:"user" create:"optional"` //= Column(VARCHAR(32, charset='utf8'), nullable=False)
|
||||
StartTime time.Time `nullable:"true" list:"user" create:"optional"`
|
||||
Success bool `list:"user" create:"required"`
|
||||
Service string `width:"32" charset:"utf8" nullable:"true" list:"user" create:"optional"`
|
||||
}
|
||||
|
||||
var ActionLog *SActionlogManager
|
||||
@@ -74,6 +74,12 @@ func (action *SActionlog) CustomizeCreate(ctx context.Context, userCred mcclient
|
||||
return action.SOpsLog.CustomizeCreate(ctx, userCred, ownerId, query, data)
|
||||
}
|
||||
|
||||
func (action *SActionlog) GetI18N(ctx context.Context) *jsonutils.JSONDict {
|
||||
r := jsonutils.NewDict()
|
||||
r.Set("action", jsonutils.NewString(logclient.OpsActionI18nTable.Lookup(ctx, action.Action)))
|
||||
return r
|
||||
}
|
||||
|
||||
// Websockets 不再拉取 ActionLog 的消息,因此注释掉如下代码
|
||||
// 可以保留,以便有需求时,再次打开
|
||||
// func (manager *SActionlogManager) OnCreateComplete(ctx context.Context, items []db.IModel, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) {
|
||||
|
||||
@@ -30,7 +30,7 @@ import (
|
||||
"yunion.io/x/pkg/utils"
|
||||
|
||||
api "yunion.io/x/onecloud/pkg/apis/identity"
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
"yunion.io/x/onecloud/pkg/util/httputils"
|
||||
)
|
||||
|
||||
@@ -209,7 +209,7 @@ func (this *ClientSession) RawBaseUrlRequest(
|
||||
populateHeader(&tmpHeader, headers)
|
||||
}
|
||||
populateHeader(&tmpHeader, this.Header)
|
||||
httperrors.SetLangHeader(this.ctx, tmpHeader)
|
||||
i18n.SetHTTPLangHeader(this.ctx, tmpHeader)
|
||||
ctx := this.ctx
|
||||
if this.ctx == nil {
|
||||
ctx = context.Background()
|
||||
@@ -245,7 +245,7 @@ func (this *ClientSession) JSONVersionRequest(
|
||||
populateHeader(&tmpHeader, headers)
|
||||
}
|
||||
populateHeader(&tmpHeader, this.Header)
|
||||
httperrors.SetLangHeader(this.ctx, tmpHeader)
|
||||
i18n.SetHTTPLangHeader(this.ctx, tmpHeader)
|
||||
ctx := this.ctx
|
||||
if this.ctx == nil {
|
||||
ctx = context.Background()
|
||||
|
||||
+5
-3
@@ -24,6 +24,7 @@ import (
|
||||
"yunion.io/x/log"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
)
|
||||
|
||||
type EndpointGenerator func(context.Context, *http.Request) (string, error)
|
||||
@@ -54,14 +55,15 @@ func NewHTTPReverseProxy(ef *SEndpointFactory, m RequestManipulator) *SReversePr
|
||||
}
|
||||
|
||||
func (p *SReverseProxy) ServeHTTP(ctx context.Context, w http.ResponseWriter, r *http.Request) {
|
||||
ctx = i18n.WithRequestLang(ctx, r)
|
||||
endpoint, err := p.generator(ctx, r)
|
||||
if err != nil {
|
||||
httperrors.InternalServerError(httperrors.WithRequestLang(ctx, r), w, "%v", err)
|
||||
httperrors.InternalServerError(ctx, w, "%v", err)
|
||||
return
|
||||
}
|
||||
remoteUrl, err := url.Parse(endpoint)
|
||||
if err != nil {
|
||||
httperrors.InternalServerError(httperrors.WithRequestLang(ctx, r), w, "failed parsing url %q: %v", endpoint, err)
|
||||
httperrors.InternalServerError(ctx, w, "failed parsing url %q: %v", endpoint, err)
|
||||
return
|
||||
}
|
||||
log.Debugf("Forwarding to servie: %q, url: %q", p.serviceName, remoteUrl.String())
|
||||
@@ -73,7 +75,7 @@ func (p *SReverseProxy) ServeHTTP(ctx context.Context, w http.ResponseWriter, r
|
||||
}
|
||||
r, err = p.manipulator(ctx, r)
|
||||
if err != nil {
|
||||
httperrors.InternalServerError(httperrors.WithRequestLang(ctx, r), w, "%v", err)
|
||||
httperrors.InternalServerError(ctx, w, "%v", err)
|
||||
return
|
||||
}
|
||||
proxy.ServeHTTP(w, r)
|
||||
|
||||
@@ -24,27 +24,16 @@ import (
|
||||
// class: error class
|
||||
// msg: message
|
||||
// params: message format parameters
|
||||
func NewJsonClientError(code int, class string, msg string, params ...interface{}) *JSONClientError {
|
||||
details, err := errorMessage(msg, params...)
|
||||
return &JSONClientError{Code: code, Class: class, Details: details, Data: err}
|
||||
}
|
||||
|
||||
func errorMessage(msgFmt string, params ...interface{}) (string, Error) {
|
||||
fields := make([]string, len(params))
|
||||
for i, v := range params {
|
||||
fields[i] = fmt.Sprint(v)
|
||||
}
|
||||
|
||||
err := Error{
|
||||
Id: msgFmt,
|
||||
Fields: fields,
|
||||
}
|
||||
|
||||
msg := msgFmt
|
||||
func NewJsonClientError(code int, class string, msgFmt string, params ...interface{}) *JSONClientError {
|
||||
details := msgFmt
|
||||
if len(params) > 0 {
|
||||
msg = fmt.Sprintf(msg, params...)
|
||||
details = fmt.Sprintf(msgFmt, params...)
|
||||
}
|
||||
return msg, err
|
||||
theErr := Error{
|
||||
Id: msgFmt,
|
||||
Fields: params,
|
||||
}
|
||||
return &JSONClientError{Code: code, Class: class, Details: details, Data: theErr}
|
||||
}
|
||||
|
||||
func msgFmtToTmpl(msgFmt string) string {
|
||||
|
||||
@@ -50,12 +50,6 @@ func TestVariadic(t *testing.T) {
|
||||
},
|
||||
}
|
||||
for _, c := range cases {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
msg, _ := errorMessage(c.msg, c.params...)
|
||||
if msg != c.out {
|
||||
t.Errorf("want %s, got %s", c.out, msg)
|
||||
}
|
||||
})
|
||||
t.Run(c.name+"_New", func(t *testing.T) {
|
||||
err := NewJsonClientError(400, "InputParameterError", c.msg, c.params...)
|
||||
if err.Details != c.out {
|
||||
|
||||
@@ -70,8 +70,8 @@ var (
|
||||
)
|
||||
|
||||
type Error struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
Fields []string `json:"fields,omitempty"`
|
||||
Id string `json:"id,omitempty"`
|
||||
Fields []interface{} `json:"fields,omitempty"`
|
||||
}
|
||||
|
||||
type JSONClientError struct {
|
||||
|
||||
+137
-173
@@ -14,204 +14,168 @@
|
||||
|
||||
package logclient
|
||||
|
||||
// 这些状态不做 websocket 通知
|
||||
var BlackList = []string{
|
||||
ACT_CLOUD_FULLSYNC,
|
||||
ACT_CREATE,
|
||||
ACT_DELETE,
|
||||
ACT_PENDING_DELETE,
|
||||
ACT_PRIVATE,
|
||||
ACT_PUBLIC,
|
||||
ACT_UPDATE,
|
||||
ACT_VM_SYNC_STATUS,
|
||||
ACT_VM_SYNC_CONF,
|
||||
}
|
||||
|
||||
// 这些状态需要做 websocket 通知
|
||||
var WhiteList = []string{
|
||||
ACT_ADDTAG, ACT_ALLOCATE, ACT_DELOCATE, ACT_BM_CONVERT_HYPER,
|
||||
ACT_BM_MAINTENANCE, ACT_BM_UNCONVERT_HYPER, ACT_BM_UNMAINTENANCE,
|
||||
ACT_CANCEL_DELETE, ACT_CHANGE_OWNER, ACT_SYNC_CLOUD_OWNER,
|
||||
ACT_CLOUD_SYNC, ACT_DISABLE, ACT_ENABLE,
|
||||
ACT_GUEST_ATTACH_ISOLATED_DEVICE, ACT_GUEST_DETACH_ISOLATED_DEVICE,
|
||||
ACT_MERGE, ACT_OFFLINE, ACT_ONLINE, ACT_RELEASE_IP,
|
||||
ACT_RESERVE_IP, ACT_RESIZE, ACT_RMTAG, ACT_SPLIT,
|
||||
ACT_UNCACHED_IMAGE, ACT_VM_ATTACH_DISK, ACT_VM_BIND_KEYPAIR,
|
||||
ACT_VM_CHANGE_FLAVOR, ACT_VM_DEPLOY, ACT_VM_DETACH_DISK,
|
||||
ACT_VM_PURGE, ACT_VM_REBUILD, ACT_VM_RESET_PSWD,
|
||||
ACT_VM_CHANGE_BANDWIDTH, ACT_VM_START, ACT_VM_STOP,
|
||||
ACT_VM_RESTART, ACT_VM_UNBIND_KEYPAIR, ACT_VM_ASSIGNSECGROUP,
|
||||
ACT_VM_REVOKESECGROUP, ACT_VM_SETSECGROUP, ACT_RESET_DISK,
|
||||
ACT_SYNC_STATUS, ACT_SYNC_CONF, ACT_CREATE_BACKUP,
|
||||
ACT_SWITCH_TO_BACKUP, ACT_RENEW, ACT_MIGRATE,
|
||||
ACT_IMAGE_SAVE, ACT_RECYCLE_PREPAID, ACT_UNDO_RECYCLE_PREPAID,
|
||||
ACT_FETCH, ACT_VM_CHANGE_NIC, ACT_HOST_IMPORT_LIBVIRT_SERVERS,
|
||||
ACT_GUEST_CREATE_FROM_IMPORT, ACT_DISK_CREATE_SNAPSHOT,
|
||||
ACT_IMAGE_PROBE,
|
||||
}
|
||||
|
||||
const (
|
||||
ACT_ADDTAG = "添加标签"
|
||||
ACT_ALLOCATE = "分配"
|
||||
ACT_DELOCATE = "释放资源"
|
||||
ACT_BM_CONVERT_HYPER = "转换为宿主机"
|
||||
ACT_BM_MAINTENANCE = "进入离线状态"
|
||||
ACT_BM_UNCONVERT_HYPER = "转换为受管物理机"
|
||||
ACT_BM_UNMAINTENANCE = "退出离线状态"
|
||||
ACT_CANCEL_DELETE = "恢复"
|
||||
ACT_CHANGE_OWNER = "更改项目"
|
||||
ACT_SYNC_CLOUD_OWNER = "同步云项目"
|
||||
ACT_CLOUD_FULLSYNC = "全量同步"
|
||||
ACT_CLOUD_SYNC = "同步"
|
||||
ACT_CREATE = "创建"
|
||||
ACT_DELETE = "删除"
|
||||
ACT_PENDING_DELETE = "预删除"
|
||||
ACT_DISABLE = "禁用"
|
||||
ACT_ENABLE = "启用"
|
||||
ACT_GUEST_ATTACH_ISOLATED_DEVICE = "挂载透传设备"
|
||||
ACT_GUEST_DETACH_ISOLATED_DEVICE = "卸载透传设备"
|
||||
ACT_MERGE = "合并"
|
||||
ACT_OFFLINE = "下线"
|
||||
ACT_ONLINE = "上线"
|
||||
ACT_PRIVATE = "设为私有"
|
||||
ACT_PUBLIC = "设为共享"
|
||||
ACT_RELEASE_IP = "释放IP"
|
||||
ACT_RESERVE_IP = "预留IP"
|
||||
ACT_RESIZE = "扩容"
|
||||
ACT_RMTAG = "删除标签"
|
||||
ACT_SPLIT = "分割"
|
||||
ACT_UNCACHED_IMAGE = "清除缓存"
|
||||
ACT_UPDATE = "更新"
|
||||
ACT_VM_ATTACH_DISK = "挂载磁盘"
|
||||
ACT_VM_BIND_KEYPAIR = "绑定密钥"
|
||||
ACT_VM_CHANGE_FLAVOR = "调整配置"
|
||||
ACT_VM_DEPLOY = "部署"
|
||||
ACT_VM_DETACH_DISK = "卸载磁盘"
|
||||
ACT_VM_PURGE = "清除"
|
||||
ACT_VM_REBUILD = "重装系统"
|
||||
ACT_VM_RESET_PSWD = "重置密码"
|
||||
ACT_VM_CHANGE_BANDWIDTH = "调整带宽"
|
||||
ACT_VM_SRC_CHECK = "调整源IP、MAC地址检查"
|
||||
ACT_VM_START = "开机"
|
||||
ACT_VM_STOP = "关机"
|
||||
ACT_VM_RESTART = "重启"
|
||||
ACT_VM_SYNC_CONF = "同步配置"
|
||||
ACT_VM_SYNC_STATUS = "同步状态"
|
||||
ACT_VM_UNBIND_KEYPAIR = "解绑密钥"
|
||||
ACT_VM_ASSIGNSECGROUP = "关联安全组"
|
||||
ACT_VM_REVOKESECGROUP = "取消关联安全组"
|
||||
ACT_VM_SETSECGROUP = "设置安全组"
|
||||
ACT_RESET_DISK = "回滚磁盘"
|
||||
ACT_SYNC_STATUS = "同步状态"
|
||||
ACT_SYNC_CONF = "同步配置"
|
||||
ACT_CREATE_BACKUP = "创建备份机"
|
||||
ACT_SWITCH_TO_BACKUP = "主备切换"
|
||||
ACT_RENEW = "续费"
|
||||
ACT_SET_AUTO_RENEW = "设置自动续费"
|
||||
ACT_MIGRATE = "迁移"
|
||||
ACT_EIP_ASSOCIATE = "绑定弹性IP"
|
||||
ACT_EIP_DISSOCIATE = "解绑弹性IP"
|
||||
ACT_EIP_CONVERT = "弹性IP转换"
|
||||
ACT_CHANGE_BANDWIDTH = "调整带宽"
|
||||
ACT_DISK_CREATE_SNAPSHOT = "磁盘创建快照"
|
||||
ACT_LB_ADD_BACKEND = "添加后端服务器"
|
||||
ACT_LB_REMOVE_BACKEND = "移除后端服务器"
|
||||
ACT_ADDTAG = "addtag"
|
||||
ACT_ALLOCATE = "allocate"
|
||||
ACT_DELOCATE = "delocate"
|
||||
ACT_BM_CONVERT_HYPER = "bm_convert_hyper"
|
||||
ACT_BM_MAINTENANCE = "bm_maintenance"
|
||||
ACT_BM_UNCONVERT_HYPER = "bm_unconvert_hyper"
|
||||
ACT_BM_UNMAINTENANCE = "bm_unmaintenance"
|
||||
ACT_CANCEL_DELETE = "cancel_delete"
|
||||
ACT_CHANGE_OWNER = "change_owner"
|
||||
ACT_SYNC_CLOUD_OWNER = "sync_cloud_owner"
|
||||
ACT_CLOUD_FULLSYNC = "cloud_fullsync"
|
||||
ACT_CLOUD_SYNC = "cloud_sync"
|
||||
ACT_CREATE = "create"
|
||||
ACT_DELETE = "delete"
|
||||
ACT_PENDING_DELETE = "pending_delete"
|
||||
ACT_DISABLE = "disable"
|
||||
ACT_ENABLE = "enable"
|
||||
ACT_GUEST_ATTACH_ISOLATED_DEVICE = "guest_attach_isolated_device"
|
||||
ACT_GUEST_DETACH_ISOLATED_DEVICE = "guest_detach_isolated_device"
|
||||
ACT_MERGE = "merge"
|
||||
ACT_OFFLINE = "offline"
|
||||
ACT_ONLINE = "online"
|
||||
ACT_PRIVATE = "private"
|
||||
ACT_PUBLIC = "public"
|
||||
ACT_RELEASE_IP = "release_ip"
|
||||
ACT_RESERVE_IP = "reserve_ip"
|
||||
ACT_RESIZE = "resize"
|
||||
ACT_RMTAG = "rmtag"
|
||||
ACT_SPLIT = "split"
|
||||
ACT_UNCACHED_IMAGE = "uncached_image"
|
||||
ACT_UPDATE = "update"
|
||||
ACT_VM_ATTACH_DISK = "vm_attach_disk"
|
||||
ACT_VM_BIND_KEYPAIR = "vm_bind_keypair"
|
||||
ACT_VM_CHANGE_FLAVOR = "vm_change_flavor"
|
||||
ACT_VM_DEPLOY = "vm_deploy"
|
||||
ACT_VM_DETACH_DISK = "vm_detach_disk"
|
||||
ACT_VM_PURGE = "vm_purge"
|
||||
ACT_VM_REBUILD = "vm_rebuild"
|
||||
ACT_VM_RESET_PSWD = "vm_reset_pswd"
|
||||
ACT_VM_CHANGE_BANDWIDTH = "vm_change_bandwidth"
|
||||
ACT_VM_SRC_CHECK = "vm_src_check"
|
||||
ACT_VM_START = "vm_start"
|
||||
ACT_VM_STOP = "vm_stop"
|
||||
ACT_VM_RESTART = "vm_restart"
|
||||
ACT_VM_SYNC_CONF = "vm_sync_conf"
|
||||
ACT_VM_SYNC_STATUS = "vm_sync_status"
|
||||
ACT_VM_UNBIND_KEYPAIR = "vm_unbind_keypair"
|
||||
ACT_VM_ASSIGNSECGROUP = "vm_assignsecgroup"
|
||||
ACT_VM_REVOKESECGROUP = "vm_revokesecgroup"
|
||||
ACT_VM_SETSECGROUP = "vm_setsecgroup"
|
||||
ACT_RESET_DISK = "reset_disk"
|
||||
ACT_SYNC_STATUS = "sync_status"
|
||||
ACT_SYNC_CONF = "sync_conf"
|
||||
ACT_CREATE_BACKUP = "create_backup"
|
||||
ACT_SWITCH_TO_BACKUP = "switch_to_backup"
|
||||
ACT_RENEW = "renew"
|
||||
ACT_SET_AUTO_RENEW = "set_auto_renew"
|
||||
ACT_MIGRATE = "migrate"
|
||||
ACT_EIP_ASSOCIATE = "eip_associate"
|
||||
ACT_EIP_DISSOCIATE = "eip_dissociate"
|
||||
ACT_EIP_CONVERT = "eip_convert"
|
||||
ACT_CHANGE_BANDWIDTH = "change_bandwidth"
|
||||
ACT_DISK_CREATE_SNAPSHOT = "disk_create_snapshot"
|
||||
ACT_LB_ADD_BACKEND = "lb_add_backend"
|
||||
ACT_LB_REMOVE_BACKEND = "lb_remove_backend"
|
||||
ACL_LB_SYNC_BACKEND_CONF = "同步后端服务器配置"
|
||||
ACT_LB_ADD_LISTENER_RULE = "添加负载均衡转发规则"
|
||||
ACT_LB_REMOVE_LISTENER_RULE = "移除负载均衡转发规则"
|
||||
ACT_DELETE_BACKUP = "删除备份机"
|
||||
ACT_APPLY_SNAPSHOT_POLICY = "绑定快照策略"
|
||||
ACT_CANCEL_SNAPSHOT_POLICY = "取消快照策略"
|
||||
ACT_BIND_DISK = "绑定磁盘"
|
||||
ACT_UNBIND_DISK = "解绑磁盘"
|
||||
ACT_ATTACH_HOST = "关联宿主机"
|
||||
ACT_DETACH_HOST = "取消关联宿主机"
|
||||
ACT_VM_IO_THROTTLE = "虚拟机磁盘限速"
|
||||
ACT_VM_RESET = "虚拟机回滚快照"
|
||||
ACT_VM_SNAPSHOT_AND_CLONE = "虚拟机快照并克隆"
|
||||
ACT_VM_BLOCK_STREAM = "同步数据"
|
||||
ACT_ATTACH_NETWORK = "绑定网卡"
|
||||
ACT_VM_CONVERT = "虚拟机转换Hypervisor"
|
||||
ACT_LB_ADD_LISTENER_RULE = "lb_add_listener_rule"
|
||||
ACT_LB_REMOVE_LISTENER_RULE = "lb_remove_listener_rule"
|
||||
ACT_DELETE_BACKUP = "delete_backup"
|
||||
ACT_APPLY_SNAPSHOT_POLICY = "apply_snapshot_policy"
|
||||
ACT_CANCEL_SNAPSHOT_POLICY = "cancel_snapshot_policy"
|
||||
ACT_BIND_DISK = "bind_disk"
|
||||
ACT_UNBIND_DISK = "unbind_disk"
|
||||
ACT_ATTACH_HOST = "attach_host"
|
||||
ACT_DETACH_HOST = "detach_host"
|
||||
ACT_VM_IO_THROTTLE = "vm_io_throttle"
|
||||
ACT_VM_RESET = "vm_reset"
|
||||
ACT_VM_SNAPSHOT_AND_CLONE = "vm_snapshot_and_clone"
|
||||
ACT_VM_BLOCK_STREAM = "vm_block_stream"
|
||||
ACT_ATTACH_NETWORK = "attach_network"
|
||||
ACT_VM_CONVERT = "vm_convert"
|
||||
|
||||
ACT_CACHED_IMAGE = "缓存镜像"
|
||||
ACT_CACHED_IMAGE = "cached_image"
|
||||
|
||||
ACT_REBOOT = "重启"
|
||||
ACT_CHANGE_CONFIG = "调整配置"
|
||||
ACT_REBOOT = "reboot"
|
||||
ACT_CHANGE_CONFIG = "change_config"
|
||||
|
||||
ACT_OPEN_PUBLIC_CONNECTION = "打开外网地址"
|
||||
ACT_CLOSE_PUBLIC_CONNECTION = "关闭外网地址"
|
||||
ACT_OPEN_PUBLIC_CONNECTION = "open_public_connection"
|
||||
ACT_CLOSE_PUBLIC_CONNECTION = "close_public_connection"
|
||||
|
||||
ACT_IMAGE_SAVE = "上传镜像"
|
||||
ACT_IMAGE_PROBE = "镜像检测"
|
||||
ACT_IMAGE_SAVE = "image_save"
|
||||
ACT_IMAGE_PROBE = "image_probe"
|
||||
|
||||
ACT_AUTHENTICATE = "认证登录"
|
||||
ACT_AUTHENTICATE = "authenticate"
|
||||
|
||||
ACT_HEALTH_CHECK = "健康检查"
|
||||
ACT_HEALTH_CHECK = "health_check"
|
||||
|
||||
ACT_RECYCLE_PREPAID = "池化预付费主机"
|
||||
ACT_UNDO_RECYCLE_PREPAID = "取消池化预付费主机"
|
||||
ACT_RECYCLE_PREPAID = "recycle_prepaid"
|
||||
ACT_UNDO_RECYCLE_PREPAID = "undo_recycle_prepaid"
|
||||
|
||||
ACT_FETCH = "下载密钥"
|
||||
ACT_FETCH = "fetch"
|
||||
|
||||
ACT_VM_CHANGE_NIC = "更改网卡配置"
|
||||
ACT_VM_CHANGE_NIC = "vm_change_nic"
|
||||
|
||||
ACT_HOST_IMPORT_LIBVIRT_SERVERS = "libvirt托管虚拟机导入"
|
||||
ACT_GUEST_CREATE_FROM_IMPORT = "导入虚拟机创建"
|
||||
ACT_GUEST_PANICKED = "GuestPanicked"
|
||||
ACT_HOST_MAINTAINING = "宿主机进入维护模式"
|
||||
ACT_HOST_IMPORT_LIBVIRT_SERVERS = "host_import_libvirt_servers"
|
||||
ACT_GUEST_CREATE_FROM_IMPORT = "guest_create_from_import"
|
||||
ACT_GUEST_PANICKED = "guest_panicked"
|
||||
ACT_HOST_MAINTAINING = "host_maintaining"
|
||||
|
||||
ACT_MKDIR = "创建目录"
|
||||
ACT_DELETE_OBJECT = "删除对象"
|
||||
ACT_UPLOAD_OBJECT = "上传对象"
|
||||
ACT_MKDIR = "mkdir"
|
||||
ACT_DELETE_OBJECT = "delete_object"
|
||||
ACT_UPLOAD_OBJECT = "upload_object"
|
||||
|
||||
ACT_NAT_CREATE_SNAT = "创建SNAT规则"
|
||||
ACT_NAT_CREATE_DNAT = "创建DNAT规则"
|
||||
ACT_NAT_DELETE_SNAT = "删除SNAT规则"
|
||||
ACT_NAT_DELETE_DNAT = "删除DNAT规则"
|
||||
ACT_NAT_CREATE_SNAT = "nat_create_snat"
|
||||
ACT_NAT_CREATE_DNAT = "nat_create_dnat"
|
||||
ACT_NAT_DELETE_SNAT = "nat_delete_snat"
|
||||
ACT_NAT_DELETE_DNAT = "nat_delete_dnat"
|
||||
|
||||
ACT_GRANT_PRIVILEGE = "赋予权限"
|
||||
ACT_REVOKE_PRIVILEGE = "解除权限"
|
||||
ACT_SET_PRIVILEGES = "设置权限"
|
||||
ACT_RESTORE = "备份恢复"
|
||||
ACT_RESET_PASSWORD = "重置密码"
|
||||
ACT_GRANT_PRIVILEGE = "grant_privilege"
|
||||
ACT_REVOKE_PRIVILEGE = "revoke_privilege"
|
||||
ACT_SET_PRIVILEGES = "set_privileges"
|
||||
ACT_RESTORE = "restore"
|
||||
ACT_RESET_PASSWORD = "reset_password"
|
||||
|
||||
ACT_VM_ASSOCIATE = "绑定虚拟机"
|
||||
ACT_VM_DISSOCIATE = "解绑虚拟机"
|
||||
ACT_NATGATEWAY_DISSOCIATE = "解绑NAT网关"
|
||||
ACT_LOADBALANCER_DISSOCIATE = "解绑负载均衡"
|
||||
ACT_VM_ASSOCIATE = "vm_associate"
|
||||
ACT_VM_DISSOCIATE = "vm_dissociate"
|
||||
ACT_NATGATEWAY_DISSOCIATE = "natgateway_dissociate"
|
||||
ACT_LOADBALANCER_DISSOCIATE = "loadbalancer_dissociate"
|
||||
|
||||
ACT_PREPARE = "同步硬件配置"
|
||||
ACT_PROBE = "检测配置"
|
||||
ACT_PREPARE = "prepare"
|
||||
ACT_PROBE = "probe"
|
||||
|
||||
ACT_INSTANCE_GROUP_BIND = "绑定主机组"
|
||||
ACT_INSTANCE_GROUP_UNBIND = "解绑主机组"
|
||||
ACT_INSTANCE_GROUP_BIND = "instance_group_bind"
|
||||
ACT_INSTANCE_GROUP_UNBIND = "instance_group_unbind"
|
||||
|
||||
ACT_FLUSH_INSTANCE = "清空数据"
|
||||
ACT_FLUSH_INSTANCE = "flush_instance"
|
||||
|
||||
ACT_UPDATE_STATUS = "更新状态"
|
||||
ACT_UPDATE_STATUS = "update_status"
|
||||
|
||||
ACT_UPDATE_PASSWORD = "更新密码"
|
||||
ACT_UPDATE_PASSWORD = "update_password"
|
||||
|
||||
ACT_REMOVE_GUEST = "移除实例"
|
||||
ACT_CREATE_SCALING_POLICY = "创建伸缩策略"
|
||||
ACT_DELETE_SCALING_POLICY = "删除伸缩策略"
|
||||
ACT_REMOVE_GUEST = "remove_guest"
|
||||
ACT_CREATE_SCALING_POLICY = "create_scaling_policy"
|
||||
ACT_DELETE_SCALING_POLICY = "delete_scaling_policy"
|
||||
|
||||
ACT_SAVE_TO_TEMPLATE = "保存为模版"
|
||||
ACT_SAVE_TO_TEMPLATE = "save_to_template"
|
||||
|
||||
ACT_SYNC_POLICIES = "同步权限"
|
||||
ACT_SYNC_USERS = "同步用户"
|
||||
ACT_ADD_USER = "添加用户"
|
||||
ACT_REMOVE_USER = "移除用户"
|
||||
ACT_ATTACH_POLICY = "绑定权限"
|
||||
ACT_DETACH_POLICY = "移除权限"
|
||||
ACT_SYNC_POLICIES = "sync_policies"
|
||||
ACT_SYNC_USERS = "sync_users"
|
||||
ACT_ADD_USER = "add_user"
|
||||
ACT_REMOVE_USER = "remove_user"
|
||||
ACT_ATTACH_POLICY = "attach_policy"
|
||||
ACT_DETACH_POLICY = "detach_policy"
|
||||
|
||||
ACT_UPDATE_BILLING_OPTIONS = "更新账单文件"
|
||||
ACT_UPDATE_CREDENTIAL = "更新账号密码"
|
||||
ACT_UPDATE_BILLING_OPTIONS = "update_billing_options"
|
||||
ACT_UPDATE_CREDENTIAL = "update_credential"
|
||||
|
||||
ACT_PULL_SUBCONTACT = "拉取联系方式"
|
||||
ACT_SEND_NOTIFICATION = "发送通知消息"
|
||||
ACT_SEND_VERIFICATION = "发送验证消息"
|
||||
ACT_PULL_SUBCONTACT = "pull_subcontact"
|
||||
ACT_SEND_NOTIFICATION = "send_notification"
|
||||
ACT_SEND_VERIFICATION = "send_verification"
|
||||
|
||||
ACT_SYNC_VPCS = "同步VPC"
|
||||
ACT_SYNC_RECORD_SETS = "同步解析列表"
|
||||
ACT_SYNC_VPCS = "sync_vpcs"
|
||||
ACT_SYNC_RECORD_SETS = "sync_record_sets"
|
||||
)
|
||||
|
||||
@@ -0,0 +1,602 @@
|
||||
// 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 logclient
|
||||
|
||||
import (
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
)
|
||||
|
||||
var OpsActionI18nTable = i18n.Table{}
|
||||
|
||||
func init() {
|
||||
t := OpsActionI18nTable
|
||||
|
||||
t.Set(ACT_ADDTAG, i18n.NewTableEntry().
|
||||
EN("Addtag").
|
||||
CN("添加标签"),
|
||||
)
|
||||
t.Set(ACT_ALLOCATE, i18n.NewTableEntry().
|
||||
EN("Allocate").
|
||||
CN("分配"),
|
||||
)
|
||||
t.Set(ACT_DELOCATE, i18n.NewTableEntry().
|
||||
EN("Delocate").
|
||||
CN("释放资源"),
|
||||
)
|
||||
t.Set(ACT_BM_CONVERT_HYPER, i18n.NewTableEntry().
|
||||
EN("Bm Convert Hyper").
|
||||
CN("转换为宿主机"),
|
||||
)
|
||||
t.Set(ACT_BM_MAINTENANCE, i18n.NewTableEntry().
|
||||
EN("Bm Maintenance").
|
||||
CN("进入离线状态"),
|
||||
)
|
||||
t.Set(ACT_BM_UNCONVERT_HYPER, i18n.NewTableEntry().
|
||||
EN("Bm Unconvert Hyper").
|
||||
CN("转换为受管物理机"),
|
||||
)
|
||||
t.Set(ACT_BM_UNMAINTENANCE, i18n.NewTableEntry().
|
||||
EN("Bm Unmaintenance").
|
||||
CN("退出离线状态"),
|
||||
)
|
||||
t.Set(ACT_CANCEL_DELETE, i18n.NewTableEntry().
|
||||
EN("Cancel Delete").
|
||||
CN("恢复"),
|
||||
)
|
||||
t.Set(ACT_CHANGE_OWNER, i18n.NewTableEntry().
|
||||
EN("Change Owner").
|
||||
CN("更改项目"),
|
||||
)
|
||||
t.Set(ACT_SYNC_CLOUD_OWNER, i18n.NewTableEntry().
|
||||
EN("Sync Cloud Owner").
|
||||
CN("同步云项目"),
|
||||
)
|
||||
t.Set(ACT_CLOUD_FULLSYNC, i18n.NewTableEntry().
|
||||
EN("Cloud Fullsync").
|
||||
CN("全量同步"),
|
||||
)
|
||||
t.Set(ACT_CLOUD_SYNC, i18n.NewTableEntry().
|
||||
EN("Cloud Sync").
|
||||
CN("同步"),
|
||||
)
|
||||
t.Set(ACT_CREATE, i18n.NewTableEntry().
|
||||
EN("Create").
|
||||
CN("创建"),
|
||||
)
|
||||
t.Set(ACT_DELETE, i18n.NewTableEntry().
|
||||
EN("Delete").
|
||||
CN("删除"),
|
||||
)
|
||||
t.Set(ACT_PENDING_DELETE, i18n.NewTableEntry().
|
||||
EN("Pending Delete").
|
||||
CN("预删除"),
|
||||
)
|
||||
t.Set(ACT_DISABLE, i18n.NewTableEntry().
|
||||
EN("Disable").
|
||||
CN("禁用"),
|
||||
)
|
||||
t.Set(ACT_ENABLE, i18n.NewTableEntry().
|
||||
EN("Enable").
|
||||
CN("启用"),
|
||||
)
|
||||
t.Set(ACT_GUEST_ATTACH_ISOLATED_DEVICE, i18n.NewTableEntry().
|
||||
EN("Guest Attach Isolated Device").
|
||||
CN("挂载透传设备"),
|
||||
)
|
||||
t.Set(ACT_GUEST_DETACH_ISOLATED_DEVICE, i18n.NewTableEntry().
|
||||
EN("Guest Detach Isolated Device").
|
||||
CN("卸载透传设备"),
|
||||
)
|
||||
t.Set(ACT_MERGE, i18n.NewTableEntry().
|
||||
EN("Merge").
|
||||
CN("合并"),
|
||||
)
|
||||
t.Set(ACT_OFFLINE, i18n.NewTableEntry().
|
||||
EN("Offline").
|
||||
CN("下线"),
|
||||
)
|
||||
t.Set(ACT_ONLINE, i18n.NewTableEntry().
|
||||
EN("Online").
|
||||
CN("上线"),
|
||||
)
|
||||
t.Set(ACT_PRIVATE, i18n.NewTableEntry().
|
||||
EN("Private").
|
||||
CN("设为私有"),
|
||||
)
|
||||
t.Set(ACT_PUBLIC, i18n.NewTableEntry().
|
||||
EN("Public").
|
||||
CN("设为共享"),
|
||||
)
|
||||
t.Set(ACT_RELEASE_IP, i18n.NewTableEntry().
|
||||
EN("Release Ip").
|
||||
CN("释放IP"),
|
||||
)
|
||||
t.Set(ACT_RESERVE_IP, i18n.NewTableEntry().
|
||||
EN("Reserve Ip").
|
||||
CN("预留IP"),
|
||||
)
|
||||
t.Set(ACT_RESIZE, i18n.NewTableEntry().
|
||||
EN("Resize").
|
||||
CN("扩容"),
|
||||
)
|
||||
t.Set(ACT_RMTAG, i18n.NewTableEntry().
|
||||
EN("Rmtag").
|
||||
CN("删除标签"),
|
||||
)
|
||||
t.Set(ACT_SPLIT, i18n.NewTableEntry().
|
||||
EN("Split").
|
||||
CN("分割"),
|
||||
)
|
||||
t.Set(ACT_UNCACHED_IMAGE, i18n.NewTableEntry().
|
||||
EN("Uncached Image").
|
||||
CN("清除缓存"),
|
||||
)
|
||||
t.Set(ACT_UPDATE, i18n.NewTableEntry().
|
||||
EN("Update").
|
||||
CN("更新"),
|
||||
)
|
||||
t.Set(ACT_VM_ATTACH_DISK, i18n.NewTableEntry().
|
||||
EN("Vm Attach Disk").
|
||||
CN("挂载磁盘"),
|
||||
)
|
||||
t.Set(ACT_VM_BIND_KEYPAIR, i18n.NewTableEntry().
|
||||
EN("Vm Bind Keypair").
|
||||
CN("绑定密钥"),
|
||||
)
|
||||
t.Set(ACT_VM_CHANGE_FLAVOR, i18n.NewTableEntry().
|
||||
EN("Vm Change Flavor").
|
||||
CN("调整配置"),
|
||||
)
|
||||
t.Set(ACT_VM_DEPLOY, i18n.NewTableEntry().
|
||||
EN("Vm Deploy").
|
||||
CN("部署"),
|
||||
)
|
||||
t.Set(ACT_VM_DETACH_DISK, i18n.NewTableEntry().
|
||||
EN("Vm Detach Disk").
|
||||
CN("卸载磁盘"),
|
||||
)
|
||||
t.Set(ACT_VM_PURGE, i18n.NewTableEntry().
|
||||
EN("Vm Purge").
|
||||
CN("清除"),
|
||||
)
|
||||
t.Set(ACT_VM_REBUILD, i18n.NewTableEntry().
|
||||
EN("Vm Rebuild").
|
||||
CN("重装系统"),
|
||||
)
|
||||
t.Set(ACT_VM_RESET_PSWD, i18n.NewTableEntry().
|
||||
EN("Vm Reset Pswd").
|
||||
CN("重置密码"),
|
||||
)
|
||||
t.Set(ACT_VM_CHANGE_BANDWIDTH, i18n.NewTableEntry().
|
||||
EN("Vm Change Bandwidth").
|
||||
CN("调整带宽"),
|
||||
)
|
||||
t.Set(ACT_VM_SRC_CHECK, i18n.NewTableEntry().
|
||||
EN("Vm Src Check").
|
||||
CN("调整源IP、MAC地址检查"),
|
||||
)
|
||||
t.Set(ACT_VM_START, i18n.NewTableEntry().
|
||||
EN("Vm Start").
|
||||
CN("开机"),
|
||||
)
|
||||
t.Set(ACT_VM_STOP, i18n.NewTableEntry().
|
||||
EN("Vm Stop").
|
||||
CN("关机"),
|
||||
)
|
||||
t.Set(ACT_VM_RESTART, i18n.NewTableEntry().
|
||||
EN("Vm Restart").
|
||||
CN("重启"),
|
||||
)
|
||||
t.Set(ACT_VM_SYNC_CONF, i18n.NewTableEntry().
|
||||
EN("Vm Sync Conf").
|
||||
CN("同步配置"),
|
||||
)
|
||||
t.Set(ACT_VM_SYNC_STATUS, i18n.NewTableEntry().
|
||||
EN("Vm Sync Status").
|
||||
CN("同步状态"),
|
||||
)
|
||||
t.Set(ACT_VM_UNBIND_KEYPAIR, i18n.NewTableEntry().
|
||||
EN("Vm Unbind Keypair").
|
||||
CN("解绑密钥"),
|
||||
)
|
||||
t.Set(ACT_VM_ASSIGNSECGROUP, i18n.NewTableEntry().
|
||||
EN("Vm Assignsecgroup").
|
||||
CN("关联安全组"),
|
||||
)
|
||||
t.Set(ACT_VM_REVOKESECGROUP, i18n.NewTableEntry().
|
||||
EN("Vm Revokesecgroup").
|
||||
CN("取消关联安全组"),
|
||||
)
|
||||
t.Set(ACT_VM_SETSECGROUP, i18n.NewTableEntry().
|
||||
EN("Vm Setsecgroup").
|
||||
CN("设置安全组"),
|
||||
)
|
||||
t.Set(ACT_RESET_DISK, i18n.NewTableEntry().
|
||||
EN("Reset Disk").
|
||||
CN("回滚磁盘"),
|
||||
)
|
||||
t.Set(ACT_SYNC_STATUS, i18n.NewTableEntry().
|
||||
EN("Sync Status").
|
||||
CN("同步状态"),
|
||||
)
|
||||
t.Set(ACT_SYNC_CONF, i18n.NewTableEntry().
|
||||
EN("Sync Conf").
|
||||
CN("同步配置"),
|
||||
)
|
||||
t.Set(ACT_CREATE_BACKUP, i18n.NewTableEntry().
|
||||
EN("Create Backup").
|
||||
CN("创建备份机"),
|
||||
)
|
||||
t.Set(ACT_SWITCH_TO_BACKUP, i18n.NewTableEntry().
|
||||
EN("Switch To Backup").
|
||||
CN("主备切换"),
|
||||
)
|
||||
t.Set(ACT_RENEW, i18n.NewTableEntry().
|
||||
EN("Renew").
|
||||
CN("续费"),
|
||||
)
|
||||
t.Set(ACT_SET_AUTO_RENEW, i18n.NewTableEntry().
|
||||
EN("Set Auto Renew").
|
||||
CN("设置自动续费"),
|
||||
)
|
||||
t.Set(ACT_MIGRATE, i18n.NewTableEntry().
|
||||
EN("Migrate").
|
||||
CN("迁移"),
|
||||
)
|
||||
t.Set(ACT_EIP_ASSOCIATE, i18n.NewTableEntry().
|
||||
EN("Eip Associate").
|
||||
CN("绑定弹性IP"),
|
||||
)
|
||||
t.Set(ACT_EIP_DISSOCIATE, i18n.NewTableEntry().
|
||||
EN("Eip Dissociate").
|
||||
CN("解绑弹性IP"),
|
||||
)
|
||||
t.Set(ACT_EIP_CONVERT, i18n.NewTableEntry().
|
||||
EN("Eip Convert").
|
||||
CN("弹性IP转换"),
|
||||
)
|
||||
t.Set(ACT_CHANGE_BANDWIDTH, i18n.NewTableEntry().
|
||||
EN("Change Bandwidth").
|
||||
CN("调整带宽"),
|
||||
)
|
||||
t.Set(ACT_DISK_CREATE_SNAPSHOT, i18n.NewTableEntry().
|
||||
EN("Disk Create Snapshot").
|
||||
CN("磁盘创建快照"),
|
||||
)
|
||||
t.Set(ACT_LB_ADD_BACKEND, i18n.NewTableEntry().
|
||||
EN("Lb Add Backend").
|
||||
CN("添加后端服务器"),
|
||||
)
|
||||
t.Set(ACT_LB_REMOVE_BACKEND, i18n.NewTableEntry().
|
||||
EN("Lb Remove Backend").
|
||||
CN("移除后端服务器"),
|
||||
)
|
||||
t.Set(ACL_LB_SYNC_BACKEND_CONF, i18n.NewTableEntry().
|
||||
CN("同步后端服务器配置"),
|
||||
)
|
||||
t.Set(ACT_LB_ADD_LISTENER_RULE, i18n.NewTableEntry().
|
||||
EN("Lb Add Listener Rule").
|
||||
CN("添加负载均衡转发规则"),
|
||||
)
|
||||
t.Set(ACT_LB_REMOVE_LISTENER_RULE, i18n.NewTableEntry().
|
||||
EN("Lb Remove Listener Rule").
|
||||
CN("移除负载均衡转发规则"),
|
||||
)
|
||||
t.Set(ACT_DELETE_BACKUP, i18n.NewTableEntry().
|
||||
EN("Delete Backup").
|
||||
CN("删除备份机"),
|
||||
)
|
||||
t.Set(ACT_APPLY_SNAPSHOT_POLICY, i18n.NewTableEntry().
|
||||
EN("Apply Snapshot Policy").
|
||||
CN("绑定快照策略"),
|
||||
)
|
||||
t.Set(ACT_CANCEL_SNAPSHOT_POLICY, i18n.NewTableEntry().
|
||||
EN("Cancel Snapshot Policy").
|
||||
CN("取消快照策略"),
|
||||
)
|
||||
t.Set(ACT_BIND_DISK, i18n.NewTableEntry().
|
||||
EN("Bind Disk").
|
||||
CN("绑定磁盘"),
|
||||
)
|
||||
t.Set(ACT_UNBIND_DISK, i18n.NewTableEntry().
|
||||
EN("Unbind Disk").
|
||||
CN("解绑磁盘"),
|
||||
)
|
||||
t.Set(ACT_ATTACH_HOST, i18n.NewTableEntry().
|
||||
EN("Attach Host").
|
||||
CN("关联宿主机"),
|
||||
)
|
||||
t.Set(ACT_DETACH_HOST, i18n.NewTableEntry().
|
||||
EN("Detach Host").
|
||||
CN("取消关联宿主机"),
|
||||
)
|
||||
t.Set(ACT_VM_IO_THROTTLE, i18n.NewTableEntry().
|
||||
EN("Vm Io Throttle").
|
||||
CN("虚拟机磁盘限速"),
|
||||
)
|
||||
t.Set(ACT_VM_RESET, i18n.NewTableEntry().
|
||||
EN("Vm Reset").
|
||||
CN("虚拟机回滚快照"),
|
||||
)
|
||||
t.Set(ACT_VM_SNAPSHOT_AND_CLONE, i18n.NewTableEntry().
|
||||
EN("Vm Snapshot And Clone").
|
||||
CN("虚拟机快照并克隆"),
|
||||
)
|
||||
t.Set(ACT_VM_BLOCK_STREAM, i18n.NewTableEntry().
|
||||
EN("Vm Block Stream").
|
||||
CN("同步数据"),
|
||||
)
|
||||
t.Set(ACT_ATTACH_NETWORK, i18n.NewTableEntry().
|
||||
EN("Attach Network").
|
||||
CN("绑定网卡"),
|
||||
)
|
||||
t.Set(ACT_VM_CONVERT, i18n.NewTableEntry().
|
||||
EN("Vm Convert").
|
||||
CN("虚拟机转换Hypervisor"),
|
||||
)
|
||||
|
||||
t.Set(ACT_CACHED_IMAGE, i18n.NewTableEntry().
|
||||
EN("Cached Image").
|
||||
CN("缓存镜像"),
|
||||
)
|
||||
|
||||
t.Set(ACT_REBOOT, i18n.NewTableEntry().
|
||||
EN("Reboot").
|
||||
CN("重启"),
|
||||
)
|
||||
t.Set(ACT_CHANGE_CONFIG, i18n.NewTableEntry().
|
||||
EN("Change Config").
|
||||
CN("调整配置"),
|
||||
)
|
||||
|
||||
t.Set(ACT_OPEN_PUBLIC_CONNECTION, i18n.NewTableEntry().
|
||||
EN("Open Public Connection").
|
||||
CN("打开外网地址"),
|
||||
)
|
||||
t.Set(ACT_CLOSE_PUBLIC_CONNECTION, i18n.NewTableEntry().
|
||||
EN("Close Public Connection").
|
||||
CN("关闭外网地址"),
|
||||
)
|
||||
|
||||
t.Set(ACT_IMAGE_SAVE, i18n.NewTableEntry().
|
||||
EN("Image Save").
|
||||
CN("上传镜像"),
|
||||
)
|
||||
t.Set(ACT_IMAGE_PROBE, i18n.NewTableEntry().
|
||||
EN("Image Probe").
|
||||
CN("镜像检测"),
|
||||
)
|
||||
|
||||
t.Set(ACT_AUTHENTICATE, i18n.NewTableEntry().
|
||||
EN("Authenticate").
|
||||
CN("认证登录"),
|
||||
)
|
||||
|
||||
t.Set(ACT_HEALTH_CHECK, i18n.NewTableEntry().
|
||||
EN("Health Check").
|
||||
CN("健康检查"),
|
||||
)
|
||||
|
||||
t.Set(ACT_RECYCLE_PREPAID, i18n.NewTableEntry().
|
||||
EN("Recycle Prepaid").
|
||||
CN("池化预付费主机"),
|
||||
)
|
||||
t.Set(ACT_UNDO_RECYCLE_PREPAID, i18n.NewTableEntry().
|
||||
EN("Undo Recycle Prepaid").
|
||||
CN("取消池化预付费主机"),
|
||||
)
|
||||
|
||||
t.Set(ACT_FETCH, i18n.NewTableEntry().
|
||||
EN("Fetch").
|
||||
CN("下载密钥"),
|
||||
)
|
||||
|
||||
t.Set(ACT_VM_CHANGE_NIC, i18n.NewTableEntry().
|
||||
EN("Vm Change Nic").
|
||||
CN("更改网卡配置"),
|
||||
)
|
||||
|
||||
t.Set(ACT_HOST_IMPORT_LIBVIRT_SERVERS, i18n.NewTableEntry().
|
||||
EN("Host Import Libvirt Servers").
|
||||
CN("libvirt托管虚拟机导入"),
|
||||
)
|
||||
t.Set(ACT_GUEST_CREATE_FROM_IMPORT, i18n.NewTableEntry().
|
||||
EN("Guest Create From Import").
|
||||
CN("导入虚拟机创建"),
|
||||
)
|
||||
t.Set(ACT_GUEST_PANICKED, i18n.NewTableEntry().
|
||||
EN("Guest Panicked").
|
||||
CN("GuestPanicked"),
|
||||
)
|
||||
t.Set(ACT_HOST_MAINTAINING, i18n.NewTableEntry().
|
||||
EN("Host Maintaining").
|
||||
CN("宿主机进入维护模式"),
|
||||
)
|
||||
|
||||
t.Set(ACT_MKDIR, i18n.NewTableEntry().
|
||||
EN("Mkdir").
|
||||
CN("创建目录"),
|
||||
)
|
||||
t.Set(ACT_DELETE_OBJECT, i18n.NewTableEntry().
|
||||
EN("Delete Object").
|
||||
CN("删除对象"),
|
||||
)
|
||||
t.Set(ACT_UPLOAD_OBJECT, i18n.NewTableEntry().
|
||||
EN("Upload Object").
|
||||
CN("上传对象"),
|
||||
)
|
||||
|
||||
t.Set(ACT_NAT_CREATE_SNAT, i18n.NewTableEntry().
|
||||
EN("Nat Create Snat").
|
||||
CN("创建SNAT规则"),
|
||||
)
|
||||
t.Set(ACT_NAT_CREATE_DNAT, i18n.NewTableEntry().
|
||||
EN("Nat Create Dnat").
|
||||
CN("创建DNAT规则"),
|
||||
)
|
||||
t.Set(ACT_NAT_DELETE_SNAT, i18n.NewTableEntry().
|
||||
EN("Nat Delete Snat").
|
||||
CN("删除SNAT规则"),
|
||||
)
|
||||
t.Set(ACT_NAT_DELETE_DNAT, i18n.NewTableEntry().
|
||||
EN("Nat Delete Dnat").
|
||||
CN("删除DNAT规则"),
|
||||
)
|
||||
|
||||
t.Set(ACT_GRANT_PRIVILEGE, i18n.NewTableEntry().
|
||||
EN("Grant Privilege").
|
||||
CN("赋予权限"),
|
||||
)
|
||||
t.Set(ACT_REVOKE_PRIVILEGE, i18n.NewTableEntry().
|
||||
EN("Revoke Privilege").
|
||||
CN("解除权限"),
|
||||
)
|
||||
t.Set(ACT_SET_PRIVILEGES, i18n.NewTableEntry().
|
||||
EN("Set Privileges").
|
||||
CN("设置权限"),
|
||||
)
|
||||
t.Set(ACT_RESTORE, i18n.NewTableEntry().
|
||||
EN("Restore").
|
||||
CN("备份恢复"),
|
||||
)
|
||||
t.Set(ACT_RESET_PASSWORD, i18n.NewTableEntry().
|
||||
EN("Reset Password").
|
||||
CN("重置密码"),
|
||||
)
|
||||
|
||||
t.Set(ACT_VM_ASSOCIATE, i18n.NewTableEntry().
|
||||
EN("Vm Associate").
|
||||
CN("绑定虚拟机"),
|
||||
)
|
||||
t.Set(ACT_VM_DISSOCIATE, i18n.NewTableEntry().
|
||||
EN("Vm Dissociate").
|
||||
CN("解绑虚拟机"),
|
||||
)
|
||||
t.Set(ACT_NATGATEWAY_DISSOCIATE, i18n.NewTableEntry().
|
||||
EN("Natgateway Dissociate").
|
||||
CN("解绑NAT网关"),
|
||||
)
|
||||
t.Set(ACT_LOADBALANCER_DISSOCIATE, i18n.NewTableEntry().
|
||||
EN("Loadbalancer Dissociate").
|
||||
CN("解绑负载均衡"),
|
||||
)
|
||||
|
||||
t.Set(ACT_PREPARE, i18n.NewTableEntry().
|
||||
EN("Prepare").
|
||||
CN("同步硬件配置"),
|
||||
)
|
||||
t.Set(ACT_PROBE, i18n.NewTableEntry().
|
||||
EN("Probe").
|
||||
CN("检测配置"),
|
||||
)
|
||||
|
||||
t.Set(ACT_INSTANCE_GROUP_BIND, i18n.NewTableEntry().
|
||||
EN("Instance Group Bind").
|
||||
CN("绑定主机组"),
|
||||
)
|
||||
t.Set(ACT_INSTANCE_GROUP_UNBIND, i18n.NewTableEntry().
|
||||
EN("Instance Group Unbind").
|
||||
CN("解绑主机组"),
|
||||
)
|
||||
|
||||
t.Set(ACT_FLUSH_INSTANCE, i18n.NewTableEntry().
|
||||
EN("Flush Instance").
|
||||
CN("清空数据"),
|
||||
)
|
||||
|
||||
t.Set(ACT_UPDATE_STATUS, i18n.NewTableEntry().
|
||||
EN("Update Status").
|
||||
CN("更新状态"),
|
||||
)
|
||||
|
||||
t.Set(ACT_UPDATE_PASSWORD, i18n.NewTableEntry().
|
||||
EN("Update Password").
|
||||
CN("更新密码"),
|
||||
)
|
||||
|
||||
t.Set(ACT_REMOVE_GUEST, i18n.NewTableEntry().
|
||||
EN("Remove Guest").
|
||||
CN("移除实例"),
|
||||
)
|
||||
t.Set(ACT_CREATE_SCALING_POLICY, i18n.NewTableEntry().
|
||||
EN("Create Scaling Policy").
|
||||
CN("创建伸缩策略"),
|
||||
)
|
||||
t.Set(ACT_DELETE_SCALING_POLICY, i18n.NewTableEntry().
|
||||
EN("Delete Scaling Policy").
|
||||
CN("删除伸缩策略"),
|
||||
)
|
||||
|
||||
t.Set(ACT_SAVE_TO_TEMPLATE, i18n.NewTableEntry().
|
||||
EN("Save To Template").
|
||||
CN("保存为模版"),
|
||||
)
|
||||
|
||||
t.Set(ACT_SYNC_POLICIES, i18n.NewTableEntry().
|
||||
EN("Sync Policies").
|
||||
CN("同步权限"),
|
||||
)
|
||||
t.Set(ACT_SYNC_USERS, i18n.NewTableEntry().
|
||||
EN("Sync Users").
|
||||
CN("同步用户"),
|
||||
)
|
||||
t.Set(ACT_ADD_USER, i18n.NewTableEntry().
|
||||
EN("Add User").
|
||||
CN("添加用户"),
|
||||
)
|
||||
t.Set(ACT_REMOVE_USER, i18n.NewTableEntry().
|
||||
EN("Remove User").
|
||||
CN("移除用户"),
|
||||
)
|
||||
t.Set(ACT_ATTACH_POLICY, i18n.NewTableEntry().
|
||||
EN("Attach Policy").
|
||||
CN("绑定权限"),
|
||||
)
|
||||
t.Set(ACT_DETACH_POLICY, i18n.NewTableEntry().
|
||||
EN("Detach Policy").
|
||||
CN("移除权限"),
|
||||
)
|
||||
|
||||
t.Set(ACT_UPDATE_BILLING_OPTIONS, i18n.NewTableEntry().
|
||||
EN("Update Billing Options").
|
||||
CN("更新账单文件"),
|
||||
)
|
||||
t.Set(ACT_UPDATE_CREDENTIAL, i18n.NewTableEntry().
|
||||
EN("Update Credential").
|
||||
CN("更新账号密码"),
|
||||
)
|
||||
|
||||
t.Set(ACT_PULL_SUBCONTACT, i18n.NewTableEntry().
|
||||
EN("Pull Subcontact").
|
||||
CN("拉取联系方式"),
|
||||
)
|
||||
t.Set(ACT_SEND_NOTIFICATION, i18n.NewTableEntry().
|
||||
EN("Send Notification").
|
||||
CN("发送通知消息"),
|
||||
)
|
||||
t.Set(ACT_SEND_VERIFICATION, i18n.NewTableEntry().
|
||||
EN("Send Verification").
|
||||
CN("发送验证消息"),
|
||||
)
|
||||
|
||||
t.Set(ACT_SYNC_VPCS, i18n.NewTableEntry().
|
||||
EN("Sync Vpcs").
|
||||
CN("同步VPC"),
|
||||
)
|
||||
t.Set(ACT_SYNC_RECORD_SETS, i18n.NewTableEntry().
|
||||
EN("Sync Record Sets").
|
||||
CN("同步解析列表"),
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
// 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 logclient
|
||||
|
||||
// 这些状态不做 websocket 通知
|
||||
var BlackList = []string{
|
||||
ACT_CLOUD_FULLSYNC,
|
||||
ACT_CREATE,
|
||||
ACT_DELETE,
|
||||
ACT_PENDING_DELETE,
|
||||
ACT_PRIVATE,
|
||||
ACT_PUBLIC,
|
||||
ACT_UPDATE,
|
||||
ACT_VM_SYNC_STATUS,
|
||||
ACT_VM_SYNC_CONF,
|
||||
}
|
||||
|
||||
// 这些状态需要做 websocket 通知
|
||||
var WhiteList = []string{
|
||||
ACT_ADDTAG,
|
||||
ACT_ALLOCATE,
|
||||
ACT_DELOCATE,
|
||||
ACT_BM_CONVERT_HYPER,
|
||||
ACT_BM_MAINTENANCE,
|
||||
ACT_BM_UNCONVERT_HYPER,
|
||||
ACT_BM_UNMAINTENANCE,
|
||||
ACT_CANCEL_DELETE,
|
||||
ACT_CHANGE_OWNER,
|
||||
ACT_SYNC_CLOUD_OWNER,
|
||||
ACT_CLOUD_SYNC,
|
||||
ACT_DISABLE,
|
||||
ACT_ENABLE,
|
||||
ACT_GUEST_ATTACH_ISOLATED_DEVICE,
|
||||
ACT_GUEST_DETACH_ISOLATED_DEVICE,
|
||||
ACT_MERGE,
|
||||
ACT_OFFLINE,
|
||||
ACT_ONLINE,
|
||||
ACT_RELEASE_IP,
|
||||
ACT_RESERVE_IP,
|
||||
ACT_RESIZE,
|
||||
ACT_RMTAG,
|
||||
ACT_SPLIT,
|
||||
ACT_UNCACHED_IMAGE,
|
||||
ACT_VM_ATTACH_DISK,
|
||||
ACT_VM_BIND_KEYPAIR,
|
||||
ACT_VM_CHANGE_FLAVOR,
|
||||
ACT_VM_DEPLOY,
|
||||
ACT_VM_DETACH_DISK,
|
||||
ACT_VM_PURGE,
|
||||
ACT_VM_REBUILD,
|
||||
ACT_VM_RESET_PSWD,
|
||||
ACT_VM_CHANGE_BANDWIDTH,
|
||||
ACT_VM_START,
|
||||
ACT_VM_STOP,
|
||||
ACT_VM_RESTART,
|
||||
ACT_VM_UNBIND_KEYPAIR,
|
||||
ACT_VM_ASSIGNSECGROUP,
|
||||
ACT_VM_REVOKESECGROUP,
|
||||
ACT_VM_SETSECGROUP,
|
||||
ACT_RESET_DISK,
|
||||
ACT_SYNC_STATUS,
|
||||
ACT_SYNC_CONF,
|
||||
ACT_CREATE_BACKUP,
|
||||
ACT_SWITCH_TO_BACKUP,
|
||||
ACT_RENEW,
|
||||
ACT_MIGRATE,
|
||||
ACT_IMAGE_SAVE,
|
||||
ACT_RECYCLE_PREPAID,
|
||||
ACT_UNDO_RECYCLE_PREPAID,
|
||||
ACT_FETCH,
|
||||
ACT_VM_CHANGE_NIC,
|
||||
ACT_HOST_IMPORT_LIBVIRT_SERVERS,
|
||||
ACT_GUEST_CREATE_FROM_IMPORT,
|
||||
ACT_DISK_CREATE_SNAPSHOT,
|
||||
ACT_IMAGE_PROBE,
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"yunion.io/x/log"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/i18n"
|
||||
"yunion.io/x/onecloud/pkg/webconsole/session"
|
||||
)
|
||||
|
||||
@@ -34,7 +35,7 @@ func NewConnectionServer() *ConnectionServer {
|
||||
|
||||
func (s *ConnectionServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
ctx := context.Background()
|
||||
ctx = httperrors.WithRequestLang(ctx, req)
|
||||
ctx = i18n.WithRequestLang(ctx, req)
|
||||
query, err := jsonutils.ParseQueryString(req.URL.RawQuery)
|
||||
if err != nil {
|
||||
httperrors.GeneralServerError(ctx, w, err)
|
||||
|
||||
Reference in New Issue
Block a user