package org.araqne.storage.hdfs.script; import java.util.ArrayList; import java.util.List; import org.araqne.api.Script; import org.araqne.api.ScriptContext; import org.araqne.api.ScriptUsage; import org.araqne.api.ScriptArgument; import org.araqne.storage.hdfs.HDFSCluster; import org.araqne.storage.hdfs.HDFSStorageManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HDFSStorageScript implements Script { private final Logger logger = LoggerFactory.getLogger("org.araqne.storage.hdfs.script.HDFSStorageScript"); private ScriptContext context; private HDFSStorageManager hdfsStorageManager; public HDFSStorageScript(HDFSStorageManager hdfsStorageManager) { this.hdfsStorageManager = hdfsStorageManager; } @Override public void setScriptContext(ScriptContext context) { this.context = context; } @ScriptUsage(description = "print hdfs storage clusters", arguments = {}) public void HDFSStorageClusters(String[] args) { context.println("HDFS Storage Status"); context.println("-------------------"); for (HDFSCluster cluster : hdfsStorageManager.getClusters()) { context.print("protocol: "); context.print(cluster.getProtocol()); context.print("\talias: "); context.print(cluster.getAlias()); context.print("\tFilesystem: "); context.print(cluster.getFileSystem().getCanonicalServiceName()); context.print("\t"); context.print(cluster.getFileSystem().getUri().getHost()); context.print(":"); context.print(cluster.getFileSystem().getUri().getPort()); context.println(); } } @ScriptUsage(description = "add hdfs storage clusters", arguments = { @ScriptArgument(name = "name", type = "string", description = "cluster name")}) public void addHDFSStorageCluster(String[] args) { try { List<String> confFiles = new ArrayList<String>(); while (true) { String line = readLine("input conf file name (to finish input, press enter)"); if (line == null || line.trim().length() == 0) break; confFiles.add(line.trim()); } hdfsStorageManager.addCluster(confFiles, args[0]); logger.info("araqne hdfs storage: added hdfs cluster " + args[0]); } catch (Throwable t) { context.println(t.getMessage()); logger.error("araqne hdfs storage: cannot add hdfs cluster " + args[0], t); } } @ScriptUsage(description = "remove hdfs storage clusters", arguments = { @ScriptArgument(name = "name", type = "string", description = "cluster name")}) public void removeHDFSStorageCluster(String[] args) { if (hdfsStorageManager.removeCluster(args[0])) context.println("removed cluster " + args[0]); logger.info("araqne hdfs storage: removed hdfs cluster " + args[0]); } private String readLine(String question) throws InterruptedException { context.print(question); String line = context.readLine(); if (line.trim().isEmpty()) return null; return line; } }