This is an automated email from the ASF dual-hosted git repository. zhaoqingran pushed a commit to branch doris in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
commit 4d694c6df42ea1b5e7fece6f627d3f8059cc5d1d Author: zqr10159 <[email protected]> AuthorDate: Tue Aug 27 17:33:03 2024 +0800 ```fix(doris): correct syntax and ensure timestamp precision for history queriesRefactor DorisDataStorage to use prepared statements for database creation and adjust the history query to multiply timestamps by1000, ensuring precision is maintained. This change also removes commented-out code and adds a check for server availability. ``` --- .../store/history/doris/DorisDataStorage.java | 35 ++++++++++------------ 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/doris/DorisDataStorage.java b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/doris/DorisDataStorage.java index 420d204ae..24250e18d 100644 --- a/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/doris/DorisDataStorage.java +++ b/warehouse/src/main/java/org/apache/hertzbeat/warehouse/store/history/doris/DorisDataStorage.java @@ -46,7 +46,7 @@ import org.springframework.stereotype.Component; @ConditionalOnProperty(prefix = "warehouse.store.doris", name = "enabled", havingValue = "true") @Slf4j public class DorisDataStorage extends AbstractHistoryDataStorage { - private final static String CREATE_DATABASE_SQL = "CREATE DATABASE %s;"; + private final static String CREATE_DATABASE_SQL = "CREATE DATABASE %s;"; private final static String CREATE_TABLE_SQL = """ CREATE TABLE IF NOT EXISTS %s ( @@ -77,7 +77,9 @@ public class DorisDataStorage extends AbstractHistoryDataStorage { ); """; - private static final String QUERY_HISTORY_SQL = "SELECT UNIX_TIMESTAMP(ts) as ts, v['%s'], metrics FROM %s WHERE ts >= now() - interval %s and monitor_id = %s ORDER BY ts DESC;"; + private static final String QUERY_HISTORY_SQL = "SELECT UNIX_TIMESTAMP(ts) * 1000 as ts, v['%s'], metrics FROM %s WHERE ts >= now() - interval %s and monitor_id = %s order by ts desc;"; + + private static final String QUERY_HISTORY_WITH_INSTANCE_SQL = "SELECT UNIX_TIMESTAMP(ts) * 1000 as ts, v['%s'], metrics FROM %s WHERE ts >= now() - interval %s and monitor_id = %s and metrics = '%s' order by ts desc;"; private HikariDataSource hikariDataSource; @@ -104,9 +106,8 @@ public class DorisDataStorage extends AbstractHistoryDataStorage { this.hikariDataSource.setMaxLifetime(0); // max idle time for recycle idle connection this.hikariDataSource.setIdleTimeout(0); - // validation query - this.hikariDataSource.setConnectionTestQuery("select 1"); - createDatabase(dorisProperties.database()); +// createDatabase(dorisProperties.database()); + this.serverAvailable = true; if (hikariDataSource.isRunning()) { this.serverAvailable = true; } @@ -114,7 +115,7 @@ public class DorisDataStorage extends AbstractHistoryDataStorage { private void createDatabase(String database) { try (Connection connection = hikariDataSource.getConnection()) { - connection.createStatement().executeUpdate(String.format(CREATE_DATABASE_SQL, database)); + connection.prepareStatement(String.format(CREATE_DATABASE_SQL, database)).executeUpdate(); } catch (SQLException e) { log.error("[warehouse doris]--Error: {}", e.getMessage(), e); } @@ -154,34 +155,30 @@ public class DorisDataStorage extends AbstractHistoryDataStorage { } String interval = history2interval(history); - String selectSql = String.format(QUERY_HISTORY_SQL, metric,getTableName(app), interval, monitorId); + String selectSql = label == null ? String.format(QUERY_HISTORY_SQL, metric, getTableName(app), interval, monitorId) + : String.format(QUERY_HISTORY_WITH_INSTANCE_SQL, metric, getTableName(app), interval, monitorId, label); try (Connection connection = hikariDataSource.getConnection()) { connection.createStatement().execute("USE " + dorisProperties.database()); ResultSet resultSet = connection.createStatement().executeQuery(selectSql); while (resultSet.next()) { long ts = resultSet.getLong(1); - if (ts == 0) { - log.error("[warehouse doris] getHistoryMetricData query result timestamp is 0, ignore. {}.", - selectSql); - continue; - } - String instanceValue = resultSet.getString(2); + + double value = resultSet.getDouble(2); + String strValue = double2decimalString(value); + + String instanceValue = resultSet.getString(3); if (instanceValue == null || StringUtils.isBlank(instanceValue)) { instanceValue = ""; } - double value = resultSet.getDouble(3); - String strValue = double2decimalString(value); List<Value> valueList = instanceValuesMap.computeIfAbsent(instanceValue, k -> new LinkedList<>()); valueList.add(new Value(strValue, ts)); } - log.info("instanceValuesMap:{}", instanceValuesMap); - return instanceValuesMap; - } catch (SQLException e) { log.error("[warehouse doris]--Error: {}", e.getMessage(), e); } - return Map.of(); + + return instanceValuesMap; } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
