diff --git a/cat-consumer/pom.xml b/cat-consumer/pom.xml index 791f4a30bee9d7c8bf1114c2cb1831a234cd8653..27c486063fbe93cdc2c04662b7e7137cfc2506cc 100644 --- a/cat-consumer/pom.xml +++ b/cat-consumer/pom.xml @@ -4,7 +4,7 @@ com.dianping.cat parent - 0.2.0 + 0.2.0-SNAPSHOT 4.0.0 cat-consumer @@ -22,7 +22,6 @@ com.google.code.gson gson - 1.6 test diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java index 092de7d9c8015484039abc2070dbb75cef62fa1b..c9fdfde5e3442c89f472ae6515cda47638da5ac3 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java @@ -18,6 +18,7 @@ import com.dianping.cat.message.spi.MessageConsumer; import com.dianping.cat.message.spi.MessageManager; import com.dianping.cat.message.spi.MessageQueue; import com.dianping.cat.message.spi.MessageStorage; +import com.dianping.cat.storage.BucketManager; import com.site.lookup.configuration.AbstractResourceConfigurator; import com.site.lookup.configuration.Component; @@ -52,11 +53,12 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(TransactionReportAnalyzer.class).is(PER_LOOKUP) // .req(MessageManager.class) // - .config(E("reportPath").value("target/report/transaction/")).req(MessageStorage.class, "html")); - + .req(MessageStorage.class, "html") // + .config(E("reportPath").value("target/report/transaction/"))); + all.add(C(TransactionAnalyzer.class).is(PER_LOOKUP) // - .req(MessageManager.class) // - .config(E("reportPath").value("target/report/transaction/")).req(MessageStorage.class, "html")); + .req(MessageManager.class, BucketManager.class) // + .req(MessageStorage.class, "html")); all.add(C(IpAnalyzer.class).is(PER_LOOKUP)); diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/transaction/TransactionAnalyzer.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/transaction/TransactionAnalyzer.java index efe07aaa9acafba81b4198b84708e2414f97b229..e1039f281290e03a2af58eb5f5269a38d4e6b82d 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/transaction/TransactionAnalyzer.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/transaction/TransactionAnalyzer.java @@ -1,8 +1,5 @@ package com.dianping.cat.consumer.transaction; -import java.io.File; -import java.io.IOException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -17,21 +14,18 @@ import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; -import com.dianping.cat.configuration.model.entity.Config; -import com.dianping.cat.configuration.model.entity.Property; import com.dianping.cat.consumer.transaction.model.entity.Duration; import com.dianping.cat.consumer.transaction.model.entity.Range; import com.dianping.cat.consumer.transaction.model.entity.TransactionName; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; import com.dianping.cat.consumer.transaction.model.entity.TransactionType; -import com.dianping.cat.consumer.transaction.model.transform.DefaultJsonBuilder; import com.dianping.cat.message.Message; import com.dianping.cat.message.Transaction; import com.dianping.cat.message.spi.AbstractMessageAnalyzer; -import com.dianping.cat.message.spi.MessageManager; -import com.dianping.cat.message.spi.MessageStorage; +import com.dianping.cat.message.spi.MessagePathBuilder; import com.dianping.cat.message.spi.MessageTree; -import com.site.helper.Files; +import com.dianping.cat.storage.Bucket; +import com.dianping.cat.storage.BucketManager; import com.site.lookup.annotation.Inject; /** @@ -40,21 +34,19 @@ import com.site.lookup.annotation.Inject; */ public class TransactionAnalyzer extends AbstractMessageAnalyzer implements Initializable, LogEnabled { - private static final SimpleDateFormat FILE_SDF = new SimpleDateFormat("yyyyMMddHHmm"); - private static final long MINUTE = 60 * 1000; @Inject - private MessageManager m_messageManager; + private BucketManager m_bucketManager; @Inject - private MessageStorage m_messageStorage; + private MessagePathBuilder m_pathBuilder; private Map m_reports = new HashMap(); - private long m_extraTime; + private Bucket m_messageBucket; - private String m_reportPath; + private long m_extraTime; private Logger m_logger; @@ -119,25 +111,14 @@ public class TransactionAnalyzer extends AbstractMessageAnalyzer 0) { - m_messageStorage.store(tree); + String messageId = tree.getMessageId(); + String threadTag = "t:" + tree.getThreadId(); + String sessionTag = "s:" + tree.getSessionToken(); + String requestTag = "r:" + messageId; + + m_messageBucket.storeById(messageId, tree, threadTag, sessionTag, requestTag); } } } @@ -177,7 +163,7 @@ public class TransactionAnalyzer extends AbstractMessageAnalyzer reports) { if (reports == null || reports.size() == 0) { return; } - for (TransactionReport report : reports) { - String failureFileName = getTransactionFileName(report); - String htmlPath = new StringBuilder().append(m_reportPath).append(failureFileName).append(".html").toString(); - File file = new File(htmlPath); + m_bucketManager.closeBucket(m_messageBucket); + + storeReports(reports); + storeLogviews(); + } + + void storeLogviews() { + String path = m_pathBuilder.getLogViewPath(new Date(m_startTime)); + Bucket bucket = null; - file.getParentFile().mkdirs(); + try { + bucket = m_bucketManager.getBytesBucket(path); - try { - Files.forIO().writeTo(file, new DefaultJsonBuilder().buildJson(report)); - } catch (IOException e) { - m_logger.error(String.format("Error when writing to file(%s)!", file), e); + m_pathBuilder.getLogViewBaseDir(); + } catch (Exception e) { + m_logger.error(String.format("Error when storing transaction reports to %s!", path), e); + } finally { + if (bucket != null) { + m_bucketManager.closeBucket(bucket); + } + } + } + + void storeReports(List reports) { + String path = m_pathBuilder.getReportPath(new Date(m_startTime)); + Bucket bucket = null; + + try { + bucket = m_bucketManager.getStringBucket(path); + + for (TransactionReport report : reports) { + bucket.storeById("transaction-" + report.getDomain(), report.toString()); + } + } catch (Exception e) { + m_logger.error(String.format("Error when storing transaction reports to %s!", path), e); + } finally { + if (bucket != null) { + m_bucketManager.closeBucket(bucket); } } } diff --git a/cat-consumer/src/main/resources/META-INF/plexus/components.xml b/cat-consumer/src/main/resources/META-INF/plexus/components.xml index b311161fc7a7979b1dfd5167908b10c3fb307345..f17d28266020f18e129696d465c6f3a32f99090d 100644 --- a/cat-consumer/src/main/resources/META-INF/plexus/components.xml +++ b/cat-consumer/src/main/resources/META-INF/plexus/components.xml @@ -94,13 +94,13 @@ com.dianping.cat.consumer.transaction.TransactionAnalyzer com.dianping.cat.consumer.transaction.TransactionAnalyzer per-lookup - - target/report/transaction/ - com.dianping.cat.message.spi.MessageManager + + com.dianping.cat.storage.BucketManager + com.dianping.cat.message.spi.MessageStorage html diff --git a/cat-consumer/src/test/java/com/dianping/cat/consumer/transaction/TransactionAnalyzerTest.java b/cat-consumer/src/test/java/com/dianping/cat/consumer/transaction/TransactionAnalyzerTest.java index cc216f7c33ce83f63406a06dad47da0c1572764f..505aaa93fc3d8634f386b54c0f653411111318f3 100644 --- a/cat-consumer/src/test/java/com/dianping/cat/consumer/transaction/TransactionAnalyzerTest.java +++ b/cat-consumer/src/test/java/com/dianping/cat/consumer/transaction/TransactionAnalyzerTest.java @@ -6,11 +6,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import com.dianping.cat.consumer.transaction.model.transform.DefaultJsonBuilder; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; +import com.dianping.cat.consumer.transaction.model.transform.DefaultJsonBuilder; import com.dianping.cat.message.Message; import com.dianping.cat.message.internal.DefaultTransaction; -import com.dianping.cat.message.spi.MessageStorage; import com.dianping.cat.message.spi.MessageTree; import com.dianping.cat.message.spi.internal.DefaultMessageTree; import com.site.helper.Files; @@ -20,11 +19,9 @@ import com.site.lookup.ComponentTestCase; public class TransactionAnalyzerTest extends ComponentTestCase { @Test public void testProcessTransaction() throws Exception { - TransactionAnalyzer analyzer = new TransactionAnalyzer(); + TransactionAnalyzer analyzer = lookup(TransactionAnalyzer.class); TransactionReport report = new TransactionReport("Test"); - analyzer.setMessageStorage(lookup(MessageStorage.class, "html")); - for (int i = 1; i <= 1000; i++) { MessageTree tree = newMessageTree(i); DefaultTransaction t = new DefaultTransaction("A", "n" + i % 2, null); diff --git a/cat-core/pom.xml b/cat-core/pom.xml index 6bdec6329cae5a6cf2192b0b13ce42808859576d..7ac612b667d1f7982ebb9c8f8d0d6b29e5b47d64 100644 --- a/cat-core/pom.xml +++ b/cat-core/pom.xml @@ -4,7 +4,7 @@ com.dianping.cat parent - 0.2.0 + 0.2.0-SNAPSHOT 4.0.0 cat-core @@ -33,7 +33,7 @@ com.site.maven.plugins maven-codegen-plugin - 1.0.8 + 1.0.10 default-cli diff --git a/cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java b/cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java index 70884751b417ed2de08a3cc1035e9679da50f413..3ee755b5403432a701d96b550e3d8c4cf669e912 100644 --- a/cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java +++ b/cat-core/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java @@ -36,10 +36,8 @@ 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.dianping.cat.storage.Bucket; -import com.dianping.cat.storage.BucketFactory; import com.dianping.cat.storage.BucketManager; import com.dianping.cat.storage.internal.DefaultBucket; -import com.dianping.cat.storage.internal.DefaultBucketFactory; import com.dianping.cat.storage.internal.DefaultBucketManager; import com.dianping.cat.storage.internal.DefaultMessageBucket; import com.site.lookup.configuration.AbstractResourceConfigurator; @@ -100,7 +98,6 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(Bucket.class, MessageTree.class.getName(), DefaultMessageBucket.class) // .req(MessageCodec.class, "plain-text")); all.add(C(BucketManager.class, DefaultBucketManager.class)); - all.add(C(BucketFactory.class, DefaultBucketFactory.class)); return all; } 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 9ab032c9a6bec1130aeb25c34aab05b9a17f31b1..50d81742f04ae84eaf25f57a1456e848774fa8df 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 @@ -2,6 +2,7 @@ package com.dianping.cat.message.spi; import java.io.File; import java.net.URL; +import java.util.Date; public interface MessagePathBuilder { public String getHdfsPath(String messageId); @@ -11,4 +12,8 @@ public interface MessagePathBuilder { public URL getLogViewBaseUrl(); public String getLogViewPath(String messageId); + + public String getLogViewPath(Date timestamp); + + public String getReportPath(Date timestamp); } 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 5d524aff1aa2597fcba47db2893ddc1aeea63e0f..08e2ead87afacbd6e5149ec5116c1b3a615183d0 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 @@ -31,6 +31,11 @@ public class DefaultMessagePathBuilder implements MessagePathBuilder, Initializa private Logger m_logger; + @Override + public void enableLogging(Logger logger) { + m_logger = logger; + } + @Override public String getHdfsPath(String messageId) { MessageFormat format = new MessageFormat("{0,date,yyyyMMdd}/{0,date,HH}/{1}/{0,date,mm}-{2}"); @@ -79,6 +84,20 @@ public class DefaultMessagePathBuilder implements MessagePathBuilder, Initializa return messageId; } + @Override + public String getReportPath(Date timestamp) { + MessageFormat format = new MessageFormat("{0,date,yyyyMMdd}/{0,date,HH}/report"); + + return format.format(new Object[] { timestamp }); + } + + @Override + public String getLogViewPath(Date timestamp) { + MessageFormat format = new MessageFormat("{0,date,yyyyMMdd}/{0,date,HH}/logview"); + + return format.format(new Object[] { timestamp }); + } + @Override public void initialize() throws InitializationException { Config config = m_manager.getClientConfig(); @@ -115,9 +134,4 @@ public class DefaultMessagePathBuilder implements MessagePathBuilder, Initializa public void setBaseLogUrl(URL baseLogUrl) { m_baseLogUrl = baseLogUrl; } - - @Override - public void enableLogging(Logger logger) { - m_logger = logger; - } } diff --git a/cat-core/src/main/java/com/dianping/cat/storage/BucketFactory.java b/cat-core/src/main/java/com/dianping/cat/storage/BucketFactory.java deleted file mode 100644 index dd115e70955232491849bfad2b496bb3bf5ea3f0..0000000000000000000000000000000000000000 --- a/cat-core/src/main/java/com/dianping/cat/storage/BucketFactory.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.dianping.cat.storage; - -public interface BucketFactory { - public Bucket create(String path); -} \ No newline at end of file diff --git a/cat-core/src/main/java/com/dianping/cat/storage/BucketManager.java b/cat-core/src/main/java/com/dianping/cat/storage/BucketManager.java index 65092ee986db8be9775fb07cfa4fd590a7a07e28..1d787d966771f6808ceab97f1a3cf97302c4b068 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/BucketManager.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/BucketManager.java @@ -5,6 +5,8 @@ import java.io.IOException; import com.dianping.cat.message.spi.MessageTree; public interface BucketManager { + public void closeBucket(Bucket bucket); + public Bucket getMessageBucket(String path) throws IOException; public Bucket getStringBucket(String path) throws IOException; diff --git a/cat-core/src/main/java/com/dianping/cat/storage/TagThreadSupport.java b/cat-core/src/main/java/com/dianping/cat/storage/TagThreadSupport.java index 6b15b83dc7908a31a98dc15c2fa64305a4de2fb9..4d4f0566c7fed8a135a6c85bb55c2ccfaec0bbe1 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/TagThreadSupport.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/TagThreadSupport.java @@ -6,7 +6,7 @@ import java.util.List; * Map to one HDFS directory for one report. *

