/* * Copyright 2008-2009 the original author or authors. * * Licensed 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 net.hasor.rsf.console.commands; import net.hasor.core.Singleton; import net.hasor.rsf.InterAddress; import net.hasor.rsf.RsfBindInfo; import net.hasor.rsf.RsfContext; import net.hasor.rsf.RsfUpdater; import net.hasor.rsf.console.RsfCommand; import net.hasor.rsf.console.RsfCommandRequest; import net.hasor.rsf.console.RsfInstruct; import java.io.StringWriter; import java.util.List; /** * 查看服务详细信息 * @version : 2016年4月3日 * @author 赵永春(zyc@hasor.net) */ @Singleton @RsfCommand("detail") public class DetailRsfInstruct implements RsfInstruct { // @Override public String helpInfo() { return "show service info.\r\n"// + " - detail (show help info.)\r\n"// + " - detail -h (show help info.)\r\n"// + " - detail xxxx (show service info of XXXX.)\r\n"// + " - detail -a xxxx (show service info of XXXX. if service is Consumer then show Providers)"; } @Override public boolean inputMultiLine(RsfCommandRequest request) { return false; } @Override public String doCommand(RsfCommandRequest request) throws Throwable { StringWriter sw = new StringWriter(); String[] args = request.getRequestArgs(); // .help if (args == null || args.length == 0 || (args.length > 0 && "-h".equalsIgnoreCase(args[0]))) { // sw.write(">>>>>>>>>>>>>>>>>>>>>>>> " + request.getCommandString() + " <<<<<<<<<<<<<<<<<<<<<<<<\r\n"); sw.write(helpInfo()); return sw.toString(); } // // .准备参数 String serviceID = args[args.length - 1].trim(); RsfContext rsfContext = request.getRsfContext(); RsfBindInfo<Object> info = rsfContext.getServiceInfo(serviceID); boolean isProvider = rsfContext.getServiceProvider(info) != null; if (info == null) { return "[ERROR] the service '" + serviceID + "' is Undefined."; } // sw.write(">>\r\n"); sw.write(">>----- Service Info ------\r\n"); sw.write(">> ID : " + info.getBindID() + "\r\n"); sw.write(">> Group : " + info.getBindGroup() + "\r\n"); sw.write(">> Name : " + info.getBindName() + "\r\n"); sw.write(">> Version : " + info.getBindVersion() + "\r\n"); sw.write(">> Timeout : " + info.getClientTimeout() + "\r\n"); sw.write(">> Serialize : " + info.getSerializeType() + "\r\n"); sw.write(">> javaType : " + info.getBindType().getName() + "\r\n"); sw.write(">> Message : " + info.isMessage() + "\r\n"); sw.write(">> Shadow : " + info.isShadow() + "\r\n"); sw.write(">> SinglePool : " + info.isSharedThreadPool() + "\r\n"); sw.write(">> Type : " + ((isProvider) ? "Provider" : "Consumer") + "\r\n"); // if (!isProvider && (args.length == 2 && "-a".equalsIgnoreCase(args[0]))) { RsfUpdater updater = rsfContext.getUpdater(); List<InterAddress> allList = updater.queryAllAddresses(serviceID); List<InterAddress> availableList = updater.queryAvailableAddresses(serviceID); List<InterAddress> unitList = updater.queryLocalUnitAddresses(serviceID); sw.write(">>\r\n"); sw.write(">>---- Subscribe Info -----\r\n"); sw.write(">> unit : " + evalAddress(unitList) + "\r\n"); sw.write(">> available : " + evalAddress(availableList) + "\r\n"); sw.write(">> all : " + evalAddress(allList) + "\r\n"); } return sw.toString(); } private static final String evalAddress(List<InterAddress> addressSet) { StringBuffer addrList = new StringBuffer(""); for (InterAddress inter : addressSet) { if (inter == null) continue; if (addrList.length() > 0) { addrList.append(" , "); } addrList.append(inter.toHostSchema()); } addrList.insert(0, '['); addrList.append(']'); return addrList.toString(); } }