001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.activemq.tool.reports;
018    
019    import java.util.Arrays;
020    import java.util.Iterator;
021    import java.util.Map;
022    import java.util.Properties;
023    
024    import org.apache.activemq.tool.reports.plugins.CpuReportPlugin;
025    import org.apache.activemq.tool.reports.plugins.ThroughputReportPlugin;
026    
027    public class VerbosePerfReportWriter extends AbstractPerfReportWriter {
028    
029        public void openReportWriter() {
030            // Do nothing
031        }
032    
033        public void closeReportWriter() {
034            writeHeader("Performance Summary");
035            writePerfSummary();
036        }
037    
038        public void writeInfo(String info) {
039            System.out.println("[PERF-INFO]: " + info);
040        }
041    
042        public void writeCsvData(int csvType, String csvData) {
043            if (csvType == REPORT_PLUGIN_THROUGHPUT) {
044                System.out.println("[PERF-TP]: " + csvData);
045            } else if (csvType == REPORT_PLUGIN_CPU) {
046                System.out.println("[PERF-CPU]: " + csvData);
047            }
048            handleCsvData(csvType, csvData);
049        }
050    
051        public void writeProperties(String header, Properties props) {
052            writeHeader(header);
053            writeProperties(props);
054        }
055    
056        public void writeProperties(Properties props) {
057            for (Iterator i = props.keySet().iterator(); i.hasNext();) {
058                String key = (String)i.next();
059                String val = props.getProperty(key, "");
060                System.out.println("[PERF-PROP]: " + key + "=" + val);
061            }
062        }
063    
064        public void writePerfSummary() {
065    
066            Map summary;
067    
068            summary = getSummary(REPORT_PLUGIN_THROUGHPUT);
069            if (summary != null && summary.size() > 0) {
070                writeThroughputSummary(summary);
071            }
072    
073            summary = getSummary(REPORT_PLUGIN_CPU);
074            if (summary != null && summary.size() > 0) {
075                writeCpuSummary(summary);
076            }
077    
078        }
079    
080        protected void writeThroughputSummary(Map summary) {
081            writeHeader("SYSTEM THROUGHPUT SUMMARY");
082            System.out.println("[PERF-TP-SUMMARY] System Total Throughput: " + summary.get(ThroughputReportPlugin.KEY_SYS_TOTAL_TP));
083            System.out.println("[PERF-TP-SUMMARY] System Total Clients: " + summary.get(ThroughputReportPlugin.KEY_SYS_TOTAL_CLIENTS));
084            System.out.println("[PERF-TP-SUMMARY] System Average Throughput: " + summary.get(ThroughputReportPlugin.KEY_SYS_AVE_TP));
085            System.out.println("[PERF-TP-SUMMARY] System Average Throughput Excluding Min/Max: " + summary.get(ThroughputReportPlugin.KEY_SYS_AVE_EMM_TP));
086            System.out.println("[PERF-TP-SUMMARY] System Average Client Throughput: " + summary.get(ThroughputReportPlugin.KEY_SYS_AVE_CLIENT_TP));
087            System.out.println("[PERF-TP-SUMMARY] System Average Client Throughput Excluding Min/Max: " + summary.get(ThroughputReportPlugin.KEY_SYS_AVE_CLIENT_EMM_TP));
088            System.out.println("[PERF-TP-SUMMARY] Min Client Throughput Per Sample: " + summary.get(ThroughputReportPlugin.KEY_MIN_CLIENT_TP));
089            System.out.println("[PERF-TP-SUMMARY] Max Client Throughput Per Sample: " + summary.get(ThroughputReportPlugin.KEY_MAX_CLIENT_TP));
090            System.out.println("[PERF-TP-SUMMARY] Min Client Total Throughput: " + summary.get(ThroughputReportPlugin.KEY_MIN_CLIENT_TOTAL_TP));
091            System.out.println("[PERF-TP-SUMMARY] Max Client Total Throughput: " + summary.get(ThroughputReportPlugin.KEY_MAX_CLIENT_TOTAL_TP));
092            System.out.println("[PERF-TP-SUMMARY] Min Client Average Throughput: " + summary.get(ThroughputReportPlugin.KEY_MIN_CLIENT_AVE_TP));
093            System.out.println("[PERF-TP-SUMMARY] Max Client Average Throughput: " + summary.get(ThroughputReportPlugin.KEY_MAX_CLIENT_AVE_TP));
094            System.out.println("[PERF-TP-SUMMARY] Min Client Average Throughput Excluding Min/Max: " + summary.get(ThroughputReportPlugin.KEY_MIN_CLIENT_AVE_EMM_TP));
095            System.out.println("[PERF-TP-SUMMARY] Max Client Average Throughput Excluding Min/Max: " + summary.get(ThroughputReportPlugin.KEY_MAX_CLIENT_AVE_EMM_TP));
096        }
097    
098        protected void writeCpuSummary(Map summary) {
099            writeHeader("SYSTEM CPU USAGE SUMMARY");
100            System.out.println("[PERF-CPU-SUMMARY] Total Blocks Received: " + summary.get(CpuReportPlugin.KEY_BLOCK_RECV));
101            System.out.println("[PERF-CPU-SUMMARY] Ave Blocks Received: " + summary.get(CpuReportPlugin.KEY_AVE_BLOCK_RECV));
102    
103            System.out.println("[PERF-CPU-SUMMARY] Total Blocks Sent: " + summary.get(CpuReportPlugin.KEY_BLOCK_SENT));
104            System.out.println("[PERF-CPU-SUMMARY] Ave Blocks Sent: " + summary.get(CpuReportPlugin.KEY_AVE_BLOCK_SENT));
105    
106            System.out.println("[PERF-CPU-SUMMARY] Total Context Switches: " + summary.get(CpuReportPlugin.KEY_CTX_SWITCH));
107            System.out.println("[PERF-CPU-SUMMARY] Ave Context Switches: " + summary.get(CpuReportPlugin.KEY_AVE_CTX_SWITCH));
108    
109            System.out.println("[PERF-CPU-SUMMARY] Total User Time: " + summary.get(CpuReportPlugin.KEY_USER_TIME));
110            System.out.println("[PERF-CPU-SUMMARY] Ave User Time: " + summary.get(CpuReportPlugin.KEY_AVE_USER_TIME));
111    
112            System.out.println("[PERF-CPU-SUMMARY] Total System Time: " + summary.get(CpuReportPlugin.KEY_SYS_TIME));
113            System.out.println("[PERF-CPU-SUMMARY] Ave System Time: " + summary.get(CpuReportPlugin.KEY_AVE_SYS_TIME));
114    
115            System.out.println("[PERF-CPU-SUMMARY] Total Idle Time: " + summary.get(CpuReportPlugin.KEY_IDLE_TIME));
116            System.out.println("[PERF-CPU-SUMMARY] Ave Idle Time: " + summary.get(CpuReportPlugin.KEY_AVE_IDLE_TIME));
117    
118            System.out.println("[PERF-CPU-SUMMARY] Total Wait Time: " + summary.get(CpuReportPlugin.KEY_WAIT_TIME));
119            System.out.println("[PERF-CPU-SUMMARY] Ave Wait Time: " + summary.get(CpuReportPlugin.KEY_AVE_WAIT_TIME));
120        }
121    
122        protected void writeHeader(String header) {
123            char[] border = new char[header.length() + 8]; // +8 for spacing
124            Arrays.fill(border, '#');
125            String borderStr = new String(border);
126    
127            System.out.println(borderStr);
128            System.out.println("#   " + header + "   #");
129            System.out.println(borderStr);
130        }
131    
132    }