diff --git a/cat-core/src/main/java/com/dianping/cat/configuration/ComponentsConfigurator.java b/cat-core/src/main/java/com/dianping/cat/configuration/ComponentsConfigurator.java index 6c9e6822b6b1627551351df5194fa25b6480a46b..4b33036e59b606c5ed07db8cb814d27743203bd4 100644 --- a/cat-core/src/main/java/com/dianping/cat/configuration/ComponentsConfigurator.java +++ b/cat-core/src/main/java/com/dianping/cat/configuration/ComponentsConfigurator.java @@ -21,6 +21,7 @@ import com.dianping.cat.message.spi.MessageConsumerRegistry; import com.dianping.cat.message.spi.MessageHandler; import com.dianping.cat.message.spi.MessageManager; import com.dianping.cat.message.spi.MessagePathBuilder; +import com.dianping.cat.message.spi.MessageStorage; import com.dianping.cat.message.spi.codec.BufferWriter; import com.dianping.cat.message.spi.codec.EscapingBufferWriter; import com.dianping.cat.message.spi.codec.HtmlEncodingBufferWriter; @@ -31,6 +32,7 @@ import com.dianping.cat.message.spi.consumer.DumpToHtmlConsumer; import com.dianping.cat.message.spi.internal.DefaultMessageConsumerRegistry; import com.dianping.cat.message.spi.internal.DefaultMessageHandler; import com.dianping.cat.message.spi.internal.DefaultMessagePathBuilder; +import com.dianping.cat.message.spi.internal.DefaultMessageStorage; import com.site.lookup.configuration.AbstractResourceConfigurator; import com.site.lookup.configuration.Component; @@ -50,6 +52,9 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { .req(MessageManager.class)); all.add(C(MessagePathBuilder.class, DefaultMessagePathBuilder.class) // .req(MessageManager.class)); + all.add(C(MessageStorage.class, "html", DefaultMessageStorage.class) // + .req(MessagePathBuilder.class) // + .req(MessageCodec.class, "html-encode")); all.add(C(BufferWriter.class, "escape", EscapingBufferWriter.class)); all.add(C(BufferWriter.class, "html-encode", HtmlEncodingBufferWriter.class)); diff --git a/cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java b/cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java index f6ae1d7cb3fa959ed9840ca0288a7ccf9fe762eb..67c7c53531fb642db3d452444e634b5c361da192 100644 --- a/cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java +++ b/cat-core/src/main/java/com/dianping/cat/message/internal/DefaultMessageManager.java @@ -3,6 +3,7 @@ package com.dianping.cat.message.internal; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Stack; +import java.util.UUID; import com.dianping.cat.configuration.model.entity.Config; import com.dianping.cat.message.Message; @@ -128,7 +129,7 @@ public class DefaultMessageManager extends ContainerHolder implements MessageMan m_tree.setThreadId(Long.toHexString(Thread.currentThread().getId())); m_tree.setHostName(hostName); m_tree.setIpAddress(ipAddress); - m_tree.setMessageId("?"); // TODO + m_tree.setMessageId(UUID.randomUUID().toString()); // TODO optimize it to shorter UUID } public void add(DefaultMessageManager manager, Message message) { diff --git a/cat-core/src/main/java/com/dianping/cat/message/spi/MessagePathBuilder.java b/cat-core/src/main/java/com/dianping/cat/message/spi/MessagePathBuilder.java index 82fc8b16e4aa4040f68d31eea469cf6967bf0a38..93e4294621969066794f5da633dd03ffab4de1a2 100644 --- a/cat-core/src/main/java/com/dianping/cat/message/spi/MessagePathBuilder.java +++ b/cat-core/src/main/java/com/dianping/cat/message/spi/MessagePathBuilder.java @@ -4,7 +4,9 @@ import java.io.File; import java.net.URL; public interface MessagePathBuilder { - public URL getLogViewUrl(MessageTree tree); + public File getLogViewBaseDir(); - public File getLogViewFile(MessageTree tree); + public URL getLogViewBaseUrl(); + + public String getLogViewPath(MessageTree tree); } diff --git a/cat-core/src/main/java/com/dianping/cat/message/spi/MessageStorage.java b/cat-core/src/main/java/com/dianping/cat/message/spi/MessageStorage.java new file mode 100644 index 0000000000000000000000000000000000000000..f4164bcdea65c986fae5e304fe04710adcc000fc --- /dev/null +++ b/cat-core/src/main/java/com/dianping/cat/message/spi/MessageStorage.java @@ -0,0 +1,19 @@ +package com.dianping.cat.message.spi; + +import java.io.File; +import java.net.URL; + +public interface MessageStorage { + public File getBaseDir(); + + public URL getBaseUrl(); + + /** + * Store a message tree to the storage. + * + * @param tree + * message tree to store + * @return relative path to base directory or base URL + */ + public String store(MessageTree tree); +} diff --git a/cat-core/src/main/java/com/dianping/cat/message/spi/consumer/DumpToHtmlConsumer.java b/cat-core/src/main/java/com/dianping/cat/message/spi/consumer/DumpToHtmlConsumer.java index 8af47334d2affed784d46fdff2cb3c7012eb772b..759f5c8dea4363dad5dee43fbb0641615eafb14f 100644 --- a/cat-core/src/main/java/com/dianping/cat/message/spi/consumer/DumpToHtmlConsumer.java +++ b/cat-core/src/main/java/com/dianping/cat/message/spi/consumer/DumpToHtmlConsumer.java @@ -18,15 +18,16 @@ public class DumpToHtmlConsumer implements MessageConsumer { private MessageCodec m_codec; @Inject - private MessagePathBuilder m_pathBuilder; + private MessagePathBuilder m_builder; @Override public void consume(MessageTree tree) { - File file = m_pathBuilder.getLogViewFile(tree); + File baseDir = m_builder.getLogViewBaseDir(); + File file = new File(baseDir, m_builder.getLogViewPath(tree)); FileOutputStream fos = null; try { - ChannelBuffer buf = ChannelBuffers.buffer(8192); + ChannelBuffer buf = ChannelBuffers.dynamicBuffer(8192); m_codec.encode(tree, buf); fos = new FileOutputStream(file); @@ -42,7 +43,6 @@ public class DumpToHtmlConsumer implements MessageConsumer { } } } - } @Override diff --git a/cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessagePathBuilder.java b/cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessagePathBuilder.java index f691ad9335f4c8396fd05f0616f7bff9db586371..27944ce5ce18af7278a942c2d382eaf34d8afdb0 100644 --- a/cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessagePathBuilder.java +++ b/cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessagePathBuilder.java @@ -24,28 +24,17 @@ public class DefaultMessagePathBuilder implements MessagePathBuilder, Initializa private URL m_baseLogUrl; @Override - public File getLogViewFile(MessageTree tree) { - String relativePath = getRelativePath(tree); - File file = new File(m_baseLogDir, relativePath); - - return file; + public File getLogViewBaseDir() { + return m_baseLogDir; } @Override - public URL getLogViewUrl(MessageTree tree) { - String relativePath = getRelativePath(tree); - - try { - URL url = new URL(m_baseLogUrl, relativePath); - - return url; - } catch (MalformedURLException e) { - throw new RuntimeException(String.format("Unable to construct message URL(%s, %s)!", m_baseLogUrl, - relativePath), e); - } + public URL getLogViewBaseUrl() { + return m_baseLogUrl; } - private String getRelativePath(MessageTree tree) { + @Override + public String getLogViewPath(MessageTree tree) { MessageFormat format = new MessageFormat("{0,date,yyyyMMdd}/{1}/{2}"); Date date = new Date(tree.getMessage().getTimestamp()); String path = format.format(new Object[] { date, tree.getDomain(), tree.getMessageId() }); diff --git a/cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessageStorage.java b/cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessageStorage.java new file mode 100644 index 0000000000000000000000000000000000000000..4ac5263da626ebf7f2263f3545de951270a0f428 --- /dev/null +++ b/cat-core/src/main/java/com/dianping/cat/message/spi/internal/DefaultMessageStorage.java @@ -0,0 +1,70 @@ +package com.dianping.cat.message.spi.internal; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; + +import org.codehaus.plexus.logging.LogEnabled; +import org.codehaus.plexus.logging.Logger; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; + +import com.dianping.cat.message.spi.MessageCodec; +import com.dianping.cat.message.spi.MessagePathBuilder; +import com.dianping.cat.message.spi.MessageStorage; +import com.dianping.cat.message.spi.MessageTree; +import com.site.lookup.annotation.Inject; + +public class DefaultMessageStorage implements MessageStorage, LogEnabled { + @Inject + private MessagePathBuilder m_builder; + + @Inject + private MessageCodec m_codec; + + private Logger m_logger; + + @Override + public void enableLogging(Logger logger) { + m_logger = logger; + } + + @Override + public File getBaseDir() { + return m_builder.getLogViewBaseDir(); + } + + @Override + public URL getBaseUrl() { + return m_builder.getLogViewBaseUrl(); + } + + @Override + public String store(MessageTree tree) { + String path = m_builder.getLogViewPath(tree); + File file = new File(m_builder.getLogViewBaseDir(), path); + ChannelBuffer buf = ChannelBuffers.dynamicBuffer(8192); + FileOutputStream fos = null; + + file.getParentFile().mkdirs(); + + try { + m_codec.encode(tree, buf); + fos = new FileOutputStream(file); + buf.getBytes(buf.readerIndex(), fos, buf.readableBytes()); + } catch (IOException e) { + m_logger.error(String.format("Error when writing to file(%s)!", file), e); + } finally { + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + // ignore it + } + } + } + + return path; + } +} diff --git a/cat-core/src/main/resources/META-INF/dal/model/model.xml b/cat-core/src/main/resources/META-INF/dal/model/model.xml index f10f0d22a5d6f95d4688ecf6921ba930718f7c30..333b3c371a05e67cf0e33c496c0572cecd344554 100644 --- a/cat-core/src/main/resources/META-INF/dal/model/model.xml +++ b/cat-core/src/main/resources/META-INF/dal/model/model.xml @@ -3,7 +3,7 @@ enable-xml-schema="true" enable-xml-sample="true"> - + diff --git a/cat-core/src/main/resources/META-INF/plexus/components.xml b/cat-core/src/main/resources/META-INF/plexus/components.xml index c1e9c28cc18d39baae695701c13924d132969ced..1b8c54d76df48e2794b4f33cf432557c08e3604a 100644 --- a/cat-core/src/main/resources/META-INF/plexus/components.xml +++ b/cat-core/src/main/resources/META-INF/plexus/components.xml @@ -46,6 +46,20 @@ + + com.dianping.cat.message.spi.MessageStorage + html + com.dianping.cat.message.spi.internal.DefaultMessageStorage + + + com.dianping.cat.message.spi.MessagePathBuilder + + + com.dianping.cat.message.spi.MessageCodec + html-encode + + + com.dianping.cat.message.spi.codec.BufferWriter escape diff --git a/cat-home/src/test/intg/com/dianping/cat/AllAllTests.java b/cat-home/src/test/intg/com/dianping/cat/AllAllTests.java new file mode 100644 index 0000000000000000000000000000000000000000..077f9cad265ac9ffe0d416a10baea7c55c4ec593 --- /dev/null +++ b/cat-home/src/test/intg/com/dianping/cat/AllAllTests.java @@ -0,0 +1,17 @@ +package com.dianping.cat; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses({ + +com.dianping.cat.message.AllTests.class, + +com.dianping.cat.consumer.AllTests.class, + +}) +public class AllAllTests { + +} diff --git a/java_formatter.xml b/java_formatter.xml new file mode 100644 index 0000000000000000000000000000000000000000..526b848afc2606bd53e35a1ef6daf6a8b2439cd5 --- /dev/null +++ b/java_formatter.xml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +