From 77a1d759845a4a8c986a2bdf653cc52d5612e1de Mon Sep 17 00:00:00 2001 From: youyong Date: Thu, 1 Nov 2012 14:57:21 +0800 Subject: [PATCH] modify the cat nav --- .../build/ComponentsConfigurator.java | 7 +- .../cat/consumer/common/CommonAnalyzer.java | 128 ++++++++++ .../cat/consumer/dump/DumpAnalyzer.java | 5 +- .../cat/consumer/dump/DumpUploader.java | 6 + .../META-INF/dal/jdbc/report-codegen.xml | 35 +++ .../META-INF/dal/jdbc/report-dal.xml | 19 ++ .../resources/META-INF/plexus/components.xml | 24 +- .../resources/META-INF/wizard/jdbc/wizard.xml | 1 + .../cat/storage/dump/LocalMessageBucket.java | 5 +- .../dump/LocalMessageBucketManager.java | 225 +++++++++--------- .../cat/storage/dump/MessageBucket.java | 3 +- .../storage/dump/MessageBucketManager.java | 3 +- .../dump/LocalMessageBucketManagerTest.java | 6 +- .../storage/dump/LocalMessageBucketTest.java | 8 +- .../cat/hadoop/hdfs/HdfsMessageBucket.java | 2 +- .../hadoop/hdfs/HdfsMessageBucketManager.java | 2 +- .../hdfs/HdfsMessageBucketManagerTest.java | 5 +- cat-home/pom.xml | 2 +- .../java/com/dianping/cat/CatHomeModule.java | 2 + .../cat/build/AlarmComponentConfigurator.java | 2 +- .../cat/build/ComponentsConfigurator.java | 8 +- .../cat/report/page/AbstractReportModel.java | 7 + .../cat/report/view/DomainNavManager.java | 157 ++++++++++++ .../alarm/threshold/ThresholdRuleManager.java | 8 +- .../META-INF/dal/jdbc/report-dal.xml | 24 +- .../resources/META-INF/plexus/components.xml | 12 + .../src/main/resources/freemaker/event.ftl | 9 +- .../resources/freemaker/exceptionAlarm.ftl | 15 +- .../src/main/resources/freemaker/problem.ftl | 8 +- .../main/resources/freemaker/serviceAlarm.ftl | 15 +- .../main/resources/freemaker/transaction.ftl | 8 +- .../webapp/WEB-INF/tags/historyReport.tag | 33 ++- .../main/webapp/WEB-INF/tags/hourlyReport.tag | 137 ++++++----- cat-home/src/main/webapp/css/body.css | 13 + cat-home/src/main/webapp/css/report.css | 1 + .../cat/system/notify/EventRender.txt | 11 +- .../cat/system/notify/ProblemRender.txt | 11 +- .../cat/system/notify/TransactionRender.txt | 9 +- .../cat/job/joblet/ConversionJoblet.java | 4 +- script/Cat.sql | 31 +-- 40 files changed, 714 insertions(+), 297 deletions(-) create mode 100644 cat-home/src/main/java/com/dianping/cat/report/view/DomainNavManager.java 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 694820f20..8876e6d05 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 @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.dainping.cat.consumer.dal.report.HostinfoDao; +import com.dainping.cat.consumer.dal.report.ProjectDao; import com.dainping.cat.consumer.dal.report.ReportDao; import com.dainping.cat.consumer.dal.report.SqltableDao; import com.dainping.cat.consumer.dal.report.TaskDao; @@ -56,7 +57,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { , E("analyzers").value("problem,transaction,event,heartbeat,matrix,cross,database,sql,dump,common"))); String errorTypes = "Error,RuntimeException,Exception"; - String failureTypes = "URL,SQL,Call,Cache"; + String failureTypes = "URL,SQL,Call,PigeonCall,Cache"; all.add(C(Handler.class, "DefaultHandler", DefaultProblemHandler.class)// .config(E("failureType").value(failureTypes))// @@ -88,7 +89,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { .req(BucketManager.class, ReportDao.class)); all.add(C(CommonAnalyzer.class).is(PER_LOOKUP)// - .req(HostinfoDao.class, TaskDao.class)// + .req(HostinfoDao.class, TaskDao.class, ProjectDao.class)// .req(BucketManager.class)); all.add(C(TopIpAnalyzer.class).is(PER_LOOKUP) // @@ -113,7 +114,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { // database all.add(C(JdbcDataSourceConfigurationManager.class).config( E("datasourceFile").value("/data/appdatas/cat/datasources.xml"))); - + all.addAll(new CatDatabaseConfigurator().defineComponents()); return all; diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/common/CommonAnalyzer.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/common/CommonAnalyzer.java index 744f95d71..19d0b3148 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/common/CommonAnalyzer.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/common/CommonAnalyzer.java @@ -10,6 +10,9 @@ import org.codehaus.plexus.logging.Logger; import com.dainping.cat.consumer.dal.report.Hostinfo; import com.dainping.cat.consumer.dal.report.HostinfoDao; +import com.dainping.cat.consumer.dal.report.Project; +import com.dainping.cat.consumer.dal.report.ProjectDao; +import com.dainping.cat.consumer.dal.report.ProjectEntity; import com.dainping.cat.consumer.dal.report.Task; import com.dainping.cat.consumer.dal.report.TaskDao; import com.dianping.cat.Cat; @@ -21,6 +24,7 @@ import com.dianping.cat.message.spi.AbstractMessageAnalyzer; import com.dianping.cat.message.spi.MessageTree; import com.dianping.cat.storage.BucketManager; import com.site.dal.jdbc.DalException; +import com.site.dal.jdbc.DalNotFoundException; import com.site.lookup.annotation.Inject; public class CommonAnalyzer extends AbstractMessageAnalyzer implements LogEnabled { @@ -36,6 +40,9 @@ public class CommonAnalyzer extends AbstractMessageAnalyzer implem @Inject private TaskDao m_taskDao; + @Inject + private ProjectDao m_projectDao; + @Override public void doCheckpoint(boolean atEnd) { storeReport(atEnd); @@ -108,6 +115,7 @@ public class CommonAnalyzer extends AbstractMessageAnalyzer implem t.setStatus(e); } } + insetDomainInfo(domain); } if (atEnd) { Date period = new Date(m_startTime); @@ -137,4 +145,124 @@ public class CommonAnalyzer extends AbstractMessageAnalyzer implem t.complete(); } } + + private void insetDomainInfo(String domain) { + try { + m_projectDao.findByDomain(domain, ProjectEntity.READSET_FULL); + } catch (DalNotFoundException e) { + Project project = m_projectDao.createLocal(); + + project.setDomain(domain); + project.setProjectLine("Default"); + + String temp = domain.toLowerCase(); + + setProjectInfo(project, temp); + + try { + m_projectDao.insert(project); + } catch (Exception ex) { + Cat.logError(ex); + } + + } catch (Exception e) { + Cat.logError(e); + } + } + + private void setProjectInfo(Project project, String temp) { + String account = " magicMirror AccountMQ AccountServer AccountWeb MessageAdminWeb MessageMQ MessageServer MessageWeb DecoratorServer FeedMQ FeedServer SmsServer SocialFeedMQ SocialFeedServer SocialRelationshipServer "; + String guanggao = "AdwordsWeb PromoWeb OpenWeb "; + String group = "AuditbackService AuditbackWeb AutoauditMQ GroupService GroupWeb ReviewServer BadgeMQ BaseDataServer UserBaseService UserService UserWeb"; + String shop = "DPIndexWeb KeywordService KeywordWeb PiccenterDisplay PiccenterService PiccenterUpload PiccenterWeb ShopAccountAdminWeb ShopAccountServer ShopAccountWeb ShopBusinessWeb ShopSearchWeb ShopServer ShopWeb ShoppicService ShoppicWeb"; + + String tuangouWeb = "BCTuangouWeb TuanGouApi TuanGouRemote TuanGouWeb tuangou-paygate"; + String tuangouMobile = "TuanGouApiMobile TuanGouWap"; + String zhifu = " PayChannel PayEngine PayOrder Unipay "; + + String mobile = " MConfigAPI MLocationService MYellowPageAPI MapService MobileApi"; + String mobileBooking = "MBookingCallcenter MBookingService MBookingWeb"; + String mobileMembercard = "MobileMembercardBcWeb MobileMembercardMainApiWeb MobileMembercardMainServer"; + String search = "DPSearch"; + String middleware = " Swallow Cat"; + + if (account.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.WWW); + project.setProjectLine(Department.ACCOUT); + } else if (middleware.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.ARCH); + project.setProjectLine(Department.MIDDLDWARE); + } else if (guanggao.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.WWW); + project.setProjectLine(Department.PROMO); + } else if (group.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.WWW); + project.setProjectLine(Department.GROUP); + } else if (shop.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.WWW); + project.setProjectLine(Department.SHOP); + } else if (tuangouWeb.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.TUANGOU); + project.setProjectLine(Department.TUANGOUTWEB); + } else if (tuangouMobile.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.TUANGOU); + project.setProjectLine(Department.TUANGOUMOBILE); + } else if (zhifu.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.TUANGOU); + project.setProjectLine(Department.TUANGOUZHIFU); + } else if (mobile.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.MOBILE); + project.setProjectLine(Department.MOBILEWEB); + } else if (mobileBooking.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.MOBILE); + project.setProjectLine(Department.MOBILEBOOKING); + } else if (mobileMembercard.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.MOBILE); + project.setProjectLine(Department.MOBILEMEM); + } else if (search.toLowerCase().indexOf(temp) > -1) { + project.setDepartment(Department.SEARCH); + project.setProjectLine(Department.SEARCH); + } else { + project.setDepartment("Default"); + project.setProjectLine("Default"); + + } + } + + public class Department { + + public static final String MOBILE = "手机"; + + public static final String SEARCH = "搜索"; + + public static final String ARCH = "架构"; + + public static final String WWW = "主站"; + + public static final String TUANGOU = "团购"; + + public static final String ACCOUT = "账户、消息"; + + public static final String USER = "用户、社交"; + + public static final String GROUP = "社区、用户"; + + public static final String SHOP = "商户、图片"; + + public static final String PROMO = "广告、优惠"; + + public static final String TUANGOUTWEB = "团购主页"; + + public static final String TUANGOUMOBILE = "团购手机"; + + public static final String TUANGOUZHIFU = "支付中心"; + + public static final String MIDDLDWARE = "基础组建"; + + public static final String MOBILEWEB = "手机后台"; + + public static final String MOBILEBOOKING = "预约预定"; + + public static final String MOBILEMEM = "会员卡"; + } } diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/dump/DumpAnalyzer.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/dump/DumpAnalyzer.java index 171200c71..d23b98211 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/dump/DumpAnalyzer.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/dump/DumpAnalyzer.java @@ -95,12 +95,11 @@ public class DumpAnalyzer extends AbstractMessageAnalyzer implements Ini return; } - String messageId = tree.getMessageId(); - MessageId id = MessageId.parse(messageId); + MessageId id = MessageId.parse(tree.getMessageId()); if (id.getVersion() == 2) { try { - m_bucketManager.storeMessage(tree); + m_bucketManager.storeMessage(tree,id); } catch (IOException e1) { m_logger.error("Error when dumping to local file system, version 2!", e1); } diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/dump/DumpUploader.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/dump/DumpUploader.java index 801c4b0bd..cfe44f699 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/dump/DumpUploader.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/dump/DumpUploader.java @@ -183,6 +183,12 @@ public class DumpUploader implements Initializable, LogEnabled { } finally { t.complete(); } + + try { + Thread.sleep(100); + } catch (InterruptedException e) { + break; + } } root.complete(); diff --git a/cat-consumer/src/main/resources/META-INF/dal/jdbc/report-codegen.xml b/cat-consumer/src/main/resources/META-INF/dal/jdbc/report-codegen.xml index 685136d23..6f8d3ca25 100644 --- a/cat-consumer/src/main/resources/META-INF/dal/jdbc/report-codegen.xml +++ b/cat-consumer/src/main/resources/META-INF/dal/jdbc/report-codegen.xml @@ -143,5 +143,40 @@ + + + + + + + + + + + + + + + + + + + + + FROM WHERE = ${key-id}]]> + + + () VALUES()]]> + + + + SET WHERE = ${key-id}]]> + + + + WHERE = ${key-id}]]> + + + diff --git a/cat-consumer/src/main/resources/META-INF/dal/jdbc/report-dal.xml b/cat-consumer/src/main/resources/META-INF/dal/jdbc/report-dal.xml index 144a5f4a9..b68c468fd 100644 --- a/cat-consumer/src/main/resources/META-INF/dal/jdbc/report-dal.xml +++ b/cat-consumer/src/main/resources/META-INF/dal/jdbc/report-dal.xml @@ -349,4 +349,23 @@ + + + + + + + FROM
+ ]]> + + + + + FROM
WHERE = ${domain} + ]]> + + + \ No newline at end of file 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 1a1c0b4df..1d8037b32 100644 --- a/cat-consumer/src/main/resources/META-INF/plexus/components.xml +++ b/cat-consumer/src/main/resources/META-INF/plexus/components.xml @@ -32,7 +32,7 @@ DefaultHandler com.dianping.cat.consumer.problem.handler.DefaultProblemHandler - URL,SQL,Call,Cache + URL,SQL,Call,PigeonCall,Cache Error,RuntimeException,Exception @@ -171,6 +171,9 @@ com.dainping.cat.consumer.dal.report.TaskDao + + com.dainping.cat.consumer.dal.report.ProjectDao + com.dianping.cat.storage.BucketManager @@ -330,6 +333,16 @@ cat + + com.site.dal.jdbc.mapping.TableProvider + project + com.site.dal.jdbc.mapping.SimpleTableProvider + + project + + cat + + com.dainping.cat.consumer.dal.report.ReportDao com.dainping.cat.consumer.dal.report.ReportDao @@ -366,5 +379,14 @@ + + com.dainping.cat.consumer.dal.report.ProjectDao + com.dainping.cat.consumer.dal.report.ProjectDao + + + com.site.dal.jdbc.QueryEngine + + + diff --git a/cat-consumer/src/main/resources/META-INF/wizard/jdbc/wizard.xml b/cat-consumer/src/main/resources/META-INF/wizard/jdbc/wizard.xml index ab65aeb67..a6c7662dd 100644 --- a/cat-consumer/src/main/resources/META-INF/wizard/jdbc/wizard.xml +++ b/cat-consumer/src/main/resources/META-INF/wizard/jdbc/wizard.xml @@ -12,6 +12,7 @@
+
diff --git a/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucket.java b/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucket.java index 834ed180c..5c2607fb8 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucket.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucket.java @@ -166,14 +166,13 @@ public class LocalMessageBucket implements MessageBucket { } @Override - public synchronized MessageBlock store(MessageTree tree) throws IOException { - ChannelBuffer buf = m_bufferManager.allocate(); + public MessageBlock store(final MessageTree tree, final MessageId id) throws IOException { + final ChannelBuffer buf = m_bufferManager.allocate(); m_lastAccessTime = System.currentTimeMillis(); m_codec.encode(tree, buf); int size = buf.readableBytes(); - MessageId id = MessageId.parse(tree.getMessageId()); m_dirty.set(true); m_blockSize += size; diff --git a/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucketManager.java b/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucketManager.java index 5f03d6111..855bb2de6 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucketManager.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/dump/LocalMessageBucketManager.java @@ -9,6 +9,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.LockSupport; @@ -38,17 +39,19 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag private static final long ONE_HOUR = 60 * 60 * 1000L; + private File m_baseDir; + + private Map m_buckets = new HashMap(); + @Inject private ServerConfigManager m_configManager; + private BlockingQueue m_messageBlocks = new LinkedBlockingQueue(1000); + @Inject private MessagePathBuilder m_pathBuilder; - private File m_baseDir; - - private Map m_buckets = new HashMap(); - - private BlockingQueue m_messageBlocks = new LinkedBlockingQueue(1000); + private ExecutorService m_pool = Threads.forPool().getFixedThreadPool("Cat-Encoder", 3); public void archive(long startTime) { String path = m_pathBuilder.getPath(new Date(startTime), ""); @@ -127,6 +130,31 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag Threads.forGroup("Cat").start(new OldMessageMover()); } + private boolean isFit(String path) { + if (path.indexOf("draft") > -1 || path.indexOf("outbox") > -1) { + return false; + } + + long current = System.currentTimeMillis(); + long currentHour = current - current % ONE_HOUR; + long lastHour = currentHour - ONE_HOUR; + long nextHour = currentHour + ONE_HOUR; + + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd/HH"); + String currentHourStr = sdf.format(new Date(currentHour)); + String lastHourStr = sdf.format(new Date(lastHour)); + String nextHourStr = sdf.format(new Date(nextHour)); + + int indexOf = path.indexOf(currentHourStr); + int indexOfLast = path.indexOf(lastHourStr); + int indexOfNext = path.indexOf(nextHourStr); + + if (indexOf > -1 || indexOfLast > -1 || indexOfNext > -1) { + return false; + } + return true; + } + @Override public MessageTree loadMessage(String messageId) throws IOException { MessageProducer cat = Cat.getProducer(); @@ -203,13 +231,57 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag } } + private void moveOldMessages() { + final List paths = new ArrayList(); + + Scanners.forDir().scan(m_baseDir, new FileMatcher() { + @Override + public Direction matches(File base, String path) { + if (new File(base, path).isFile()) { + if (isFit(path)) { + paths.add(path); + } + } + return Direction.DOWN; + } + }); + if (paths.size() > 0) { + String ip = NetworkInterfaceManager.INSTANCE.getLocalHostAddress(); + Transaction t = Cat.newTransaction("System", "Dump" + "-" + ip); + t.setStatus(Message.SUCCESS); + + for (String path : paths) { + try { + Cat.getProducer().logEvent("Dump", "Outbox.Abnormal", Message.SUCCESS, path); + + File outbox = new File(m_baseDir, "outbox"); + File from = new File(m_baseDir, path); + File to = new File(outbox, path); + + to.getParentFile().mkdirs(); + Files.forDir().copyFile(from, to); + Files.forDir().delete(from); + + File parentFile = from.getParentFile(); + + parentFile.delete(); // delete it if empty + parentFile.getParentFile().delete(); // delete it if empty + } catch (Exception e) { + t.setStatus(Message.SUCCESS); + Cat.logError(e); + } + } + + t.complete(); + } + } + public void setBaseDir(File baseDir) { m_baseDir = baseDir; } @Override - public void storeMessage(MessageTree tree) throws IOException { - MessageId id = MessageId.parse(tree.getMessageId()); + public void storeMessage(final MessageTree tree, final MessageId id) throws IOException { String localIp = NetworkInterfaceManager.INSTANCE.getLocalHostAddress(); String name = id.getDomain() + '-' + id.getIpAddress() + '-' + localIp; String dataFile = m_pathBuilder.getPath(new Date(id.getTimestamp()), name); @@ -222,11 +294,22 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag m_buckets.put(dataFile, bucket); } - MessageBlock block = bucket.store(tree); + final LocalMessageBucket b = bucket; - if (block != null) { - m_messageBlocks.offer(block); - } + m_pool.submit(new Runnable() { + @Override + public void run() { + try { + MessageBlock block = b.store(tree, id); + + if (block != null) { + m_messageBlocks.offer(block); + } + } catch (Exception e) { + Cat.logError(e); + } + } + }); } class BlockDumper implements Task { @@ -252,7 +335,7 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag } catch (Throwable e) { m_errors++; - if (m_errors == 1 || m_errors % 1000 == 0) { + if (m_errors == 1 || m_errors % 100 == 0) { Cat.getProducer().logError( new RuntimeException("Error when dumping for bucket: " + dataFile + ".", e)); } @@ -269,81 +352,44 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag } } - private boolean isFit(String path) { - if (path.indexOf("draft") > -1 || path.indexOf("outbox") > -1) { - return false; - } - - long current = System.currentTimeMillis(); - long currentHour = current - current % ONE_HOUR; - long lastHour = currentHour - ONE_HOUR; - long nextHour = currentHour + ONE_HOUR; - - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd/HH"); - String currentHourStr = sdf.format(new Date(currentHour)); - String lastHourStr = sdf.format(new Date(lastHour)); - String nextHourStr = sdf.format(new Date(nextHour)); - - int indexOf = path.indexOf(currentHourStr); - int indexOfLast = path.indexOf(lastHourStr); - int indexOfNext = path.indexOf(nextHourStr); - - if (indexOf > -1 || indexOfLast > -1 || indexOfNext > -1) { - return false; + class IdleChecker implements Task { + @Override + public String getName() { + return "LocalMessageBucketManager-IdleChecker"; } - return true; - } - private void moveOldMessages() { - final List paths = new ArrayList(); + @Override + public void run() { + try { + while (true) { + Thread.sleep(60 * 1000L); // 1 minute - Scanners.forDir().scan(m_baseDir, new FileMatcher() { - @Override - public Direction matches(File base, String path) { - if (new File(base, path).isFile()) { - if (isFit(path)) { - paths.add(path); + try { + closeIdleBuckets(); + } catch (Throwable e) { + Cat.getProducer().logError(e); } } - return Direction.DOWN; - } - }); - if (paths.size() > 0) { - String ip = NetworkInterfaceManager.INSTANCE.getLocalHostAddress(); - Transaction t = Cat.newTransaction("System", "Dump" + "-" + ip); - t.setStatus(Message.SUCCESS); - - for (String path : paths) { - try { - Cat.getProducer().logEvent("Dump", "Outbox.Abnormal", Message.SUCCESS, path); - - File outbox = new File(m_baseDir, "outbox"); - File from = new File(m_baseDir, path); - File to = new File(outbox, path); - - to.getParentFile().mkdirs(); - Files.forDir().copyFile(from, to); - Files.forDir().delete(from); - - File parentFile = from.getParentFile(); - - parentFile.delete(); // delete it if empty - parentFile.getParentFile().delete(); // delete it if empty - } catch (Exception e) { - t.setStatus(Message.SUCCESS); - Cat.logError(e); - } + } catch (InterruptedException e) { + // ignore it } + } - t.complete(); + @Override + public void shutdown() { } } class OldMessageMover implements Task { + @Override + public String getName() { + return "LocalMessageBucketManager-OldMessageMover"; + } + @Override public void run() { boolean active = true; - + while (active) { try { moveOldMessages(); @@ -358,42 +404,9 @@ public class LocalMessageBucketManager extends ContainerHolder implements Messag } } - @Override - public String getName() { - return "LocalMessageBucketManager-OldMessageMover"; - } - @Override public void shutdown() { } } - - class IdleChecker implements Task { - @Override - public String getName() { - return "LocalMessageBucketManager-IdleChecker"; - } - - @Override - public void run() { - try { - while (true) { - Thread.sleep(60 * 1000L); // 1 minute - - try { - closeIdleBuckets(); - } catch (Throwable e) { - Cat.getProducer().logError(e); - } - } - } catch (InterruptedException e) { - // ignore it - } - } - - @Override - public void shutdown() { - } - } } diff --git a/cat-core/src/main/java/com/dianping/cat/storage/dump/MessageBucket.java b/cat-core/src/main/java/com/dianping/cat/storage/dump/MessageBucket.java index 2ebc292bc..536486a4e 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/dump/MessageBucket.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/dump/MessageBucket.java @@ -2,6 +2,7 @@ package com.dianping.cat.storage.dump; import java.io.IOException; +import com.dianping.cat.message.internal.MessageId; import com.dianping.cat.message.spi.MessageTree; public interface MessageBucket { @@ -15,5 +16,5 @@ public interface MessageBucket { public void initialize(String dataFile) throws IOException; - public MessageBlock store(MessageTree tree) throws IOException; + public MessageBlock store(MessageTree tree, MessageId id) throws IOException; } diff --git a/cat-core/src/main/java/com/dianping/cat/storage/dump/MessageBucketManager.java b/cat-core/src/main/java/com/dianping/cat/storage/dump/MessageBucketManager.java index 4b340d94d..a1b63db4f 100644 --- a/cat-core/src/main/java/com/dianping/cat/storage/dump/MessageBucketManager.java +++ b/cat-core/src/main/java/com/dianping/cat/storage/dump/MessageBucketManager.java @@ -2,6 +2,7 @@ package com.dianping.cat.storage.dump; import java.io.IOException; +import com.dianping.cat.message.internal.MessageId; import com.dianping.cat.message.spi.MessageTree; public interface MessageBucketManager { @@ -9,5 +10,5 @@ public interface MessageBucketManager { public MessageTree loadMessage(String messageId) throws IOException; - public void storeMessage(MessageTree tree) throws IOException; + public void storeMessage(MessageTree tree,MessageId id) throws IOException; } diff --git a/cat-core/src/test/java/com/dianping/cat/storage/dump/LocalMessageBucketManagerTest.java b/cat-core/src/test/java/com/dianping/cat/storage/dump/LocalMessageBucketManagerTest.java index 6f1b2072e..b2d716a74 100644 --- a/cat-core/src/test/java/com/dianping/cat/storage/dump/LocalMessageBucketManagerTest.java +++ b/cat-core/src/test/java/com/dianping/cat/storage/dump/LocalMessageBucketManagerTest.java @@ -9,6 +9,7 @@ import org.junit.runners.JUnit4; import com.dianping.cat.message.Transaction; import com.dianping.cat.message.internal.DefaultTransaction; +import com.dianping.cat.message.internal.MessageId; import com.dianping.cat.message.internal.MessageIdFactory; import com.dianping.cat.message.spi.MessageTree; import com.dianping.cat.message.spi.internal.DefaultMessageTree; @@ -58,7 +59,10 @@ public class LocalMessageBucketManagerTest extends ComponentTestCase { factory.initialize("source"); for (int i = 0; i < num; i++) { - manager.storeMessage(newMessageTree(factory.getNextId(), i, now + i * 10L)); + DefaultMessageTree tree = newMessageTree(factory.getNextId(), i, now + i * 10L); + MessageId id = MessageId.parse(tree.getMessageId()); + + manager.storeMessage(tree, id); } Thread.yield(); diff --git a/cat-core/src/test/java/com/dianping/cat/storage/dump/LocalMessageBucketTest.java b/cat-core/src/test/java/com/dianping/cat/storage/dump/LocalMessageBucketTest.java index 94f682fe9..d8b7efcde 100644 --- a/cat-core/src/test/java/com/dianping/cat/storage/dump/LocalMessageBucketTest.java +++ b/cat-core/src/test/java/com/dianping/cat/storage/dump/LocalMessageBucketTest.java @@ -41,8 +41,10 @@ public class LocalMessageBucketTest extends ComponentTestCase { int count = 2000; for (int i = 0; i < count; i++) { + MessageId id = MessageId.parse(tree.getMessageId()); + tree.setMessageId(factory.getNextId()); - bucket.store(tree); + bucket.store(tree,id); } for (int i = 0; i < count; i++) { @@ -71,8 +73,10 @@ public class LocalMessageBucketTest extends ComponentTestCase { int count = 2000; for (int i = 0; i < count; i++) { + MessageId id = MessageId.parse(tree.getMessageId()); + tree.setMessageId(factory.getNextId()); - buckets[i % buckets.length].store(tree); + buckets[i % buckets.length].store(tree,id); } for (int i = 0; i < count; i++) { diff --git a/cat-hadoop/src/main/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucket.java b/cat-hadoop/src/main/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucket.java index c0f30e924..70c46159a 100644 --- a/cat-hadoop/src/main/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucket.java +++ b/cat-hadoop/src/main/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucket.java @@ -76,7 +76,7 @@ public class HdfsMessageBucket implements MessageBucket { } @Override - public MessageBlock store(MessageTree tree) throws IOException { + public MessageBlock store(MessageTree tree,MessageId id) throws IOException { throw new UnsupportedOperationException("Not supported by HDFS!"); } diff --git a/cat-hadoop/src/main/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucketManager.java b/cat-hadoop/src/main/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucketManager.java index 7c61a24fb..b881d6ee4 100644 --- a/cat-hadoop/src/main/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucketManager.java +++ b/cat-hadoop/src/main/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucketManager.java @@ -131,7 +131,7 @@ public class HdfsMessageBucketManager extends ContainerHolder implements Message } @Override - public void storeMessage(MessageTree tree) throws IOException { + public void storeMessage(MessageTree tree,MessageId id) throws IOException { throw new UnsupportedOperationException("Not supported by HDFS!"); } diff --git a/cat-hadoop/src/test/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucketManagerTest.java b/cat-hadoop/src/test/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucketManagerTest.java index 5a249459d..e0ecec465 100644 --- a/cat-hadoop/src/test/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucketManagerTest.java +++ b/cat-hadoop/src/test/java/com/dianping/cat/hadoop/hdfs/HdfsMessageBucketManagerTest.java @@ -9,6 +9,7 @@ import org.junit.runners.JUnit4; import com.dianping.cat.message.Transaction; import com.dianping.cat.message.internal.DefaultTransaction; +import com.dianping.cat.message.internal.MessageId; import com.dianping.cat.message.internal.MessageIdFactory; import com.dianping.cat.message.spi.MessageTree; import com.dianping.cat.message.spi.internal.DefaultMessageTree; @@ -61,7 +62,9 @@ public class HdfsMessageBucketManagerTest extends ComponentTestCase { localManager.setBaseDir(new File("target/bucket/hdfs/dump")); // make local and hdfs base dir same for (int i = 0; i < num; i++) { - localManager.storeMessage(newMessageTree(factory.getNextId(), i, now + i * 10L)); + DefaultMessageTree tree = newMessageTree(factory.getNextId(), i, now + i * 10L); + MessageId id = MessageId.parse(tree.getMessageId()); + localManager.storeMessage(tree,id); } localManager.close(); diff --git a/cat-home/pom.xml b/cat-home/pom.xml index 12dea78f1..128bab500 100755 --- a/cat-home/pom.xml +++ b/cat-home/pom.xml @@ -231,7 +231,7 @@ org.eclipse.jdt.core.compiler.compliance=1.6]]> war - product + alpha test diff --git a/cat-home/src/main/java/com/dianping/cat/CatHomeModule.java b/cat-home/src/main/java/com/dianping/cat/CatHomeModule.java index 6fd737846..75025edb6 100644 --- a/cat-home/src/main/java/com/dianping/cat/CatHomeModule.java +++ b/cat-home/src/main/java/com/dianping/cat/CatHomeModule.java @@ -11,6 +11,7 @@ import com.dianping.cat.message.spi.internal.DefaultMessageHandler; import com.dianping.cat.report.task.DailyTaskProducer; import com.dianping.cat.report.task.DefaultTaskConsumer; import com.dianping.cat.report.task.monthreport.MonthReportBuilderTask; +import com.dianping.cat.report.view.DomainNavManager; import com.dianping.cat.system.alarm.AlarmRuleCreator; import com.dianping.cat.system.alarm.AlarmTask; import com.dianping.cat.system.alarm.threshold.listener.ExceptionDataListener; @@ -33,6 +34,7 @@ public class CatHomeModule extends AbstractModule { ServerConfigManager serverConfigManager = ctx.lookup(ServerConfigManager.class); ctx.lookup(MessageConsumer.class, "realtime"); + ctx.lookup(DomainNavManager.class); DefaultTaskConsumer taskConsumer = ctx.lookup(DefaultTaskConsumer.class); DailyTaskProducer dailyTaskProducer = ctx.lookup(DailyTaskProducer.class); diff --git a/cat-home/src/main/java/com/dianping/cat/build/AlarmComponentConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/AlarmComponentConfigurator.java index 9726f9b02..f8bc95d97 100644 --- a/cat-home/src/main/java/com/dianping/cat/build/AlarmComponentConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/AlarmComponentConfigurator.java @@ -63,7 +63,7 @@ public class AlarmComponentConfigurator extends AbstractResourceConfigurator { req(MailRecordDao.class, MailSMS.class, ServerConfigManager.class)); all.add(C(ThresholdRuleManager.class).// - req(AlarmTemplateDao.class, AlarmRuleDao.class)); + req(AlarmTemplateDao.class, AlarmRuleDao.class, ServerConfigManager.class)); all.add(C(ExceptionDataListener.class).// req(EventDispatcher.class, ThresholdRuleManager.class)); diff --git a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java index feb817b5f..835349e68 100755 --- a/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/ComponentsConfigurator.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.dainping.cat.consumer.dal.report.HostinfoDao; +import com.dainping.cat.consumer.dal.report.ProjectDao; import com.dainping.cat.consumer.dal.report.ReportDao; import com.dainping.cat.consumer.dal.report.TaskDao; import com.dianping.cat.CatHomeModule; @@ -48,6 +49,7 @@ import com.dianping.cat.report.task.sql.SqlReportBuilder; import com.dianping.cat.report.task.transaction.TransactionGraphCreator; import com.dianping.cat.report.task.transaction.TransactionMerger; import com.dianping.cat.report.task.transaction.TransactionReportBuilder; +import com.dianping.cat.report.view.DomainNavManager; import com.site.dal.jdbc.datasource.JdbcDataSourceConfigurationManager; import com.site.initialization.DefaultModuleManager; import com.site.initialization.Module; @@ -140,9 +142,11 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(ModuleManager.class, DefaultModuleManager.class) // .config(E("topLevelModules").value(CatHomeModule.ID))); + all.add(C(DomainNavManager.class).req(ProjectDao.class)); + // TODO - //all.add(C(OtherJobReport.class).// - // req(DailyreportDao.class, DomainManager.class)); + // all.add(C(OtherJobReport.class).// + // req(DailyreportDao.class, DomainManager.class)); all.add(C(DailyReportService.class, DailyReportServiceImpl.class)// .req(DailyreportDao.class)); diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/AbstractReportModel.java b/cat-home/src/main/java/com/dianping/cat/report/page/AbstractReportModel.java index b1842bfb6..7b0bb1f3c 100755 --- a/cat-home/src/main/java/com/dianping/cat/report/page/AbstractReportModel.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/AbstractReportModel.java @@ -4,10 +4,13 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Collection; import java.util.Date; +import java.util.Map; import com.dianping.cat.report.ReportPage; +import com.dianping.cat.report.view.DomainNavManager; import com.dianping.cat.report.view.HistoryNav; import com.dianping.cat.report.view.UrlNav; +import com.dianping.cat.report.view.DomainNavManager.Department; import com.site.web.mvc.Action; import com.site.web.mvc.ActionContext; import com.site.web.mvc.ViewModel; @@ -86,6 +89,10 @@ public abstract class AbstractReportModel getDomains(); + public Map getDomainGroups() { + return DomainNavManager.getDepartment(getDomains()); + } + public Throwable getException() { return m_exception; } diff --git a/cat-home/src/main/java/com/dianping/cat/report/view/DomainNavManager.java b/cat-home/src/main/java/com/dianping/cat/report/view/DomainNavManager.java new file mode 100644 index 000000000..94cd2a933 --- /dev/null +++ b/cat-home/src/main/java/com/dianping/cat/report/view/DomainNavManager.java @@ -0,0 +1,157 @@ +package com.dianping.cat.report.view; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; + +import com.dainping.cat.consumer.dal.report.Project; +import com.dainping.cat.consumer.dal.report.ProjectDao; +import com.dainping.cat.consumer.dal.report.ProjectEntity; +import com.dianping.cat.Cat; +import com.dianping.cat.helper.TimeUtil; +import com.site.dal.jdbc.DalException; +import com.site.helper.Threads; +import com.site.helper.Threads.Task; +import com.site.lookup.annotation.Inject; + +public class DomainNavManager implements Initializable { + + @Inject + private ProjectDao m_projectDao; + + private static Map m_projects = new HashMap(); + + public static Map getDepartment(Collection domains) { + Map result = new TreeMap(); + + synchronized (m_projects) { + for (String domain : domains) { + Project project = m_projects.get(domain); + String department = "Default"; + String projectLine = "Default"; + + if (project != null) { + department = project.getDepartment(); + projectLine = project.getProjectLine(); + } + Department temp1 = result.get(department); + if (temp1 == null) { + temp1 = new Department(); + result.put(department, temp1); + } + temp1.findOrCreatProjectLine(projectLine).addDomain(domain); + } + } + + return result; + } + + @Override + public void initialize() throws InitializationException { + try { + DomainReload reload = new DomainReload(); + + Threads.forGroup("Cat").start(reload); + } catch (Exception e) { + Cat.logError(e); + } + } + + public void reloadDomainInfo() { + synchronized (m_projects) { + try { + List projects = m_projectDao.findAll(ProjectEntity.READSET_FULL); + + if (projects.size() > 0) { + m_projects.clear(); + + for (Project project : projects) { + m_projects.put(project.getDomain(), project); + } + } + } catch (DalException e) { + Cat.logError(e); + } + } + } + + public static class Department { + + private Map m_projectLines = new HashMap(); + + public ProjectLine findOrCreatProjectLine(String projectLine) { + if (projectLine == null) { + projectLine = "Default"; + } + + ProjectLine line = m_projectLines.get(projectLine); + + if (line == null) { + line = new ProjectLine(); + + m_projectLines.put(projectLine, line); + } + return line; + } + + public Map getProjectLines() { + return m_projectLines; + } + + public void setProjectLines(Map projectLines) { + m_projectLines = projectLines; + } + } + + public class DomainReload implements Task { + + @Override + public String getName() { + return "Domain-Info-Reload"; + } + + @Override + public void run() { + boolean active = true; + + while (active) { + try { + reloadDomainInfo(); + } catch (Exception e) { + Cat.logError(e); + } + try { + Thread.sleep(3 * TimeUtil.ONE_MINUTE); + } catch (InterruptedException e) { + active = false; + } + } + } + + @Override + public void shutdown() { + } + } + + public static class ProjectLine { + private List m_lineDomains = new ArrayList(); + + public void addDomain(String name) { + m_lineDomains.add(name); + } + + public List getLineDomains() { + return m_lineDomains; + } + + public void setLineDomains(List lineDomains) { + m_lineDomains = lineDomains; + } + } +} diff --git a/cat-home/src/main/java/com/dianping/cat/system/alarm/threshold/ThresholdRuleManager.java b/cat-home/src/main/java/com/dianping/cat/system/alarm/threshold/ThresholdRuleManager.java index bf3e398b7..1391d6ef3 100644 --- a/cat-home/src/main/java/com/dianping/cat/system/alarm/threshold/ThresholdRuleManager.java +++ b/cat-home/src/main/java/com/dianping/cat/system/alarm/threshold/ThresholdRuleManager.java @@ -12,6 +12,7 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; import com.dianping.cat.Cat; +import com.dianping.cat.configuration.ServerConfigManager; import com.dianping.cat.home.dal.alarm.AlarmRule; import com.dianping.cat.home.dal.alarm.AlarmRuleDao; import com.dianping.cat.home.dal.alarm.AlarmRuleEntity; @@ -38,6 +39,9 @@ public class ThresholdRuleManager implements Initializable { @Inject private AlarmTemplateDao m_alarmTemplateDao; + @Inject + private ServerConfigManager m_configManager; + public Map m_exceptionModifyTimes = new HashMap(); public Map m_serviceModifyTimes = new HashMap(); @@ -123,7 +127,9 @@ public class ThresholdRuleManager implements Initializable { ReloadThresholdRuleTask task = new ReloadThresholdRuleTask(); - Threads.forGroup("Cat").start(task); + if (m_configManager.isJobMachine()) { + Threads.forGroup("Cat").start(task); + } } private void initalizeExceptionRule() { diff --git a/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml b/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml index 0d419adc8..ca971e9ad 100644 --- a/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml +++ b/cat-home/src/main/resources/META-INF/dal/jdbc/report-dal.xml @@ -2,7 +2,8 @@ - + @@ -35,7 +36,8 @@ AND = ${name} ]]> - + @@ -50,7 +52,8 @@ AND type = 1 ]]> - + @@ -110,7 +113,8 @@ AND type =1; ]]> - + @@ -142,7 +146,8 @@ AND type = 2 ]]> - + ) ]]> - + @@ -229,7 +235,8 @@ AND = ${start-date} ]]> - + @@ -245,7 +252,8 @@ AND < ${end-date} ]]> - + 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 26015d5af..aceb57e14 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -367,6 +367,15 @@ cat-home + + com.dianping.cat.report.view.DomainNavManager + com.dianping.cat.report.view.DomainNavManager + + + com.dainping.cat.consumer.dal.report.ProjectDao + + + com.dianping.cat.report.service.DailyReportService com.dianping.cat.report.service.impl.DailyReportServiceImpl @@ -2599,6 +2608,9 @@ com.dianping.cat.home.dal.alarm.AlarmRuleDao + + com.dianping.cat.configuration.ServerConfigManager + diff --git a/cat-home/src/main/resources/freemaker/event.ftl b/cat-home/src/main/resources/freemaker/event.ftl index fe7e8988e..eeff3fec5 100644 --- a/cat-home/src/main/resources/freemaker/event.ftl +++ b/cat-home/src/main/resources/freemaker/event.ftl @@ -1,29 +1,22 @@

EventReport

-
+
- - - - <#list types as item> - - -
Type Total Count Failure Count Failure% TPS Link
${item.type.id} ${item.type.totalCount} ${item.type.failCount} ${item.type.failPercent?string("0.00")} ${item.type.tps?string("0.00")} Graph
diff --git a/cat-home/src/main/resources/freemaker/exceptionAlarm.ftl b/cat-home/src/main/resources/freemaker/exceptionAlarm.ftl index 346ba1b40..1e522b3ec 100644 --- a/cat-home/src/main/resources/freemaker/exceptionAlarm.ftl +++ b/cat-home/src/main/resources/freemaker/exceptionAlarm.ftl @@ -1,36 +1,23 @@

异常超过阀值告警

- +
- - - - - - - - - - - - -
项目名称 ${domain}
告警时间 ${date?string("yyyy-MM-dd HH:mm:ss")}
告警规则 ${rule}
错误个数 ${count}
CAT链接 link
\ No newline at end of file diff --git a/cat-home/src/main/resources/freemaker/problem.ftl b/cat-home/src/main/resources/freemaker/problem.ftl index a4e0552d3..7a5e5f07a 100644 --- a/cat-home/src/main/resources/freemaker/problem.ftl +++ b/cat-home/src/main/resources/freemaker/problem.ftl @@ -1,22 +1,16 @@

ProblemReport

- +
- - - - <#list types as item> - -
Type Total Count Link
${item.type} ${item.count} Graph
diff --git a/cat-home/src/main/resources/freemaker/serviceAlarm.ftl b/cat-home/src/main/resources/freemaker/serviceAlarm.ftl index 51d19df8a..70231dabc 100644 --- a/cat-home/src/main/resources/freemaker/serviceAlarm.ftl +++ b/cat-home/src/main/resources/freemaker/serviceAlarm.ftl @@ -1,36 +1,23 @@

服务调用失败告警

- +
- - - - - - - - - - - - -
项目名称 ${domain}
告警时间 ${date?string("yyyy-MM-dd HH:mm:ss")}
告警规则 ${rule}
错误个数 ${count}
CAT链接 link
\ No newline at end of file diff --git a/cat-home/src/main/resources/freemaker/transaction.ftl b/cat-home/src/main/resources/freemaker/transaction.ftl index ebd3601c7..3e009f78f 100644 --- a/cat-home/src/main/resources/freemaker/transaction.ftl +++ b/cat-home/src/main/resources/freemaker/transaction.ftl @@ -1,9 +1,6 @@

TransactionReport

- +
- - - @@ -11,11 +8,9 @@ - <#list types as item> - @@ -25,6 +20,5 @@ -
Type Total Count Failure CountAvg(ms) TPS Link
${item.type.id} ${item.type.totalCount} ${item.type.failCount}Graph
diff --git a/cat-home/src/main/webapp/WEB-INF/tags/historyReport.tag b/cat-home/src/main/webapp/WEB-INF/tags/historyReport.tag index 6da9aa3e8..6ffaadcb7 100755 --- a/cat-home/src/main/webapp/WEB-INF/tags/historyReport.tag +++ b/cat-home/src/main/webapp/WEB-INF/tags/historyReport.tag @@ -1,6 +1,7 @@ <%@ tag trimDirectiveWhitespaces="true"%> <%@ taglib prefix="a" uri="/WEB-INF/app.tld"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="w" uri="http://www.unidal.org/web/core"%> <%@ taglib prefix="res" uri="http://www.unidal.org/webres"%> <%@ attribute name="title"%> <%@ attribute name="navUrlPrefix"%> @@ -35,7 +36,7 @@ - + <%-- - - + --%> + + - + \ No newline at end of file diff --git a/cat-home/src/main/webapp/WEB-INF/tags/hourlyReport.tag b/cat-home/src/main/webapp/WEB-INF/tags/hourlyReport.tag index bc6ff8505..48e1eed3f 100755 --- a/cat-home/src/main/webapp/WEB-INF/tags/hourlyReport.tag +++ b/cat-home/src/main/webapp/WEB-INF/tags/hourlyReport.tag @@ -1,57 +1,82 @@ -<%@ tag trimDirectiveWhitespaces="true" %> -<%@ taglib prefix="a" uri="/WEB-INF/app.tld"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="res" uri="http://www.unidal.org/webres"%> -<%@ attribute name="title"%> -<%@ attribute name="navUrlPrefix"%> -<%@ attribute name="timestamp"%> -<%@ attribute name="subtitle" fragment="true"%> - - - - - -
- - - - - - -
  Switch To History Mode -
- - - - - - - - - - - - - - -
- +<%@ tag trimDirectiveWhitespaces="true" %> +<%@ taglib prefix="a" uri="/WEB-INF/app.tld"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="w" uri="http://www.unidal.org/web/core"%> +<%@ taglib prefix="res" uri="http://www.unidal.org/webres"%> +<%@ attribute name="title"%> +<%@ attribute name="navUrlPrefix"%> +<%@ attribute name="timestamp"%> +<%@ attribute name="subtitle" fragment="true"%> + + + + + +
+ + + + + + +
  Switch To History Mode +
+ + <%-- + + + + --%> + + + + + + + + + +
+
\ No newline at end of file diff --git a/cat-home/src/main/webapp/css/body.css b/cat-home/src/main/webapp/css/body.css index 4594acdb7..b68f8c14f 100755 --- a/cat-home/src/main/webapp/css/body.css +++ b/cat-home/src/main/webapp/css/body.css @@ -168,4 +168,17 @@ a.heartbeat { text-align:right; margin-right:20px; pedding-right:20px; +} + +.department{ + text-align:center; + font-size:medium; + font-weight: bold; + width:80px; +} + +.domain{ + text-align: left; + font-weight: bold; + padding-left:4px; } \ No newline at end of file diff --git a/cat-home/src/main/webapp/css/report.css b/cat-home/src/main/webapp/css/report.css index 1d1eb1a2e..fb4d8de1c 100755 --- a/cat-home/src/main/webapp/css/report.css +++ b/cat-home/src/main/webapp/css/report.css @@ -23,6 +23,7 @@ text-align: left; font-size: small; font-weight: bold; + padding-left:4px; } .report .navbar .domain A { diff --git a/cat-home/src/test/resources/com/dianping/cat/system/notify/EventRender.txt b/cat-home/src/test/resources/com/dianping/cat/system/notify/EventRender.txt index 50d0efeea..a261bd22c 100644 --- a/cat-home/src/test/resources/com/dianping/cat/system/notify/EventRender.txt +++ b/cat-home/src/test/resources/com/dianping/cat/system/notify/EventRender.txt @@ -1,36 +1,27 @@

EventReport

- +
- - - - - - - - -
Type Total Count Failure Count Failure% TPS Link
User 1,705 0 0.00 0.00 Graph
User1 1,705 0 0.00 0.00 Graph
\ No newline at end of file diff --git a/cat-home/src/test/resources/com/dianping/cat/system/notify/ProblemRender.txt b/cat-home/src/test/resources/com/dianping/cat/system/notify/ProblemRender.txt index 3b9ab6deb..84c871d44 100644 --- a/cat-home/src/test/resources/com/dianping/cat/system/notify/ProblemRender.txt +++ b/cat-home/src/test/resources/com/dianping/cat/system/notify/ProblemRender.txt @@ -1,37 +1,28 @@

ProblemReport

- +
- - - - - - - - -
Type Total Count Link
error 10 Graph
failure 10 Graph
heartbeat 1 Graph
url 10 Graph
\ No newline at end of file diff --git a/cat-home/src/test/resources/com/dianping/cat/system/notify/TransactionRender.txt b/cat-home/src/test/resources/com/dianping/cat/system/notify/TransactionRender.txt index 2587236cf..e700b4e63 100644 --- a/cat-home/src/test/resources/com/dianping/cat/system/notify/TransactionRender.txt +++ b/cat-home/src/test/resources/com/dianping/cat/system/notify/TransactionRender.txt @@ -1,9 +1,6 @@

TransactionReport

- +
- - - @@ -11,10 +8,8 @@ - - @@ -24,7 +19,6 @@ - @@ -33,5 +27,4 @@ -
Type Total Count Failure CountAvg(ms) TPS Link
Task1 2 0Graph
URL 1 00.00 Graph
diff --git a/cat-job/src/main/java/com/dianping/cat/job/joblet/ConversionJoblet.java b/cat-job/src/main/java/com/dianping/cat/job/joblet/ConversionJoblet.java index 22a8fddb0..e149d678a 100644 --- a/cat-job/src/main/java/com/dianping/cat/job/joblet/ConversionJoblet.java +++ b/cat-job/src/main/java/com/dianping/cat/job/joblet/ConversionJoblet.java @@ -10,6 +10,7 @@ import com.dianping.cat.job.spi.joblet.Joblet; import com.dianping.cat.job.spi.joblet.JobletContext; import com.dianping.cat.job.spi.joblet.JobletMeta; import com.dianping.cat.job.spi.mapreduce.MessageTreeWritable; +import com.dianping.cat.message.internal.MessageId; import com.dianping.cat.message.internal.MessageIdFactory; import com.dianping.cat.message.spi.MessageTree; import com.dianping.cat.storage.dump.LocalMessageBucket; @@ -56,7 +57,8 @@ public class ConversionJoblet extends ContainerHolder implements Joblet