use of io.mycat.api.collector.RowBaseIterator in project Mycat2 by MyCATApache.
the class MigrateUtil method register.
public static MigrateScheduler register(String name, List<MigrateJdbcInput> inputs, MigrateJdbcOutput output, MigrateController controller) {
MigrateScheduler scheduler = MigrateScheduler.of(name, inputs, output, controller);
schedulers.add(scheduler);
controller.getFuture().onSuccess(event -> {
RowBaseIterator list = list();
LOGGER.info("----------------------------Migration-INFO-----------------------------------------------");
List<Map<String, Object>> resultSetMap = list.getResultSetMap();
for (Map<String, Object> stringObjectMap : resultSetMap) {
LOGGER.info(stringObjectMap.toString());
}
LOGGER.info("-----------------------------------------------------------------------------------------");
ScheduleUtil.getTimerFuture(() -> {
schedulers.remove(scheduler);
LOGGER.info("----------------------------Migration-REMOVE-{}---------------------------------------", scheduler.getName());
}, 1, TimeUnit.HOURS);
});
return scheduler;
}
use of io.mycat.api.collector.RowBaseIterator in project Mycat2 by MyCATApache.
the class HeartbeatCollector method collect.
@Override
public List<MetricFamilySamples> collect() {
try {
RowBaseIterator rowBaseIterator = HintHandler.showHeatbeatStat();
List<String> columnList = ImmutableList.of("NAME");
List<Map<String, Object>> resultSetMap = rowBaseIterator.getResultSetMap();
GaugeMetricFamily gaugeMetricFamily = new GaugeMetricFamily("heartbeat_stat", "heartbeat_stat", columnList);
for (Map<String, Object> stringObjectMap : resultSetMap) {
Timestamp LAST_SEND_QUERY_TIME = Timestamp.valueOf((java.time.LocalDateTime) stringObjectMap.get("LAST_SEND_QUERY_TIME"));
Timestamp LAST_RECEIVED_QUERY_TIME = Timestamp.valueOf((java.time.LocalDateTime) stringObjectMap.get("LAST_RECEIVED_QUERY_TIME"));
// 查询时间之差
long l = LAST_RECEIVED_QUERY_TIME.getTime() - LAST_SEND_QUERY_TIME.getTime();
List<String> collect = columnList.stream().map(i -> stringObjectMap.get(i)).map(i -> Objects.toString(i)).collect(Collectors.toList());
gaugeMetricFamily.addMetric(collect, l);
}
return ImmutableList.of(gaugeMetricFamily);
} catch (Throwable e) {
LOGGER.error("", e);
throw e;
}
}
use of io.mycat.api.collector.RowBaseIterator in project Mycat2 by MyCATApache.
the class PrototypeService method getCreateTableSQLByJDBC.
public Optional<String> getCreateTableSQLByJDBC(String schemaName, String tableName, List<Partition> backends) {
Optional<JdbcConnectionManager> jdbcConnectionManagerOptional = getPrototypeConnectionManager();
if (!jdbcConnectionManagerOptional.isPresent()) {
return Optional.empty();
}
JdbcConnectionManager jdbcConnectionManager = jdbcConnectionManagerOptional.get();
backends = new ArrayList<>(backends);
backends.add(new BackendTableInfo(PROTOTYPE, schemaName, tableName));
if (backends == null || backends.isEmpty()) {
return Optional.empty();
}
for (Partition backend : backends) {
try {
Partition backendTableInfo = backend;
String targetName = backendTableInfo.getTargetName();
String targetSchemaTable = backendTableInfo.getTargetSchemaTable();
try (DefaultConnection connection = jdbcConnectionManager.getConnection(targetName)) {
String sql = "SHOW CREATE TABLE `" + backendTableInfo.getSchema() + "`.`" + backendTableInfo.getTable() + "`";
SQLStatement sqlStatement = null;
try (RowBaseIterator rowBaseIterator = connection.executeQuery(sql)) {
rowBaseIterator.next();
String string = rowBaseIterator.getString(1);
sqlStatement = SQLUtils.parseSingleMysqlStatement(string);
if (sqlStatement instanceof MySqlCreateTableStatement) {
MySqlCreateTableStatement sqlStatement1 = (MySqlCreateTableStatement) sqlStatement;
sqlStatement1.setTableName("`" + SQLUtils.normalize(tableName) + "`");
// 顺序不能颠倒
sqlStatement1.setSchema("`" + SQLUtils.normalize(schemaName) + "`");
return Optional.of(sqlStatement1.toString());
}
} catch (Exception e) {
LOGGER.error("", e);
}
if (sqlStatement == null || !(sqlStatement instanceof SQLCreateTableStatement)) {
try (RowBaseIterator rowBaseIterator = connection.executeQuery("select * from `" + backendTableInfo.getSchema() + "`.`" + backendTableInfo.getTable() + "` where 0 limit 0")) {
MycatRowMetaData metaData = rowBaseIterator.getMetaData();
String createTableSql = generateSql(schemaName, tableName, metaData.metaData());
return Optional.of(createTableSql);
}
}
continue;
} catch (Exception e) {
LOGGER.error("", e);
}
continue;
} catch (Throwable e) {
LOGGER.error("can not get create table sql from:" + backend.getTargetName() + backend.getTargetSchemaTable(), e);
continue;
}
}
return Optional.empty();
}
use of io.mycat.api.collector.RowBaseIterator in project Mycat2 by MyCATApache.
the class HintHandler method showHeatbeatStat.
public static RowBaseIterator showHeatbeatStat() {
ResultSetBuilder resultSetBuilder = ResultSetBuilder.create();
resultSetBuilder.addColumnInfo("NAME", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("TYPE", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("READABLE", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("SESSION_COUNT", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("WEIGHT", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("ALIVE", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("MASTER", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("LIMIT_SESSION_COUNT", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("REPLICA", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("SLAVE_THRESHOLD", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("IS_HEARTBEAT_TIMEOUT", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("HB_ERROR_COUNT", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("HB_LAST_SWITCH_TIME", JDBCType.TIMESTAMP);
resultSetBuilder.addColumnInfo("HB_MAX_RETRY", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("IS_CHECKING", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("MIN_SWITCH_TIME_INTERVAL", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("HEARTBEAT_TIMEOUT", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("SYNC_DS_STATUS", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("HB_DS_STATUS", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("IS_SLAVE_BEHIND_MASTER", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("LAST_SEND_QUERY_TIME", JDBCType.TIMESTAMP);
resultSetBuilder.addColumnInfo("LAST_RECEIVED_QUERY_TIME", JDBCType.TIMESTAMP);
if (MetaClusterCurrent.exist(MycatRouterConfig.class) && MetaClusterCurrent.exist(ReplicaSelectorManager.class)) {
MycatRouterConfig routerConfig = MetaClusterCurrent.wrapper(MycatRouterConfig.class);
ReplicaSelectorManager replicaSelectorRuntime = MetaClusterCurrent.wrapper(ReplicaSelectorManager.class);
Map<String, DatasourceConfig> dataSourceConfig = routerConfig.getDatasources().stream().collect(Collectors.toMap(k -> k.getName(), v -> v));
for (HeartbeatFlow heartbeatFlow : replicaSelectorRuntime.getHeartbeatDetectorMap().values()) {
PhysicsInstance instance = heartbeatFlow.instance();
String NAME = instance.getName();
String TYPE = instance.getType().name();
boolean READABLE = instance.asSelectRead();
int SESSION_COUNT = instance.getSessionCounter();
int WEIGHT = instance.getWeight();
boolean ALIVE = instance.isAlive();
boolean MASTER = instance.isMaster();
double SLAVE_THRESHOLD = heartbeatFlow.getSlaveThreshold();
boolean IS_HEARTBEAT_TIMEOUT = heartbeatFlow.isHeartbeatTimeout();
final HeartBeatStatus HEART_BEAT_STATUS = heartbeatFlow.getHbStatus();
int HB_ERROR_COUNT = HEART_BEAT_STATUS.getErrorCount();
LocalDateTime HB_LAST_SWITCH_TIME = new Timestamp(HEART_BEAT_STATUS.getLastSwitchTime()).toLocalDateTime();
int HB_MAX_RETRY = HEART_BEAT_STATUS.getMaxRetry();
boolean IS_CHECKING = HEART_BEAT_STATUS.isChecking();
long MIN_SWITCH_TIME_INTERVAL = HEART_BEAT_STATUS.getMinSwitchTimeInterval();
final long HEARTBEAT_TIMEOUT = (heartbeatFlow.getHeartbeatTimeout());
DatasourceStatus DS_STATUS_OBJECT = heartbeatFlow.getDsStatus();
String SYNC_DS_STATUS = DS_STATUS_OBJECT.getDbSynStatus().name();
String HB_DS_STATUS = DS_STATUS_OBJECT.getStatus().name();
boolean IS_SLAVE_BEHIND_MASTER = DS_STATUS_OBJECT.isSlaveBehindMaster();
LocalDateTime LAST_SEND_QUERY_TIME = new Timestamp(heartbeatFlow.getLastSendQryTime()).toLocalDateTime();
LocalDateTime LAST_RECEIVED_QUERY_TIME = new Timestamp(heartbeatFlow.getLastReceivedQryTime()).toLocalDateTime();
Optional<DatasourceConfig> e = Optional.ofNullable(dataSourceConfig.get(NAME));
String replicaDataSourceSelectorList = String.join(",", replicaSelectorRuntime.getReplicaNameListByInstanceName(NAME));
resultSetBuilder.addObjectRowPayload(Arrays.asList(NAME, TYPE, READABLE, SESSION_COUNT, WEIGHT, ALIVE, MASTER, e.map(i -> i.getMaxCon()).orElse(-1), replicaDataSourceSelectorList, SLAVE_THRESHOLD, IS_HEARTBEAT_TIMEOUT, HB_ERROR_COUNT, HB_LAST_SWITCH_TIME, HB_MAX_RETRY, IS_CHECKING, MIN_SWITCH_TIME_INTERVAL, HEARTBEAT_TIMEOUT, SYNC_DS_STATUS, HB_DS_STATUS, IS_SLAVE_BEHIND_MASTER, LAST_SEND_QUERY_TIME, LAST_RECEIVED_QUERY_TIME));
}
}
RowBaseIterator rowBaseIterator = resultSetBuilder.build();
return rowBaseIterator;
}
use of io.mycat.api.collector.RowBaseIterator in project Mycat2 by MyCATApache.
the class HintHandler method showInstances.
public static RowBaseIterator showInstances() {
MycatRouterConfig routerConfig = MetaClusterCurrent.wrapper(MycatRouterConfig.class);
ReplicaSelectorManager replicaSelectorRuntime = MetaClusterCurrent.wrapper(ReplicaSelectorManager.class);
ResultSetBuilder resultSetBuilder = ResultSetBuilder.create();
resultSetBuilder.addColumnInfo("NAME", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("ALIVE", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("READABLE", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("TYPE", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("SESSION_COUNT", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("WEIGHT", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("MASTER", JDBCType.VARCHAR);
resultSetBuilder.addColumnInfo("LIMIT_SESSION_COUNT", JDBCType.BIGINT);
resultSetBuilder.addColumnInfo("REPLICA", JDBCType.VARCHAR);
Collection<PhysicsInstance> values = replicaSelectorRuntime.getPhysicsInstances();
Map<String, DatasourceConfig> dataSourceConfig = routerConfig.getDatasources().stream().collect(Collectors.toMap(k -> k.getName(), v -> v));
for (PhysicsInstance instance : values) {
String NAME = instance.getName();
String TYPE = instance.getType().name();
boolean READABLE = instance.asSelectRead();
int SESSION_COUNT = instance.getSessionCounter();
int WEIGHT = instance.getWeight();
boolean ALIVE = instance.isAlive();
boolean MASTER = instance.isMaster();
Optional<DatasourceConfig> e = Optional.ofNullable(dataSourceConfig.get(NAME));
String replicaDataSourceSelectorList = String.join(",", replicaSelectorRuntime.getReplicaNameListByInstanceName(NAME));
resultSetBuilder.addObjectRowPayload(Arrays.asList(NAME, ALIVE, READABLE, TYPE, SESSION_COUNT, WEIGHT, MASTER, e.map(i -> i.getMaxCon()).orElse(-1), replicaDataSourceSelectorList));
}
RowBaseIterator rowBaseIterator = resultSetBuilder.build();
return rowBaseIterator;
}
Aggregations