use of com.alibaba.dubbo.monitor.simple.common.Page in project incubator-dubbo-ops by apache.
the class ClientsPageHandler method handle.
public Page handle(URL url) {
String port = url.getParameter("port");
int p = port == null || port.length() == 0 ? 0 : Integer.parseInt(port);
Collection<ExchangeServer> servers = DubboProtocol.getDubboProtocol().getServers();
ExchangeServer server = null;
StringBuilder select = new StringBuilder();
if (servers != null && servers.size() > 0) {
if (servers.size() == 1) {
server = servers.iterator().next();
String address = server.getUrl().getAddress();
select.append(" > " + NetUtils.getHostName(address) + "/" + address);
} else {
select.append(" > <select onchange=\"window.location.href='clients.html?port=' + this.value;\">");
for (ExchangeServer s : servers) {
int sp = s.getUrl().getPort();
select.append("<option value=\">");
select.append(sp);
if (p == 0 && server == null || p == sp) {
server = s;
select.append("\" selected=\"selected");
}
select.append("\">");
select.append(s.getUrl().getAddress());
select.append("</option>");
}
select.append("</select>");
}
}
List<List<String>> rows = new ArrayList<List<String>>();
if (server != null) {
Collection<ExchangeChannel> channels = server.getExchangeChannels();
for (ExchangeChannel c : channels) {
List<String> row = new ArrayList<String>();
String address = NetUtils.toAddressString(c.getRemoteAddress());
row.add(NetUtils.getHostName(address) + "/" + address);
rows.add(row);
}
}
return new Page("<a href=\"servers.html\">Servers</a>" + select.toString() + " > Clients", "Clients (" + rows.size() + ")", new String[] { "Client Address:" }, rows);
}
use of com.alibaba.dubbo.monitor.simple.common.Page in project incubator-dubbo-ops by apache.
the class LogPageHandler method handle.
public Page handle(URL url) {
long size = 0;
String content = "";
String modified = "Not exist";
if (file != null && file.exists()) {
try {
FileInputStream fis = new FileInputStream(file);
FileChannel channel = fis.getChannel();
size = channel.size();
ByteBuffer bb;
if (size <= SHOW_LOG_LENGTH) {
bb = ByteBuffer.allocate((int) size);
channel.read(bb, 0);
} else {
int pos = (int) (size - SHOW_LOG_LENGTH);
bb = ByteBuffer.allocate(SHOW_LOG_LENGTH);
channel.read(bb, pos);
}
bb.flip();
content = new String(bb.array()).replace("<", "<").replace(">", ">").replace("\n", "<br/><br/>");
modified = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified()));
} catch (IOException e) {
}
}
Level level = LogManager.getRootLogger().getLevel();
List<List<String>> rows = new ArrayList<List<String>>();
List<String> row = new ArrayList<String>();
row.add(content);
rows.add(row);
return new Page("Log", "Log", new String[] { (file == null ? "" : file.getName()) + ", " + size + " bytes, " + modified + ", " + level }, rows);
}
use of com.alibaba.dubbo.monitor.simple.common.Page in project incubator-dubbo-ops by apache.
the class StatisticsPageHandler method handle.
public Page handle(URL url) {
String service = url.getParameter("service");
if (service == null || service.length() == 0) {
throw new IllegalArgumentException("Please input service parameter.");
}
String date = url.getParameter("date");
if (date == null || date.length() == 0) {
date = new SimpleDateFormat("yyyyMMdd").format(new Date());
}
String expand = url.getParameter("expand");
List<List<String>> rows = new ArrayList<List<String>>();
String directory = ConfigUtils.getProperty("dubbo.statistics.directory");
String filename = directory + "/" + date + "/" + service;
File serviceDir = new File(filename);
if (serviceDir.exists()) {
File[] methodDirs = serviceDir.listFiles();
for (File methodDir : methodDirs) {
long[] statistics = newStatistics();
Map<String, long[]> expandMap = new HashMap<String, long[]>();
File[] consumerDirs = methodDir.listFiles();
for (File consumerDir : consumerDirs) {
long[] expandStatistics = null;
if (MonitorService.CONSUMER.equals(expand)) {
expandStatistics = newStatistics();
expandMap.put(consumerDir.getName(), expandStatistics);
}
File[] providerDirs = consumerDir.listFiles();
for (File providerDir : providerDirs) {
if (MonitorService.PROVIDER.equals(expand)) {
expandStatistics = newStatistics();
expandMap.put(providerDir.getName(), expandStatistics);
}
appendStatistics(providerDir, statistics);
if (expandStatistics != null) {
appendStatistics(providerDir, expandStatistics);
}
}
}
rows.add(toRow(methodDir.getName(), statistics));
if (expandMap != null && expandMap.size() > 0) {
for (Map.Entry<String, long[]> entry : expandMap.entrySet()) {
String node = MonitorService.CONSUMER.equals(expand) ? "<--" : "-->";
rows.add(toRow(" |" + node + " " + entry.getKey(), entry.getValue()));
}
}
}
}
StringBuilder nav = new StringBuilder();
nav.append("<a href=\"services.html\">Services</a> > ");
nav.append(service);
nav.append(" > <a href=\"providers.html?service=");
nav.append(service);
nav.append("\">Providers</a> | <a href=\"consumers.html?service=");
nav.append(service);
nav.append("\">Consumers</a> | Statistics | <a href=\"charts.html?service=");
nav.append(service);
nav.append("&date=");
nav.append(date);
nav.append("\">Charts</a> > <input type=\"text\" style=\"width: 65px;\" name=\"date\" value=\"");
nav.append(date);
nav.append("\" onkeyup=\"if (event.keyCode == 10 || event.keyCode == 13) {window.location.href='statistics.html?service=");
nav.append(service);
if (expand != null && expand.length() > 0) {
nav.append("&expand=");
nav.append(expand);
}
nav.append("&date=' + this.value;}\" /> > ");
if (!MonitorService.PROVIDER.equals(expand) && !MonitorService.CONSUMER.equals(expand)) {
nav.append("Summary");
} else {
nav.append("<a href=\"statistics.html?service=");
nav.append(service);
nav.append("&date=");
nav.append(date);
nav.append("\">Summary</a>");
}
if (MonitorService.PROVIDER.equals(expand)) {
nav.append(" | +Provider");
} else {
nav.append(" | <a href=\"statistics.html?service=");
nav.append(service);
nav.append("&date=");
nav.append(date);
nav.append("&expand=provider\">+Provider</a>");
}
if (MonitorService.CONSUMER.equals(expand)) {
nav.append(" | +Consumer");
} else {
nav.append(" | <a href=\"statistics.html?service=");
nav.append(service);
nav.append("&date=");
nav.append(date);
nav.append("&expand=consumer\">+Consumer</a>");
}
return new Page(nav.toString(), "Statistics (" + rows.size() + ")", new String[] { "Method:", "Success", "Failure", "Avg Elapsed (ms)", "Max Elapsed (ms)", "Max Concurrent" }, rows);
}
use of com.alibaba.dubbo.monitor.simple.common.Page in project incubator-dubbo-ops by apache.
the class StatusPageHandler method handle.
public Page handle(URL url) {
List<List<String>> rows = new ArrayList<List<String>>();
Set<String> names = ExtensionLoader.getExtensionLoader(StatusChecker.class).getSupportedExtensions();
Map<String, Status> statuses = new HashMap<String, Status>();
for (String name : names) {
StatusChecker checker = ExtensionLoader.getExtensionLoader(StatusChecker.class).getExtension(name);
List<String> row = new ArrayList<String>();
row.add(name);
Status status = checker.check();
if (status != null && !Status.Level.UNKNOWN.equals(status.getLevel())) {
statuses.put(name, status);
row.add(getLevelHtml(status.getLevel()));
row.add(status.getMessage());
rows.add(row);
}
}
Status status = StatusUtils.getSummaryStatus(statuses);
if ("status".equals(url.getPath())) {
return new Page("", "", "", status.getLevel().toString());
} else {
List<String> row = new ArrayList<String>();
row.add("summary");
row.add(getLevelHtml(status.getLevel()));
row.add("<a href=\"/status\" target=\"_blank\">summary</a>");
rows.add(row);
return new Page("Status (<a href=\"/status\" target=\"_blank\">summary</a>)", "Status", new String[] { "Name", "Status", "Description" }, rows);
}
}
use of com.alibaba.dubbo.monitor.simple.common.Page in project incubator-dubbo-ops by apache.
the class SubscribedPageHandler method handle.
public Page handle(URL url) {
String registryAddress = url.getParameter("registry", "");
List<List<String>> rows = new ArrayList<List<String>>();
Collection<Registry> registries = AbstractRegistryFactory.getRegistries();
StringBuilder select = new StringBuilder();
Registry registry = null;
if (registries != null && registries.size() > 0) {
if (registries.size() == 1) {
registry = registries.iterator().next();
select.append(" > " + registry.getUrl().getAddress());
} else {
select.append(" > <select onchange=\"window.location.href='subscribed.html?registry=' + this.value;\">");
for (Registry r : registries) {
String sp = r.getUrl().getAddress();
select.append("<option value=\">");
select.append(sp);
if (((registryAddress == null || registryAddress.length() == 0) && registry == null) || registryAddress.equals(sp)) {
registry = r;
select.append("\" selected=\"selected");
}
select.append("\">");
select.append(sp);
select.append("</option>");
}
select.append("</select>");
}
}
if (registry instanceof AbstractRegistry) {
Set<URL> services = ((AbstractRegistry) registry).getSubscribed().keySet();
if (services != null && services.size() > 0) {
for (URL u : services) {
List<String> row = new ArrayList<String>();
row.add(u.toFullString().replace("<", "<").replace(">", ">"));
rows.add(row);
}
}
}
return new Page("<a href=\"registries.html\">Registries</a>" + select.toString() + " > <a href=\"registered.html?registry=" + registryAddress + "\">Registered</a> | Subscribed", "Subscribed (" + rows.size() + ")", new String[] { "Consumer URL:" }, rows);
}
Aggregations