Package com.alibaba.citrus.webx.handler.component

Source Code of com.alibaba.citrus.webx.handler.component.SystemInfoComponent$SystemInfoVisitor

/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.citrus.webx.handler.component;

import static com.alibaba.citrus.util.CollectionUtil.*;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;

import com.alibaba.citrus.service.configuration.ProductionModeAware;
import com.alibaba.citrus.util.ArrayUtil;
import com.alibaba.citrus.util.HumanReadableSize;
import com.alibaba.citrus.util.SystemUtil;
import com.alibaba.citrus.util.internal.webpagelite.PageComponent;
import com.alibaba.citrus.util.internal.webpagelite.PageComponentRegistry;
import com.alibaba.citrus.webx.handler.RequestHandlerContext;
import com.alibaba.citrus.webx.handler.support.AbstractVisitor;
import com.alibaba.citrus.webx.util.WebxUtil;
import org.springframework.core.SpringVersion;

/**
* 显示基本的系统信息。
*
* @author Michael Zhou
*/
public class SystemInfoComponent extends PageComponent implements ProductionModeAware {
    private final KeyValuesComponent keyValuesComponent;
    private       boolean            productionMode;

    public SystemInfoComponent(PageComponentRegistry registry, String componentPath,
                               KeyValuesComponent keyValuesComponent) {
        super(registry, componentPath);
        this.keyValuesComponent = keyValuesComponent;
    }

    public void setProductionMode(boolean productionMode) {
        this.productionMode = productionMode;
    }

    public void visitTemplate(RequestHandlerContext context) {
        getTemplate().accept(new SystemInfoVisitor(context));
    }

    @SuppressWarnings("unused")
    private class SystemInfoVisitor extends AbstractVisitor {
        public SystemInfoVisitor(RequestHandlerContext context) {
            super(context, SystemInfoComponent.this);
        }

        public void visitSysinfo() {
            Map<String, Object> keyValues = createLinkedHashMap();

            // Webx info
            keyValues.put("Webx Version", WebxUtil.getWebxVersion());
            keyValues.put("Spring Version", SpringVersion.getVersion());
            keyValues.put("Servlet API Version", WebxUtil.getServletApiVersion(context.getServletContext()));
            keyValues.put("Running Mode", productionMode ? "Production Mode" : "Development Mode");

            // Java info
            keyValues.put("Java", ArrayUtil.arrayToMap(new Object[][] { //
                                                                        { "Vendor", SystemUtil.getJavaInfo().getVendor() }, //
                                                                        { "Version", SystemUtil.getJavaInfo().getVersion() }, //
            }, String.class, String.class));

            keyValues.put("Java Runtime", ArrayUtil.arrayToMap(new Object[][] { //
                                                                                { "Name", SystemUtil.getJavaRuntimeInfo().getName() }, //
                                                                                { "Version", SystemUtil.getJavaRuntimeInfo().getVersion() }, //
                                                                                { "Home", SystemUtil.getJavaRuntimeInfo().getHomeDir() }, //
            }, String.class, String.class));

            keyValues.put("Java Spec.", ArrayUtil.arrayToMap(new Object[][] { //
                                                                              { "Name", SystemUtil.getJavaSpecInfo().getName() }, //
                                                                              { "Vendor", SystemUtil.getJavaSpecInfo().getVendor() }, //
                                                                              { "Version", SystemUtil.getJavaSpecInfo().getVersion() }, //
            }, String.class, String.class));

            keyValues.put("JVM", ArrayUtil.arrayToMap(new Object[][] { //
                                                                       { "Name", SystemUtil.getJvmInfo().getName() }, //
                                                                       { "Vendor", SystemUtil.getJvmInfo().getVendor() }, //
                                                                       { "Version", SystemUtil.getJvmInfo().getVersion() }, //
                                                                       { "Info", SystemUtil.getJvmInfo().getInfo() }, //
            }, String.class, String.class));

            keyValues.put("JVM Spec.", ArrayUtil.arrayToMap(new Object[][] { //
                                                                             { "Name", SystemUtil.getJvmSpecInfo().getName() }, //
                                                                             { "Vendor", SystemUtil.getJvmSpecInfo().getVendor() }, //
                                                                             { "Version", SystemUtil.getJvmSpecInfo().getVersion() }, //
            }, String.class, String.class));

            // OS info
            keyValues.put("OS", String.format("%s %s %s", SystemUtil.getOsInfo().getName(), SystemUtil.getOsInfo()
                                                                                                      .getArch(), SystemUtil.getOsInfo().getVersion()));

            keyValues.put("File Encoding", SystemUtil.getOsInfo().getFileEncoding());
            keyValues.put("Host Name", SystemUtil.getHostInfo().getName());
            keyValues.put("Host Address", SystemUtil.getHostInfo().getAddress());

            // IPs
            try {
                Map<String, List<String>> networkAddresses = createTreeMap();

                for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements(); ) {
                    NetworkInterface networkInterface = e.nextElement();

                    String name = networkInterface.getDisplayName();
                    List<String> addresses = createLinkedList();

                    for (Enumeration<InetAddress> e2 = networkInterface.getInetAddresses(); e2.hasMoreElements(); ) {
                        addresses.add(e2.nextElement().getHostAddress());
                    }

                    networkAddresses.put(name, addresses);
                }

                keyValues.put("Server IPs", networkAddresses);
            } catch (Exception e) {
                keyValues.put("Server IPs", e.getMessage());
            }

            // Memory
            Map<String, String> memory = createLinkedHashMap();

            memory.put("Free", formatMemory(Runtime.getRuntime().freeMemory()));
            memory.put("Total", formatMemory(Runtime.getRuntime().totalMemory()));
            memory.put("Maximum", formatMemory(Runtime.getRuntime().maxMemory()));

            keyValues.put("Memory", memory);

            keyValuesComponent.visitTemplate(context, keyValues);
        }

        private String formatMemory(long memory) {
            return String.format("%s (%,d)", new HumanReadableSize(memory), memory);
        }
    }
}
TOP

Related Classes of com.alibaba.citrus.webx.handler.component.SystemInfoComponent$SystemInfoVisitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.