From e20f17a7b72404bce3ce5c642668c428a5e768c0 Mon Sep 17 00:00:00 2001 From: Yann Ann <2993643785@qq.com> Date: Fri, 9 Sep 2022 09:43:56 +0800 Subject: [PATCH] [Improvement-#11768][Monitor] Support monitor h2 database in monitor page (#11813) --- .../dolphinscheduler/dao/MonitorDBDao.java | 3 + .../dao/utils/H2Performance.java | 67 +++++++++++++++++++ .../dao/utils/MySQLPerformance.java | 31 +++------ .../dao/utils/PostgreSQLPerformance.java | 14 +--- 4 files changed, 81 insertions(+), 34 deletions(-) create mode 100644 dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/H2Performance.java diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/MonitorDBDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/MonitorDBDao.java index f71e1b6266..dcdb1f8015 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/MonitorDBDao.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/MonitorDBDao.java @@ -18,6 +18,7 @@ package org.apache.dolphinscheduler.dao; import org.apache.dolphinscheduler.dao.entity.MonitorRecord; +import org.apache.dolphinscheduler.dao.utils.H2Performance; import org.apache.dolphinscheduler.dao.utils.MySQLPerformance; import org.apache.dolphinscheduler.dao.utils.PostgreSQLPerformance; import org.apache.dolphinscheduler.spi.enums.DbType; @@ -51,6 +52,8 @@ public class MonitorDBDao { return new MySQLPerformance().getMonitorRecord(conn); } else if (driverClassName.contains(DbType.POSTGRESQL.toString().toLowerCase())) { return new PostgreSQLPerformance().getMonitorRecord(conn); + } else if (driverClassName.contains(DbType.H2.toString().toLowerCase())) { + return new H2Performance().getMonitorRecord(conn); } } catch (Exception e) { logger.error("SQLException: {}", e.getMessage(), e); diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/H2Performance.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/H2Performance.java new file mode 100644 index 0000000000..f32c9cb357 --- /dev/null +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/H2Performance.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.dolphinscheduler.dao.utils; + +import org.apache.dolphinscheduler.common.enums.Flag; +import org.apache.dolphinscheduler.dao.entity.MonitorRecord; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Date; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * H2 MEMORY DB Performance Monitor + */ +public class H2Performance extends BaseDBPerformance { + + private static final Logger logger = LoggerFactory.getLogger(H2Performance.class); + + /** + * return the current database performance + * + * @param conn connection + * @return MonitorRecord + */ + @Override + public MonitorRecord getMonitorRecord(Connection conn) { + MonitorRecord monitorRecord = new MonitorRecord(); + monitorRecord.setDate(new Date()); + monitorRecord.setDbType(DbType.H2); + monitorRecord.setState(Flag.YES); + + try (Statement pstmt = conn.createStatement()) { + try ( + ResultSet rs1 = pstmt + .executeQuery("select count(1) as total from information_schema.sessions;")) { + if (rs1.next()) { + monitorRecord.setThreadsConnections(rs1.getInt("total")); + } + } + } catch (SQLException e) { + monitorRecord.setState(Flag.NO); + logger.error("SQLException ", e); + } + return monitorRecord; + } +} diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MySQLPerformance.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MySQLPerformance.java index 17b24b2e4f..e8591364d0 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MySQLPerformance.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/MySQLPerformance.java @@ -25,7 +25,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType; import java.sql.Connection; import java.sql.ResultSet; -import java.sql.SQLException; import java.sql.Statement; import java.util.Date; @@ -39,7 +38,6 @@ public class MySQLPerformance extends BaseDBPerformance { private static Logger logger = LoggerFactory.getLogger(MySQLPerformance.class); - /** * get monitor record * @param conn connection @@ -51,43 +49,32 @@ public class MySQLPerformance extends BaseDBPerformance { monitorRecord.setDate(new Date()); monitorRecord.setDbType(DbType.MYSQL); monitorRecord.setState(Flag.YES); - Statement pstmt= null; - try{ - pstmt = conn.createStatement(); + try (Statement pstmt = conn.createStatement()) { try (ResultSet rs1 = pstmt.executeQuery("show global variables")) { - while(rs1.next()){ - if("MAX_CONNECTIONS".equalsIgnoreCase(rs1.getString(VARIABLE_NAME))){ - monitorRecord.setMaxConnections( Long.parseLong(rs1.getString("value"))); + while (rs1.next()) { + if ("MAX_CONNECTIONS".equalsIgnoreCase(rs1.getString(VARIABLE_NAME))) { + monitorRecord.setMaxConnections(Long.parseLong(rs1.getString("value"))); } } } try (ResultSet rs2 = pstmt.executeQuery("show global status")) { - while(rs2.next()){ - if("MAX_USED_CONNECTIONS".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))){ + while (rs2.next()) { + if ("MAX_USED_CONNECTIONS".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))) { monitorRecord.setMaxUsedConnections(Long.parseLong(rs2.getString("value"))); - }else if("THREADS_CONNECTED".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))){ + } else if ("THREADS_CONNECTED".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))) { monitorRecord.setThreadsConnections(Long.parseLong(rs2.getString("value"))); - }else if("THREADS_RUNNING".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))){ + } else if ("THREADS_RUNNING".equalsIgnoreCase(rs2.getString(VARIABLE_NAME))) { monitorRecord.setThreadsRunningConnections(Long.parseLong(rs2.getString("value"))); } } } - }catch (Exception e) { + } catch (Exception e) { monitorRecord.setState(Flag.NO); logger.error("SQLException ", e); - }finally { - try { - if (pstmt != null) { - pstmt.close(); - } - }catch (SQLException e) { - logger.error("SQLException ", e); - } } return monitorRecord; } - } diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/PostgreSQLPerformance.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/PostgreSQLPerformance.java index 0b4fa7579f..928575b984 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/PostgreSQLPerformance.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/utils/PostgreSQLPerformance.java @@ -23,7 +23,6 @@ import org.apache.dolphinscheduler.spi.enums.DbType; import java.sql.Connection; import java.sql.ResultSet; -import java.sql.SQLException; import java.sql.Statement; import java.util.Date; @@ -31,6 +30,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PostgreSQLPerformance extends BaseDBPerformance { + private static final Logger logger = LoggerFactory.getLogger(PostgreSQLPerformance.class); /** @@ -45,10 +45,8 @@ public class PostgreSQLPerformance extends BaseDBPerformance { monitorRecord.setDate(new Date()); monitorRecord.setState(Flag.YES); monitorRecord.setDbType(DbType.POSTGRESQL); - Statement pstmt = null; - try { - pstmt = conn.createStatement(); + try (Statement pstmt = conn.createStatement()) { try (ResultSet rs1 = pstmt.executeQuery("select count(*) from pg_stat_activity;")) { if (rs1.next()) { monitorRecord.setThreadsConnections(rs1.getInt("count")); @@ -69,14 +67,6 @@ public class PostgreSQLPerformance extends BaseDBPerformance { } catch (Exception e) { monitorRecord.setState(Flag.NO); logger.error("SQLException ", e); - } finally { - try { - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - logger.error("SQLException ", e); - } } return monitorRecord; }