1 package org.sapia.ubik.rmi.server.perf; 2 3 import org.sapia.taskman.Task; 4 import org.sapia.taskman.TaskContext; 5 6 import org.sapia.ubik.rmi.server.Log; 7 8 import java.util.Arrays ; 9 import java.util.Collections ; 10 import java.util.HashMap ; 11 import java.util.Map ; 12 13 14 22 public class PerfAnalyzer implements Task { 23 private static final PerfAnalyzer _perf = new PerfAnalyzer(); 24 private boolean _isEnabled; 25 private Map _avgs = Collections.synchronizedMap(new HashMap ()); 26 27 30 private PerfAnalyzer() { 31 super(); 32 } 33 34 public boolean isEnabled() { 35 return _isEnabled; 36 } 37 38 public void setEnabled(boolean enabled) { 39 _isEnabled = enabled; 40 } 41 42 public Topic getTopic(String name) { 43 Topic t = (Topic) _avgs.get(name); 44 45 if (t == null) { 46 synchronized (_avgs) { 47 if ((t = (Topic) _avgs.get(name)) == null) { 48 t = new Topic(name); 49 _avgs.put(name, t); 50 51 return t; 52 } else { 53 return t; 54 } 55 } 56 } else { 57 return t; 58 } 59 } 60 61 64 public void exec(TaskContext ctx) { 65 if (!Log.isWarning()) { 66 _avgs.clear(); 67 68 return; 69 } 70 71 if (_avgs.size() == 0) { 72 return; 73 } 74 75 ctx.getTaskOutput().warning("======================="); 76 ctx.getTaskOutput().warning("Ubik Performance Report"); 77 ctx.getTaskOutput().warning("======================="); 78 79 Topic[] topics; 80 81 synchronized (_avgs) { 82 topics = (Topic[]) _avgs.values().toArray(new Topic[_avgs.size()]); 83 _avgs.clear(); 84 } 85 86 long duration; 87 Arrays.sort(topics); 88 89 for (int i = 0; i < topics.length; i++) { 90 duration = topics[i].duration(); 91 92 if (duration > -1) { 93 ctx.getTaskOutput().warning(topics[i].getName() + ": " + duration + 94 "ms"); 95 } 96 } 97 } 98 99 public static PerfAnalyzer getInstance() { 100 return _perf; 101 } 102 } 103 | Popular Tags |