vertx-pin/zero-vie/src/main/java/io/mature/extension/refine/OxConsole.java
package io.mature.extension.refine;
import io.horizon.uca.log.Annal;
import io.vertx.core.Future;
import io.vertx.mod.atom.modeling.builtin.DataAtom;
import io.vertx.up.plugin.elasticsearch.ElasticSearchClient;
import io.vertx.up.plugin.elasticsearch.ElasticSearchInfix;
import io.vertx.up.plugin.shell.refine.Sl;
import io.vertx.up.uca.log.DevEnv;
import io.vertx.up.unity.Ux;
import io.vertx.up.util.Ut;
import java.io.InputStream;
import java.util.List;
import static io.mature.extension.refine.Ox.LOG;
/**
* ## Shell命令工具类
*
* ### 1. 基本介绍
*
* Shell命令工具类。
*
* @author <a href="http://www.origin-x.cn">Lang</a>
*/
final class OxConsole {
/**
* Zero专用日志器
*/
private static final Annal LOGGER = Annal.get(OxConsole.class);
/*
* 私有构造函数(工具类转换)
*/
private OxConsole() {
}
/**
* 「Async」ElasticSearch异步执行器,重建索引。
*
* @param atom {@link DataAtom} 模型定义
*
* @return {@link Future}<{@link ElasticSearchClient}>
*/
static Future<ElasticSearchClient> runEs(final DataAtom atom) {
final ElasticSearchClient client = ElasticSearchInfix.getClient();
final String identifier = atom.identifier();
Sl.output("标识:{0}", identifier);
try {
client.deleteIndex(identifier);
client.createIndex(identifier, atom.type());
} catch (final Throwable ex) {
if (DevEnv.devJvmStack()) {
ex.printStackTrace();
}
Sl.failWarn("当前索引不存在:identifier = {0}, details", identifier, ex.getMessage());
}
return Ux.future(client);
}
/**
* 命令执行器,批量调用操作系统中的命令提示符运行操作命令。
*
* @param commands {@link List}<{@link String}> 待执行的命令清单
*/
static void runCmd(final List<String> commands) {
try {
final Process process = Runtime.getRuntime().exec(Ut.fromJoin(commands, " "));
final int waited = process.waitFor();
final int exit = process.exitValue();
if (0 == exit) {
final InputStream in = process.getInputStream();
final String content = Ut.ioString(in, "\n");
System.out.println(content.replaceAll("#\\[", "\n#["));
Sl.output("执行完成,执行结果:{0}", 0 == waited ? "SUCCESS" : "FAILURE");
} else {
final InputStream in = process.getErrorStream();
final String content = Ut.ioString(in);
System.err.println(content.replaceAll("at ", "\n\tat "));
}
} catch (final Exception ex) {
LOG.Shell.warn(LOGGER, "执行出错!ex = {0}", ex.getMessage());
}
}
}