diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-card-list.vue.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-card-list.vue.vm
index 8c9ed80c..e4bd436e 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-card-list.vue.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-card-list.vue.vm
@@ -45,7 +45,9 @@
show-time
allow-clear />
#else
-
+
#end
#end
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-form-drawer.vue.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-form-drawer.vue.vm
index a24f2f46..437a9410 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-form-drawer.vue.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-form-drawer.vue.vm
@@ -35,7 +35,9 @@
placeholder="请选择${field.comment}"
show-time />
#else
-
+
#end
#end
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-form-modal.vue.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-form-modal.vue.vm
index 19b28bde..336cd890 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-form-modal.vue.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-form-modal.vue.vm
@@ -39,7 +39,9 @@
placeholder="请选择${field.comment}"
show-time />
#else
-
+
#end
#end
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-table.vue.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-table.vue.vm
index b4280069..1be07f5f 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-table.vue.vm
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-vue-views-components-table.vue.vm
@@ -27,7 +27,9 @@
show-time
allow-clear />
#else
-
+
#end
#end
@@ -58,7 +60,7 @@
#if($vue.enableRowSelection)
-
@@ -183,7 +185,7 @@
setLoading(true);
// 调用删除接口
await batchDelete${vue.featureEntity}(selectedKeys.value);
- Message.success(`成功删除${selectedKeys.value.length}条数据`);
+ Message.success(`成功删除 ${selectedKeys.value.length} 条数据`);
selectedKeys.value = [];
// 重新加载数据
fetchTableData();
diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/HostConnectLogOperatorType.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/HostConnectLogOperatorType.java
index d58dea10..bf9e3418 100644
--- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/HostConnectLogOperatorType.java
+++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/define/operator/HostConnectLogOperatorType.java
@@ -26,7 +26,7 @@ public class HostConnectLogOperatorType extends InitializingOperatorTypes {
public OperatorType[] types() {
return new OperatorType[]{
new OperatorType(H, DELETE, "删除主机连接记录 ${count}条"),
- new OperatorType(H, CLEAR, "清理主机连接记录 ${count}条"),
+ new OperatorType(H, CLEAR, "清空主机连接记录 ${count}条"),
new OperatorType(M, FORCE_OFFLINE, "强制下线主机连接 ${hostName}"),
};
}
diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostConnectLogVO.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostConnectLogVO.java
index d69d7090..32d0902f 100644
--- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostConnectLogVO.java
+++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/entity/vo/HostConnectLogVO.java
@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
+import java.util.Map;
/**
* 主机连接日志 视图响应对象
@@ -56,12 +57,6 @@ public class HostConnectLogVO implements Serializable {
private Date endTime;
@Schema(description = "额外信息")
- private String extraInfo;
-
- @Schema(description = "创建时间")
- private Date createTime;
-
- @Schema(description = "修改时间")
- private Date updateTime;
+ private Map extra;
}
diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/SshSession.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/SshSession.java
index c80de250..dbe5dd24 100644
--- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/SshSession.java
+++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/SshSession.java
@@ -1,7 +1,5 @@
package com.orion.ops.module.asset.handler.host.terminal.session;
-import com.orion.lang.utils.ansi.AnsiAppender;
-import com.orion.lang.utils.ansi.style.color.AnsiForeground;
import com.orion.lang.utils.io.Streams;
import com.orion.net.host.SessionStore;
import com.orion.net.host.ssh.shell.ShellExecutor;
@@ -99,26 +97,6 @@ public class SshSession extends TerminalSession implements ISshSession {
Streams.close(sessionStore);
}
- @Override
- public void forceOffline() {
- if (this.close) {
- return;
- }
- // 发送消息
- String body = AnsiAppender.create()
- .newLine()
- .append(AnsiForeground.BRIGHT_RED, TerminalMessage.FORCED_OFFLINE)
- .toString();
- SshOutputResponse resp = SshOutputResponse.builder()
- .type(OutputTypeEnum.SSH_OUTPUT.getType())
- .sessionId(sessionId)
- .body(body)
- .build();
- WebSockets.sendText(channel, OutputTypeEnum.SSH_OUTPUT.format(resp));
- // 强制下线
- super.forceOffline();
- }
-
/**
* 标准输出处理
*
@@ -148,12 +126,12 @@ public class SshSession extends TerminalSession implements ISshSession {
* eof 回调
*/
private void eofCallback() {
- log.info("terminal eof回调 {}, forClose: {}", sessionId, this.close);
+ log.info("terminal eof回调 {}, forClose: {}, forceOffline: {}", sessionId, this.close, this.forceOffline);
// 发送关闭信息
TerminalCloseResponse resp = TerminalCloseResponse.builder()
.type(OutputTypeEnum.CLOSE.getType())
.sessionId(this.sessionId)
- .msg(TerminalMessage.CLOSED_CONNECTION)
+ .msg(this.forceOffline ? TerminalMessage.FORCED_OFFLINE : TerminalMessage.CLOSED_CONNECTION)
.build();
WebSockets.sendText(channel, OutputTypeEnum.CLOSE.format(resp));
// 需要调用关闭 - 可能是 logout 需要手动触发
diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/TerminalSession.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/TerminalSession.java
index 78e36ca8..6f2bd276 100644
--- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/TerminalSession.java
+++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/terminal/session/TerminalSession.java
@@ -28,6 +28,8 @@ public abstract class TerminalSession implements ITerminalSession {
protected volatile boolean close;
+ protected volatile boolean forceOffline;
+
public TerminalSession(String sessionId, WebSocketSession channel, TerminalConfig config) {
this.sessionId = sessionId;
this.channel = channel;
@@ -41,6 +43,7 @@ public abstract class TerminalSession implements ITerminalSession {
@Override
public void close() {
+ log.info("terminal close {}", sessionId);
// 检查并且关闭
if (this.checkAndClose()) {
// 修改状态
@@ -50,6 +53,8 @@ public abstract class TerminalSession implements ITerminalSession {
@Override
public void forceOffline() {
+ log.info("terminal forceOffline {}", sessionId);
+ this.forceOffline = true;
this.checkAndClose();
}
@@ -59,7 +64,6 @@ public abstract class TerminalSession implements ITerminalSession {
* @return close
*/
private boolean checkAndClose() {
- log.info("terminal close {}", sessionId);
if (close) {
return false;
}
diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostConnectLogService.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostConnectLogService.java
index 7a24bb1a..795596dd 100644
--- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostConnectLogService.java
+++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/HostConnectLogService.java
@@ -78,7 +78,7 @@ public interface HostConnectLogService {
Long getHostConnectLogCount(HostConnectLogQueryRequest request);
/**
- * 清理主机连接日志
+ * 清空主机连接日志
*
* @param request request
* @return effect
diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java
index 2f1239ee..c4eafc94 100644
--- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java
+++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/service/impl/HostConnectLogServiceImpl.java
@@ -71,7 +71,11 @@ public class HostConnectLogServiceImpl implements HostConnectLogService {
// 查询
return hostConnectLogDAO.of(wrapper)
.page(request)
- .dataGrid(HostConnectLogConvert.MAPPER::to);
+ .dataGrid(s -> {
+ HostConnectLogVO vo = HostConnectLogConvert.MAPPER.to(s);
+ vo.setExtra(JSON.parseObject(s.getExtraInfo()));
+ return vo;
+ });
}
@Override
@@ -97,7 +101,6 @@ public class HostConnectLogServiceImpl implements HostConnectLogService {
@Override
public Integer deleteHostConnectLog(List idList) {
- // TODO 测试一下参数
log.info("HostConnectLogService.deleteHostConnectLog start {}", JSON.toJSONString(idList));
int effect = hostConnectLogDAO.deleteBatchIds(idList);
log.info("HostConnectLogService.deleteHostConnectLog finish {}", effect);
diff --git a/orion-ops-ui/src/api/asset/host-connect-log.ts b/orion-ops-ui/src/api/asset/host-connect-log.ts
index ee983a68..e10e0e79 100644
--- a/orion-ops-ui/src/api/asset/host-connect-log.ts
+++ b/orion-ops-ui/src/api/asset/host-connect-log.ts
@@ -1,11 +1,13 @@
import type { DataGrid, Pagination } from '@/types/global';
import type { TableData } from '@arco-design/web-vue/es/table/interface';
import axios from 'axios';
+import qs from 'query-string';
/**
* 主机连接日志查询请求
*/
export interface HostConnectLogQueryRequest extends Pagination {
+ id?: number;
userId?: number;
hostId?: number;
hostAddress?: string;
@@ -21,6 +23,7 @@ export interface HostConnectLogQueryRequest extends Pagination {
export interface HostConnectLogQueryResponse extends TableData {
id: number;
userId: number;
+ username: number;
hostId: number;
hostName: string;
hostAddress: string;
@@ -29,11 +32,7 @@ export interface HostConnectLogQueryResponse extends TableData {
status: string;
startTime: number;
endTime: number;
- extraInfo: string;
- createTime: number;
- updateTime: number;
- creator: string;
- updater: string;
+ extra: Record;
}
/**
@@ -52,3 +51,36 @@ export function getLatestConnectHostId(type: string, limit: number) {
limit
});
}
+
+/**
+ * 删除主机连接日志
+ */
+export function deleteHostConnectLog(idList: Array) {
+ return axios.delete('/asset/host-connect-log/delete', {
+ params: { idList },
+ paramsSerializer: params => {
+ return qs.stringify(params, { arrayFormat: 'comma' });
+ }
+ });
+}
+
+/**
+ * 查询主机连接日志数量
+ */
+export function getHostConnectLogCount(request: HostConnectLogQueryRequest) {
+ return axios.post('/asset/host-connect-log/query-count', request);
+}
+
+/**
+ * 清空主机连接日志
+ */
+export function clearHostConnectLog(request: HostConnectLogQueryRequest) {
+ return axios.post('/asset/host-connect-log/clear', request);
+}
+
+/**
+ * 强制断开主机连接
+ */
+export function hostForceOffline(request: HostConnectLogQueryRequest) {
+ return axios.put('/asset/host-connect-log/force-offline', request);
+}
diff --git a/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-clear-modal.vue b/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-clear-modal.vue
new file mode 100644
index 00000000..8b9f319d
--- /dev/null
+++ b/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-clear-modal.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-detail-drawer.vue b/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-detail-drawer.vue
new file mode 100644
index 00000000..3d330cf6
--- /dev/null
+++ b/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-detail-drawer.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+ {{ record.id }}
+
+
+
+ ({{ record.userId }}) {{ record.username }}
+
+
+
+ ({{ record.hostId }}) {{ record.hostName }}
+
+
+
+
+ {{ record.hostAddress }}
+
+
+
+ {{ getDictValue(connectTypeKey, record.type) }}
+
+
+
+ {{ getDictValue(connectStatusKey, record.status) }}
+
+
+
+ {{ record.extra?.location }}
+
+
+
+
+ {{ record.extra?.address }}
+
+
+
+ {{ record.extra?.userAgent }}
+
+
+
+ {{ dateFormat(new Date(record.startTime)) }}
+
+
+
+ {{ dateFormat(new Date(record.endTime)) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-table.vue b/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-table.vue
index 53169034..f421a211 100644
--- a/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-table.vue
+++ b/orion-ops-ui/src/views/host-audit/connect-log/components/connect-log-table.vue
@@ -37,10 +37,6 @@
:options="toOptions(connectTypeKey)"
allow-clear />
-
-
-
-
-
+
+
+
+
+ 清空
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
fetchTableData(page, pagination.pageSize)"
@page-size-change="(size) => fetchTableData(1, size)"
:bordered="false">
+
+
+
+ {{ record.extra?.location }}
+
+
+
+
+
+
+ {{ record.extra?.address }}
+
+
{{ record.username }}
@@ -89,7 +126,7 @@
-
+
{{ record.hostAddress }}
@@ -97,10 +134,51 @@
+ }" />
{{ getDictValue(connectStatusKey, record.status) }}
+
+
+
+
+
+ 详情
+
+
+
+
+ 下线
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
@@ -113,21 +191,28 @@