提交 98ed3016 编写于 作者: F Frankie Wu

add hierarchy tcp socket sender

上级 3487e703
...@@ -129,12 +129,12 @@ public class RealtimeConsumer extends ContainerHolder implements MessageConsumer ...@@ -129,12 +129,12 @@ public class RealtimeConsumer extends ContainerHolder implements MessageConsumer
MessageProducer cat = Cat.getProducer(); MessageProducer cat = Cat.getProducer();
Transaction t = cat.newTransaction("Checkpoint", getClass().getSimpleName()); Transaction t = cat.newTransaction("Checkpoint", getClass().getSimpleName());
t.setStatus(Message.SUCCESS);
try { try {
for (Map.Entry<String, MessageAnalyzer> e : m_currentAnalyzers.entrySet()) { for (Map.Entry<String, MessageAnalyzer> e : m_currentAnalyzers.entrySet()) {
e.getValue().doCheckpoint(); e.getValue().doCheckpoint();
} }
t.setStatus(Message.SUCCESS);
} catch (IOException e) { } catch (IOException e) {
cat.logError(e); cat.logError(e);
t.setStatus(e); t.setStatus(e);
......
...@@ -14,6 +14,7 @@ import com.dianping.cat.message.io.InMemoryReceiver; ...@@ -14,6 +14,7 @@ import com.dianping.cat.message.io.InMemoryReceiver;
import com.dianping.cat.message.io.InMemorySender; import com.dianping.cat.message.io.InMemorySender;
import com.dianping.cat.message.io.MessageReceiver; import com.dianping.cat.message.io.MessageReceiver;
import com.dianping.cat.message.io.MessageSender; import com.dianping.cat.message.io.MessageSender;
import com.dianping.cat.message.io.TcpSocketHierarchySender;
import com.dianping.cat.message.io.TcpSocketReceiver; import com.dianping.cat.message.io.TcpSocketReceiver;
import com.dianping.cat.message.io.TcpSocketSender; import com.dianping.cat.message.io.TcpSocketSender;
import com.dianping.cat.message.io.TransportManager; import com.dianping.cat.message.io.TransportManager;
...@@ -75,6 +76,11 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { ...@@ -75,6 +76,11 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
.req(MessageStatistics.class, "default", "m_statistics") // .req(MessageStatistics.class, "default", "m_statistics") //
.req(MessageCodec.class, "plain-text", "m_codec")// .req(MessageCodec.class, "plain-text", "m_codec")//
.req(MessageQueue.class, "default", "m_queue")); .req(MessageQueue.class, "default", "m_queue"));
all.add(C(MessageSender.class, "tcp-socket-hierarchy", TcpSocketHierarchySender.class) //
.is(PER_LOOKUP) //
.req(MessageStatistics.class, "default", "m_statistics") //
.req(MessageCodec.class, "plain-text", "m_codec")//
.req(MessageQueue.class, "default", "m_queue"));
all.add(C(MessageReceiver.class, "tcp-socket", TcpSocketReceiver.class) // all.add(C(MessageReceiver.class, "tcp-socket", TcpSocketReceiver.class) //
.is(PER_LOOKUP) // .is(PER_LOOKUP) //
.req(MessageCodec.class, "plain-text")); .req(MessageCodec.class, "plain-text"));
......
package com.dianping.cat.message.io; package com.dianping.cat.message.io;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
...@@ -42,17 +44,31 @@ public class DefaultTransportManager extends ContainerHolder implements Transpor ...@@ -42,17 +44,31 @@ public class DefaultTransportManager extends ContainerHolder implements Transpor
if (size == 0 || !config.isEnabled()) { if (size == 0 || !config.isEnabled()) {
m_sender = lookup(MessageSender.class, "in-memory"); m_sender = lookup(MessageSender.class, "in-memory");
} else if (size == 1) { } else {
TcpSocketSender sender = (TcpSocketSender) lookup(MessageSender.class, "tcp-socket"); List<InetSocketAddress> addresses = new ArrayList<InetSocketAddress>();
Server server = servers.get(0);
sender.setHost(server.getIp()); for (Server server : servers) {
sender.setPort(server.getPort()); if (server.isEnabled()) {
sender.initialize(); addresses.add(new InetSocketAddress(server.getIp(), server.getPort()));
}
}
m_sender = sender; if (addresses.isEmpty()) {
} else { throw new RuntimeException("All servers in configuration are disabled!\r\n" + servers);
throw new UnsupportedOperationException("Not implemented yet"); } else if (addresses.size() == 1) {
TcpSocketSender sender = (TcpSocketSender) lookup(MessageSender.class, "tcp-socket");
sender.setServerAddress(addresses.get(0));
sender.initialize();
m_sender = sender;
} else {
TcpSocketHierarchySender sender = (TcpSocketHierarchySender) lookup(MessageSender.class,
"tcp-socket-hierarchy");
sender.setServerAddresses(addresses);
sender.initialize();
m_sender = sender;
}
} }
} else { } else {
throw new IllegalArgumentException(String.format( throw new IllegalArgumentException(String.format(
......
package com.dianping.cat.message.io;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executors;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
import com.dianping.cat.message.spi.MessageCodec;
import com.dianping.cat.message.spi.MessageQueue;
import com.dianping.cat.message.spi.MessageStatistics;
import com.dianping.cat.message.spi.MessageTree;
import com.site.lookup.annotation.Inject;
public class TcpSocketHierarchySender extends Thread implements MessageSender, LogEnabled {
@Inject
private MessageCodec m_codec;
@Inject
private MessageQueue m_queue;
@Inject
private MessageStatistics m_statistics;
private List<InetSocketAddress> m_serverAddresses;
private ChannelManager m_manager;
private Logger m_logger;
private transient boolean m_active;
@Override
public void enableLogging(Logger logger) {
m_logger = logger;
}
@Override
public void initialize() {
m_manager = new ChannelManager(m_logger, m_serverAddresses);
this.setName("TcpSocketHierarchySender");
this.start();
m_manager.start();
}
@Override
public void run() {
m_active = true;
while (m_active) {
try {
MessageTree tree = m_queue.poll();
if (tree != null) {
sendInternal(tree);
tree.setMessage(null);
}
} catch (Throwable t) {
m_logger.error("Error when sending message over TCP socket!", t);
}
}
m_manager.releaseAll();
}
@Override
public void send(MessageTree tree) {
boolean result = m_queue.offer(tree);
if (!result) {
if (m_statistics != null) {
m_statistics.onOverflowed(tree);
}
m_logger.error("Message queue is full in tcp socket sender!");
}
}
private void sendInternal(MessageTree tree) {
ChannelFuture future = m_manager.getChannel();
if (future != null && future.getChannel().isOpen()) {
ChannelBuffer buf = ChannelBuffers.dynamicBuffer(10 * 1024); // 10K
m_codec.encode(tree, buf);
int size = buf.readableBytes();
future.getChannel().write(buf);
if (m_statistics != null) {
m_statistics.onBytes(size);
}
}
}
public void setCodec(MessageCodec codec) {
m_codec = codec;
}
public void setServerAddresses(List<InetSocketAddress> serverAddresses) {
m_serverAddresses = serverAddresses;
}
@Override
public void shutdown() {
m_active = false;
m_manager.shutdown();
}
static class ChannelManager extends Thread {
private List<InetSocketAddress> m_serverAddresses;
private List<ChannelFuture> m_futures;
private ClientBootstrap m_bootstrap;
private ChannelFuture m_activeFuture;
private int m_activeIndex;
private Logger m_logger;
private ChannelFuture m_lastFuture;
private boolean m_enabled = true;
public ChannelManager(Logger logger, List<InetSocketAddress> serverAddresses) {
int len = serverAddresses.size();
m_logger = logger;
m_serverAddresses = serverAddresses;
m_futures = new ArrayList<ChannelFuture>(Collections.<ChannelFuture> nCopies(len, null));
ChannelFactory factory = new NioClientSocketChannelFactory(Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
ClientBootstrap bootstrap = new ClientBootstrap(factory);
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() {
return Channels.pipeline(new MyHandler(m_logger));
}
});
bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("keepAlive", true);
m_bootstrap = bootstrap;
for (int i = 0; i < len; i++) {
ChannelFuture future = createChannel(i);
if (future != null) {
m_activeFuture = future;
m_activeIndex = i;
break;
}
}
}
ChannelFuture createChannel(int index) {
InetSocketAddress address = m_serverAddresses.get(index);
ChannelFuture future = m_bootstrap.connect(address);
future.awaitUninterruptibly();
if (!future.isSuccess()) {
future.getChannel().getCloseFuture().awaitUninterruptibly();
m_logger.error("Error when try to connecting to " + address + ", message: " + future.getCause());
return null;
} else {
m_logger.info("Connected to CAT server at " + address);
return future;
}
}
public ChannelFuture getChannel() {
if (m_lastFuture != null && m_lastFuture != m_activeFuture) {
m_lastFuture.getChannel().close();
m_lastFuture = null;
}
return m_activeFuture;
}
public void releaseAll() {
for (ChannelFuture future : m_futures) {
if (future != null) {
future.getChannel().getCloseFuture().awaitUninterruptibly();
}
}
m_bootstrap.getFactory().releaseExternalResources();
m_futures = null;
}
@Override
public void run() {
try {
while (m_enabled) {
if (m_activeFuture != null && !m_activeFuture.getChannel().isOpen()) {
m_activeIndex = m_serverAddresses.size();
}
for (int i = 0; i < m_activeIndex; i++) {
ChannelFuture future = createChannel(i);
if (future != null) {
m_lastFuture = m_activeFuture;
m_activeFuture = future;
m_activeIndex = i;
break;
}
}
Thread.sleep(1000 * 10); // check every 10 seconds
}
} catch (InterruptedException e) {
// ignore
}
}
public void shutdown() {
m_enabled = false;
}
}
static class MyHandler extends SimpleChannelHandler {
private Logger m_logger;
public MyHandler(Logger logger) {
m_logger = logger;
}
@Override
public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
m_logger.warn("Channel disconnected by remote address: " + e.getChannel().getRemoteAddress());
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
e.getChannel().close();
}
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
ChannelBuffer buf = (ChannelBuffer) e.getMessage();
while (buf.readable()) {
// TODO do something here
System.out.println((char) buf.readByte());
System.out.flush();
}
}
}
}
...@@ -29,18 +29,14 @@ import com.site.lookup.annotation.Inject; ...@@ -29,18 +29,14 @@ import com.site.lookup.annotation.Inject;
public class TcpSocketSender extends Thread implements MessageSender, LogEnabled { public class TcpSocketSender extends Thread implements MessageSender, LogEnabled {
@Inject @Inject
private MessageCodec m_codec; private MessageCodec m_codec;
@Inject @Inject
private MessageQueue m_queue; private MessageQueue m_queue;
@Inject @Inject
private MessageStatistics m_statistics; private MessageStatistics m_statistics;
@Inject
private String m_host;
@Inject private InetSocketAddress m_serverAddress;
private int m_port = 2280; // default port number from phone, C:2, A:2, T:8
private ChannelFactory m_factory; private ChannelFactory m_factory;
...@@ -63,8 +59,8 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled ...@@ -63,8 +59,8 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled
@Override @Override
public void initialize() { public void initialize() {
if (m_host == null) { if (m_serverAddress == null) {
throw new RuntimeException("No host was configured for TcpSocketSender!"); throw new RuntimeException("No server address was configured for TcpSocketSender!");
} }
ChannelFactory factory = new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), ChannelFactory factory = new NioClientSocketChannelFactory(Executors.newCachedThreadPool(),
...@@ -80,17 +76,16 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled ...@@ -80,17 +76,16 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled
bootstrap.setOption("tcpNoDelay", true); bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("keepAlive", true); bootstrap.setOption("keepAlive", true);
InetSocketAddress address = new InetSocketAddress(m_host, m_port); ChannelFuture future = bootstrap.connect(m_serverAddress);
ChannelFuture future = bootstrap.connect(address);
future.awaitUninterruptibly(); future.awaitUninterruptibly();
if (!future.isSuccess()) { if (!future.isSuccess()) {
m_logger.error("Error when connecting to " + address, future.getCause()); m_logger.error("Error when connecting to " + m_serverAddress, future.getCause());
} else { } else {
m_factory = factory; m_factory = factory;
m_future = future; m_future = future;
m_logger.info("Connected to CAT server at " + address); m_logger.info("Connected to CAT server at " + m_serverAddress);
} }
m_bootstrap = bootstrap; m_bootstrap = bootstrap;
...@@ -108,16 +103,15 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled ...@@ -108,16 +103,15 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled
m_lastReconnectTime = now; m_lastReconnectTime = now;
InetSocketAddress address = new InetSocketAddress(m_host, m_port); ChannelFuture future = m_bootstrap.connect(m_serverAddress);
ChannelFuture future = m_bootstrap.connect(address);
future.awaitUninterruptibly(); future.awaitUninterruptibly();
if (!future.isSuccess()) { if (!future.isSuccess()) {
m_logger.error("Error when reconnecting to " + address, future.getCause()); m_logger.error("Error when reconnecting to " + m_serverAddress, future.getCause());
} else { } else {
m_future = future; m_future = future;
m_logger.info("Reconnected to CAT server at " + address); m_logger.info("Reconnected to CAT server at " + m_serverAddress);
} }
} }
...@@ -179,18 +173,14 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled ...@@ -179,18 +173,14 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled
m_codec = codec; m_codec = codec;
} }
public void setHost(String host) {
m_host = host;
}
public void setPort(int port) {
m_port = port;
}
public void setReconnectPeriod(int reconnectPeriod) { public void setReconnectPeriod(int reconnectPeriod) {
m_reconnectPeriod = reconnectPeriod; m_reconnectPeriod = reconnectPeriod;
} }
public void setServerAddress(InetSocketAddress serverAddress) {
m_serverAddress = serverAddress;
}
@Override @Override
public void shutdown() { public void shutdown() {
m_active = false; m_active = false;
......
...@@ -40,7 +40,7 @@ public class DefaultMessageHandler extends ContainerHolder implements MessageHan ...@@ -40,7 +40,7 @@ public class DefaultMessageHandler extends ContainerHolder implements MessageHan
public void handle(MessageTree tree) { public void handle(MessageTree tree) {
List<MessageConsumer> consumers = m_registry.getConsumers(); List<MessageConsumer> consumers = m_registry.getConsumers();
int size = consumers.size(); int size = consumers.size();
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
MessageConsumer consumer = consumers.get(i); MessageConsumer consumer = consumers.get(i);
......
...@@ -133,6 +133,27 @@ ...@@ -133,6 +133,27 @@
</requirement> </requirement>
</requirements> </requirements>
</component> </component>
<component>
<role>com.dianping.cat.message.io.MessageSender</role>
<role-hint>tcp-socket-hierarchy</role-hint>
<implementation>com.dianping.cat.message.io.TcpSocketHierarchySender</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
<requirements>
<requirement>
<role>com.dianping.cat.message.spi.MessageStatistics</role>
<field-name>m_statistics</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.message.spi.MessageCodec</role>
<role-hint>plain-text</role-hint>
<field-name>m_codec</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.message.spi.MessageQueue</role>
<field-name>m_queue</field-name>
</requirement>
</requirements>
</component>
<component> <component>
<role>com.dianping.cat.message.io.MessageReceiver</role> <role>com.dianping.cat.message.io.MessageReceiver</role>
<role-hint>tcp-socket</role-hint> <role-hint>tcp-socket</role-hint>
......
package com.dianping.cat.message.io;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.jboss.netty.handler.codec.frame.FrameDecoder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import com.dianping.cat.message.spi.internal.DefaultMessageTree;
import com.site.lookup.ComponentTestCase;
@RunWith(JUnit4.class)
public class TcpSocketHierarchyTest extends ComponentTestCase {
@Test
public void test() throws Exception {
TcpSocketHierarchySender sender = (TcpSocketHierarchySender) lookup(MessageSender.class, "tcp-socket-hierarchy");
List<InetSocketAddress> addresses = getServerAddresses();
StringBuilder result = new StringBuilder();
ServerBootstrap bootstrap = createServerBootstrap(result);
List<Channel> channels = new ArrayList<Channel>();
for (InetSocketAddress address : addresses) {
Channel channel = bootstrap.bind(address);
channels.add(channel);
}
sender.setServerAddresses(addresses);
sender.initialize();
sender.send(new DefaultMessageTree());
Thread.sleep(100 * 1000);
}
private ServerBootstrap createServerBootstrap(final StringBuilder result) {
ChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
ServerBootstrap bootstrap = new ServerBootstrap(factory);
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() {
return Channels.pipeline(new MockDecoder(result));
}
});
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
return bootstrap;
}
private List<InetSocketAddress> getServerAddresses() {
List<InetSocketAddress> list = new ArrayList<InetSocketAddress>();
for (int i = 0; i < 10; i++) {
list.add(new InetSocketAddress("localhost", 3000 + i));
}
return list;
}
static class MockDecoder extends FrameDecoder {
private StringBuilder m_result;
public MockDecoder(StringBuilder result) {
m_result = result;
}
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) {
if (buffer.readableBytes() < 4) {
return null;
}
buffer.markReaderIndex();
int length = buffer.readInt();
if (buffer.readableBytes() < length) {
buffer.resetReaderIndex();
return null;
}
m_result.append('.');
return buffer.readBytes(length);
}
}
}
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816447591-0 null null null
t2012-03-27 10:47:27.591 URL t
E2012-03-27 10:47:27.591 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/m/Cat-c0a83f40-1332816349195-0/logview.html?tag2=t:29&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:27.591 URL Payload 0 HTTP/GET /cat/r/t
A2012-03-27 10:47:27.591 MVC InboundPhase 0 0ms
A2012-03-27 10:47:27.591 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:27.591 MVC OutboundPhase
A2012-03-27 10:47:27.591 ModelService CompositeTransactionService 0 0ms request=ModelRequest[domain=Cat, period=CURRENT, properties={type=null, date=1332813600000}]
T2012-03-27 10:47:27.601 MVC OutboundPhase 0 10ms
T2012-03-27 10:47:27.601 URL t 0 10ms module=r&in=t&out=t
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816448574-0 null null null
t2012-03-27 10:47:28.574 URL p
E2012-03-27 10:47:28.574 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/t&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:28.574 URL Payload 0 HTTP/GET /cat/r/p
A2012-03-27 10:47:28.574 MVC InboundPhase 0 1ms
A2012-03-27 10:47:28.575 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:28.575 MVC OutboundPhase
A2012-03-27 10:47:28.575 ModelService CompositeProblemService 0 0ms request=ModelRequest[domain=Cat, period=CURRENT, properties={thread=192.168.63.64, date=1332813600000, ip=192.168.63.64}]
T2012-03-27 10:47:28.586 MVC OutboundPhase 0 11ms
T2012-03-27 10:47:28.586 URL p 0 12ms module=r&in=p&out=p
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816449411-0 null null null
t2012-03-27 10:47:29.411 URL p
E2012-03-27 10:47:29.411 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/p&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:29.411 URL Payload 0 HTTP/GET /cat/r/p
A2012-03-27 10:47:29.411 MVC InboundPhase 0 0ms
A2012-03-27 10:47:29.411 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:29.411 MVC OutboundPhase
A2012-03-27 10:47:29.411 ModelService CompositeProblemService 0 2ms request=ModelRequest[domain=Cat, period=CURRENT, properties={thread=192.168.63.64, date=1332813600000, ip=192.168.63.64}]
T2012-03-27 10:47:29.425 MVC OutboundPhase 0 14ms
T2012-03-27 10:47:29.425 URL p 0 14ms module=r&in=p&out=p
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816449836-0 null null null
t2012-03-27 10:47:29.836 URL p
E2012-03-27 10:47:29.836 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/p&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:29.836 URL Payload 0 HTTP/GET /cat/r/p
A2012-03-27 10:47:29.836 MVC InboundPhase 0 0ms
A2012-03-27 10:47:29.836 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:29.836 MVC OutboundPhase
A2012-03-27 10:47:29.837 ModelService CompositeProblemService 0 0ms request=ModelRequest[domain=Cat, period=CURRENT, properties={thread=192.168.63.64, date=1332813600000, ip=192.168.63.64}]
T2012-03-27 10:47:29.850 MVC OutboundPhase 0 14ms
T2012-03-27 10:47:29.850 URL p 0 14ms module=r&in=p&out=p
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816450052-0 null null null
t2012-03-27 10:47:30.052 URL p
E2012-03-27 10:47:30.052 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/p&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:30.052 URL Payload 0 HTTP/GET /cat/r/p
A2012-03-27 10:47:30.052 MVC InboundPhase 0 0ms
A2012-03-27 10:47:30.052 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:30.052 MVC OutboundPhase
A2012-03-27 10:47:30.052 ModelService CompositeProblemService 0 1ms request=ModelRequest[domain=Cat, period=CURRENT, properties={thread=192.168.63.64, date=1332813600000, ip=192.168.63.64}]
T2012-03-27 10:47:30.064 MVC OutboundPhase 0 12ms
T2012-03-27 10:47:30.064 URL p 0 12ms module=r&in=p&out=p
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816450284-0 null null null
t2012-03-27 10:47:30.284 URL p
E2012-03-27 10:47:30.284 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/p&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:30.284 URL Payload 0 HTTP/GET /cat/r/p
A2012-03-27 10:47:30.284 MVC InboundPhase 0 0ms
A2012-03-27 10:47:30.284 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:30.284 MVC OutboundPhase
A2012-03-27 10:47:30.284 ModelService CompositeProblemService 0 0ms request=ModelRequest[domain=Cat, period=CURRENT, properties={thread=192.168.63.64, date=1332813600000, ip=192.168.63.64}]
T2012-03-27 10:47:30.292 MVC OutboundPhase 0 8ms
T2012-03-27 10:47:30.292 URL p 0 8ms module=r&in=p&out=p
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816450601-0 null null null
t2012-03-27 10:47:30.601 URL p
E2012-03-27 10:47:30.601 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/p&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:30.601 URL Payload 0 HTTP/GET /cat/r/p
A2012-03-27 10:47:30.601 MVC InboundPhase 0 1ms
A2012-03-27 10:47:30.602 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:30.602 MVC OutboundPhase
A2012-03-27 10:47:30.602 ModelService CompositeProblemService 0 0ms request=ModelRequest[domain=Cat, period=CURRENT, properties={thread=192.168.63.64, date=1332813600000, ip=192.168.63.64}]
T2012-03-27 10:47:30.619 MVC OutboundPhase 0 17ms
T2012-03-27 10:47:30.619 URL p 0 18ms module=r&in=p&out=p
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816450790-0 null null null
t2012-03-27 10:47:30.790 URL p
E2012-03-27 10:47:30.790 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/p&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:30.790 URL Payload 0 HTTP/GET /cat/r/p
A2012-03-27 10:47:30.790 MVC InboundPhase 0 0ms
A2012-03-27 10:47:30.790 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:30.790 MVC OutboundPhase
A2012-03-27 10:47:30.790 ModelService CompositeProblemService 0 1ms request=ModelRequest[domain=Cat, period=CURRENT, properties={thread=192.168.63.64, date=1332813600000, ip=192.168.63.64}]
T2012-03-27 10:47:30.799 MVC OutboundPhase 0 9ms
T2012-03-27 10:47:30.799 URL p 0 9ms module=r&in=p&out=p
PT1 Cat FrankiematoMacBook-Air.local 192.168.63.64 main 38 btpool0-2 Cat-c0a83f40-1332816450977-0 null null null
t2012-03-27 10:47:30.977 URL p
E2012-03-27 10:47:30.977 URL ClientInfo 0 RemoteIP=fe80:0:0:0:0:0:0:1%1&Server=localhost&Referer=http://localhost:2281/cat/r/p&Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10
E2012-03-27 10:47:30.977 URL Payload 0 HTTP/GET /cat/r/p
A2012-03-27 10:47:30.977 MVC InboundPhase 0 1ms
A2012-03-27 10:47:30.978 MVC TransitionPhase 0 0ms
t2012-03-27 10:47:30.978 MVC OutboundPhase
A2012-03-27 10:47:30.979 ModelService CompositeProblemService 0 0ms request=ModelRequest[domain=Cat, period=CURRENT, properties={thread=192.168.63.64, date=1332813600000, ip=192.168.63.64}]
T2012-03-27 10:47:30.989 MVC OutboundPhase 0 11ms
T2012-03-27 10:47:30.989 URL p 0 12ms module=r&in=p&out=p
PT1 Ca
\ No newline at end of file
...@@ -164,18 +164,17 @@ public class Handler implements PageHandler<Context>, Initializable { ...@@ -164,18 +164,17 @@ public class Handler implements PageHandler<Context>, Initializable {
private void showReport(Model model, Payload payload) { private void showReport(Model model, Payload payload) {
try { try {
EventReport report = getReport(payload); EventReport report = getReport(payload);
if (report == null) {
return;
}
if (payload.getPeriod().isFuture()) { if (payload.getPeriod().isFuture()) {
model.setLongDate(payload.getCurrentDate()); model.setLongDate(payload.getCurrentDate());
} else { } else {
model.setLongDate(payload.getDate()); model.setLongDate(payload.getDate());
} }
report.accept(m_computer); if (report != null) {
model.setReport(report); report.accept(m_computer);
model.setReport(report);
}
} catch (Throwable e) { } catch (Throwable e) {
Cat.getProducer().logError(e); Cat.getProducer().logError(e);
model.setException(e); model.setException(e);
......
...@@ -118,13 +118,15 @@ public class Handler implements PageHandler<Context> { ...@@ -118,13 +118,15 @@ public class Handler implements PageHandler<Context> {
model.setAllStatistics(new ProblemStatistics().displayAll(report, model)); model.setAllStatistics(new ProblemStatistics().displayAll(report, model));
break; break;
case THREAD: case THREAD:
report = showSummary(model, payload);
String groupName = payload.getGroupName(); String groupName = payload.getGroupName();
report = showSummary(model, payload);
model.setGroupName(groupName); model.setGroupName(groupName);
if (report != null) { if (report != null) {
model.setThreadLevelInfo(new ThreadLevelInfo(model, groupName).display(report)); model.setThreadLevelInfo(new ThreadLevelInfo(model, groupName).display(report));
} }
model.setAllStatistics(new ProblemStatistics().displayAll(report, model)); model.setAllStatistics(new ProblemStatistics().displayAll(report, model));
break; break;
case DETAIL: case DETAIL:
...@@ -162,24 +164,26 @@ public class Handler implements PageHandler<Context> { ...@@ -162,24 +164,26 @@ public class Handler implements PageHandler<Context> {
model.setLongDate(payload.getDate()); model.setLongDate(payload.getDate());
} }
ProblemReport report = getReport(payload);
if (report == null) {
return null;
}
String ip = getIpAddress(report, payload);
if (period.isCurrent() || period.isFuture()) { if (period.isCurrent() || period.isFuture()) {
Calendar cal = Calendar.getInstance(); Calendar cal = Calendar.getInstance();
int minute = cal.get(Calendar.MINUTE); int minute = cal.get(Calendar.MINUTE);
// model.setLastMinute(getLastMinute(report, ip));
model.setLastMinute(minute); model.setLastMinute(minute);
} else { } else {
model.setLastMinute(59); model.setLastMinute(59);
} }
model.setHour(getHour(model.getLongDate())); model.setHour(getHour(model.getLongDate()));
model.setIpAddress(ip);
model.setReport(report); ProblemReport report = getReport(payload);
if (report != null) {
String ip = getIpAddress(report, payload);
model.setIpAddress(ip);
model.setReport(report);
}
return report; return report;
} }
} }
...@@ -106,11 +106,11 @@ public class Handler implements PageHandler<Context>, Initializable { ...@@ -106,11 +106,11 @@ public class Handler implements PageHandler<Context>, Initializable {
HttpSession session = ctx.getHttpServletRequest().getSession(); HttpSession session = ctx.getHttpServletRequest().getSession();
String sessionDomain = (String) session.getAttribute("domain"); String sessionDomain = (String) session.getAttribute("domain");
String sessionDate = (String) session.getAttribute("date"); String sessionDate = (String) session.getAttribute("date");
if (StringUtils.isEmpty(payload.getDomain())&&sessionDomain != null) { if (StringUtils.isEmpty(payload.getDomain()) && sessionDomain != null) {
payload.setDomain(sessionDomain); payload.setDomain(sessionDomain);
} }
if (payload.getRealDate() == 0&&sessionDate != null) { if (payload.getRealDate() == 0 && sessionDate != null) {
payload.setDate(sessionDate); payload.setDate(sessionDate);
} }
model.setAction(payload.getAction()); model.setAction(payload.getAction());
...@@ -173,8 +173,10 @@ public class Handler implements PageHandler<Context>, Initializable { ...@@ -173,8 +173,10 @@ public class Handler implements PageHandler<Context>, Initializable {
model.setLongDate(payload.getDate()); model.setLongDate(payload.getDate());
} }
report.accept(m_computer); if (report != null) {
model.setReport(report); report.accept(m_computer);
model.setReport(report);
}
} catch (Throwable e) { } catch (Throwable e) {
Cat.getProducer().logError(e); Cat.getProducer().logError(e);
model.setException(e); model.setException(e);
......
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
<servers> <servers>
<server ip="127.0.0.1" port="2280" /> <server ip="127.0.0.1" port="2280" />
</servers> </servers>
<domain id="Cat"/> <domain id="CatTest"/>
</config> </config>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册