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

add hierarchy tcp socket sender

上级 3487e703
......@@ -129,12 +129,12 @@ public class RealtimeConsumer extends ContainerHolder implements MessageConsumer
MessageProducer cat = Cat.getProducer();
Transaction t = cat.newTransaction("Checkpoint", getClass().getSimpleName());
t.setStatus(Message.SUCCESS);
try {
for (Map.Entry<String, MessageAnalyzer> e : m_currentAnalyzers.entrySet()) {
e.getValue().doCheckpoint();
}
t.setStatus(Message.SUCCESS);
} catch (IOException e) {
cat.logError(e);
t.setStatus(e);
......
......@@ -14,6 +14,7 @@ import com.dianping.cat.message.io.InMemoryReceiver;
import com.dianping.cat.message.io.InMemorySender;
import com.dianping.cat.message.io.MessageReceiver;
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.TcpSocketSender;
import com.dianping.cat.message.io.TransportManager;
......@@ -75,6 +76,11 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator {
.req(MessageStatistics.class, "default", "m_statistics") //
.req(MessageCodec.class, "plain-text", "m_codec")//
.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) //
.is(PER_LOOKUP) //
.req(MessageCodec.class, "plain-text"));
......
package com.dianping.cat.message.io;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
......@@ -42,17 +44,31 @@ public class DefaultTransportManager extends ContainerHolder implements Transpor
if (size == 0 || !config.isEnabled()) {
m_sender = lookup(MessageSender.class, "in-memory");
} else if (size == 1) {
TcpSocketSender sender = (TcpSocketSender) lookup(MessageSender.class, "tcp-socket");
Server server = servers.get(0);
} else {
List<InetSocketAddress> addresses = new ArrayList<InetSocketAddress>();
sender.setHost(server.getIp());
sender.setPort(server.getPort());
sender.initialize();
for (Server server : servers) {
if (server.isEnabled()) {
addresses.add(new InetSocketAddress(server.getIp(), server.getPort()));
}
}
m_sender = sender;
} else {
throw new UnsupportedOperationException("Not implemented yet");
if (addresses.isEmpty()) {
throw new RuntimeException("All servers in configuration are disabled!\r\n" + servers);
} 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 {
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;
public class TcpSocketSender extends Thread implements MessageSender, LogEnabled {
@Inject
private MessageCodec m_codec;
@Inject
private MessageQueue m_queue;
@Inject
private MessageStatistics m_statistics;
@Inject
private String m_host;
@Inject
private int m_port = 2280; // default port number from phone, C:2, A:2, T:8
private InetSocketAddress m_serverAddress;
private ChannelFactory m_factory;
......@@ -63,8 +59,8 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled
@Override
public void initialize() {
if (m_host == null) {
throw new RuntimeException("No host was configured for TcpSocketSender!");
if (m_serverAddress == null) {
throw new RuntimeException("No server address was configured for TcpSocketSender!");
}
ChannelFactory factory = new NioClientSocketChannelFactory(Executors.newCachedThreadPool(),
......@@ -80,17 +76,16 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled
bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("keepAlive", true);
InetSocketAddress address = new InetSocketAddress(m_host, m_port);
ChannelFuture future = bootstrap.connect(address);
ChannelFuture future = bootstrap.connect(m_serverAddress);
future.awaitUninterruptibly();
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 {
m_factory = factory;
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;
......@@ -108,16 +103,15 @@ public class TcpSocketSender extends Thread implements MessageSender, LogEnabled
m_lastReconnectTime = now;
InetSocketAddress address = new InetSocketAddress(m_host, m_port);
ChannelFuture future = m_bootstrap.connect(address);
ChannelFuture future = m_bootstrap.connect(m_serverAddress);
future.awaitUninterruptibly();
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 {
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
m_codec = codec;
}
public void setHost(String host) {
m_host = host;
}
public void setPort(int port) {
m_port = port;
}
public void setReconnectPeriod(int reconnectPeriod) {
m_reconnectPeriod = reconnectPeriod;
}
public void setServerAddress(InetSocketAddress serverAddress) {
m_serverAddress = serverAddress;
}
@Override
public void shutdown() {
m_active = false;
......
......@@ -40,7 +40,7 @@ public class DefaultMessageHandler extends ContainerHolder implements MessageHan
public void handle(MessageTree tree) {
List<MessageConsumer> consumers = m_registry.getConsumers();
int size = consumers.size();
for (int i = 0; i < size; i++) {
MessageConsumer consumer = consumers.get(i);
......
......@@ -133,6 +133,27 @@
</requirement>
</requirements>
</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>
<role>com.dianping.cat.message.io.MessageReceiver</role>
<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 {
private void showReport(Model model, Payload payload) {
try {
EventReport report = getReport(payload);
if (report == null) {
return;
}
if (payload.getPeriod().isFuture()) {
model.setLongDate(payload.getCurrentDate());
} else {
model.setLongDate(payload.getDate());
}
report.accept(m_computer);
model.setReport(report);
if (report != null) {
report.accept(m_computer);
model.setReport(report);
}
} catch (Throwable e) {
Cat.getProducer().logError(e);
model.setException(e);
......
......@@ -118,13 +118,15 @@ public class Handler implements PageHandler<Context> {
model.setAllStatistics(new ProblemStatistics().displayAll(report, model));
break;
case THREAD:
report = showSummary(model, payload);
String groupName = payload.getGroupName();
report = showSummary(model, payload);
model.setGroupName(groupName);
if (report != null) {
model.setThreadLevelInfo(new ThreadLevelInfo(model, groupName).display(report));
}
model.setAllStatistics(new ProblemStatistics().displayAll(report, model));
break;
case DETAIL:
......@@ -162,24 +164,26 @@ public class Handler implements PageHandler<Context> {
model.setLongDate(payload.getDate());
}
ProblemReport report = getReport(payload);
if (report == null) {
return null;
}
String ip = getIpAddress(report, payload);
if (period.isCurrent() || period.isFuture()) {
Calendar cal = Calendar.getInstance();
int minute = cal.get(Calendar.MINUTE);
// model.setLastMinute(getLastMinute(report, ip));
model.setLastMinute(minute);
} else {
model.setLastMinute(59);
}
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;
}
}
......@@ -106,11 +106,11 @@ public class Handler implements PageHandler<Context>, Initializable {
HttpSession session = ctx.getHttpServletRequest().getSession();
String sessionDomain = (String) session.getAttribute("domain");
String sessionDate = (String) session.getAttribute("date");
if (StringUtils.isEmpty(payload.getDomain())&&sessionDomain != null) {
payload.setDomain(sessionDomain);
if (StringUtils.isEmpty(payload.getDomain()) && sessionDomain != null) {
payload.setDomain(sessionDomain);
}
if (payload.getRealDate() == 0&&sessionDate != null) {
payload.setDate(sessionDate);
if (payload.getRealDate() == 0 && sessionDate != null) {
payload.setDate(sessionDate);
}
model.setAction(payload.getAction());
......@@ -173,8 +173,10 @@ public class Handler implements PageHandler<Context>, Initializable {
model.setLongDate(payload.getDate());
}
report.accept(m_computer);
model.setReport(report);
if (report != null) {
report.accept(m_computer);
model.setReport(report);
}
} catch (Throwable e) {
Cat.getProducer().logError(e);
model.setException(e);
......
......@@ -2,5 +2,5 @@
<servers>
<server ip="127.0.0.1" port="2280" />
</servers>
<domain id="Cat"/>
<domain id="CatTest"/>
</config>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册