* - * Sample tags: "thread:101", "session:abc", "request:xyz", "parent:xxx" + * Sample tags: "thread:101", "session:abc", "request:xyz" */ public interface TagThreadSupport { public boolean storeById(String id, T data, String... tags); diff --git a/cat-core/src/main/java/com/dianping/cat/storage/internal/AbstractFileBucket.java b/cat-core/src/main/java/com/dianping/cat/storage/internal/AbstractFileBucket.java index 6e007f95897f9952ae4af93a8225570c5f2675de..03dbd06fabf5e6db20d5062f1915d26078494123 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/internal/AbstractFileBucket.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/internal/AbstractFileBucket.java @@ -50,9 +50,9 @@ public abstract class AbstractFileBucket implements Bucket, TagThreadSuppo m_writeLock.lock(); try { - m_writeFile.close(); m_idToOffsets.clear(); m_tagToIds.clear(); + m_writeFile.close(); } catch (IOException e) { // ignore it } finally { diff --git a/cat-core/src/main/java/com/dianping/cat/storage/internal/DefaultBucketFactory.java b/cat-core/src/main/java/com/dianping/cat/storage/internal/DefaultBucketFactory.java deleted file mode 100644 index 6542ce9e3a176fe76ca9770cdc32f3758716d826..0000000000000000000000000000000000000000 --- a/cat-core/src/main/java/com/dianping/cat/storage/internal/DefaultBucketFactory.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.dianping.cat.storage.internal; - -import com.dianping.cat.storage.Bucket; -import com.dianping.cat.storage.BucketFactory; - -public class DefaultBucketFactory implements BucketFactory { - @Override - public Bucket create(String path) { - // TODO Auto-generated method stub - return null; - } -} diff --git a/cat-core/src/main/java/com/dianping/cat/storage/internal/DefaultBucketManager.java b/cat-core/src/main/java/com/dianping/cat/storage/internal/DefaultBucketManager.java index 2d1841f15492f1fd9f377b75d8f2dd4cd1e630bc..fb1a9baa05b3549bb979c63a3b5a4a32e515aeae 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/internal/DefaultBucketManager.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/internal/DefaultBucketManager.java @@ -103,4 +103,10 @@ public class DefaultBucketManager extends ContainerHolder implements BucketManag return hashcode; } } + + @Override + public void closeBucket(Bucket bucket) { + bucket.close(); + release(bucket); + } } 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 70861d7817dc3f49a56aeb65dad31a69682b5447..6160fedb1d3a540cd117eab15ed9e4e806529a41 100644 --- a/cat-core/src/main/resources/META-INF/plexus/components.xml +++ b/cat-core/src/main/resources/META-INF/plexus/components.xml @@ -209,9 +209,5 @@ com.dianping.cat.storage.BucketManager com.dianping.cat.storage.internal.DefaultBucketManager - - com.dianping.cat.storage.BucketFactory - com.dianping.cat.storage.internal.DefaultBucketFactory - diff --git a/cat-home/pom.xml b/cat-home/pom.xml index 1a7c6315ef4ef39e4b0a79e9267b30f2a66506ef..a9cf604163d3201343c8f9c48802cb8931c610aa 100644 --- a/cat-home/pom.xml +++ b/cat-home/pom.xml @@ -4,7 +4,7 @@ com.dianping.cat parent - 0.2.0 + 0.2.0-SNAPSHOT 4.0.0 cat-home @@ -80,7 +80,7 @@ com.site.maven.plugins maven-codegen-plugin - 1.0.8 + 1.0.10 generate plexus component descriptor diff --git a/cat-home/src/main/java/com/dianping/cat/report/build/ServiceComponentConfigurator.java b/cat-home/src/main/java/com/dianping/cat/report/build/ServiceComponentConfigurator.java index 45ea430d8c164a01fab4c8b063cfefa2d6de4ac0..239df09dc2a6ee577c638bf0e9880508e037fb35 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/build/ServiceComponentConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/report/build/ServiceComponentConfigurator.java @@ -4,12 +4,14 @@ import java.util.ArrayList; import java.util.List; import com.dianping.cat.message.spi.MessageConsumer; +import com.dianping.cat.message.spi.MessagePathBuilder; import com.dianping.cat.report.page.model.failure.CompositeFailureModelService; import com.dianping.cat.report.page.model.failure.LocalFailureModelService; import com.dianping.cat.report.page.model.spi.ModelService; import com.dianping.cat.report.page.model.transaction.CompositeTransactionModelService; import com.dianping.cat.report.page.model.transaction.HdfsTransactionModelService; import com.dianping.cat.report.page.model.transaction.LocalTransactionModelService; +import com.dianping.cat.storage.BucketManager; import com.site.lookup.configuration.AbstractResourceConfigurator; import com.site.lookup.configuration.Component; @@ -20,7 +22,8 @@ class ServiceComponentConfigurator extends AbstractResourceConfigurator { all.add(C(ModelService.class, "transaction-local", LocalTransactionModelService.class) // .req(MessageConsumer.class, "realtime")); - all.add(C(ModelService.class, "transaction-hdfs", HdfsTransactionModelService.class)); + all.add(C(ModelService.class, "transaction-hdfs", HdfsTransactionModelService.class) // + .req(BucketManager.class, MessagePathBuilder.class)); all.add(C(ModelService.class, "transaction", CompositeTransactionModelService.class) // .req(ModelService.class, new String[] { "transaction-local", "transaction-hdfs" }, "m_services")); diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HdfsTransactionModelService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HdfsTransactionModelService.java index 0a75dd7b5ecf4765dc8002443c2565caa257c04d..aef9761d7aabb0e2b8310baa536557a999b9e4e7 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HdfsTransactionModelService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HdfsTransactionModelService.java @@ -1,19 +1,55 @@ package com.dianping.cat.report.page.model.transaction; +import java.util.Date; + import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; +import com.dianping.cat.consumer.transaction.model.transform.DefaultXmlParser; +import com.dianping.cat.message.spi.MessagePathBuilder; import com.dianping.cat.report.page.model.spi.ModelRequest; import com.dianping.cat.report.page.model.spi.ModelResponse; import com.dianping.cat.report.page.model.spi.ModelService; +import com.dianping.cat.storage.Bucket; +import com.dianping.cat.storage.BucketManager; +import com.site.lookup.annotation.Inject; public class HdfsTransactionModelService implements ModelService { + @Inject + private BucketManager m_bucketManager; + + @Inject + private MessagePathBuilder m_pathBuilder; + @Override - public boolean isEligable(ModelRequest request) { - return request.getPeriod().isHistorical(); + public ModelResponse invoke(ModelRequest request) { + String domain = request.getDomain(); + long date = Long.parseLong(request.getProperty("date")); + String path = m_pathBuilder.getReportPath(new Date(date)); + ModelResponse response = new ModelResponse(); + Bucket bucket = null; + + try { + bucket = m_bucketManager.getStringBucket(path); + + String xml = bucket.findById("transaction-" + domain); + + if (xml == null) { + TransactionReport report = new DefaultXmlParser().parse(xml); + + response.setModel(report); + } + } catch (Exception e) { + response.setException(e); + } finally { + if (bucket != null) { + m_bucketManager.closeBucket(bucket); + } + } + + return response; } @Override - public ModelResponse invoke(ModelRequest request) { - // TODO - return null; + public boolean isEligable(ModelRequest request) { + return request.getPeriod().isHistorical(); } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/transaction/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/transaction/Handler.java index 2ff339da4a40e527f7244395b3f0d4ea3e6f116b..f01e7262f80e80186bf9610bbf356aae23b9d759 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/transaction/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/transaction/Handler.java @@ -51,7 +51,6 @@ public class Handler implements PageHandler, Initializable { String name = payload.getName(); String date = String.valueOf(payload.getDate()); ModelRequest request = new ModelRequest(domain, payload.getPeriod()) // - .setProperty("domain", domain) // .setProperty("date", date) // .setProperty("type", payload.getType())// .setProperty("name", payload.getName()); @@ -76,7 +75,6 @@ public class Handler implements PageHandler, Initializable { String domain = payload.getDomain(); String date = String.valueOf(payload.getDate()); ModelRequest request = new ModelRequest(domain, payload.getPeriod()) // - .setProperty("domain", domain) // .setProperty("date", date) // .setProperty("type", payload.getType()); diff --git a/cat-home/src/main/resources/META-INF/plexus/components.xml b/cat-home/src/main/resources/META-INF/plexus/components.xml index 5ce6b5ac00b258fd83e984df42c47eb8f4286562..4ee42a118b72ad55366d01bb53230f3703bed624 100644 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -95,6 +95,14 @@ com.dianping.cat.report.page.model.spi.ModelService transaction-hdfs com.dianping.cat.report.page.model.transaction.HdfsTransactionModelService + + + com.dianping.cat.storage.BucketManager + + + com.dianping.cat.message.spi.MessagePathBuilder + + com.dianping.cat.report.page.model.spi.ModelService diff --git a/cat-home/src/main/webapp/js/transaction.js b/cat-home/src/main/webapp/js/transaction.js index 75056b621b60980534c0fe7f1a0ab6655a271c3f..793ef34ac7a57051951c3cb4c06a753fd40bd45f 100644 --- a/cat-home/src/main/webapp/js/transaction.js +++ b/cat-home/src/main/webapp/js/transaction.js @@ -1,4 +1,8 @@ -function showGraphs(anchor, id, date, domain, type, name) { +var isCtrl = false; + +function showGraphs(anchor, id, date, domain, type, name, isCurrent) { + if (isCtrl) return true; + var cell = document.getElementById(id); var text = anchor.innerHTML; @@ -6,11 +10,11 @@ function showGraphs(anchor, id, date, domain, type, name) { anchor.innerHTML = '[:: hide ::]'; if (cell.nodeName == 'IMG') { // - cell.src = "?op=graphs&date="+date+"&domain="+domain+"&type="+type+"&name="+name; + cell.src = "?op=graphs&date="+date+"&domain="+domain+"&type="+type+"&name="+name+(isCurrent?"&t="+new Date().getTime():""); } else { //

...
$.ajax({ type: "get", - url: "?op=graphs&date="+date+"&domain="+domain+"&type="+type+"&name="+name, + url: "?op=graphs&date="+date+"&domain="+domain+"&type="+type+"&name="+name+(isCurrent?"&t="+new Date().getTime():""), success : function(data, textStatus) { cell.innerHTML = data; } @@ -27,3 +31,9 @@ function showGraphs(anchor, id, date, domain, type, name) { return false; } + +$(document).keydown(function(e) { + if(e.ctrlKey || e.metaKey) isCtrl = true; +}).keyup(function(e) { + isCtrl = false; +}); \ No newline at end of file diff --git a/cat-home/src/main/webapp/jsp/report/transaction.jsp b/cat-home/src/main/webapp/jsp/report/transaction.jsp index efcbbf0e2e3007739da8e22b771feffeb6e92b65..a5512bd3cdb1d9cd2f7b9ce9a523f300d90eb8c8 100644 --- a/cat-home/src/main/webapp/jsp/report/transaction.jsp +++ b/cat-home/src/main/webapp/jsp/report/transaction.jsp @@ -28,7 +28,7 @@ ${e.id} ${e.totalCount} ${e.failCount} - ${e.failPercent} + ${w:format(e.failPercent,'0.00')} Log View ${w:format(e.min,'0')}/${w:format(e.max,'0')}/${w:format(e.avg,'0.0')}/${w:format(e.std,'0.0')} @@ -38,10 +38,10 @@ - [:: show ::] ${e.id} + [:: show ::] ${e.id} ${e.totalCount} ${e.failCount} - ${e.failPercent} + ${w:format(e.failPercent,'0.00')} Log View ${w:format(e.min,'0')}/${w:format(e.max,'0')}/${w:format(e.avg,'0.0')}/${w:format(e.std,'0.0')} diff --git a/cat-job/pom.xml b/cat-job/pom.xml index 3373fa32e770e2f73e2ead1b96248baeb51626b0..9da12a87a195d0ad262e204c6ec2c308b150d13a 100644 --- a/cat-job/pom.xml +++ b/cat-job/pom.xml @@ -4,7 +4,7 @@ com.dianping.cat parent - 0.2.0 + 0.2.0-SNAPSHOT 4.0.0 cat-job @@ -45,7 +45,7 @@ com.site.maven.plugins maven-codegen-plugin - 1.0.7 + 1.0.10 generate plexus component descriptor diff --git a/pom.xml b/pom.xml index d48765bd73f90fca6d2b95fb2b76f25c4525cf34..ede66d0e9c921e91d47a8906fc419c27b9c07c94 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.dianping.cat parent - 0.2.0 + 0.2.0-SNAPSHOT Tracking pom @@ -18,17 +18,17 @@ com.dianping.cat cat-core - 0.2.0 + 0.2.0-SNAPSHOT com.dianping.cat cat-consumer - 0.2.0 + 0.2.0-SNAPSHOT com.dianping.cat cat-job - 0.2.0 + 0.2.0-SNAPSHOT com.site.common