mirror of
https://github.com/jumpserver/lina.git
synced 2025-07-15 16:02:37 +00:00
Merge branch 'v3' of github.com:jumpserver/lina into v3
This commit is contained in:
commit
32ec05e04c
@ -18,8 +18,8 @@
|
|||||||
"created_by": "Created by",
|
"created_by": "Created by",
|
||||||
"asset": "Asset",
|
"asset": "Asset",
|
||||||
"system_user": "System user",
|
"system_user": "System user",
|
||||||
"username_group":"Username group",
|
"username_group": "Username group",
|
||||||
"hostname_group":"Hostname group",
|
"hostname_group": "Hostname group",
|
||||||
"asset_ip_group": "Asset ip group",
|
"asset_ip_group": "Asset ip group",
|
||||||
"system_users_name_group": "Systemuser name",
|
"system_users_name_group": "Systemuser name",
|
||||||
"system_users_protocol_group": "Systemuser protocol",
|
"system_users_protocol_group": "Systemuser protocol",
|
||||||
@ -40,8 +40,8 @@
|
|||||||
"applicationsType": {
|
"applicationsType": {
|
||||||
"chrome": "Chrome",
|
"chrome": "Chrome",
|
||||||
"mysql_workbench": "MySQL Workbench",
|
"mysql_workbench": "MySQL Workbench",
|
||||||
"vmware_client":"Vmware Client",
|
"vmware_client": "Vmware Client",
|
||||||
"custom":"Custom",
|
"custom": "Custom",
|
||||||
"mysql": "MySQL",
|
"mysql": "MySQL",
|
||||||
"oracle": "Oracle",
|
"oracle": "Oracle",
|
||||||
"postgresql": "PostgreSQL",
|
"postgresql": "PostgreSQL",
|
||||||
@ -86,7 +86,7 @@
|
|||||||
"custom_password": "Password",
|
"custom_password": "Password",
|
||||||
"Custom": "Custom",
|
"Custom": "Custom",
|
||||||
"cluster": "Cluster",
|
"cluster": "Cluster",
|
||||||
"kubernetes":"Kubernetes",
|
"kubernetes": "Kubernetes",
|
||||||
"clusterHelpTextMessage": "Tips: https://172.16.8.8:8443",
|
"clusterHelpTextMessage": "Tips: https://172.16.8.8:8443",
|
||||||
"DBInfo": "Database Info",
|
"DBInfo": "Database Info",
|
||||||
"RDBProtocol": "RDS Protocol",
|
"RDBProtocol": "RDS Protocol",
|
||||||
@ -114,7 +114,7 @@
|
|||||||
"Action": "Action",
|
"Action": "Action",
|
||||||
"ActiveSelected": "Active selected",
|
"ActiveSelected": "Active selected",
|
||||||
"AdminUser": "Admin user",
|
"AdminUser": "Admin user",
|
||||||
"ReplaceNodeAssetsAdminUser":"Replace node assets admin user with this",
|
"ReplaceNodeAssetsAdminUser": "Replace node assets admin user with this",
|
||||||
"AdminUserDetail": "Admin user detail",
|
"AdminUserDetail": "Admin user detail",
|
||||||
"DynamicUsername": "Dynamic username",
|
"DynamicUsername": "Dynamic username",
|
||||||
"AdminUserListHelpMessage": "Admin users are asset (charged server) on the root, or have NOPASSWD: ALL sudo permissions users, JumpServer users of the system using the user to `push system user`, `get assets hardware information`, etc.\n",
|
"AdminUserListHelpMessage": "Admin users are asset (charged server) on the root, or have NOPASSWD: ALL sudo permissions users, JumpServer users of the system using the user to `push system user`, `get assets hardware information`, etc.\n",
|
||||||
@ -130,7 +130,7 @@
|
|||||||
"AssetListHelpMessage": "The left side is the asset tree, right click to create, delete, and change the tree node, authorization asset is also organized as a node, and the right side is the asset under that node\n",
|
"AssetListHelpMessage": "The left side is the asset tree, right click to create, delete, and change the tree node, authorization asset is also organized as a node, and the right side is the asset under that node\n",
|
||||||
"AssetNumber": "Asset number",
|
"AssetNumber": "Asset number",
|
||||||
"AssetUserList": "Asset user list",
|
"AssetUserList": "Asset user list",
|
||||||
"TestGatewayTestConnection":"Test gateway test connection",
|
"TestGatewayTestConnection": "Test gateway test connection",
|
||||||
"TestGatewayHelpMessage": "If use nat, set the ssh real port",
|
"TestGatewayHelpMessage": "If use nat, set the ssh real port",
|
||||||
"SshPort": "SSH Port",
|
"SshPort": "SSH Port",
|
||||||
"Assets": "Assets",
|
"Assets": "Assets",
|
||||||
@ -304,18 +304,18 @@
|
|||||||
"ConnectWebSocketError": "Connect Websocket failed",
|
"ConnectWebSocketError": "Connect Websocket failed",
|
||||||
"Nothing": "Nothing",
|
"Nothing": "Nothing",
|
||||||
"Action": "Action",
|
"Action": "Action",
|
||||||
"CustomCol":"Custom table col",
|
"CustomCol": "Custom table col",
|
||||||
"RequestTickets": "Request tickets",
|
"RequestTickets": "Request tickets",
|
||||||
"Actions": "Actions",
|
"Actions": "Actions",
|
||||||
"NeedSpecifiedFile": "Required to upload the specified format file",
|
"NeedSpecifiedFile": "Required to upload the specified format file",
|
||||||
"TestPortErrorMsg":"Port Error, please check",
|
"TestPortErrorMsg": "Port Error, please check",
|
||||||
"Activate": "Activate",
|
"Activate": "Activate",
|
||||||
"actionsTips":"Clipboard's copy and paste control only support RDP/VNC protocol.",
|
"actionsTips": "Clipboard's copy and paste control only support RDP/VNC protocol.",
|
||||||
"Active": "Active",
|
"Active": "Active",
|
||||||
"TableColSettingInfo": "Please select the list details you want to display",
|
"TableColSettingInfo": "Please select the list details you want to display",
|
||||||
"Add": "Add",
|
"Add": "Add",
|
||||||
"PleaseAgreeToTheTerms": "Please agree to the terms",
|
"PleaseAgreeToTheTerms": "Please agree to the terms",
|
||||||
"PushSelected":"Push selected",
|
"PushSelected": "Push selected",
|
||||||
"PushSelectedSystemUsersToAsset": "Push selected system users to asset",
|
"PushSelectedSystemUsersToAsset": "Push selected system users to asset",
|
||||||
"TestSelected": "Test selected",
|
"TestSelected": "Test selected",
|
||||||
"TestSelectedSystemUsersConnective": "Test selected system users connective",
|
"TestSelectedSystemUsersConnective": "Test selected system users connective",
|
||||||
@ -388,7 +388,7 @@
|
|||||||
"Show": "Show",
|
"Show": "Show",
|
||||||
"Submit": "Submit",
|
"Submit": "Submit",
|
||||||
"Test": "Test",
|
"Test": "Test",
|
||||||
"SaveAndAddAnother":"Save and add another",
|
"SaveAndAddAnother": "Save and add another",
|
||||||
"TestSuccessMsg": "Test Success",
|
"TestSuccessMsg": "Test Success",
|
||||||
"To": "To",
|
"To": "To",
|
||||||
"Update": "Update",
|
"Update": "Update",
|
||||||
@ -627,7 +627,11 @@
|
|||||||
"versionDetail": "Version detail",
|
"versionDetail": "Version detail",
|
||||||
"versionRunExecution": "Version run execution",
|
"versionRunExecution": "Version run execution",
|
||||||
"Unkown": "Unkown",
|
"Unkown": "Unkown",
|
||||||
"Unknown": "Unknown"
|
"Unknown": "Unknown",
|
||||||
|
"PENDING": "Pending",
|
||||||
|
"RUNNING": "Running",
|
||||||
|
"SUCCESS": "Success",
|
||||||
|
"FAILURE": "Failure"
|
||||||
},
|
},
|
||||||
"perms": {
|
"perms": {
|
||||||
"": "",
|
"": "",
|
||||||
@ -657,7 +661,7 @@
|
|||||||
"addUserGroupToThisPermission": "Add user group to this permission",
|
"addUserGroupToThisPermission": "Add user group to this permission",
|
||||||
"addUserToThisPermission": "Add user to this permission",
|
"addUserToThisPermission": "Add user to this permission",
|
||||||
"all": "All",
|
"all": "All",
|
||||||
"PermName":"Perm name",
|
"PermName": "Perm name",
|
||||||
"assetAndNode": "Assets and node",
|
"assetAndNode": "Assets and node",
|
||||||
"assetCount": "Asset count",
|
"assetCount": "Asset count",
|
||||||
"connect": "Connect",
|
"connect": "Connect",
|
||||||
@ -676,15 +680,15 @@
|
|||||||
"remoteApp": "RemoteApp",
|
"remoteApp": "RemoteApp",
|
||||||
"remoteAppCount": "RemoteApp count",
|
"remoteAppCount": "RemoteApp count",
|
||||||
"appsCount": "App count",
|
"appsCount": "App count",
|
||||||
"appsList":"App list",
|
"appsList": "App list",
|
||||||
"DatabaseAppCount": "DatabaseApp count",
|
"DatabaseAppCount": "DatabaseApp count",
|
||||||
"KubernetesAppCount": "KubernetesApp count",
|
"KubernetesAppCount": "KubernetesApp count",
|
||||||
"systemUserCount": "System user count",
|
"systemUserCount": "System user count",
|
||||||
"upDownload": "Upload download",
|
"upDownload": "Upload download",
|
||||||
"uploadFile": "Upload file",
|
"uploadFile": "Upload file",
|
||||||
"clipboardCopyPaste":"Copy Paste",
|
"clipboardCopyPaste": "Copy Paste",
|
||||||
"clipboardCopy":"Clipboard copy",
|
"clipboardCopy": "Clipboard copy",
|
||||||
"clipboardPaste":"Clipboard paste",
|
"clipboardPaste": "Clipboard paste",
|
||||||
"userCount": "User count",
|
"userCount": "User count",
|
||||||
"userGroupCount": "User group count",
|
"userGroupCount": "User group count",
|
||||||
"usersAndUserGroups": "Users and user groups"
|
"usersAndUserGroups": "Users and user groups"
|
||||||
@ -929,7 +933,7 @@
|
|||||||
"TerminateTaskSendSuccessMsg": "Terminate task has been send, Please check later",
|
"TerminateTaskSendSuccessMsg": "Terminate task has been send, Please check later",
|
||||||
"helpText": {
|
"helpText": {
|
||||||
"esUrl": "Tip: If you have multiple hosts, use comma (, ) to split (eg: http://www.jumpserver.a.com, http://www.jumpserver.b.com)",
|
"esUrl": "Tip: If you have multiple hosts, use comma (, ) to split (eg: http://www.jumpserver.a.com, http://www.jumpserver.b.com)",
|
||||||
"esIndex":"Es provides the default index: jumpserver. If you choose to build an index by date, this blank is the index prefix",
|
"esIndex": "Es provides the default index: jumpserver. If you choose to build an index by date, this blank is the index prefix",
|
||||||
"esDocType": "Es provides the default document type: command"
|
"esDocType": "Es provides the default document type: command"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1106,7 +1110,7 @@
|
|||||||
"userGuideUrl": "User Guide URL",
|
"userGuideUrl": "User Guide URL",
|
||||||
"username": "Username",
|
"username": "Username",
|
||||||
"usernamePlaceholder": "Please input username",
|
"usernamePlaceholder": "Please input username",
|
||||||
"refreshLdapCache":"Refreshing Ldap cache ",
|
"refreshLdapCache": "Refreshing Ldap cache ",
|
||||||
"LicenseExpired": "License expired",
|
"LicenseExpired": "License expired",
|
||||||
"LicenseWillBe": "License will expire at ",
|
"LicenseWillBe": "License will expire at ",
|
||||||
"LicenseReachedAssetAmountLimit": "The number of assets has exceeded the license limit",
|
"LicenseReachedAssetAmountLimit": "The number of assets has exceeded the license limit",
|
||||||
@ -1128,16 +1132,16 @@
|
|||||||
"ApprovalProcess": "Approval process",
|
"ApprovalProcess": "Approval process",
|
||||||
"LevelApproval": "Level approval",
|
"LevelApproval": "Level approval",
|
||||||
"Assignee": "Assignee",
|
"Assignee": "Assignee",
|
||||||
"RequestPerm":"Request Perm",
|
"RequestPerm": "Request Perm",
|
||||||
"AssignedInfo":"Assigned Info",
|
"AssignedInfo": "Assigned Info",
|
||||||
"OpenTicket": "Open Ticket",
|
"OpenTicket": "Open Ticket",
|
||||||
"HandleTicket": "Handle Ticket",
|
"HandleTicket": "Handle Ticket",
|
||||||
"FinishedTicket": "Finished Ticket",
|
"FinishedTicket": "Finished Ticket",
|
||||||
"CheckViewAcceptor": "Click to view the acceptor",
|
"CheckViewAcceptor": "Click to view the acceptor",
|
||||||
"Assignees": "Assignees",
|
"Assignees": "Assignees",
|
||||||
"Close": "Close",
|
"Close": "Close",
|
||||||
"OpenStatus":"Open",
|
"OpenStatus": "Open",
|
||||||
"CloseStatus":"Close",
|
"CloseStatus": "Close",
|
||||||
"Comment": "Comment",
|
"Comment": "Comment",
|
||||||
"MyTickets": "My tickets",
|
"MyTickets": "My tickets",
|
||||||
"action": "Action",
|
"action": "Action",
|
||||||
@ -1151,7 +1155,7 @@
|
|||||||
"user": "User",
|
"user": "User",
|
||||||
"Status": "Status",
|
"Status": "Status",
|
||||||
"Open": "Open",
|
"Open": "Open",
|
||||||
"OrgName":"Org name",
|
"OrgName": "Org name",
|
||||||
"IP": "IP",
|
"IP": "IP",
|
||||||
"Hostname": "Hostname",
|
"Hostname": "Hostname",
|
||||||
"Asset": "Asset",
|
"Asset": "Asset",
|
||||||
@ -1199,7 +1203,7 @@
|
|||||||
"AuthSettings": "Auth settings",
|
"AuthSettings": "Auth settings",
|
||||||
"UserName": "Name",
|
"UserName": "Name",
|
||||||
"Account": "Account",
|
"Account": "Account",
|
||||||
"Existing":"Existing",
|
"Existing": "Existing",
|
||||||
"AccountInformation": "Account information",
|
"AccountInformation": "Account information",
|
||||||
"PersonalSetting": "Personal setting",
|
"PersonalSetting": "Personal setting",
|
||||||
"Authentication": "Account",
|
"Authentication": "Account",
|
||||||
@ -1228,7 +1232,6 @@
|
|||||||
"OrgUser": "Org User",
|
"OrgUser": "Org User",
|
||||||
"OrgAdmin": "Org Admin",
|
"OrgAdmin": "Org Admin",
|
||||||
"OrgAuditor": "Org Auditor",
|
"OrgAuditor": "Org Auditor",
|
||||||
|
|
||||||
"HelpText": {
|
"HelpText": {
|
||||||
"MFAOfUserFirstLoginPersonalInformationImprovementPage": "Enable multi-factor authentication to make the account more secure <br/> After is enabled, you will enter the multi-factor authentication binding process on your next login <br/> You can also bind directly in (personal information -> fast modifier -> modifier multiple factor Settings)",
|
"MFAOfUserFirstLoginPersonalInformationImprovementPage": "Enable multi-factor authentication to make the account more secure <br/> After is enabled, you will enter the multi-factor authentication binding process on your next login <br/> You can also bind directly in (personal information -> fast modifier -> modifier multiple factor Settings)",
|
||||||
"MFAOfUserFirstLoginUserGuidePage": "To protect the security of you and the company <br/> please properly keep your account, password, key and other important and sensitive information <br/> (e.g., set a complex password and enable multi-factor authentication)",
|
"MFAOfUserFirstLoginUserGuidePage": "To protect the security of you and the company <br/> please properly keep your account, password, key and other important and sensitive information <br/> (e.g., set a complex password and enable multi-factor authentication)",
|
||||||
@ -1291,7 +1294,7 @@
|
|||||||
"databasePermissionRules": "Database Permission rules",
|
"databasePermissionRules": "Database Permission rules",
|
||||||
"k8sPermissionRules": "Kubernetes Permission rules",
|
"k8sPermissionRules": "Kubernetes Permission rules",
|
||||||
"grantedAssets": "Granted assets",
|
"grantedAssets": "Granted assets",
|
||||||
"grantedK8Ss":"Granted K8Ss",
|
"grantedK8Ss": "Granted K8Ss",
|
||||||
"grantedDatabases": "Granted databases",
|
"grantedDatabases": "Granted databases",
|
||||||
"grantedRemoteApps": "Granted remote apps",
|
"grantedRemoteApps": "Granted remote apps",
|
||||||
"grantedApplications": "Granted applications",
|
"grantedApplications": "Granted applications",
|
||||||
@ -1425,7 +1428,7 @@
|
|||||||
"HuaweiCloud": "Huawei Cloud",
|
"HuaweiCloud": "Huawei Cloud",
|
||||||
"BaiduCloud": "Baidu Cloud",
|
"BaiduCloud": "Baidu Cloud",
|
||||||
"JDCloud": "JD Cloud",
|
"JDCloud": "JD Cloud",
|
||||||
"Azure":"Azure(China)",
|
"Azure": "Azure(China)",
|
||||||
"Azure_Int": "Azure(International)",
|
"Azure_Int": "Azure(International)",
|
||||||
"HostnameStrategy": "Used to produce the asset hostname. For example, 1. Instance name (instanceDemo);2. Instance name and Partial IP (instanceDemo-250.1)",
|
"HostnameStrategy": "Used to produce the asset hostname. For example, 1. Instance name (instanceDemo);2. Instance name and Partial IP (instanceDemo-250.1)",
|
||||||
"IsAlwaysUpdate": "Asset info is kept up-to-date",
|
"IsAlwaysUpdate": "Asset info is kept up-to-date",
|
||||||
@ -1447,20 +1450,20 @@
|
|||||||
"CloudSource": "Cloud source",
|
"CloudSource": "Cloud source",
|
||||||
"SaveSetting": "Save setting",
|
"SaveSetting": "Save setting",
|
||||||
"Name": "Name",
|
"Name": "Name",
|
||||||
"Account":"Account",
|
"Account": "Account",
|
||||||
"Node": "Node",
|
"Node": "Node",
|
||||||
"WindowsAdminUser":"Windows Admin user",
|
"WindowsAdminUser": "Windows Admin user",
|
||||||
"LinuxAdminUser":"Linux Admin user",
|
"LinuxAdminUser": "Linux Admin user",
|
||||||
"PeriodicPerform":"Periodic perform",
|
"PeriodicPerform": "Periodic perform",
|
||||||
"Periodic":"Periodic",
|
"Periodic": "Periodic",
|
||||||
"RegularlyPerform": "Regularly perform",
|
"RegularlyPerform": "Regularly perform",
|
||||||
"CyclePerform": "Cycle perform",
|
"CyclePerform": "Cycle perform",
|
||||||
"DateLastSync":"Date last sync",
|
"DateLastSync": "Date last sync",
|
||||||
"DateCreated":"Date created",
|
"DateCreated": "Date created",
|
||||||
"Region": "Region",
|
"Region": "Region",
|
||||||
"RunTaskManually":"Run task manually",
|
"RunTaskManually": "Run task manually",
|
||||||
"Comment": "Comment",
|
"Comment": "Comment",
|
||||||
"True":"True",
|
"True": "True",
|
||||||
"False": "False",
|
"False": "False",
|
||||||
"NewCount": "New count",
|
"NewCount": "New count",
|
||||||
"UnSyncCount": "Unsync count",
|
"UnSyncCount": "Unsync count",
|
||||||
@ -1494,11 +1497,11 @@
|
|||||||
"Endpoint": "Endpoint",
|
"Endpoint": "Endpoint",
|
||||||
"EndpointRule": "Endpoint rule",
|
"EndpointRule": "Endpoint rule",
|
||||||
"ServiceRatio": "Service ratio",
|
"ServiceRatio": "Service ratio",
|
||||||
"LoadStatus":"Status",
|
"LoadStatus": "Status",
|
||||||
"NormalLoad":"Normal",
|
"NormalLoad": "Normal",
|
||||||
"HighLoad":"High",
|
"HighLoad": "High",
|
||||||
"Offline": "Offline",
|
"Offline": "Offline",
|
||||||
"CriticalLoad":"Critical",
|
"CriticalLoad": "Critical",
|
||||||
"LicenseFile": "License file",
|
"LicenseFile": "License file",
|
||||||
"NoLicense": "No License",
|
"NoLicense": "No License",
|
||||||
"Node": "Node",
|
"Node": "Node",
|
||||||
@ -1510,8 +1513,8 @@
|
|||||||
"OrganizationList": "Organizations",
|
"OrganizationList": "Organizations",
|
||||||
"OrganizationUpdate": "Update org",
|
"OrganizationUpdate": "Update org",
|
||||||
"OrganizationMembership": "Organization membership",
|
"OrganizationMembership": "Organization membership",
|
||||||
"DeleteOrgTitle":"Please ensure that the following information in the organization has been deleted",
|
"DeleteOrgTitle": "Please ensure that the following information in the organization has been deleted",
|
||||||
"DeleteOrgMsg":"User list、User group、Asset list、Domain list、Admin user、System user、Labels、Asset permission",
|
"DeleteOrgMsg": "User list、User group、Asset list、Domain list、Admin user、System user、Labels、Asset permission",
|
||||||
"OrgRole": "Org role",
|
"OrgRole": "Org role",
|
||||||
"CreateOrgMsg": "Please go to Organization Details to add users",
|
"CreateOrgMsg": "Please go to Organization Details to add users",
|
||||||
"AddOrgMembers": "Add organization members",
|
"AddOrgMembers": "Add organization members",
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
"date_created": "创建时间",
|
"date_created": "创建时间",
|
||||||
"created_by": "创建者",
|
"created_by": "创建者",
|
||||||
"asset": "资产信息",
|
"asset": "资产信息",
|
||||||
"users":"用户",
|
"users": "用户",
|
||||||
"system_user": "系统用户",
|
"system_user": "系统用户",
|
||||||
"username_group":"用户名",
|
"username_group": "用户名",
|
||||||
"hostname_group":"资产名",
|
"hostname_group": "资产名",
|
||||||
"asset_ip_group": "资产IP",
|
"asset_ip_group": "资产IP",
|
||||||
"system_users_name_group": "系统用户名称",
|
"system_users_name_group": "系统用户名称",
|
||||||
"system_users_protocol_group": "系统用户协议",
|
"system_users_protocol_group": "系统用户协议",
|
||||||
@ -45,8 +45,8 @@
|
|||||||
"applicationsType": {
|
"applicationsType": {
|
||||||
"chrome": "Chrome",
|
"chrome": "Chrome",
|
||||||
"mysql_workbench": "MySQL Workbench",
|
"mysql_workbench": "MySQL Workbench",
|
||||||
"vmware_client":"Vmware Client",
|
"vmware_client": "Vmware Client",
|
||||||
"custom":"Custom",
|
"custom": "Custom",
|
||||||
"mysql": "MySQL",
|
"mysql": "MySQL",
|
||||||
"oracle": "Oracle",
|
"oracle": "Oracle",
|
||||||
"postgresql": "PostgreSQL",
|
"postgresql": "PostgreSQL",
|
||||||
@ -91,7 +91,7 @@
|
|||||||
"custom_password": "登录密码",
|
"custom_password": "登录密码",
|
||||||
"Custom": "自定义",
|
"Custom": "自定义",
|
||||||
"cluster": "集群",
|
"cluster": "集群",
|
||||||
"kubernetes":"Kubernetes",
|
"kubernetes": "Kubernetes",
|
||||||
"clusterHelpTextMessage": "例如:https://172.16.8.8:8443",
|
"clusterHelpTextMessage": "例如:https://172.16.8.8:8443",
|
||||||
"DBInfo": "数据库信息",
|
"DBInfo": "数据库信息",
|
||||||
"RDBProtocol": "关系型数据库",
|
"RDBProtocol": "关系型数据库",
|
||||||
@ -130,9 +130,9 @@
|
|||||||
"HardwareInfo": "硬件信息",
|
"HardwareInfo": "硬件信息",
|
||||||
"AssetDetail": "资产详情",
|
"AssetDetail": "资产详情",
|
||||||
"AssetList": "资产列表",
|
"AssetList": "资产列表",
|
||||||
"ReplaceNodeAssetsAdminUser":"替换节点资产的管理员",
|
"ReplaceNodeAssetsAdminUser": "替换节点资产的管理员",
|
||||||
"AssetListHelpMessage": "左侧是资产树,右击可以新建、删除、更改树节点,授权资产也是以节点方式组织的,右侧是属于该节点下的资产\n",
|
"AssetListHelpMessage": "左侧是资产树,右击可以新建、删除、更改树节点,授权资产也是以节点方式组织的,右侧是属于该节点下的资产\n",
|
||||||
"TestGatewayTestConnection":"测试连接网关",
|
"TestGatewayTestConnection": "测试连接网关",
|
||||||
"TestGatewayHelpMessage": "如果使用了nat端口映射,请设置为ssh真实监听的端口",
|
"TestGatewayHelpMessage": "如果使用了nat端口映射,请设置为ssh真实监听的端口",
|
||||||
"SshPort": "SSH 端口",
|
"SshPort": "SSH 端口",
|
||||||
"AssetNumber": "资产编号",
|
"AssetNumber": "资产编号",
|
||||||
@ -318,12 +318,12 @@
|
|||||||
"Action": "动作",
|
"Action": "动作",
|
||||||
"RequestTickets": "申请工单",
|
"RequestTickets": "申请工单",
|
||||||
"Actions": "操作",
|
"Actions": "操作",
|
||||||
"CustomCol":"自定义列表字段",
|
"CustomCol": "自定义列表字段",
|
||||||
"Activate": "激活",
|
"Activate": "激活",
|
||||||
"NeedSpecifiedFile": "需上传指定格式文件",
|
"NeedSpecifiedFile": "需上传指定格式文件",
|
||||||
"TestPortErrorMsg":"端口错误,请重新输入",
|
"TestPortErrorMsg": "端口错误,请重新输入",
|
||||||
"Active": "激活中",
|
"Active": "激活中",
|
||||||
"actionsTips":"剪切板权限控制目前仅支持 RDP/VNC 协议的连接",
|
"actionsTips": "剪切板权限控制目前仅支持 RDP/VNC 协议的连接",
|
||||||
"TableColSettingInfo": "请选择您想显示的列表详细信息。",
|
"TableColSettingInfo": "请选择您想显示的列表详细信息。",
|
||||||
"Add": "添加",
|
"Add": "添加",
|
||||||
"UpdateAssetDetail": "配置更多信息",
|
"UpdateAssetDetail": "配置更多信息",
|
||||||
@ -331,7 +331,7 @@
|
|||||||
"Auth": "认证",
|
"Auth": "认证",
|
||||||
"bind": "绑定",
|
"bind": "绑定",
|
||||||
"unbind": "解绑",
|
"unbind": "解绑",
|
||||||
"PushSelected":"推送所选",
|
"PushSelected": "推送所选",
|
||||||
"PushSelectedSystemUsersToAsset": "推送所选系统用户到资产",
|
"PushSelectedSystemUsersToAsset": "推送所选系统用户到资产",
|
||||||
"TestSelected": "测试所选",
|
"TestSelected": "测试所选",
|
||||||
"TestSelectedSystemUsersConnective": "测试所选系统用户可连接性",
|
"TestSelectedSystemUsersConnective": "测试所选系统用户可连接性",
|
||||||
@ -644,7 +644,11 @@
|
|||||||
"versionDetail": "版本详情",
|
"versionDetail": "版本详情",
|
||||||
"versionRunExecution": "执行历史",
|
"versionRunExecution": "执行历史",
|
||||||
"Unkown": "未知",
|
"Unkown": "未知",
|
||||||
"Unknown": "未知"
|
"Unknown": "未知",
|
||||||
|
"PENDING": "等待中",
|
||||||
|
"RUNNING": "运行中",
|
||||||
|
"SUCCESS": "成功",
|
||||||
|
"FAILURE": "失败"
|
||||||
},
|
},
|
||||||
"perms": {
|
"perms": {
|
||||||
"": "",
|
"": "",
|
||||||
@ -659,7 +663,7 @@
|
|||||||
"SystemUser": "系统用户",
|
"SystemUser": "系统用户",
|
||||||
"User": "用户",
|
"User": "用户",
|
||||||
"UserGroups": "用户组",
|
"UserGroups": "用户组",
|
||||||
"PermName":"授权名称",
|
"PermName": "授权名称",
|
||||||
"Permissions": "授权列表",
|
"Permissions": "授权列表",
|
||||||
"DatabaseAppPermission": "数据库授权",
|
"DatabaseAppPermission": "数据库授权",
|
||||||
"RemoteAppPermission": "远程应用授权",
|
"RemoteAppPermission": "远程应用授权",
|
||||||
@ -692,15 +696,15 @@
|
|||||||
"remoteApp": "远程应用",
|
"remoteApp": "远程应用",
|
||||||
"remoteAppCount": "远程应用数量",
|
"remoteAppCount": "远程应用数量",
|
||||||
"appsCount": "应用数量",
|
"appsCount": "应用数量",
|
||||||
"appsList":"应用列表",
|
"appsList": "应用列表",
|
||||||
"DatabaseAppCount": "数据库应用数量",
|
"DatabaseAppCount": "数据库应用数量",
|
||||||
"KubernetesAppCount": "Kubernetes应用数量",
|
"KubernetesAppCount": "Kubernetes应用数量",
|
||||||
"systemUserCount": "系统用户",
|
"systemUserCount": "系统用户",
|
||||||
"upDownload": "上传下载",
|
"upDownload": "上传下载",
|
||||||
"uploadFile": "上传文件",
|
"uploadFile": "上传文件",
|
||||||
"clipboardCopyPaste":"剪贴板复制粘贴",
|
"clipboardCopyPaste": "剪贴板复制粘贴",
|
||||||
"clipboardCopy":"剪切板复制",
|
"clipboardCopy": "剪切板复制",
|
||||||
"clipboardPaste":"剪切板粘贴",
|
"clipboardPaste": "剪切板粘贴",
|
||||||
"userCount": "用户数量",
|
"userCount": "用户数量",
|
||||||
"userGroupCount": "用户组数量",
|
"userGroupCount": "用户组数量",
|
||||||
"usersAndUserGroups": "用户或用户组"
|
"usersAndUserGroups": "用户或用户组"
|
||||||
@ -732,7 +736,7 @@
|
|||||||
"AssetAccount": "资产账号",
|
"AssetAccount": "资产账号",
|
||||||
"AssetHistoryAccount": "资产历史账号",
|
"AssetHistoryAccount": "资产历史账号",
|
||||||
"ApplicationAccount": "应用账号",
|
"ApplicationAccount": "应用账号",
|
||||||
"Ticket":"工单",
|
"Ticket": "工单",
|
||||||
"MyTickets": "我的申请",
|
"MyTickets": "我的申请",
|
||||||
"AssignedTicketList": "待我审批",
|
"AssignedTicketList": "待我审批",
|
||||||
"SessionDetail": "会话详情",
|
"SessionDetail": "会话详情",
|
||||||
@ -1156,7 +1160,7 @@
|
|||||||
"userGuideUrl": "用户向导URL",
|
"userGuideUrl": "用户向导URL",
|
||||||
"username": "用户名",
|
"username": "用户名",
|
||||||
"usernamePlaceholder": "请输入用户名",
|
"usernamePlaceholder": "请输入用户名",
|
||||||
"refreshLdapCache":"刷新Ldap缓存,请稍后",
|
"refreshLdapCache": "刷新Ldap缓存,请稍后",
|
||||||
"LicenseExpired": "许可证已经过期",
|
"LicenseExpired": "许可证已经过期",
|
||||||
"LicenseWillBe": "许可证即将在 ",
|
"LicenseWillBe": "许可证即将在 ",
|
||||||
"LicenseReachedAssetAmountLimit": "资产数量已经超过许可证数量限制",
|
"LicenseReachedAssetAmountLimit": "资产数量已经超过许可证数量限制",
|
||||||
@ -1192,11 +1196,11 @@
|
|||||||
"Assignee": "处理人",
|
"Assignee": "处理人",
|
||||||
"Assignees": "待处理人",
|
"Assignees": "待处理人",
|
||||||
"Close": "关闭",
|
"Close": "关闭",
|
||||||
"OpenStatus":"审批中",
|
"OpenStatus": "审批中",
|
||||||
"CloseStatus":"已完成",
|
"CloseStatus": "已完成",
|
||||||
"Comment": "备注",
|
"Comment": "备注",
|
||||||
"MyTickets": "我发起的",
|
"MyTickets": "我发起的",
|
||||||
"RequestPerm":"授权申请",
|
"RequestPerm": "授权申请",
|
||||||
"Reject": "拒绝",
|
"Reject": "拒绝",
|
||||||
"date": "日期",
|
"date": "日期",
|
||||||
"reply": "回复",
|
"reply": "回复",
|
||||||
@ -1207,8 +1211,8 @@
|
|||||||
"user": "用户",
|
"user": "用户",
|
||||||
"Status": "状态",
|
"Status": "状态",
|
||||||
"Open": "待处理",
|
"Open": "待处理",
|
||||||
"OrgName":"授权组织名称",
|
"OrgName": "授权组织名称",
|
||||||
"AssignedInfo":"审批信息",
|
"AssignedInfo": "审批信息",
|
||||||
"OpenTicket": "创建工单",
|
"OpenTicket": "创建工单",
|
||||||
"HandleTicket": "处理工单",
|
"HandleTicket": "处理工单",
|
||||||
"FinishedTicket": "完成工单",
|
"FinishedTicket": "完成工单",
|
||||||
@ -1301,7 +1305,7 @@
|
|||||||
"LoginConfirm": "登录复核",
|
"LoginConfirm": "登录复核",
|
||||||
"LoginPasswordSetting": "登录密码设置",
|
"LoginPasswordSetting": "登录密码设置",
|
||||||
"MFA": "MFA",
|
"MFA": "MFA",
|
||||||
"Existing":"已存在",
|
"Existing": "已存在",
|
||||||
"MfaLevel": "多因子认证",
|
"MfaLevel": "多因子认证",
|
||||||
"Name": "姓名",
|
"Name": "姓名",
|
||||||
"NewPassword": "新密码",
|
"NewPassword": "新密码",
|
||||||
@ -1491,7 +1495,7 @@
|
|||||||
"HuaweiCloud": "华为云",
|
"HuaweiCloud": "华为云",
|
||||||
"BaiduCloud": "百度云",
|
"BaiduCloud": "百度云",
|
||||||
"JDCloud": "京东云",
|
"JDCloud": "京东云",
|
||||||
"Azure":"Azure(中国)",
|
"Azure": "Azure(中国)",
|
||||||
"Azure_Int": "Azure(国际)",
|
"Azure_Int": "Azure(国际)",
|
||||||
"HostnameStrategy": "用于生成资产主机名。例如:1. 实例名称 (instanceDemo);2. 实例名称和部分IP(后两位) (instanceDemo-250.1)",
|
"HostnameStrategy": "用于生成资产主机名。例如:1. 实例名称 (instanceDemo);2. 实例名称和部分IP(后两位) (instanceDemo-250.1)",
|
||||||
"IsAlwaysUpdate": "资产信息保持最新",
|
"IsAlwaysUpdate": "资产信息保持最新",
|
||||||
@ -1513,20 +1517,20 @@
|
|||||||
"CloudSource": "同步源",
|
"CloudSource": "同步源",
|
||||||
"SaveSetting": "同步设置",
|
"SaveSetting": "同步设置",
|
||||||
"Name": "名称",
|
"Name": "名称",
|
||||||
"Account":"账户",
|
"Account": "账户",
|
||||||
"Node": "节点",
|
"Node": "节点",
|
||||||
"WindowsAdminUser":"Windows 特权用户",
|
"WindowsAdminUser": "Windows 特权用户",
|
||||||
"LinuxAdminUser":"Linux 特权用户",
|
"LinuxAdminUser": "Linux 特权用户",
|
||||||
"Periodic":"执行周期",
|
"Periodic": "执行周期",
|
||||||
"PeriodicPerform":"定时执行",
|
"PeriodicPerform": "定时执行",
|
||||||
"RegularlyPerform": "定期执行",
|
"RegularlyPerform": "定期执行",
|
||||||
"CyclePerform": "周期执行",
|
"CyclePerform": "周期执行",
|
||||||
"DateLastSync":"最后同步日期",
|
"DateLastSync": "最后同步日期",
|
||||||
"DateCreated":"创建日期",
|
"DateCreated": "创建日期",
|
||||||
"Region": "地域",
|
"Region": "地域",
|
||||||
"Comment": "备注",
|
"Comment": "备注",
|
||||||
"RunTaskManually":"手动执行",
|
"RunTaskManually": "手动执行",
|
||||||
"True":"是",
|
"True": "是",
|
||||||
"False": "否",
|
"False": "否",
|
||||||
"NewCount": "新增",
|
"NewCount": "新增",
|
||||||
"UnSyncCount": "未同步",
|
"UnSyncCount": "未同步",
|
||||||
@ -1538,8 +1542,8 @@
|
|||||||
"DeleteReleasedAssets": "删除已释放资产"
|
"DeleteReleasedAssets": "删除已释放资产"
|
||||||
},
|
},
|
||||||
"Template": {
|
"Template": {
|
||||||
"Template": "模版管理"
|
"Template": "模版管理"
|
||||||
},
|
},
|
||||||
"Corporation": "公司",
|
"Corporation": "公司",
|
||||||
"Edition": "版本",
|
"Edition": "版本",
|
||||||
"Execute": "执行",
|
"Execute": "执行",
|
||||||
@ -1562,10 +1566,10 @@
|
|||||||
"Endpoint": "服务端点",
|
"Endpoint": "服务端点",
|
||||||
"EndpointRule": "端点规则",
|
"EndpointRule": "端点规则",
|
||||||
"ServiceRatio": "组件负载统计",
|
"ServiceRatio": "组件负载统计",
|
||||||
"LoadStatus":"组件状态",
|
"LoadStatus": "组件状态",
|
||||||
"NormalLoad":"正常",
|
"NormalLoad": "正常",
|
||||||
"HighLoad":"较高",
|
"HighLoad": "较高",
|
||||||
"CriticalLoad":"严重",
|
"CriticalLoad": "严重",
|
||||||
"Offline": "离线",
|
"Offline": "离线",
|
||||||
"LicenseDetail": "许可证详情",
|
"LicenseDetail": "许可证详情",
|
||||||
"LicenseFile": "许可证文件",
|
"LicenseFile": "许可证文件",
|
||||||
|
@ -12,14 +12,14 @@ export default [
|
|||||||
path: '',
|
path: '',
|
||||||
name: 'TaskList',
|
name: 'TaskList',
|
||||||
component: () => import('@/views/ops/TaskList'),
|
component: () => import('@/views/ops/TaskList'),
|
||||||
meta: { title: i18n.t('route.TaskList') }
|
meta: { title: i18n.t('route.TaskList'), permissions: [] }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: ':id',
|
path: ':id',
|
||||||
component: () => import('@/views/ops/TaskDetail'),
|
component: () => import('@/views/ops/TaskDetail'),
|
||||||
name: 'TaskDetail',
|
name: 'TaskDetail',
|
||||||
hidden: true,
|
hidden: true,
|
||||||
meta: { title: i18n.t('route.TaskDetail') }
|
meta: { title: i18n.t('route.TaskDetail'), permissions: [] }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -1,103 +0,0 @@
|
|||||||
<template>
|
|
||||||
<ListTable :table-config="tableConfig" :header-actions="headerActions" />
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import ListTable from '@/components/ListTable'
|
|
||||||
import { toSafeLocalDateStr } from '@/utils/common'
|
|
||||||
import { DetailFormatter } from '@/components/TableFormatters'
|
|
||||||
export default {
|
|
||||||
name: 'TaskAdhoc',
|
|
||||||
components: {
|
|
||||||
ListTable
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
object: {
|
|
||||||
type: Object,
|
|
||||||
default: () => ({})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
tableConfig: {
|
|
||||||
url: `/api/v1/ops/adhoc/?task=${this.object.id}`,
|
|
||||||
columns: [
|
|
||||||
'short_id', 'hosts', 'pattern', 'run_as', 'become_display', 'date_created', 'actions'
|
|
||||||
],
|
|
||||||
columnsMeta: {
|
|
||||||
short_id: {
|
|
||||||
label: this.$t('ops.version'),
|
|
||||||
formatter: DetailFormatter,
|
|
||||||
formatterArgs: {
|
|
||||||
route: 'AdhocDetail'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
hosts: {
|
|
||||||
label: this.$t('ops.hosts'),
|
|
||||||
width: '80px',
|
|
||||||
formatter: (row, column, cellValue) => {
|
|
||||||
if (cellValue instanceof Array) {
|
|
||||||
return cellValue.length
|
|
||||||
}
|
|
||||||
return cellValue
|
|
||||||
},
|
|
||||||
showOverflowTooltip: true
|
|
||||||
},
|
|
||||||
pattern: {
|
|
||||||
label: this.$t('ops.pattern'),
|
|
||||||
width: '80px'
|
|
||||||
},
|
|
||||||
run_as: {
|
|
||||||
label: this.$t('ops.runAs'),
|
|
||||||
formatter: function(row) {
|
|
||||||
if (row.run_as_admin) {
|
|
||||||
return 'Admin'
|
|
||||||
}
|
|
||||||
if (row.run_as) {
|
|
||||||
return row.run_as
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
become_display: {
|
|
||||||
label: this.$t('ops.become')
|
|
||||||
},
|
|
||||||
date_created: {
|
|
||||||
label: this.$t('ops.datetime'),
|
|
||||||
formatter: function(row) {
|
|
||||||
return toSafeLocalDateStr(row.date_created)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
prop: 'id',
|
|
||||||
width: '80px',
|
|
||||||
formatterArgs: {
|
|
||||||
hasEdit: false,
|
|
||||||
hasDelete: false,
|
|
||||||
hasUpdate: false,
|
|
||||||
hasClone: false,
|
|
||||||
extraActions: [
|
|
||||||
{
|
|
||||||
name: 'detail',
|
|
||||||
title: this.$t('ops.detail'),
|
|
||||||
type: 'primary',
|
|
||||||
callback: function({ row, tableData }) {
|
|
||||||
return this.$router.push({ name: 'AdhocDetail', params: { id: row.id }})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
headerActions: {
|
|
||||||
hasLeftActions: false,
|
|
||||||
hasRightActions: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
@ -3,25 +3,16 @@
|
|||||||
<el-col :md="14" :sm="24">
|
<el-col :md="14" :sm="24">
|
||||||
<DetailCard :title="cardTitle" :items="detailCardItems" />
|
<DetailCard :title="cardTitle" :items="detailCardItems" />
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :md="10" :sm="24">
|
|
||||||
<RunInfoCard type="danger" style="margin-top: 15px" v-bind="RunFailedConfig" />
|
|
||||||
<RunInfoCard type="info" v-bind="RunSuccessConfig" style="margin-top: 15px" />
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script type="text/jsx">
|
<script type="text/jsx">
|
||||||
import DetailCard from '@/components/DetailCard'
|
import DetailCard from '@/components/DetailCard'
|
||||||
import RunInfoCard from '../RunInfoCard/index'
|
|
||||||
import { toLastFailureDisplay, toLastSucessDisplay } from './business'
|
|
||||||
import { toSafeLocalDateStr } from '@/utils/common'
|
|
||||||
import { openTaskPage } from '@/utils/jms'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TaskDetail',
|
name: 'TaskDetail',
|
||||||
components: {
|
components: {
|
||||||
DetailCard,
|
DetailCard
|
||||||
RunInfoCard
|
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
object: {
|
object: {
|
||||||
@ -30,100 +21,22 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {}
|
||||||
RunSuccessConfig: {
|
|
||||||
icon: 'fa-info',
|
|
||||||
title: this.$t('ops.lastRunSuccessHosts'),
|
|
||||||
contents: toLastSucessDisplay(this.object.latest_execution)
|
|
||||||
},
|
|
||||||
RunFailedConfig: {
|
|
||||||
icon: 'fa-info',
|
|
||||||
title: this.$t('ops.lastRunFailedHosts'),
|
|
||||||
contents: toLastFailureDisplay(this.object.latest_execution)
|
|
||||||
},
|
|
||||||
taskData: {}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
cardTitle() {
|
cardTitle() {
|
||||||
return this.object.display_name
|
return this.object.name
|
||||||
},
|
},
|
||||||
detailCardItems() {
|
detailCardItems() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
key: this.$t('common.Name'),
|
key: this.$t('common.Name'),
|
||||||
value: this.object.display_name
|
value: this.object.name
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('common.dateCreated'),
|
|
||||||
value: toSafeLocalDateStr(this.object.date_created)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('ops.totalVersions'),
|
|
||||||
value: JSON.stringify(this.object.summary.total)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('ops.latestVersion'),
|
|
||||||
value: this.object.latest_execution,
|
|
||||||
formatter: function(row, data) {
|
|
||||||
const route = { to: { name: 'AdhocDetail', params: { id: data.adhoc }}}
|
|
||||||
if (!this.$hasPerm('ops.ops.view_adhoc')) {
|
|
||||||
return <span>{ data.adhoc_short_id }</span>
|
|
||||||
}
|
|
||||||
return <router-link {...{ attrs: route }}>{ data.adhoc_short_id }</router-link>
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('ops.lastRun'),
|
|
||||||
value: toSafeLocalDateStr(this.object.latest_execution.date_finished)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('ops.timeDelta'),
|
|
||||||
value: this.object.latest_execution.timedelta.toFixed(2) + 's'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('ops.isFinished'),
|
|
||||||
value: this.object.latest_execution.is_finished
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('ops.isSuccess'),
|
|
||||||
value: this.object.latest_execution.is_success
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('ops.contents'),
|
|
||||||
value: this.toContentsDisplay(this.object.contents),
|
|
||||||
formatter(row, value) {
|
|
||||||
return (<div>{
|
|
||||||
value.map((content) => {
|
|
||||||
return <div>{ content }</div>
|
|
||||||
})}
|
|
||||||
</div>)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: this.$t('ops.lastExecutionOutput'),
|
|
||||||
value: this.object.latest_execution.id,
|
|
||||||
formatter: function(row, value) {
|
|
||||||
const onClick = function() {
|
|
||||||
openTaskPage(value, 'ansible')
|
|
||||||
}
|
|
||||||
const title = this.$t('common.View')
|
|
||||||
return <a onClick={onClick} >{ title }</a>
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {}
|
||||||
toContentsDisplay(contents) {
|
|
||||||
const lines = []
|
|
||||||
for (let i = 0; i < contents.length; i++) {
|
|
||||||
const content = contents[i]
|
|
||||||
lines.push(`${i}. ${content.name} ::: ${content.action.module}`)
|
|
||||||
}
|
|
||||||
return lines
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
|
|
||||||
<script type="text/jsx">
|
<script type="text/jsx">
|
||||||
import ListTable from '@/components/ListTable'
|
import ListTable from '@/components/ListTable'
|
||||||
import { DetailFormatter } from '@/components/TableFormatters'
|
|
||||||
import { toSafeLocalDateStr } from '@/utils/common'
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TaskHistory',
|
name: 'TaskHistory',
|
||||||
@ -21,63 +19,25 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tableConfig: {
|
tableConfig: {
|
||||||
url: `/api/v1/ops/adhoc-executions/?task=${this.object.id}`,
|
url: `/api/v1/ops/tasks/${this.object.id}/executions/`,
|
||||||
columns: [
|
columns: [
|
||||||
'date_start', 'stat', 'ratio', 'is_finished', 'is_success', 'timedelta', 'adhoc_short_id', 'actions'
|
'id', 'state', 'is_finished', 'date_published', 'date_start', 'date_finished', 'actions'
|
||||||
],
|
],
|
||||||
columnsMeta: {
|
columnsMeta: {
|
||||||
date_start: {
|
state: {
|
||||||
formatter: (row) => toSafeLocalDateStr(row.date_start),
|
label: this.$t('ops.state'),
|
||||||
width: '160px'
|
width: '120px',
|
||||||
},
|
formatter: (row) => {
|
||||||
stat: {
|
switch (row.state) {
|
||||||
label: this.$t('ops.stat'),
|
case 'PENDING':
|
||||||
align: 'center',
|
return <span><i Class='fa fa-spinner fa-spin' />{this.$t(`ops.${row.state}`)}</span>
|
||||||
width: '100px',
|
case 'RUNNING':
|
||||||
formatter: function(row) {
|
return <span><i Class='fa fa-spinner fa-spin' />{this.$t(`ops.${row.state}`)}</span>
|
||||||
return (
|
case 'SUCCESS':
|
||||||
<div>
|
return <span Class='text-success'><i Class='fa fa-check' />{this.$t(`ops.${row.state}`)}</span>
|
||||||
<span class='text-primary'>{row.stat.success}</span>/
|
case 'FAILURE':
|
||||||
<span class='text-danger'>{row.stat.failed}</span>/
|
return <span Class='text-danger'><i Class='fa fa-times' />{this.$t(`ops.${row.state}`)}</span>
|
||||||
<span>{row.stat.total}</span>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ratio: {
|
|
||||||
label: this.$t('ops.ratio'),
|
|
||||||
align: 'center',
|
|
||||||
width: '80px',
|
|
||||||
formatter: function(row) {
|
|
||||||
const ratio = (row.stat.success / row.stat.total) * 100
|
|
||||||
if (ratio === 100) {
|
|
||||||
return <span class='text-navy'>{ratio + '%'}</span>
|
|
||||||
}
|
}
|
||||||
return <span class='text-danger'>{ratio + '%'}</span>
|
|
||||||
}
|
|
||||||
},
|
|
||||||
is_finished: {
|
|
||||||
align: 'center',
|
|
||||||
width: '100px',
|
|
||||||
label: this.$t('ops.isFinished')
|
|
||||||
},
|
|
||||||
is_success: {
|
|
||||||
align: 'center',
|
|
||||||
width: '100px',
|
|
||||||
label: this.$t('ops.isSuccess')
|
|
||||||
},
|
|
||||||
timedelta: {
|
|
||||||
label: this.$t('ops.time'),
|
|
||||||
width: '100px',
|
|
||||||
formatter: function(row) {
|
|
||||||
return row.timedelta.toFixed(2) + 's'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
adhoc_short_id: {
|
|
||||||
label: this.$t('ops.version'),
|
|
||||||
formatter: DetailFormatter,
|
|
||||||
formatterArgs: {
|
|
||||||
route: 'HistoryExecutionDetail'
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
import { GenericDetailPage, TabPage } from '@/layout/components'
|
import { GenericDetailPage, TabPage } from '@/layout/components'
|
||||||
import TaskDetail from './TaskDetail'
|
import TaskDetail from './TaskDetail'
|
||||||
import TaskHistory from './TaskHistory'
|
import TaskHistory from './TaskHistory'
|
||||||
import TaskAdhoc from './TaskAdhoc'
|
|
||||||
import CeleryTaskLog from '../CeleryTaskLog'
|
import CeleryTaskLog from '../CeleryTaskLog'
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -18,7 +17,6 @@ export default {
|
|||||||
CeleryTaskLog,
|
CeleryTaskLog,
|
||||||
TaskHistory,
|
TaskHistory,
|
||||||
TaskDetail,
|
TaskDetail,
|
||||||
TaskAdhoc,
|
|
||||||
TabPage
|
TabPage
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@ -34,11 +32,6 @@ export default {
|
|||||||
title: this.$t('ops.taskDetail'),
|
title: this.$t('ops.taskDetail'),
|
||||||
name: 'TaskDetail'
|
name: 'TaskDetail'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
title: this.$t('ops.taskVersions'),
|
|
||||||
name: 'TaskAdhoc',
|
|
||||||
hidden: () => !this.$hasPerm('ops.view_adhoc')
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: this.$t('ops.execution'),
|
title: this.$t('ops.execution'),
|
||||||
name: 'TaskHistory',
|
name: 'TaskHistory',
|
||||||
|
@ -3,14 +3,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script type="text/jsx">
|
<script type="text/jsx">
|
||||||
import { timeOffset, toSafeLocalDateStr } from '@/utils/common'
|
// import { timeOffset, toSafeLocalDateStr } from '@/utils/common'
|
||||||
import { GenericListPage } from '@/layout/components'
|
import { GenericListPage } from '@/layout/components'
|
||||||
import { openTaskPage } from '@/utils/jms'
|
// import { openTaskPage } from '@/utils/jms'
|
||||||
const performDelete = function({ row }) {
|
|
||||||
const id = row.id
|
|
||||||
const url = `${this.url}${id}/`
|
|
||||||
return this.$axios.delete(url)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -21,109 +16,150 @@ export default {
|
|||||||
tableConfig: {
|
tableConfig: {
|
||||||
url: '/api/v1/ops/tasks/',
|
url: '/api/v1/ops/tasks/',
|
||||||
columns: [
|
columns: [
|
||||||
'name', 'runtimes', 'host_amount', 'is_success',
|
'name', 'queue', 'comment', 'count', 'state', 'last_published_time'
|
||||||
'date_start', 'time', 'actions'
|
|
||||||
],
|
],
|
||||||
columnsMeta: {
|
columnsMeta: {
|
||||||
name: {
|
name: {
|
||||||
showOverflowTooltip: true,
|
|
||||||
formatterArgs: {
|
formatterArgs: {
|
||||||
getTitle({ row }) {
|
can: true
|
||||||
return row['display_name']
|
}
|
||||||
}
|
// formatter: (row) => {
|
||||||
|
// return row.meta.verbose_name != null ? row.meta.verbose_name : row.name
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
comment: {
|
||||||
|
label: 'comment',
|
||||||
|
formatter: (row) => {
|
||||||
|
return row.meta.comment
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
runtimes: {
|
queue: {
|
||||||
label: this.$t('ops.runTimes'),
|
label: 'queue',
|
||||||
|
formatter: (row) => {
|
||||||
|
return row.meta.queue
|
||||||
|
}
|
||||||
|
},
|
||||||
|
last_published_time: {
|
||||||
|
width: '210px',
|
||||||
|
formatter: (row) => {
|
||||||
|
return row.last_published_time != null ? row.last_published_time : '-'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
count: {
|
||||||
|
label: 'success/total',
|
||||||
width: '120px',
|
width: '120px',
|
||||||
formatter: function(row) {
|
formatter: (row) => {
|
||||||
return (<div>
|
return <div>
|
||||||
<span Class='text-primary'>{row.summary.success}</span>/
|
<span Class='text-primary'>{row.success_count}</span>/
|
||||||
<span Class='text-danger'>{row.summary.failed}</span>/
|
<span>{row.publish_count}</span>
|
||||||
<span>{row.summary.total}</span>
|
</div>
|
||||||
</div>)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
host_amount: {
|
state: {
|
||||||
label: this.$t('ops.hosts'),
|
width: '60px',
|
||||||
width: '65px',
|
|
||||||
formatter: function(row) {
|
|
||||||
return _.get(row, 'latest_execution.hosts_amount', 0)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
is_success: {
|
|
||||||
label: this.$t('ops.success'),
|
|
||||||
align: 'center',
|
align: 'center',
|
||||||
width: '80px',
|
formatter: (row) => {
|
||||||
formatter: row => {
|
switch (row.state) {
|
||||||
if (_.get(row, 'latest_execution.is_success', false)) {
|
case 'green':
|
||||||
return <i Class='fa fa-check text-primary'/>
|
return <i Class='fa fa-circle-o text-primary' />
|
||||||
|
case 'yellow':
|
||||||
|
return <i Class='fa fa-circle-o text-warning' />
|
||||||
|
case 'red':
|
||||||
|
return <i Class='fa fa-circle-o text-danger' />
|
||||||
}
|
}
|
||||||
return <i Class='fa fa-times text-danger'/>
|
|
||||||
}
|
|
||||||
},
|
|
||||||
date_start: {
|
|
||||||
label: this.$t('ops.date'),
|
|
||||||
width: '150px',
|
|
||||||
formatter: function(row) {
|
|
||||||
if (_.get(row, 'latest_execution.date_start', false)) {
|
|
||||||
return toSafeLocalDateStr(row.latest_execution.date_start)
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
time: {
|
|
||||||
label: this.$t('ops.time'),
|
|
||||||
width: '100px',
|
|
||||||
formatter: function(row) {
|
|
||||||
if (_.get(row, 'latest_execution.date_start', false)) {
|
|
||||||
return timeOffset(row.latest_execution.date_start, row.latest_execution.date_finished)
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// runtimes: {
|
||||||
|
// label: this.$t('ops.runTimes'),
|
||||||
|
// width: '120px',
|
||||||
|
// formatter: function(row) {
|
||||||
|
// return (<div>
|
||||||
|
// <span Class='text-primary'>{row.summary.success}</span>/
|
||||||
|
// <span Class='text-danger'>{row.summary.failed}</span>/
|
||||||
|
// <span>{row.summary.total}</span>
|
||||||
|
// </div>)
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// host_amount: {
|
||||||
|
// label: this.$t('ops.hosts'),
|
||||||
|
// width: '65px',
|
||||||
|
// formatter: function(row) {
|
||||||
|
// return _.get(row, 'latest_execution.hosts_amount', 0)
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// is_success: {
|
||||||
|
// label: this.$t('ops.success'),
|
||||||
|
// align: 'center',
|
||||||
|
// width: '80px',
|
||||||
|
// formatter: row => {
|
||||||
|
// if (_.get(row, 'latest_execution.is_success', false)) {
|
||||||
|
// return <i Class='fa fa-check text-primary'/>
|
||||||
|
// }
|
||||||
|
// return <i Class='fa fa-times text-danger'/>
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// date_start: {
|
||||||
|
// label: this.$t('ops.date'),
|
||||||
|
// width: '150px',
|
||||||
|
// formatter: function(row) {
|
||||||
|
// if (_.get(row, 'latest_execution.date_start', false)) {
|
||||||
|
// return toSafeLocalDateStr(row.latest_execution.date_start)
|
||||||
|
// }
|
||||||
|
// return ''
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// time: {
|
||||||
|
// label: this.$t('ops.time'),
|
||||||
|
// width: '100px',
|
||||||
|
// formatter: function(row) {
|
||||||
|
// if (_.get(row, 'latest_execution.date_start', false)) {
|
||||||
|
// return timeOffset(row.latest_execution.date_start, row.latest_execution.date_finished)
|
||||||
|
// }
|
||||||
|
// return ''
|
||||||
|
// }
|
||||||
|
// },
|
||||||
actions: {
|
actions: {
|
||||||
prop: 'id',
|
prop: 'id',
|
||||||
formatterArgs: {
|
formatterArgs: {
|
||||||
hasUpdate: false,
|
// hasUpdate: false,
|
||||||
hasClone: false,
|
// hasClone: false,
|
||||||
canDelete: this.$hasPerm('ops.delete_task'),
|
// canDelete: this.$hasPerm('ops.delete_task'),
|
||||||
onDelete: function({ row, col, cellValue, reload }) {
|
// onDelete: function({ row, col, cellValue, reload }) {
|
||||||
const msg = this.$t('common.deleteWarningMsg') + ` "${row.display_name || row.name}" ` + '?'
|
// const msg = this.$t('common.deleteWarningMsg') + ` "${row.display_name || row.name}" ` + '?'
|
||||||
const title = this.$t('common.Info')
|
// const title = this.$t('common.Info')
|
||||||
this.$alert(msg, title, {
|
// this.$alert(msg, title, {
|
||||||
type: 'warning',
|
// type: 'warning',
|
||||||
confirmButtonClass: 'el-button--danger',
|
// confirmButtonClass: 'el-button--danger',
|
||||||
showCancelButton: true,
|
// showCancelButton: true,
|
||||||
beforeClose: async(action, instance, done) => {
|
// beforeClose: async(action, instance, done) => {
|
||||||
if (action !== 'confirm') return done()
|
// if (action !== 'confirm') return done()
|
||||||
instance.confirmButtonLoading = true
|
// instance.confirmButtonLoading = true
|
||||||
try {
|
// try {
|
||||||
await performDelete.bind(this)({ row: row, col: col })
|
// await performDelete.bind(this)({ row: row, col: col })
|
||||||
done()
|
// done()
|
||||||
reload()
|
// reload()
|
||||||
this.$message.success(this.$t('common.deleteSuccessMsg'))
|
// this.$message.success(this.$t('common.deleteSuccessMsg'))
|
||||||
} finally {
|
// } finally {
|
||||||
instance.confirmButtonLoading = false
|
// instance.confirmButtonLoading = false
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
},
|
// },
|
||||||
extraActions: [
|
// extraActions: [
|
||||||
{
|
// {
|
||||||
name: 'run',
|
// name: 'run',
|
||||||
can: this.$hasPerm('ops.add_adhoc'),
|
// can: this.$hasPerm('ops.add_adhoc'),
|
||||||
title: this.$t('ops.run'),
|
// title: this.$t('ops.run'),
|
||||||
type: 'primary',
|
// type: 'primary',
|
||||||
callback: function({ row, tableData }) {
|
// callback: function({ row, tableData }) {
|
||||||
this.$axios.get(
|
// this.$axios.get(
|
||||||
`/api/v1/ops/tasks/${row.id}/run/`
|
// `/api/v1/ops/tasks/${row.id}/run/`
|
||||||
).then(res => {
|
// ).then(res => {
|
||||||
openTaskPage(res['task'])
|
// openTaskPage(res['task'])
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
]
|
// ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,7 +169,8 @@ export default {
|
|||||||
hasCreate: false
|
hasCreate: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
methods: {}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user