From 3e40f3a9452c83a12eba9187d39b0ad3daa34ed1 Mon Sep 17 00:00:00 2001 From: "leon.li" Date: Wed, 6 Aug 2014 17:21:24 +0800 Subject: [PATCH] refactor DomainManager module --- .../build/ComponentsConfigurator.java | 13 +- .../dependency/DependencyAnalyzer.java | 12 +- .../resources/META-INF/plexus/components.xml | 32 +- .../cat/consumer/dependency/Configurator.java | 12 +- .../build/ComponentsConfigurator.java | 11 +- .../cat/consumer/state/StateAnalyzer.java | 18 +- .../resources/META-INF/plexus/components.xml | 32 +- .../java/com/dianping/cat/DomainManager.java | 290 ------------------ .../cat/build/ComponentsConfigurator.java | 9 +- .../dianping/cat/service/HostinfoService.java | 252 +++++++++++++-- .../dianping/cat/service/ProjectService.java | 57 +++- .../resources/META-INF/plexus/components.xml | 24 +- .../cat/build/ComponentsConfigurator.java | 6 +- .../cat/build/TaskComponentConfigurator.java | 6 +- .../cat/report/page/AbstractReportModel.java | 15 +- .../report/page/cross/CrossMethodVisitor.java | 10 +- .../cat/report/page/cross/Handler.java | 22 +- .../report/page/cross/display/HostInfo.java | 10 +- .../report/page/cross/display/MethodInfo.java | 10 +- .../page/cross/display/ProjectInfo.java | 10 +- .../report/page/externalError/Handler.java | 6 +- .../task/service/ServiceReportBuilder.java | 8 +- .../utilization/UtilizationReportBuilder.java | 14 +- .../resources/META-INF/plexus/components.xml | 54 ++-- .../task/service/ServiceBuilderTest.java | 18 +- .../utilization/UtilizationBuilderTest.java | 18 +- 26 files changed, 492 insertions(+), 477 deletions(-) delete mode 100644 cat-core/src/main/java/com/dianping/cat/DomainManager.java diff --git a/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java b/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java index 7fc84ff01..00c7fb815 100644 --- a/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java +++ b/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/build/ComponentsConfigurator.java @@ -8,7 +8,6 @@ import org.unidal.initialization.Module; import org.unidal.lookup.configuration.AbstractResourceConfigurator; import org.unidal.lookup.configuration.Component; -import com.dianping.cat.DomainManager; import com.dianping.cat.ServerConfigManager; import com.dianping.cat.analysis.MessageAnalyzer; import com.dianping.cat.consumer.CatConsumerAdvancedModule; @@ -25,9 +24,13 @@ import com.dianping.cat.consumer.metric.MetricAnalyzer; import com.dianping.cat.consumer.metric.MetricConfigManager; import com.dianping.cat.consumer.metric.ProductLineConfigManager; import com.dianping.cat.core.config.ConfigDao; +import com.dianping.cat.core.dal.HostinfoDao; import com.dianping.cat.core.dal.HourlyReportContentDao; import com.dianping.cat.core.dal.HourlyReportDao; +import com.dianping.cat.core.dal.ProjectDao; import com.dianping.cat.service.DefaultReportManager; +import com.dianping.cat.service.HostinfoService; +import com.dianping.cat.service.ProjectService; import com.dianping.cat.service.ReportDelegate; import com.dianping.cat.service.ReportManager; import com.dianping.cat.storage.BucketManager; @@ -81,9 +84,13 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { final List all = new ArrayList(); final String ID = DependencyAnalyzer.ID; + all.add(C(ProjectService.class).req(ProjectDao.class, ServerConfigManager.class)); + all.add(C(HostinfoService.class).req(HostinfoDao.class, ProjectService.class, ServerConfigManager.class)); all.add(C(DatabaseParser.class)); - all.add(C(MessageAnalyzer.class, ID, DependencyAnalyzer.class).is(PER_LOOKUP) // - .req(ReportManager.class, ID).req(ServerConfigManager.class, DomainManager.class, DatabaseParser.class)); + all.add(C(MessageAnalyzer.class, ID, DependencyAnalyzer.class).is(PER_LOOKUP) + // + .req(ReportManager.class, ID) + .req(ServerConfigManager.class, HostinfoService.class, ProjectService.class, DatabaseParser.class)); all.add(C(ReportManager.class, ID, DefaultReportManager.class) // .req(ReportDelegate.class, ID) // .req(BucketManager.class, HourlyReportDao.class, HourlyReportContentDao.class) // diff --git a/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/dependency/DependencyAnalyzer.java b/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/dependency/DependencyAnalyzer.java index f18f2539e..7139866b8 100644 --- a/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/dependency/DependencyAnalyzer.java +++ b/cat-consumer-advanced/src/main/java/com/dianping/cat/consumer/dependency/DependencyAnalyzer.java @@ -9,7 +9,6 @@ import org.codehaus.plexus.logging.LogEnabled; import org.codehaus.plexus.logging.Logger; import org.unidal.lookup.annotation.Inject; -import com.dianping.cat.DomainManager; import com.dianping.cat.ServerConfigManager; import com.dianping.cat.analysis.AbstractMessageAnalyzer; import com.dianping.cat.consumer.dependency.model.entity.Dependency; @@ -21,6 +20,8 @@ import com.dianping.cat.message.Message; import com.dianping.cat.message.Transaction; import com.dianping.cat.message.spi.MessageTree; import com.dianping.cat.service.DefaultReportManager.StoragePolicy; +import com.dianping.cat.service.HostinfoService; +import com.dianping.cat.service.ProjectService; import com.dianping.cat.service.ReportManager; public class DependencyAnalyzer extends AbstractMessageAnalyzer implements LogEnabled { @@ -30,7 +31,10 @@ public class DependencyAnalyzer extends AbstractMessageAnalyzer m_reportManager; @Inject - private DomainManager m_domainManager; + private HostinfoService m_hostinfoService; + + @Inject + private ProjectService m_projectService; @Inject private DatabaseParser m_parser; @@ -142,12 +146,12 @@ public class DependencyAnalyzer extends AbstractMessageAnalyzer + + com.dianping.cat.service.ProjectService + com.dianping.cat.service.ProjectService + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.service.HostinfoService + com.dianping.cat.service.HostinfoService + + + com.dianping.cat.core.dal.HostinfoDao + + + com.dianping.cat.service.ProjectService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.consumer.dependency.DatabaseParser com.dianping.cat.consumer.dependency.DatabaseParser @@ -121,7 +148,10 @@ com.dianping.cat.ServerConfigManager - com.dianping.cat.DomainManager + com.dianping.cat.service.HostinfoService + + + com.dianping.cat.service.ProjectService com.dianping.cat.consumer.dependency.DatabaseParser diff --git a/cat-consumer-advanced/src/test/java/com/dianping/cat/consumer/dependency/Configurator.java b/cat-consumer-advanced/src/test/java/com/dianping/cat/consumer/dependency/Configurator.java index 3a4ae33ce..3a8a10a09 100644 --- a/cat-consumer-advanced/src/test/java/com/dianping/cat/consumer/dependency/Configurator.java +++ b/cat-consumer-advanced/src/test/java/com/dianping/cat/consumer/dependency/Configurator.java @@ -9,9 +9,9 @@ import org.unidal.lookup.configuration.AbstractResourceConfigurator; import org.unidal.lookup.configuration.Component; import com.dianping.cat.Constants; -import com.dianping.cat.DomainManager; import com.dianping.cat.consumer.MockReportManager; import com.dianping.cat.consumer.dependency.model.entity.DependencyReport; +import com.dianping.cat.service.HostinfoService; import com.dianping.cat.service.ReportDelegate; import com.dianping.cat.service.ReportManager; @@ -33,7 +33,7 @@ public class Configurator extends AbstractResourceConfigurator { all.add(C(ReportManager.class, ID, MockDependencyReportManager.class)// .req(ReportDelegate.class, ID)); all.add(C(ReportDelegate.class, ID, ExtendedDependencyDelegate.class)); - all.add(C(DomainManager.class, ExtendedDomainManager.class)); + all.add(C(HostinfoService.class, ExtendedHostinfoService.class)); return all; } @@ -57,12 +57,12 @@ public class Configurator extends AbstractResourceConfigurator { } } - public static class ExtendedDomainManager extends DomainManager { - + public static class ExtendedHostinfoService extends HostinfoService { + @Override - public void initialize() throws InitializationException{ + public void initialize() throws InitializationException { } - + @Override public String queryDomainByIp(String ip) { return "Cat-CatTest"; 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 01054c5a7..b853c8cd8 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 @@ -8,7 +8,6 @@ import org.unidal.initialization.Module; import org.unidal.lookup.configuration.AbstractResourceConfigurator; import org.unidal.lookup.configuration.Component; -import com.dianping.cat.DomainManager; import com.dianping.cat.ServerConfigManager; import com.dianping.cat.analysis.MessageAnalyzer; import com.dianping.cat.analysis.MessageAnalyzerManager; @@ -30,10 +29,14 @@ import com.dianping.cat.consumer.top.TopAnalyzer; import com.dianping.cat.consumer.top.TopDelegate; import com.dianping.cat.consumer.transaction.TransactionAnalyzer; import com.dianping.cat.consumer.transaction.TransactionDelegate; +import com.dianping.cat.core.dal.HostinfoDao; import com.dianping.cat.core.dal.HourlyReportContentDao; import com.dianping.cat.core.dal.HourlyReportDao; +import com.dianping.cat.core.dal.ProjectDao; import com.dianping.cat.message.spi.core.MessageConsumer; import com.dianping.cat.service.DefaultReportManager; +import com.dianping.cat.service.HostinfoService; +import com.dianping.cat.service.ProjectService; import com.dianping.cat.service.ReportDelegate; import com.dianping.cat.service.ReportManager; import com.dianping.cat.statistic.ServerStatisticManager; @@ -124,7 +127,7 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { .req(BucketManager.class, HourlyReportDao.class, HourlyReportContentDao.class) // .config(E("name").value(ID))); all.add(C(ReportDelegate.class, ID, ProblemDelegate.class) // - .req( TaskManager.class, ServerConfigManager.class)); + .req(TaskManager.class, ServerConfigManager.class)); return all; } @@ -133,8 +136,10 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { final List all = new ArrayList(); final String ID = StateAnalyzer.ID; + all.add(C(ProjectService.class).req(ProjectDao.class, ServerConfigManager.class)); + all.add(C(HostinfoService.class).req(HostinfoDao.class, ProjectService.class, ServerConfigManager.class)); all.add(C(MessageAnalyzer.class, ID, StateAnalyzer.class).is(PER_LOOKUP).req(ReportManager.class, ID) - .req(ServerConfigManager.class, DomainManager.class, ServerStatisticManager.class)); + .req(ServerConfigManager.class, HostinfoService.class, ProjectService.class, ServerStatisticManager.class)); all.add(C(ReportManager.class, ID, DefaultReportManager.class) // .req(ReportDelegate.class, ID) // .req(BucketManager.class, HourlyReportDao.class, HourlyReportContentDao.class) // diff --git a/cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateAnalyzer.java b/cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateAnalyzer.java index 4c0cf198e..c8ddb3beb 100644 --- a/cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateAnalyzer.java +++ b/cat-consumer/src/main/java/com/dianping/cat/consumer/state/StateAnalyzer.java @@ -10,7 +10,6 @@ import org.codehaus.plexus.logging.Logger; import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Constants; -import com.dianping.cat.DomainManager; import com.dianping.cat.ServerConfigManager; import com.dianping.cat.analysis.AbstractMessageAnalyzer; import com.dianping.cat.configuration.NetworkInterfaceManager; @@ -22,6 +21,8 @@ import com.dianping.cat.consumer.state.model.entity.StateReport; import com.dianping.cat.core.dal.Hostinfo; import com.dianping.cat.message.spi.MessageTree; import com.dianping.cat.service.DefaultReportManager.StoragePolicy; +import com.dianping.cat.service.HostinfoService; +import com.dianping.cat.service.ProjectService; import com.dianping.cat.service.ReportManager; import com.dianping.cat.statistic.ServerStatistic.Statistic; import com.dianping.cat.statistic.ServerStatisticManager; @@ -36,7 +37,10 @@ public class StateAnalyzer extends AbstractMessageAnalyzer implemen private ServerStatisticManager m_serverStateManager; @Inject - private DomainManager m_domainManager; + private ProjectService m_projectService; + + @Inject + private HostinfoService m_hostinfoService; @Inject private ServerConfigManager m_serverConfigManager; @@ -200,17 +204,17 @@ public class StateAnalyzer extends AbstractMessageAnalyzer implemen machine.findOrCreateProcessDomain(domain).addIp(ip); if (m_serverConfigManager.validateDomain(domain)) { - if (!m_domainManager.containsDomainInCat(domain)) { - boolean insert = m_domainManager.insertDomain(domain); + if (!m_projectService.containsDomainInCat(domain)) { + boolean insert = m_projectService.insertDomain(domain); if (!insert) { m_logger.warn(String.format("Error when insert domain %s info", domain)); } } - Hostinfo info = m_domainManager.queryHostInfoByIp(ip); + Hostinfo info = m_hostinfoService.findByIp(ip); if (info == null) { - m_domainManager.insert(domain, ip); + m_hostinfoService.insert(domain, ip); } else { String oldDomain = info.getDomain(); @@ -220,7 +224,7 @@ public class StateAnalyzer extends AbstractMessageAnalyzer implemen Date lastModifiedDate = info.getLastModifiedDate(); if (lastModifiedDate != null && (current - lastModifiedDate.getTime()) > ONE_HOUR) { - m_domainManager.update(info.getId(), domain, ip); + m_hostinfoService.update(info.getId(), domain, ip); m_logger.info(String.format("old domain is %s , change ip %s to %s", oldDomain, ip, domain)); } } 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 359b9af9e..22064e723 100644 --- a/cat-consumer/src/main/resources/META-INF/plexus/components.xml +++ b/cat-consumer/src/main/resources/META-INF/plexus/components.xml @@ -294,6 +294,33 @@ + + com.dianping.cat.service.ProjectService + com.dianping.cat.service.ProjectService + + + com.dianping.cat.core.dal.ProjectDao + + + com.dianping.cat.ServerConfigManager + + + + + com.dianping.cat.service.HostinfoService + com.dianping.cat.service.HostinfoService + + + com.dianping.cat.core.dal.HostinfoDao + + + com.dianping.cat.service.ProjectService + + + com.dianping.cat.ServerConfigManager + + + com.dianping.cat.analysis.MessageAnalyzer state @@ -308,7 +335,10 @@ com.dianping.cat.ServerConfigManager - com.dianping.cat.DomainManager + com.dianping.cat.service.HostinfoService + + + com.dianping.cat.service.ProjectService com.dianping.cat.statistic.ServerStatisticManager diff --git a/cat-core/src/main/java/com/dianping/cat/DomainManager.java b/cat-core/src/main/java/com/dianping/cat/DomainManager.java deleted file mode 100644 index 312aed2eb..000000000 --- a/cat-core/src/main/java/com/dianping/cat/DomainManager.java +++ /dev/null @@ -1,290 +0,0 @@ -package com.dianping.cat; - -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.regex.Pattern; - -import org.codehaus.plexus.logging.LogEnabled; -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 org.unidal.dal.jdbc.DalException; -import org.unidal.helper.Files; -import org.unidal.helper.Threads; -import org.unidal.helper.Threads.Task; -import org.unidal.lookup.annotation.Inject; -import org.unidal.webres.json.JsonArray; -import org.unidal.webres.json.JsonObject; - -import com.dianping.cat.core.dal.Hostinfo; -import com.dianping.cat.core.dal.Project; -import com.dianping.cat.service.HostinfoService; -import com.dianping.cat.service.ProjectService; -import com.site.lookup.util.StringUtils; - -public class DomainManager implements Initializable, LogEnabled { - - @Inject - private HostinfoService m_hostInfoService; - - @Inject - private ProjectService m_projectService; - - @Inject - private ServerConfigManager m_manager; - - private Map m_ipDomains = new ConcurrentHashMap(); - - private Map m_unknownIps = new ConcurrentHashMap(); - - private Map m_cmdbs = new ConcurrentHashMap(); - - private Set m_domainsInCat = new HashSet(); - - private Map m_ipsInCat = new ConcurrentHashMap(); - - private Logger m_logger; - - private static final String UNKNOWN_IP = "UnknownIp"; - - private static final String UNKNOWN_PROJECT = "UnknownProject"; - - private static final String CMDB_URL = "http://cmdb.dp/cmdb/device/s?q=%s&fl=app&tidy=true"; - - public boolean containsDomainInCat(String domain) { - return m_domainsInCat.contains(domain); - } - - @Override - public void enableLogging(Logger logger) { - m_logger = logger; - } - - @Override - public void initialize() throws InitializationException { - if (!m_manager.isLocalMode()) { - try { - m_ipDomains.put(UNKNOWN_IP, UNKNOWN_PROJECT); - List infos = m_hostInfoService.findAll(); - - for (Hostinfo info : infos) { - m_ipDomains.put(info.getIp(), info.getDomain()); - m_ipsInCat.put(info.getIp(), info); - } - - List projects = m_projectService.findAll(); - for (Project project : projects) { - m_domainsInCat.add(project.getDomain()); - } - } catch (DalException e) { - Cat.logError(e); - } - Threads.forGroup("Cat").start(new ReloadDomainTask()); - } - } - - public boolean insert(String domain, String ip) { - try { - Hostinfo info = m_hostInfoService.createLocal(); - - info.setDomain(domain); - info.setIp(ip); - m_hostInfoService.insert(info); - m_domainsInCat.add(domain); - m_ipsInCat.put(ip, info); - return true; - } catch (DalException e) { - Cat.logError(e); - } - return false; - } - - public boolean insertDomain(String domain) { - Project project = m_projectService.createLocal(); - - project.setDomain(domain); - project.setProjectLine("Default"); - project.setDepartment("Default"); - try { - m_projectService.insert(project); - m_domainsInCat.add(domain); - - return true; - } catch (Exception ex) { - Cat.logError(ex); - } - return false; - } - - public String queryDomainByIp(String ip) { - String project = m_ipDomains.get(ip); - - if (project == null) { - project = m_cmdbs.get(ip); - - if (project == null) { - if (!m_unknownIps.containsKey(ip)) { - m_unknownIps.put(ip, ip); - } - return UNKNOWN_PROJECT; - } - } - return project; - } - - public Hostinfo queryHostInfoByIp(String ip) { - return m_ipsInCat.get(ip); - } - - public String queryHostnameByIp(String ip) { - try { - if (validateIp(ip)) { - Hostinfo info = m_ipsInCat.get(ip); - String hostname = null; - - if (info != null) { - hostname = info.getHostname(); - - if (StringUtils.isNotEmpty(hostname)) { - return hostname; - } - } - info = m_hostInfoService.findByIp(ip); - - if (info != null) { - m_ipsInCat.put(ip, info); - hostname = info.getHostname(); - } - return hostname; - } else { - return null; - } - } catch (Exception e) { - Cat.logError(e); - } - - return null; - } - - public boolean update(int id, String domain, String ip) { - Hostinfo info = m_hostInfoService.createLocal(); - - info.setId(id); - info.setDomain(domain); - info.setIp(ip); - info.setLastModifiedDate(new Date()); - m_hostInfoService.updateHostinfo(info); - m_domainsInCat.add(domain); - m_ipsInCat.put(ip, info); - return true; - } - - private boolean validateIp(String str) { - Pattern pattern = Pattern - .compile("^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])$"); - return pattern.matcher(str).matches(); - } - - public class ReloadDomainTask implements Task { - - private int m_count; - - @Override - public String getName() { - return "Reload-CMDB-Ip-Domain-Info"; - } - - public String parseIp(String content) throws Exception { - JsonObject object = new JsonObject(content); - JsonArray array = object.getJSONArray("app"); - - if (array.length() > 0) { - return array.getString(0); - } - return null; - } - - private void queryFromCMDB() { - Set addedIps = new HashSet(); - for (String ip : m_unknownIps.keySet()) { - try { - String cmdb = String.format(CMDB_URL, ip); - URL url = new URL(cmdb); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - int nRc = conn.getResponseCode(); - - if (nRc == HttpURLConnection.HTTP_OK) { - InputStream input = conn.getInputStream(); - String content = Files.forIO().readFrom(input, "utf-8"); - String domain = parseIp(content.trim()); - - if (domain != null) { - m_cmdbs.put(ip, domain); - addedIps.add(ip); - } - } - } catch (Exception e) { - Cat.logError(e); - } - - for (String temp : addedIps) { - m_unknownIps.remove(temp); - } - } - } - - private void queryFromDatabase() { - Set addIps = new HashSet(); - for (String ip : m_unknownIps.keySet()) { - try { - Hostinfo hostinfo = m_hostInfoService.findByIp(ip); - - addIps.add(hostinfo.getIp()); - m_ipDomains.put(hostinfo.getIp(), hostinfo.getDomain()); - m_domainsInCat.add(hostinfo.getDomain()); - } catch (Exception e) { - // ignore - } - } - for (String ip : addIps) { - m_unknownIps.remove(ip); - } - } - - @Override - public void run() { - boolean active = true; - - while (active) { - try { - m_count++; - queryFromDatabase(); - queryFromCMDB(); - if (m_count % 1000 == 0 && m_unknownIps.size() > 0) { - m_logger.error(String.format("can't get domain info from cmdb, ip: %s", m_unknownIps.keySet() - .toString())); - } - } catch (Throwable e) { - Cat.logError(e); - } - try { - Thread.sleep(2 * 60 * 1000); - } catch (InterruptedException e) { - active = false; - } - } - } - - @Override - public void shutdown() { - } - } - -} 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 d4a4939a8..7d05050d0 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 @@ -8,7 +8,6 @@ import org.unidal.lookup.configuration.AbstractResourceConfigurator; import org.unidal.lookup.configuration.Component; import com.dianping.cat.CatCoreModule; -import com.dianping.cat.DomainManager; import com.dianping.cat.ServerConfigManager; import com.dianping.cat.analysis.DefaultMessageAnalyzerManager; import com.dianping.cat.analysis.MessageAnalyzerManager; @@ -46,12 +45,8 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { public List defineComponents() { List all = new ArrayList(); - all.add(C(DomainManager.class)// - .req(ServerConfigManager.class, ProjectService.class, HostinfoService.class)); - - all.add(C(ProjectService.class).req(ProjectDao.class)); - - all.add(C(HostinfoService.class).req(HostinfoDao.class)); + all.add(C(ProjectService.class).req(ProjectDao.class, ServerConfigManager.class)); + all.add(C(HostinfoService.class).req(HostinfoDao.class, ProjectService.class, ServerConfigManager.class)); all.add(C(TaskManager.class).req(TaskDao.class)); all.add(C(ServerConfigManager.class)); diff --git a/cat-core/src/main/java/com/dianping/cat/service/HostinfoService.java b/cat-core/src/main/java/com/dianping/cat/service/HostinfoService.java index 1b7b24fc5..0542f194a 100644 --- a/cat-core/src/main/java/com/dianping/cat/service/HostinfoService.java +++ b/cat-core/src/main/java/com/dianping/cat/service/HostinfoService.java @@ -1,32 +1,65 @@ package com.dianping.cat.service; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.util.ArrayList; +import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; +import org.codehaus.plexus.logging.LogEnabled; +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 org.unidal.dal.jdbc.DalException; +import org.unidal.helper.Files; import org.unidal.helper.Threads; import org.unidal.helper.Threads.Task; import org.unidal.lookup.annotation.Inject; +import org.unidal.webres.json.JsonArray; +import org.unidal.webres.json.JsonObject; import com.dianping.cat.Cat; +import com.dianping.cat.ServerConfigManager; import com.dianping.cat.core.dal.Hostinfo; import com.dianping.cat.core.dal.HostinfoDao; import com.dianping.cat.core.dal.HostinfoEntity; +import com.site.lookup.util.StringUtils; -public class HostinfoService implements Initializable { +public class HostinfoService implements Initializable, LogEnabled { @Inject private HostinfoDao m_hostinfoDao; + @Inject + private ServerConfigManager m_manager; + + @Inject + private ProjectService m_projectService; + + private Map m_ipDomains = new ConcurrentHashMap(); + + private Map m_unknownIps = new ConcurrentHashMap(); + + private Map m_cmdbs = new ConcurrentHashMap(); + private Map m_hostinfos = new ConcurrentHashMap(); + private static final String UNKNOWN_IP = "UnknownIp"; + + private static final String UNKNOWN_PROJECT = "UnknownProject"; + + private static final String CMDB_URL = "http://cmdb.dp/cmdb/device/s?q=%s&fl=app&tidy=true"; + + private Logger m_logger; + public Hostinfo createLocal() { return m_hostinfoDao.createLocal(); } @@ -55,12 +88,27 @@ public class HostinfoService implements Initializable { } } + @Override + public void enableLogging(Logger logger) { + m_logger = logger; + } + public List findAll() throws DalException { return new ArrayList(m_hostinfos.values()); } public Hostinfo findByIp(String ip) { - return m_hostinfos.get(ip); + Hostinfo hostinfo = m_hostinfos.get(ip); + + if (hostinfo != null) { + return hostinfo; + } else { + try { + return m_hostinfoDao.findByIp(ip, HostinfoEntity.READSET_FULL); + } catch (DalException e) { + return new Hostinfo(); + } + } } public Hostinfo findHostinfo(int id) { @@ -74,12 +122,91 @@ public class HostinfoService implements Initializable { } } - return new Hostinfo(); + try { + return m_hostinfoDao.findByPK(id, HostinfoEntity.READSET_FULL); + } catch (DalException e) { + return new Hostinfo(); + } } @Override public void initialize() throws InitializationException { - Threads.forGroup("Cat").start(new HostinfoReloadTask()); + if (!m_manager.isLocalMode()) { + m_ipDomains.put(UNKNOWN_IP, UNKNOWN_PROJECT); + Threads.forGroup("Cat").start(new ReloadDomainTask()); + } + } + + public boolean insert(Hostinfo hostinfo) throws DalException { + m_hostinfos.put(hostinfo.getIp(), hostinfo); + + int result = m_hostinfoDao.insert(hostinfo); + if (result == 1) { + return true; + } else { + return false; + } + } + + public boolean insert(String domain, String ip) { + try { + Hostinfo info = createLocal(); + + info.setDomain(domain); + info.setIp(ip); + insert(info); + m_hostinfos.put(ip, info); + return true; + } catch (DalException e) { + Cat.logError(e); + } + return false; + } + + public String queryDomainByIp(String ip) { + String project = m_ipDomains.get(ip); + + if (project == null) { + project = m_cmdbs.get(ip); + + if (project == null) { + if (!m_unknownIps.containsKey(ip)) { + m_unknownIps.put(ip, ip); + } + return UNKNOWN_PROJECT; + } + } + return project; + } + + public String queryHostnameByIp(String ip) { + try { + if (validateIp(ip)) { + Hostinfo info = m_hostinfos.get(ip); + String hostname = null; + + if (info != null) { + hostname = info.getHostname(); + + if (StringUtils.isNotEmpty(hostname)) { + return hostname; + } + } + info = findByIp(ip); + + if (info != null) { + m_hostinfos.put(ip, info); + hostname = info.getHostname(); + } + return hostname; + } else { + return null; + } + } catch (Exception e) { + Cat.logError(e); + } + + return null; } public void refresh() { @@ -89,6 +216,7 @@ public class HostinfoService implements Initializable { synchronized (this) { for (Hostinfo hostinfo : hostinfos) { m_hostinfos.put(hostinfo.getIp(), hostinfo); + m_ipDomains.put(hostinfo.getIp(), hostinfo.getDomain()); } } } catch (DalException e) { @@ -96,15 +224,16 @@ public class HostinfoService implements Initializable { } } - public boolean insert(Hostinfo hostinfo) throws DalException { - m_hostinfos.put(hostinfo.getIp(), hostinfo); + public boolean update(int id, String domain, String ip) { + Hostinfo info = createLocal(); - int result = m_hostinfoDao.insert(hostinfo); - if (result == 1) { - return true; - } else { - return false; - } + info.setId(id); + info.setDomain(domain); + info.setIp(ip); + info.setLastModifiedDate(new Date()); + updateHostinfo(info); + m_hostinfos.put(ip, info); + return true; } public boolean updateHostinfo(Hostinfo hostinfo) { @@ -119,7 +248,77 @@ public class HostinfoService implements Initializable { } } - public class HostinfoReloadTask implements Task { + private boolean validateIp(String str) { + Pattern pattern = Pattern + .compile("^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]|[*])$"); + return pattern.matcher(str).matches(); + } + + public class ReloadDomainTask implements Task { + + private int m_count; + + @Override + public String getName() { + return "Reload-CMDB-Ip-Domain-Info"; + } + + public String parseIp(String content) throws Exception { + JsonObject object = new JsonObject(content); + JsonArray array = object.getJSONArray("app"); + + if (array.length() > 0) { + return array.getString(0); + } + return null; + } + + private void queryFromCMDB() { + Set addedIps = new HashSet(); + for (String ip : m_unknownIps.keySet()) { + try { + String cmdb = String.format(CMDB_URL, ip); + URL url = new URL(cmdb); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + int nRc = conn.getResponseCode(); + + if (nRc == HttpURLConnection.HTTP_OK) { + InputStream input = conn.getInputStream(); + String content = Files.forIO().readFrom(input, "utf-8"); + String domain = parseIp(content.trim()); + + if (domain != null) { + m_cmdbs.put(ip, domain); + addedIps.add(ip); + } + } + } catch (Exception e) { + Cat.logError(e); + } + + for (String temp : addedIps) { + m_unknownIps.remove(temp); + } + } + } + + private void queryFromDatabase() { + Set addIps = new HashSet(); + for (String ip : m_unknownIps.keySet()) { + try { + Hostinfo hostinfo = findByIp(ip); + + addIps.add(hostinfo.getIp()); + m_ipDomains.put(hostinfo.getIp(), hostinfo.getDomain()); + m_projectService.addDomain(hostinfo.getDomain()); + } catch (Exception e) { + // ignore + } + } + for (String ip : addIps) { + m_unknownIps.remove(ip); + } + } @Override public void run() { @@ -127,30 +326,29 @@ public class HostinfoService implements Initializable { while (active) { try { + m_count++; + queryFromDatabase(); + queryFromCMDB(); + if (m_count % 1000 == 0 && m_unknownIps.size() > 0) { + m_logger.error(String.format("can't get domain info from cmdb, ip: %s", m_unknownIps.keySet() + .toString())); + } + refresh(); - } catch (Exception ex) { - Cat.logError("reload hostinfo error", ex); + } catch (Throwable e) { + Cat.logError(e); } - try { - TimeUnit.MINUTES.sleep(1); - } catch (InterruptedException ex) { - Cat.logError("reload hostinfo stop", ex); + Thread.sleep(2 * 60 * 1000); + } catch (InterruptedException e) { active = false; } } - - } - - @Override - public String getName() { - return "hostinfo-reload"; } @Override public void shutdown() { } - } } diff --git a/cat-core/src/main/java/com/dianping/cat/service/ProjectService.java b/cat-core/src/main/java/com/dianping/cat/service/ProjectService.java index f9ee49f8e..07d7bdfbc 100644 --- a/cat-core/src/main/java/com/dianping/cat/service/ProjectService.java +++ b/cat-core/src/main/java/com/dianping/cat/service/ProjectService.java @@ -1,10 +1,12 @@ package com.dianping.cat.service; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -16,6 +18,7 @@ import org.unidal.helper.Threads.Task; import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; +import com.dianping.cat.ServerConfigManager; import com.dianping.cat.core.dal.Project; import com.dianping.cat.core.dal.ProjectDao; import com.dianping.cat.core.dal.ProjectEntity; @@ -25,12 +28,25 @@ public class ProjectService implements Initializable { @Inject private ProjectDao m_projectDao; + @Inject + private ServerConfigManager m_manager; + private Map m_projects = new ConcurrentHashMap(); + private Set m_domains = new HashSet(); + + public void addDomain(String domain) { + m_domains.add(domain); + } + public Project createLocal() { return m_projectDao.createLocal(); } + public boolean containsDomainInCat(String domain) { + return m_domains.contains(domain); + } + public boolean deleteProject(Project project) { int id = project.getId(); Iterator> iterator = m_projects.entrySet().iterator(); @@ -61,7 +77,17 @@ public class ProjectService implements Initializable { } public Project findByDomain(String domainName) { - return m_projects.get(domainName); + Project project = m_projects.get(domainName); + + if (project != null) { + return project; + } else { + try { + return m_projectDao.findByDomain(domainName, ProjectEntity.READSET_FULL); + } catch (DalException e) { + return new Project(); + } + } } public Project findProject(int id) { @@ -75,12 +101,19 @@ public class ProjectService implements Initializable { return pro; } } - return new Project(); + + try { + return m_projectDao.findByPK(id, ProjectEntity.READSET_FULL); + } catch (DalException e) { + return new Project(); + } } @Override public void initialize() throws InitializationException { - Threads.forGroup("Cat").start(new ProjectReloadTask()); + if (!m_manager.isLocalMode()) { + Threads.forGroup("Cat").start(new ProjectReloadTask()); + } } public void refresh() { @@ -89,6 +122,7 @@ public class ProjectService implements Initializable { synchronized (this) { for (Project project : projects) { + m_domains.add(project.getDomain()); m_projects.put(project.getDomain(), project); } } @@ -108,6 +142,23 @@ public class ProjectService implements Initializable { } } + public boolean insertDomain(String domain) { + Project project = createLocal(); + + project.setDomain(domain); + project.setProjectLine("Default"); + project.setDepartment("Default"); + try { + insert(project); + m_domains.add(domain); + + return true; + } catch (Exception ex) { + Cat.logError(ex); + } + return false; + } + public boolean updateProject(Project project) { m_projects.put(project.getDomain(), project); 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 f49d1b30d..786b403c8 100644 --- a/cat-core/src/main/resources/META-INF/plexus/components.xml +++ b/cat-core/src/main/resources/META-INF/plexus/components.xml @@ -1,20 +1,5 @@ - - com.dianping.cat.DomainManager - com.dianping.cat.DomainManager - - - com.dianping.cat.ServerConfigManager - - - com.dianping.cat.service.ProjectService - - - com.dianping.cat.service.HostinfoService - - - com.dianping.cat.service.ProjectService com.dianping.cat.service.ProjectService @@ -22,6 +7,9 @@ com.dianping.cat.core.dal.ProjectDao + + com.dianping.cat.ServerConfigManager + @@ -31,6 +19,12 @@ com.dianping.cat.core.dal.HostinfoDao + + com.dianping.cat.service.ProjectService + + + com.dianping.cat.ServerConfigManager + 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 a3be51abe..1d86cffda 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 @@ -117,13 +117,13 @@ import com.dianping.cat.system.config.AlertPolicyManager; import com.dianping.cat.system.config.BugConfigManager; import com.dianping.cat.system.config.BusinessRuleConfigManager; import com.dianping.cat.system.config.ConfigReloadTask; -import com.dianping.cat.system.config.ScheduledJob; import com.dianping.cat.system.config.DomainGroupConfigManager; import com.dianping.cat.system.config.ExceptionConfigManager; import com.dianping.cat.system.config.MetricGroupConfigManager; import com.dianping.cat.system.config.NetGraphConfigManager; import com.dianping.cat.system.config.NetworkRuleConfigManager; import com.dianping.cat.system.config.RouterConfigManager; +import com.dianping.cat.system.config.ScheduledJob; import com.dianping.cat.system.config.SystemRuleConfigManager; import com.dianping.cat.system.config.ThirdPartyConfigManager; import com.dianping.cat.system.tool.DefaultMailImpl; @@ -141,8 +141,8 @@ public class ComponentsConfigurator extends AbstractResourceConfigurator { all.add(C(DefaultMailImpl.class).req(ServerConfigManager.class)); all.add(C(DataChecker.class, DefaultDataChecker.class)); all.add(C(RemoteMetricReportService.class).req(ServerConfigManager.class)); - all.add(C(ProjectService.class).req(ProjectDao.class)); - all.add(C(HostinfoService.class).req(HostinfoDao.class)); + all.add(C(ProjectService.class).req(ProjectDao.class, ServerConfigManager.class)); + all.add(C(HostinfoService.class).req(HostinfoDao.class, ProjectService.class, ServerConfigManager.class)); all.add(C(Contactor.class, BusinessContactor.ID, BusinessContactor.class).req(ProductLineConfigManager.class, AlertConfigManager.class)); diff --git a/cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java b/cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java index a7f20679f..48d30bc76 100644 --- a/cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java +++ b/cat-home/src/main/java/com/dianping/cat/build/TaskComponentConfigurator.java @@ -6,7 +6,6 @@ import java.util.List; import org.unidal.lookup.configuration.AbstractResourceConfigurator; import org.unidal.lookup.configuration.Component; -import com.dianping.cat.DomainManager; import com.dianping.cat.ServerConfigManager; import com.dianping.cat.consumer.metric.MetricConfigManager; import com.dianping.cat.consumer.metric.ProductLineConfigManager; @@ -51,6 +50,7 @@ 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.task.utilization.UtilizationReportBuilder; +import com.dianping.cat.service.HostinfoService; import com.dianping.cat.system.config.ExceptionConfigManager; import com.dianping.cat.system.config.NetGraphConfigManager; import com.dianping.cat.system.config.RouterConfigManager; @@ -101,7 +101,7 @@ public class TaskComponentConfigurator extends AbstractResourceConfigurator { all.add(C(ReportTaskBuilder.class, BugReportBuilder.ID, BugReportBuilder.class).req(ReportServiceManager.class)); all.add(C(ReportTaskBuilder.class, ServiceReportBuilder.ID, ServiceReportBuilder.class).req(ReportServiceManager.class, - DomainManager.class)); + HostinfoService.class)); all.add(C(ReportTaskBuilder.class, MatrixReportBuilder.ID, MatrixReportBuilder.class).req(ReportServiceManager.class)); @@ -118,7 +118,7 @@ public class TaskComponentConfigurator extends AbstractResourceConfigurator { all.add(C(ReportTaskBuilder.class, HeavyReportBuilder.ID, HeavyReportBuilder.class).req(ReportServiceManager.class)); all.add(C(ReportTaskBuilder.class, UtilizationReportBuilder.ID, UtilizationReportBuilder.class).req( - ReportServiceManager.class, TransactionMergeManager.class, ServerConfigManager.class, DomainManager.class)); + ReportServiceManager.class, TransactionMergeManager.class, ServerConfigManager.class, HostinfoService.class)); all.add(C(ReportTaskBuilder.class, DependencyReportBuilder.ID, DependencyReportBuilder.class).req( ReportServiceManager.class, TopologyGraphBuilder.class, TopologyGraphDao.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 da6413658..9d47552cf 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 @@ -15,16 +15,17 @@ import org.unidal.web.mvc.ActionContext; import org.unidal.web.mvc.ViewModel; import com.dianping.cat.Cat; -import com.dianping.cat.DomainManager; import com.dianping.cat.core.dal.Project; import com.dianping.cat.report.ReportPage; import com.dianping.cat.report.view.DomainNavManager; import com.dianping.cat.report.view.DomainNavManager.Department; import com.dianping.cat.report.view.HistoryNav; import com.dianping.cat.report.view.UrlNav; +import com.dianping.cat.service.HostinfoService; public abstract class AbstractReportModel> extends ViewModel { + private Date m_creatTime; private String m_customDate; @@ -45,13 +46,13 @@ public abstract class AbstractReportModel getIps() { return new ArrayList(); }; @@ -150,7 +151,7 @@ public abstract class AbstractReportModel ipToHostname = new HashMap(); for (String ip : ips) { - String hostname = m_domainManager.queryHostnameByIp(ip); + String hostname = m_hostinfoService.queryHostnameByIp(ip); ipToHostname.put(ip, hostname); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/cross/CrossMethodVisitor.java b/cat-home/src/main/java/com/dianping/cat/report/page/cross/CrossMethodVisitor.java index aa691d1bf..ac63d0e90 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/cross/CrossMethodVisitor.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/cross/CrossMethodVisitor.java @@ -1,10 +1,10 @@ package com.dianping.cat.report.page.cross; -import com.dianping.cat.DomainManager; import com.dianping.cat.consumer.cross.model.entity.Name; import com.dianping.cat.consumer.cross.model.entity.Remote; import com.dianping.cat.consumer.cross.model.transform.BaseVisitor; import com.dianping.cat.report.page.cross.display.MethodQueryInfo; +import com.dianping.cat.service.HostinfoService; public class CrossMethodVisitor extends BaseVisitor { @@ -16,15 +16,15 @@ public class CrossMethodVisitor extends BaseVisitor { private MethodQueryInfo m_info = new MethodQueryInfo(); - private DomainManager m_manager; + private HostinfoService m_hostinfoService; - public CrossMethodVisitor(String method, DomainManager manager) { + public CrossMethodVisitor(String method, HostinfoService hostinfoService) { if (method == null) { m_method = ""; } else { m_method = method; } - m_manager = manager; + m_hostinfoService = hostinfoService; } public MethodQueryInfo getInfo() { @@ -34,7 +34,7 @@ public class CrossMethodVisitor extends BaseVisitor { @Override public void visitName(Name name) { String methodName = name.getId(); - String domain = m_manager.queryDomainByIp(m_remoteIp); + String domain = m_hostinfoService.queryDomainByIp(m_remoteIp); String ip = m_remoteIp; if (ip.indexOf(":") > -1) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/cross/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/cross/Handler.java index 9f1973e5a..f62b97946 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/cross/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/cross/Handler.java @@ -15,7 +15,6 @@ import org.unidal.web.mvc.annotation.OutboundActionMeta; import org.unidal.web.mvc.annotation.PayloadMeta; import com.dianping.cat.Constants; -import com.dianping.cat.DomainManager; import com.dianping.cat.consumer.cross.CrossAnalyzer; import com.dianping.cat.consumer.cross.model.entity.CrossReport; import com.dianping.cat.helper.TimeUtil; @@ -27,6 +26,7 @@ import com.dianping.cat.report.page.cross.display.ProjectInfo; import com.dianping.cat.report.page.cross.display.TypeDetailInfo; import com.dianping.cat.report.page.model.spi.ModelService; import com.dianping.cat.report.service.ReportServiceManager; +import com.dianping.cat.service.HostinfoService; import com.dianping.cat.service.ModelPeriod; import com.dianping.cat.service.ModelRequest; import com.dianping.cat.service.ModelResponse; @@ -42,7 +42,7 @@ public class Handler implements PageHandler { private PayloadNormalizer m_normalizePayload; @Inject - private DomainManager m_domainManager; + private HostinfoService m_hostinfoService; @Inject(type = ModelService.class, value = CrossAnalyzer.ID) private ModelService m_service; @@ -51,7 +51,7 @@ public class Handler implements PageHandler { CrossReport projectReport = getHourlyReport(domain, period, date, Constants.ALL); ProjectInfo projectInfo = new ProjectInfo(duration); - projectInfo.setDomainManager(m_domainManager); + projectInfo.setHostinfoService(m_hostinfoService); projectInfo.setClientIp(Constants.ALL); projectInfo.visitCrossReport(projectReport); @@ -62,7 +62,7 @@ public class Handler implements PageHandler { CrossReport projectReport = getSummarizeReport(domain, start, end); ProjectInfo projectInfo = new ProjectInfo(end.getTime() - start.getTime()); - projectInfo.setDomainManager(m_domainManager); + projectInfo.setHostinfoService(m_hostinfoService); projectInfo.setClientIp(Constants.ALL); projectInfo.visitCrossReport(projectReport); return projectInfo; @@ -139,7 +139,7 @@ public class Handler implements PageHandler { CrossReport projectReport = getHourlyReport(payload); ProjectInfo projectInfo = new ProjectInfo(payload.getHourDuration()); - projectInfo.setDomainManager(m_domainManager); + projectInfo.setHostinfoService(m_hostinfoService); projectInfo.setClientIp(model.getIpAddress()).setCallSortBy(model.getCallSort()) .setServiceSortBy(model.getServiceSort()); projectInfo.visitCrossReport(projectReport); @@ -171,7 +171,7 @@ public class Handler implements PageHandler { CrossReport hostReport = getHourlyReport(payload); HostInfo hostInfo = new HostInfo(payload.getHourDuration()); - hostInfo.setDomainManager(m_domainManager); + hostInfo.setHostinfoService(m_hostinfoService); hostInfo.setClientIp(model.getIpAddress()).setCallSortBy(model.getCallSort()) .setServiceSortBy(model.getServiceSort()); hostInfo.setProjectName(payload.getProjectName()); @@ -183,7 +183,7 @@ public class Handler implements PageHandler { CrossReport methodReport = getHourlyReport(payload); MethodInfo methodInfo = new MethodInfo(payload.getHourDuration()); - methodInfo.setDomainManager(m_domainManager); + methodInfo.setHostinfoService(m_hostinfoService); methodInfo.setClientIp(model.getIpAddress()).setCallSortBy(model.getCallSort()) .setServiceSortBy(model.getServiceSort()).setRemoteProject(payload.getProjectName()); methodInfo.setRemoteIp(payload.getRemoteIp()).setQuery(model.getQueryName()); @@ -195,7 +195,7 @@ public class Handler implements PageHandler { CrossReport historyProjectReport = getSummarizeReport(payload); ProjectInfo historyProjectInfo = new ProjectInfo(historyTime); - historyProjectInfo.setDomainManager(m_domainManager); + historyProjectInfo.setHostinfoService(m_hostinfoService); historyProjectInfo.setClientIp(model.getIpAddress()).setCallSortBy(model.getCallSort()) .setServiceSortBy(model.getServiceSort()); historyProjectInfo.visitCrossReport(historyProjectReport); @@ -228,7 +228,7 @@ public class Handler implements PageHandler { CrossReport historyHostReport = getSummarizeReport(payload); HostInfo historyHostInfo = new HostInfo(historyTime); - historyHostInfo.setDomainManager(m_domainManager); + historyHostInfo.setHostinfoService(m_hostinfoService); historyHostInfo.setClientIp(model.getIpAddress()).setCallSortBy(model.getCallSort()) .setServiceSortBy(model.getServiceSort()); historyHostInfo.setProjectName(payload.getProjectName()); @@ -240,7 +240,7 @@ public class Handler implements PageHandler { CrossReport historyMethodReport = getSummarizeReport(payload); MethodInfo historyMethodInfo = new MethodInfo(historyTime); - historyMethodInfo.setDomainManager(m_domainManager); + historyMethodInfo.setHostinfoService(m_hostinfoService); historyMethodInfo.setClientIp(model.getIpAddress()).setCallSortBy(model.getCallSort()) .setServiceSortBy(model.getServiceSort()).setRemoteProject(payload.getProjectName()); historyMethodInfo.setRemoteIp(payload.getRemoteIp()).setQuery(model.getQueryName()); @@ -251,7 +251,7 @@ public class Handler implements PageHandler { case METHOD_QUERY: String method = payload.getMethod(); - CrossMethodVisitor info = new CrossMethodVisitor(method, m_domainManager); + CrossMethodVisitor info = new CrossMethodVisitor(method, m_hostinfoService); String reportType = payload.getReportType(); CrossReport queryReport = null; diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/HostInfo.java b/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/HostInfo.java index 5381353fc..8b9ece4c8 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/HostInfo.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/HostInfo.java @@ -7,12 +7,12 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import com.dianping.cat.DomainManager; import com.dianping.cat.consumer.cross.model.entity.CrossReport; import com.dianping.cat.consumer.cross.model.entity.Local; import com.dianping.cat.consumer.cross.model.entity.Remote; import com.dianping.cat.consumer.cross.model.entity.Type; import com.dianping.cat.consumer.cross.model.transform.BaseVisitor; +import com.dianping.cat.service.HostinfoService; public class HostInfo extends BaseVisitor { @@ -34,7 +34,7 @@ public class HostInfo extends BaseVisitor { private String m_serviceSortBy = "Avg"; - private DomainManager m_domainManager; + private HostinfoService m_hostinfoService; public HostInfo(long reportDuration) { m_reportDuration = reportDuration; @@ -110,7 +110,7 @@ public class HostInfo extends BaseVisitor { if (ip.indexOf(':') > 0) { ip = ip.substring(0, ip.indexOf(':')); } - String domain = m_domainManager.queryDomainByIp(ip); + String domain = m_hostinfoService.queryDomainByIp(ip); if (projectName.equalsIgnoreCase(domain)) { return true; } else { @@ -128,8 +128,8 @@ public class HostInfo extends BaseVisitor { return this; } - public void setDomainManager(DomainManager domainManager) { - m_domainManager = domainManager; + public void setHostinfoService(HostinfoService hostinfoService) { + m_hostinfoService = hostinfoService; } public HostInfo setProjectName(String projectName) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/MethodInfo.java b/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/MethodInfo.java index 87931a096..610063727 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/MethodInfo.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/MethodInfo.java @@ -9,12 +9,12 @@ import java.util.Map; import org.apache.commons.lang.StringUtils; -import com.dianping.cat.DomainManager; import com.dianping.cat.consumer.cross.model.entity.Local; import com.dianping.cat.consumer.cross.model.entity.Name; import com.dianping.cat.consumer.cross.model.entity.Remote; import com.dianping.cat.consumer.cross.model.entity.Type; import com.dianping.cat.consumer.cross.model.transform.BaseVisitor; +import com.dianping.cat.service.HostinfoService; public class MethodInfo extends BaseVisitor { @@ -42,7 +42,7 @@ public class MethodInfo extends BaseVisitor { private String m_serviceSortBy = "Avg"; - private DomainManager m_domainManager; + private HostinfoService m_hostinfoService; public MethodInfo(long reportDuration) { m_reportDuration = reportDuration; @@ -129,7 +129,7 @@ public class MethodInfo extends BaseVisitor { if (ip.indexOf(':') > 0) { ip = ip.substring(0, ip.indexOf(':')); } - String domain = m_domainManager.queryDomainByIp(ip); + String domain = m_hostinfoService.queryDomainByIp(ip); if (projectName.equalsIgnoreCase(domain)) { return true; @@ -150,8 +150,8 @@ public class MethodInfo extends BaseVisitor { return this; } - public void setDomainManager(DomainManager domainManager) { - m_domainManager = domainManager; + public void setHostinfoService(HostinfoService hostinfoService) { + m_hostinfoService = hostinfoService; } public MethodInfo setQuery(String query) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/ProjectInfo.java b/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/ProjectInfo.java index fb64e1582..fa168e531 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/ProjectInfo.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/cross/display/ProjectInfo.java @@ -9,12 +9,12 @@ import java.util.Map; import org.apache.commons.lang.StringUtils; -import com.dianping.cat.DomainManager; import com.dianping.cat.consumer.cross.model.entity.CrossReport; import com.dianping.cat.consumer.cross.model.entity.Local; import com.dianping.cat.consumer.cross.model.entity.Remote; import com.dianping.cat.consumer.cross.model.entity.Type; import com.dianping.cat.consumer.cross.model.transform.BaseVisitor; +import com.dianping.cat.service.HostinfoService; public class ProjectInfo extends BaseVisitor { @@ -38,7 +38,7 @@ public class ProjectInfo extends BaseVisitor { private String m_serviceSortBy = "Avg"; - private DomainManager m_domainManager; + private HostinfoService m_hostinfoService; public ProjectInfo(long reportDuration) { m_reportDuration = reportDuration; @@ -113,7 +113,7 @@ public class ProjectInfo extends BaseVisitor { if (ip.indexOf(':') > 0) { ip = ip.substring(0, ip.indexOf(':')); } - return m_domainManager.queryDomainByIp(ip); + return m_hostinfoService.queryDomainByIp(ip); } public long getReportDuration() { @@ -136,8 +136,8 @@ public class ProjectInfo extends BaseVisitor { return this; } - public void setDomainManager(DomainManager domainManager) { - m_domainManager = domainManager; + public void setHostinfoService(HostinfoService hostinfoService) { + m_hostinfoService = hostinfoService; } public ProjectInfo setServiceSortBy(String serviceSortBy) { diff --git a/cat-home/src/main/java/com/dianping/cat/report/page/externalError/Handler.java b/cat-home/src/main/java/com/dianping/cat/report/page/externalError/Handler.java index 385aec708..111fd2ffd 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/page/externalError/Handler.java +++ b/cat-home/src/main/java/com/dianping/cat/report/page/externalError/Handler.java @@ -15,9 +15,9 @@ import org.unidal.web.mvc.annotation.OutboundActionMeta; import org.unidal.web.mvc.annotation.PayloadMeta; import com.dianping.cat.Cat; -import com.dianping.cat.DomainManager; import com.dianping.cat.home.dal.report.Event; import com.dianping.cat.report.ReportPage; +import com.dianping.cat.service.HostinfoService; public class Handler implements PageHandler { @Inject @@ -27,7 +27,7 @@ public class Handler implements PageHandler { private EventCollectManager m_errorCollectManager; @Inject - private DomainManager m_domainManager; + private HostinfoService m_hostinfoService; private SimpleDateFormat m_sdf = new SimpleDateFormat("yyyyMMddHHmmss"); @@ -56,7 +56,7 @@ public class Handler implements PageHandler { if (type == EventCollectManager.DB_ERROR) { event.setDomain(payload.getDatabase()); } else { - String domain = m_domainManager.queryDomainByIp(ip); + String domain = m_hostinfoService.queryDomainByIp(ip); event.setDomain(domain); } diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/service/ServiceReportBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/task/service/ServiceReportBuilder.java index 72b587ce8..a703c1c37 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/service/ServiceReportBuilder.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/service/ServiceReportBuilder.java @@ -10,7 +10,6 @@ import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; import com.dianping.cat.Constants; -import com.dianping.cat.DomainManager; import com.dianping.cat.configuration.NetworkInterfaceManager; import com.dianping.cat.consumer.cross.CrossAnalyzer; import com.dianping.cat.consumer.cross.model.entity.CrossReport; @@ -27,16 +26,17 @@ import com.dianping.cat.report.page.cross.display.TypeDetailInfo; import com.dianping.cat.report.service.ReportServiceManager; import com.dianping.cat.report.task.TaskHelper; import com.dianping.cat.report.task.spi.ReportTaskBuilder; +import com.dianping.cat.service.HostinfoService; public class ServiceReportBuilder implements ReportTaskBuilder { - + public static final String ID = Constants.REPORT_SERVICE; @Inject protected ReportServiceManager m_reportService; @Inject - private DomainManager m_domainManager; + private HostinfoService m_hostinfoService; Map stat = new HashMap(); @@ -67,7 +67,7 @@ public class ServiceReportBuilder implements ReportTaskBuilder { CrossReport crossReport = m_reportService.queryCrossReport(domainName, start, end); ProjectInfo projectInfo = new ProjectInfo(TimeUtil.ONE_HOUR); - projectInfo.setDomainManager(m_domainManager); + projectInfo.setHostinfoService(m_hostinfoService); projectInfo.setClientIp(Constants.ALL); projectInfo.visitCrossReport(crossReport); Collection callInfos = projectInfo.getCallProjectsInfo(); diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/utilization/UtilizationReportBuilder.java b/cat-home/src/main/java/com/dianping/cat/report/task/utilization/UtilizationReportBuilder.java index 4ad24d619..766aa0194 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/utilization/UtilizationReportBuilder.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/utilization/UtilizationReportBuilder.java @@ -8,7 +8,6 @@ import org.unidal.lookup.annotation.Inject; import com.dianping.cat.Cat; import com.dianping.cat.Constants; -import com.dianping.cat.DomainManager; import com.dianping.cat.ServerConfigManager; import com.dianping.cat.configuration.NetworkInterfaceManager; import com.dianping.cat.consumer.cross.model.entity.CrossReport; @@ -30,9 +29,10 @@ import com.dianping.cat.report.page.transaction.TransactionMergeManager; import com.dianping.cat.report.service.ReportServiceManager; import com.dianping.cat.report.task.TaskHelper; import com.dianping.cat.report.task.spi.ReportTaskBuilder; +import com.dianping.cat.service.HostinfoService; public class UtilizationReportBuilder implements ReportTaskBuilder { - + public static final String ID = Constants.REPORT_UTILIZATION; @Inject @@ -45,14 +45,14 @@ public class UtilizationReportBuilder implements ReportTaskBuilder { private ServerConfigManager m_configManger; @Inject - private DomainManager m_domainManager; + private HostinfoService m_hostinfoService; @Override public boolean buildDailyTask(String name, String domain, Date period) { UtilizationReport utilizationReport = queryHourlyReportsByDuration(name, domain, period, TaskHelper.tomorrowZero(period)); DailyReport report = new DailyReport(); - + report.setContent(""); report.setCreationDate(new Date()); report.setDomain(domain); @@ -78,7 +78,7 @@ public class UtilizationReportBuilder implements ReportTaskBuilder { if (m_configManger.validateDomain(domainName)) { TransactionReport transactionReport = m_reportService.queryTransactionReport(domainName, start, end); int size = transactionReport.getMachines().size(); - + utilizationReport.findOrCreateDomain(domainName).setMachineNumber(size); transactionReport = m_mergeManager.mergerAllIp(transactionReport, Constants.ALL); transactionVisitor.visitTransactionReport(transactionReport); @@ -98,7 +98,7 @@ public class UtilizationReportBuilder implements ReportTaskBuilder { CrossReport crossReport = m_reportService.queryCrossReport(domainName, start, end); ProjectInfo projectInfo = new ProjectInfo(TimeUtil.ONE_HOUR); - projectInfo.setDomainManager(m_domainManager); + projectInfo.setHostinfoService(m_hostinfoService); projectInfo.setClientIp(Constants.ALL); projectInfo.visitCrossReport(crossReport); Collection callInfos = projectInfo.getCallProjectsInfo(); @@ -113,7 +113,7 @@ public class UtilizationReportBuilder implements ReportTaskBuilder { if (service != null) { service.setFailureCount(service.getFailureCount() + failure); - + long count = service.getCount(); if (count > 0) { service.setFailurePercent(service.getFailureCount() * 1.0 / count); 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 3814cf99a..7d67d0170 100755 --- a/cat-home/src/main/resources/META-INF/plexus/components.xml +++ b/cat-home/src/main/resources/META-INF/plexus/components.xml @@ -579,6 +579,9 @@ com.dianping.cat.core.dal.ProjectDao + + com.dianping.cat.ServerConfigManager + @@ -588,6 +591,12 @@ com.dianping.cat.core.dal.HostinfoDao + + com.dianping.cat.service.ProjectService + + + com.dianping.cat.ServerConfigManager + @@ -1637,7 +1646,7 @@ com.dianping.cat.report.service.ReportServiceManager - com.dianping.cat.DomainManager + com.dianping.cat.service.HostinfoService @@ -1722,7 +1731,7 @@ com.dianping.cat.ServerConfigManager - com.dianping.cat.DomainManager + com.dianping.cat.service.HostinfoService @@ -3196,7 +3205,7 @@ com.dianping.cat.report.page.PayloadNormalizer - com.dianping.cat.DomainManager + com.dianping.cat.service.HostinfoService com.dianping.cat.report.page.model.spi.ModelService @@ -3215,26 +3224,17 @@ - com.dianping.cat.DomainManager - com.dianping.cat.DomainManager + com.dianping.cat.service.HostinfoService + com.dianping.cat.service.HostinfoService - com.dianping.cat.service.HostinfoService - - - com.dianping.cat.service.ProjectService + com.dianping.cat.core.dal.HostinfoDao com.dianping.cat.ServerConfigManager - - - - com.dianping.cat.service.HostinfoService - com.dianping.cat.service.HostinfoService - - com.dianping.cat.core.dal.HostinfoDao + com.dianping.cat.service.ProjectService @@ -3254,6 +3254,9 @@ com.dianping.cat.core.dal.ProjectDao + + com.dianping.cat.ServerConfigManager + @@ -3634,7 +3637,7 @@ com.dianping.cat.report.page.externalError.EventCollectManager - com.dianping.cat.DomainManager + com.dianping.cat.service.HostinfoService @@ -4179,23 +4182,6 @@ com.dianping.cat.report.task.alert.sender.sender.SenderManager com.dianping.cat.report.task.alert.sender.sender.SenderManager - - - com.dianping.cat.report.task.alert.sender.sender.Sender - mail - m_mailSender - - - com.dianping.cat.report.task.alert.sender.sender.Sender - weixin - m_weixinSender - - - com.dianping.cat.report.task.alert.sender.sender.Sender - sms - m_smsSender - - com.dianping.cat.system.SystemModule diff --git a/cat-home/src/test/java/com/dianping/cat/report/task/service/ServiceBuilderTest.java b/cat-home/src/test/java/com/dianping/cat/report/task/service/ServiceBuilderTest.java index 94d43c16f..243a63f11 100644 --- a/cat-home/src/test/java/com/dianping/cat/report/task/service/ServiceBuilderTest.java +++ b/cat-home/src/test/java/com/dianping/cat/report/task/service/ServiceBuilderTest.java @@ -7,7 +7,7 @@ import org.unidal.lookup.ComponentTestCase; import com.dianping.cat.Cat; import com.dianping.cat.Constants; -import com.dianping.cat.DomainManager; +import com.dianping.cat.service.HostinfoService; public class ServiceBuilderTest extends ComponentTestCase{ @@ -15,36 +15,36 @@ public class ServiceBuilderTest extends ComponentTestCase{ public void testHourlyReport() throws Exception{ Cat.initialize("192.168.7.43"); ServiceReportBuilder builder = lookup(ServiceReportBuilder.class); - DomainManager manager = lookup(DomainManager.class); + HostinfoService hostinfoService = lookup(HostinfoService.class); - manager.initialize(); + hostinfoService.initialize(); builder.buildHourlyTask(Constants.REPORT_SERVICE, "cat", new SimpleDateFormat("yyyyMMddHH").parse("2013082011")); } @Test public void testDailyReport() throws Exception{ ServiceReportBuilder builder = lookup(ServiceReportBuilder.class); - DomainManager manager = lookup(DomainManager.class); + HostinfoService hostinfoService = lookup(HostinfoService.class); - manager.initialize(); + hostinfoService.initialize(); builder.buildDailyTask(Constants.REPORT_SERVICE, "cat", new SimpleDateFormat("yyyyMMdd").parse("20130712")); } @Test public void testWeeklyReport() throws Exception{ ServiceReportBuilder builder = lookup(ServiceReportBuilder.class); - DomainManager manager = lookup(DomainManager.class); + HostinfoService hostinfoService = lookup(HostinfoService.class); - manager.initialize(); + hostinfoService.initialize(); builder.buildWeeklyTask(Constants.REPORT_SERVICE, "cat", new SimpleDateFormat("yyyyMMdd").parse("20130710")); } @Test public void testMonthlyReport() throws Exception{ ServiceReportBuilder builder = lookup(ServiceReportBuilder.class); - DomainManager manager = lookup(DomainManager.class); + HostinfoService hostinfoService = lookup(HostinfoService.class); - manager.initialize(); + hostinfoService.initialize(); builder.buildMonthlyTask(Constants.REPORT_SERVICE, "cat", new SimpleDateFormat("yyyyMMdd").parse("20130701")); } diff --git a/cat-home/src/test/java/com/dianping/cat/report/task/utilization/UtilizationBuilderTest.java b/cat-home/src/test/java/com/dianping/cat/report/task/utilization/UtilizationBuilderTest.java index cc17b06fd..ff3aa1126 100644 --- a/cat-home/src/test/java/com/dianping/cat/report/task/utilization/UtilizationBuilderTest.java +++ b/cat-home/src/test/java/com/dianping/cat/report/task/utilization/UtilizationBuilderTest.java @@ -6,43 +6,43 @@ import org.junit.Test; import org.unidal.lookup.ComponentTestCase; import com.dianping.cat.Constants; -import com.dianping.cat.DomainManager; +import com.dianping.cat.service.HostinfoService; public class UtilizationBuilderTest extends ComponentTestCase{ @Test public void testHourlyReport() throws Exception{ UtilizationReportBuilder builder = lookup(UtilizationReportBuilder.class); - DomainManager manager = lookup(DomainManager.class); + HostinfoService hostinfoService = lookup(HostinfoService.class); - manager.initialize(); + hostinfoService.initialize(); builder.buildHourlyTask(Constants.REPORT_UTILIZATION,Constants.CAT, new SimpleDateFormat("yyyyMMddHH").parse("2013082617")); } @Test public void testDailyReport() throws Exception{ UtilizationReportBuilder builder = lookup(UtilizationReportBuilder.class); - DomainManager manager = lookup(DomainManager.class); + HostinfoService hostinfoService = lookup(HostinfoService.class); - manager.initialize(); + hostinfoService.initialize(); builder.buildDailyTask(Constants.REPORT_UTILIZATION, Constants.CAT, new SimpleDateFormat("yyyyMMdd").parse("20130826")); } @Test public void testWeeklyReport() throws Exception{ UtilizationReportBuilder builder = lookup(UtilizationReportBuilder.class); - DomainManager manager = lookup(DomainManager.class); + HostinfoService hostinfoService = lookup(HostinfoService.class); - manager.initialize(); + hostinfoService.initialize(); builder.buildWeeklyTask(Constants.REPORT_UTILIZATION, Constants.CAT, new SimpleDateFormat("yyyyMMdd").parse("20130717")); } @Test public void testMonthlyReport() throws Exception{ UtilizationReportBuilder builder = lookup(UtilizationReportBuilder.class); - DomainManager manager = lookup(DomainManager.class); + HostinfoService hostinfoService = lookup(HostinfoService.class); - manager.initialize(); + hostinfoService.initialize(); builder.buildMonthlyTask(Constants.REPORT_UTILIZATION, Constants.CAT, new SimpleDateFormat("yyyyMMdd").parse("20130701")); } -- GitLab