From aa73907211dec5b262eafd6947fdc9ce571fd5e5 Mon Sep 17 00:00:00 2001 From: Frankie Wu Date: Sun, 8 Apr 2012 11:37:51 +0800 Subject: [PATCH] some refinement and bug fixes - show last report from local report - refine the precise of transaction/event report - local-base-dir in server configuration --- .../cat/consumer/RealtimeConsumer.java | 2 +- .../transaction/TransactionAnalyzer.java | 4 +-- .../build/StorageComponentConfigurator.java | 7 +++-- .../dianping/cat/status/StatusUpdateTask.java | 4 +++ .../storage/message/LocalLogviewBucket.java | 13 +++++++-- .../storage/message/LocalMessageBucket.java | 14 ++++++--- .../cat/storage/report/LocalReportBucket.java | 14 ++++++--- .../META-INF/dal/model/server-codegen.xml | 3 +- .../META-INF/dal/model/server-model.xml | 1 + .../resources/META-INF/plexus/components.xml | 9 ++++++ .../build/ServiceComponentConfigurator.java | 4 +++ .../model/event/HistoricalEventService.java | 3 +- .../page/model/event/LocalEventService.java | 29 +++++++++++++++++++ .../page/model/ip/HistoricalIpService.java | 3 +- .../report/page/model/ip/LocalIpService.java | 29 +++++++++++++++++++ .../problem/HistoricalProblemService.java | 3 +- .../model/problem/LocalProblemService.java | 29 +++++++++++++++++++ .../internal/BaseHistoricalModelService.java | 12 ++------ .../spi/internal/BaseLocalModelService.java | 27 ++++++++--------- .../HistoricalTransactionService.java | 3 +- .../transaction/LocalTransactionService.java | 29 +++++++++++++++++++ .../resources/META-INF/plexus/components.xml | 21 ++++++++++++++ .../main/webapp/jsp/report/transaction.jsp | 4 +-- 23 files changed, 215 insertions(+), 52 deletions(-) diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/RealtimeConsumer.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/RealtimeConsumer.java index a088f843d..04dc26348 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/RealtimeConsumer.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/RealtimeConsumer.java @@ -127,7 +127,7 @@ public class RealtimeConsumer extends ContainerHolder implements MessageConsumer long lastStartTime = m_periodManager.getCurrentStartTime() - m_duration; Period period = m_periodManager.findPeriod(lastStartTime); - return period.getAnalyzer(name); + return period == null ? null : period.getAnalyzer(name); } @Override 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 0e67cb5b7..472385136 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 @@ -169,7 +169,7 @@ public class TransactionAnalyzer extends AbstractMessageAnalyzer, LogEnabled { private MessagePathBuilder m_pathBuilder; @Inject + private ServerConfigManager m_configManager; + private String m_baseDir = "target/bucket"; // key => offset of record @@ -178,6 +182,12 @@ public class LocalLogviewBucket implements Bucket, LogEnabled { @Override public void initialize(Class type, String domain, Date timestamp) throws IOException { + ServerConfig serverConfig = m_configManager.getServerConfig(); + + if (serverConfig != null) { + m_baseDir = serverConfig.getStorage().getLocalBaseDir(); + } + m_writeLock = new ReentrantLock(); m_readLock = new ReentrantLock(); @@ -232,9 +242,6 @@ public class LocalLogviewBucket implements Bucket, LogEnabled { } } - public void setBaseDir(String baseDir) { - m_baseDir = baseDir; - } @Override public boolean storeById(String id, MessageTree tree) throws IOException { diff --git a/cat-core/src/main/java/com/dianping/cat/storage/message/LocalMessageBucket.java b/cat-core/src/main/java/com/dianping/cat/storage/message/LocalMessageBucket.java index d17e98f66..8238d92e5 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/message/LocalMessageBucket.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/message/LocalMessageBucket.java @@ -12,6 +12,8 @@ import java.util.concurrent.locks.ReentrantLock; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; +import com.dianping.cat.configuration.ServerConfigManager; +import com.dianping.cat.configuration.server.entity.ServerConfig; import com.dianping.cat.message.spi.MessageCodec; import com.dianping.cat.message.spi.MessagePathBuilder; import com.dianping.cat.message.spi.MessageTree; @@ -26,6 +28,8 @@ public class LocalMessageBucket implements Bucket { private MessagePathBuilder m_pathBuilder; @Inject + private ServerConfigManager m_configManager; + private String m_baseDir = "target/bucket"; private ReentrantLock m_writeLock; @@ -82,6 +86,12 @@ public class LocalMessageBucket implements Bucket { @Override public void initialize(Class type, String domain, Date timestamp) throws IOException { + ServerConfig serverConfig = m_configManager.getServerConfig(); + + if (serverConfig != null) { + m_baseDir = serverConfig.getStorage().getLocalBaseDir(); + } + m_writeLock = new ReentrantLock(); String logicalPath = m_pathBuilder.getMessagePath(domain, timestamp); @@ -93,10 +103,6 @@ public class LocalMessageBucket implements Bucket { m_writeDataFile = new BufferedOutputStream(new FileOutputStream(dataFile, true), 8192); } - public void setBaseDir(String baseDir) { - m_baseDir = baseDir; - } - @Override public boolean storeById(String id, MessageTree tree) throws IOException { ChannelBuffer buf = ChannelBuffers.dynamicBuffer(8192); diff --git a/cat-core/src/main/java/com/dianping/cat/storage/report/LocalReportBucket.java b/cat-core/src/main/java/com/dianping/cat/storage/report/LocalReportBucket.java index 3493a7341..b4a1df265 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/report/LocalReportBucket.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/report/LocalReportBucket.java @@ -18,6 +18,8 @@ import java.util.concurrent.locks.ReentrantLock; import org.codehaus.plexus.logging.LogEnabled; import org.codehaus.plexus.logging.Logger; +import com.dianping.cat.configuration.ServerConfigManager; +import com.dianping.cat.configuration.server.entity.ServerConfig; import com.dianping.cat.message.spi.MessagePathBuilder; import com.dianping.cat.storage.Bucket; import com.site.helper.Splitters; @@ -29,6 +31,8 @@ public class LocalReportBucket implements Bucket, LogEnabled { private MessagePathBuilder m_pathBuilder; @Inject + private ServerConfigManager m_configManager; + private String m_baseDir = "target/bucket"; // key => offset of record @@ -159,6 +163,12 @@ public class LocalReportBucket implements Bucket, LogEnabled { @Override public void initialize(Class type, String name, Date timestamp) throws IOException { + ServerConfig serverConfig = m_configManager.getServerConfig(); + + if (serverConfig != null) { + m_baseDir = serverConfig.getStorage().getLocalBaseDir(); + } + m_writeLock = new ReentrantLock(); m_readLock = new ReentrantLock(); @@ -212,10 +222,6 @@ public class LocalReportBucket implements Bucket, LogEnabled { } } - public void setBaseDir(String baseDir) { - m_baseDir = baseDir; - } - @Override public boolean storeById(String id, String report) throws IOException { if (m_idToOffsets.containsKey(id)) { diff --git a/cat-core/src/main/resources/META-INF/dal/model/server-codegen.xml b/cat-core/src/main/resources/META-INF/dal/model/server-codegen.xml index 13a000d8e..60d53df4d 100644 --- a/cat-core/src/main/resources/META-INF/dal/model/server-codegen.xml +++ b/cat-core/src/main/resources/META-INF/dal/model/server-codegen.xml @@ -7,7 +7,8 @@ - + + diff --git a/cat-core/src/main/resources/META-INF/dal/model/server-model.xml b/cat-core/src/main/resources/META-INF/dal/model/server-model.xml index 37e743138..aeb6423dd 100644 --- a/cat-core/src/main/resources/META-INF/dal/model/server-model.xml +++ b/cat-core/src/main/resources/META-INF/dal/model/server-model.xml @@ -2,6 +2,7 @@ + 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 0bc6e1ee0..d47ae1ed0 100644 --- a/cat-core/src/main/resources/META-INF/plexus/components.xml +++ b/cat-core/src/main/resources/META-INF/plexus/components.xml @@ -250,6 +250,9 @@ com.dianping.cat.storage.message.LocalLogviewBucket per-lookup + + com.dianping.cat.configuration.ServerConfigManager + com.dianping.cat.message.spi.MessagePathBuilder @@ -265,6 +268,9 @@ com.dianping.cat.storage.message.LocalMessageBucket per-lookup + + com.dianping.cat.configuration.ServerConfigManager + com.dianping.cat.message.spi.MessagePathBuilder @@ -280,6 +286,9 @@ com.dianping.cat.storage.report.LocalReportBucket per-lookup + + com.dianping.cat.configuration.ServerConfigManager + com.dianping.cat.message.spi.MessagePathBuilder 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 f5caa8493..bb682a161 100755 --- 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 @@ -34,6 +34,7 @@ class ServiceComponentConfigurator extends AbstractResourceConfigurator { List all = new ArrayList(); all.add(C(ModelService.class, "transaction-local", LocalTransactionService.class) // + .req(BucketManager.class) // .req(MessageConsumer.class, "realtime")); all.add(C(ModelService.class, "transaction-historical", HistoricalTransactionService.class) // .req(BucketManager.class, ReportDao.class)); @@ -41,6 +42,7 @@ class ServiceComponentConfigurator extends AbstractResourceConfigurator { .req(ModelService.class, new String[] { "transaction-local", "transaction-historical" }, "m_services")); all.add(C(ModelService.class, "event-local", LocalEventService.class) // + .req(BucketManager.class) // .req(MessageConsumer.class, "realtime")); all.add(C(ModelService.class, "event-historical", HistoricalEventService.class) // .req(BucketManager.class, ReportDao.class)); @@ -48,6 +50,7 @@ class ServiceComponentConfigurator extends AbstractResourceConfigurator { .req(ModelService.class, new String[] { "event-local", "event-historical" }, "m_services")); all.add(C(ModelService.class, "problem-local", LocalProblemService.class) // + .req(BucketManager.class) // .req(MessageConsumer.class, "realtime")); all.add(C(ModelService.class, "problem-historical", HistoricalProblemService.class) // .req(BucketManager.class, ReportDao.class)); @@ -55,6 +58,7 @@ class ServiceComponentConfigurator extends AbstractResourceConfigurator { .req(ModelService.class, new String[] { "problem-local", "problem-historical" }, "m_services")); all.add(C(ModelService.class, "ip-local", LocalIpService.class) // + .req(BucketManager.class) // .req(MessageConsumer.class, "realtime")); all.add(C(ModelService.class, "ip-historical", HistoricalIpService.class) // .req(BucketManager.class, ReportDao.class)); diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/event/HistoricalEventService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/event/HistoricalEventService.java index 554954fca..19b77d017 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/event/HistoricalEventService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/event/HistoricalEventService.java @@ -42,9 +42,8 @@ public class HistoricalEventService extends BaseHistoricalModelService bucket = m_bucketManager.getReportBucket(timestamp, "event"); String xml = bucket.findById(domain); - DefaultXmlParser parser = new DefaultXmlParser(); - return parser.parse(xml); + return xml == null ? null : new DefaultXmlParser().parse(xml); } private EventReport getRemoteReport(long timestamp, String domain) throws Exception { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/event/LocalEventService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/event/LocalEventService.java index 243890c2b..09f32161a 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/event/LocalEventService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/event/LocalEventService.java @@ -1,10 +1,39 @@ package com.dianping.cat.report.page.model.event; import com.dianping.cat.consumer.event.model.entity.EventReport; +import com.dianping.cat.consumer.event.model.transform.DefaultXmlParser; +import com.dianping.cat.report.page.model.spi.ModelPeriod; +import com.dianping.cat.report.page.model.spi.ModelRequest; import com.dianping.cat.report.page.model.spi.internal.BaseLocalModelService; +import com.dianping.cat.storage.Bucket; +import com.dianping.cat.storage.BucketManager; +import com.site.lookup.annotation.Inject; public class LocalEventService extends BaseLocalModelService { + @Inject + private BucketManager m_bucketManager; + public LocalEventService() { super("event"); } + + @Override + protected EventReport getReport(ModelRequest request, ModelPeriod period, String domain) throws Exception { + EventReport report = super.getReport(request, period, domain); + + if (report == null && period.isLast()) { + long date = Long.parseLong(request.getProperty("date")); + + report = getLocalReport(date, domain); + } + + return report; + } + + private EventReport getLocalReport(long timestamp, String domain) throws Exception { + Bucket bucket = m_bucketManager.getReportBucket(timestamp, "event"); + String xml = bucket.findById(domain); + + return xml == null ? null : new DefaultXmlParser().parse(xml); + } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/ip/HistoricalIpService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/ip/HistoricalIpService.java index 031386643..f4d5e019d 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/ip/HistoricalIpService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/ip/HistoricalIpService.java @@ -42,9 +42,8 @@ public class HistoricalIpService extends BaseHistoricalModelService { private IpReport getLocalReport(long timestamp, String domain) throws Exception { Bucket bucket = m_bucketManager.getReportBucket(timestamp, "ip"); String xml = bucket.findById(domain); - DefaultXmlParser parser = new DefaultXmlParser(); - return parser.parse(xml); + return xml == null ? null : new DefaultXmlParser().parse(xml); } private IpReport getRemoteReport(long timestamp, String domain) throws Exception { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/ip/LocalIpService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/ip/LocalIpService.java index 3548f4356..8a08fc53c 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/ip/LocalIpService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/ip/LocalIpService.java @@ -1,10 +1,39 @@ package com.dianping.cat.report.page.model.ip; import com.dianping.cat.consumer.ip.model.entity.IpReport; +import com.dianping.cat.consumer.ip.model.transform.DefaultXmlParser; +import com.dianping.cat.report.page.model.spi.ModelPeriod; +import com.dianping.cat.report.page.model.spi.ModelRequest; import com.dianping.cat.report.page.model.spi.internal.BaseLocalModelService; +import com.dianping.cat.storage.Bucket; +import com.dianping.cat.storage.BucketManager; +import com.site.lookup.annotation.Inject; public class LocalIpService extends BaseLocalModelService { + @Inject + private BucketManager m_bucketManager; + public LocalIpService() { super("ip"); } + + @Override + protected IpReport getReport(ModelRequest request, ModelPeriod period, String domain) throws Exception { + IpReport report = super.getReport(request, period, domain); + + if (report == null && period.isLast()) { + long date = Long.parseLong(request.getProperty("date")); + + report = getLocalReport(date, domain); + } + + return report; + } + + private IpReport getLocalReport(long timestamp, String domain) throws Exception { + Bucket bucket = m_bucketManager.getReportBucket(timestamp, "ip"); + String xml = bucket.findById(domain); + + return xml == null ? null : new DefaultXmlParser().parse(xml); + } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/problem/HistoricalProblemService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/problem/HistoricalProblemService.java index 65040658d..bec108b8e 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/problem/HistoricalProblemService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/problem/HistoricalProblemService.java @@ -43,9 +43,8 @@ public class HistoricalProblemService extends BaseHistoricalModelService bucket = m_bucketManager.getReportBucket(timestamp, "problem"); String xml = bucket.findById(domain); - DefaultXmlParser parser = new DefaultXmlParser(); - return parser.parse(xml); + return xml == null ? null : new DefaultXmlParser().parse(xml); } private ProblemReport getRemoteReport(long timestamp, String domain) throws Exception { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/problem/LocalProblemService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/problem/LocalProblemService.java index c62e4c95d..f8f5d720b 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/problem/LocalProblemService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/problem/LocalProblemService.java @@ -1,10 +1,39 @@ package com.dianping.cat.report.page.model.problem; import com.dianping.cat.consumer.problem.model.entity.ProblemReport; +import com.dianping.cat.consumer.problem.model.transform.DefaultXmlParser; +import com.dianping.cat.report.page.model.spi.ModelPeriod; +import com.dianping.cat.report.page.model.spi.ModelRequest; import com.dianping.cat.report.page.model.spi.internal.BaseLocalModelService; +import com.dianping.cat.storage.Bucket; +import com.dianping.cat.storage.BucketManager; +import com.site.lookup.annotation.Inject; public class LocalProblemService extends BaseLocalModelService { + @Inject + private BucketManager m_bucketManager; + public LocalProblemService() { super("problem"); } + + @Override + protected ProblemReport getReport(ModelRequest request, ModelPeriod period, String domain) throws Exception { + ProblemReport report = super.getReport(request, period, domain); + + if (report == null && period.isLast()) { + long date = Long.parseLong(request.getProperty("date")); + + report = getLocalReport(date, domain); + } + + return report; + } + + private ProblemReport getLocalReport(long timestamp, String domain) throws Exception { + Bucket bucket = m_bucketManager.getReportBucket(timestamp, "problem"); + String xml = bucket.findById(domain); + + return xml == null ? null : new DefaultXmlParser().parse(xml); + } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/spi/internal/BaseHistoricalModelService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/spi/internal/BaseHistoricalModelService.java index 6a8472713..86927d1e9 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/spi/internal/BaseHistoricalModelService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/spi/internal/BaseHistoricalModelService.java @@ -16,7 +16,7 @@ public abstract class BaseHistoricalModelService extends ModelServiceWithCalS Initializable { private String m_name; - private boolean m_localMode; + private boolean m_localMode = true; public BaseHistoricalModelService(String name) { m_name = name; @@ -33,14 +33,8 @@ public abstract class BaseHistoricalModelService extends ModelServiceWithCalS ServerConfigManager manager = lookup(ServerConfigManager.class); ServerConfig serverConfig = manager.getServerConfig(); - try { - if (serverConfig != null) { - m_localMode = serverConfig.isLocalMode(); - } else { - m_localMode = true; - } - } finally { - release(manager); + if (serverConfig != null) { + m_localMode = serverConfig.isLocalMode(); } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/spi/internal/BaseLocalModelService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/spi/internal/BaseLocalModelService.java index e1fe5ec30..97bc3e5fa 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/spi/internal/BaseLocalModelService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/spi/internal/BaseLocalModelService.java @@ -18,7 +18,8 @@ import com.dianping.cat.report.page.model.spi.ModelResponse; import com.dianping.cat.report.page.model.spi.ModelService; import com.site.lookup.annotation.Inject; -public abstract class BaseLocalModelService extends ModelServiceWithCalSupport implements ModelService, Initializable { +public abstract class BaseLocalModelService extends ModelServiceWithCalSupport implements ModelService, + Initializable { @Inject(type = MessageConsumer.class, value = "realtime") private RealtimeConsumer m_consumer; @@ -59,6 +60,16 @@ public abstract class BaseLocalModelService extends ModelServiceWithCalSuppor throw new RuntimeException("Internal error: this should not be reached!"); } + @Override + public void initialize() throws InitializationException { + ServerConfigManager manager = lookup(ServerConfigManager.class); + ServerConfig config = manager.getServerConfig(); + + if (config != null) { + m_defaultDomain = config.getConsole().getDefaultDomain(); + } + } + @Override public ModelResponse invoke(ModelRequest request) { ModelResponse response = new ModelResponse(); @@ -97,18 +108,4 @@ public abstract class BaseLocalModelService extends ModelServiceWithCalSuppor return sb.toString(); } - - @Override - public void initialize() throws InitializationException { - ServerConfigManager manager = lookup(ServerConfigManager.class); - ServerConfig config = manager.getServerConfig(); - - try { - if (config != null) { - m_defaultDomain = config.getConsole().getDefaultDomain(); - } - } finally { - release(manager); - } - } } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HistoricalTransactionService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HistoricalTransactionService.java index 332ab20f4..32c83942e 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HistoricalTransactionService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/HistoricalTransactionService.java @@ -42,9 +42,8 @@ public class HistoricalTransactionService extends BaseHistoricalModelService bucket = m_bucketManager.getReportBucket(timestamp, "transaction"); String xml = bucket.findById(domain); - DefaultXmlParser parser = new DefaultXmlParser(); - return parser.parse(xml); + return xml == null ? null : new DefaultXmlParser().parse(xml); } private TransactionReport getRemoteReport(long timestamp, String domain) throws Exception { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/LocalTransactionService.java b/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/LocalTransactionService.java index 9837d714a..3e3d1e6eb 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/LocalTransactionService.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/model/transaction/LocalTransactionService.java @@ -1,10 +1,39 @@ package com.dianping.cat.report.page.model.transaction; import com.dianping.cat.consumer.transaction.model.entity.TransactionReport; +import com.dianping.cat.consumer.transaction.model.transform.DefaultXmlParser; +import com.dianping.cat.report.page.model.spi.ModelPeriod; +import com.dianping.cat.report.page.model.spi.ModelRequest; import com.dianping.cat.report.page.model.spi.internal.BaseLocalModelService; +import com.dianping.cat.storage.Bucket; +import com.dianping.cat.storage.BucketManager; +import com.site.lookup.annotation.Inject; public class LocalTransactionService extends BaseLocalModelService { + @Inject + private BucketManager m_bucketManager; + public LocalTransactionService() { super("transaction"); } + + @Override + protected TransactionReport getReport(ModelRequest request, ModelPeriod period, String domain) throws Exception { + TransactionReport report = super.getReport(request, period, domain); + + if (report == null && period.isLast()) { + long date = Long.parseLong(request.getProperty("date")); + + report = getLocalReport(date, domain); + } + + return report; + } + + private TransactionReport getLocalReport(long timestamp, String domain) throws Exception { + Bucket bucket = m_bucketManager.getReportBucket(timestamp, "transaction"); + String xml = bucket.findById(domain); + + return xml == null ? null : new DefaultXmlParser().parse(xml); + } } 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 92808e726..7e06153f2 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -31,6 +31,9 @@ transaction-local com.dianping.cat.report.page.model.transaction.LocalTransactionService + + com.dianping.cat.storage.BucketManager + com.dianping.cat.message.spi.MessageConsumer realtime @@ -70,6 +73,9 @@ event-local com.dianping.cat.report.page.model.event.LocalEventService + + com.dianping.cat.storage.BucketManager + com.dianping.cat.message.spi.MessageConsumer realtime @@ -109,6 +115,9 @@ problem-local com.dianping.cat.report.page.model.problem.LocalProblemService + + com.dianping.cat.storage.BucketManager + com.dianping.cat.message.spi.MessageConsumer realtime @@ -148,6 +157,9 @@ ip-local com.dianping.cat.report.page.model.ip.LocalIpService + + com.dianping.cat.storage.BucketManager + com.dianping.cat.message.spi.MessageConsumer realtime @@ -420,6 +432,9 @@ com.dianping.cat.report.page.model.transaction.LocalTransactionService com.dianping.cat.report.page.model.transaction.LocalTransactionService + + com.dianping.cat.storage.BucketManager + com.dianping.cat.message.spi.MessageConsumer realtime @@ -431,6 +446,9 @@ com.dianping.cat.report.page.model.event.LocalEventService com.dianping.cat.report.page.model.event.LocalEventService + + com.dianping.cat.storage.BucketManager + com.dianping.cat.message.spi.MessageConsumer realtime @@ -442,6 +460,9 @@ com.dianping.cat.report.page.model.problem.LocalProblemService com.dianping.cat.report.page.model.problem.LocalProblemService + + com.dianping.cat.storage.BucketManager + com.dianping.cat.message.spi.MessageConsumer realtime diff --git a/cat-home/src/main/webapp/jsp/report/transaction.jsp b/cat-home/src/main/webapp/jsp/report/transaction.jsp index 644f0201a..511ffc6f3 100755 --- a/cat-home/src/main/webapp/jsp/report/transaction.jsp +++ b/cat-home/src/main/webapp/jsp/report/transaction.jsp @@ -32,7 +32,7 @@ ${e.failCount} ${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')} + ${w:format(e.min,'0.#')}/${w:format(e.max,'0.#')}/${w:format(e.avg,'0.0')}/${w:format(e.std,'0.0')} @@ -50,7 +50,7 @@ ${e.failCount} ${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')} + ${w:format(e.min,'0.#')}/${w:format(e.max,'0.#')}/${w:format(e.avg,'0.0')}/${w:format(e.std,'0.0')} -- GitLab