提交 3e40f3a9 编写于 作者: L leon.li

refactor DomainManager module

上级 5afdeab8
......@@ -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<Component> all = new ArrayList<Component>();
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) //
......
......@@ -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<DependencyReport> implements LogEnabled {
......@@ -30,7 +31,10 @@ public class DependencyAnalyzer extends AbstractMessageAnalyzer<DependencyReport
private ReportManager<DependencyReport> 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<DependencyReport
if ("PigeonCall".equals(type) || "Call".equals(type)) {
String ip = parseIpFromPigeonClientTransaction(t, tree);
String target = m_domainManager.queryDomainByIp(ip);
String target = m_hostinfoService.queryDomainByIp(ip);
String callType = "PigeonCall";
updateDependencyInfo(report, t, target, callType);
if (m_domainManager.containsDomainInCat(target)) {
if (m_projectService.containsDomainInCat(target)) {
DependencyReport serverReport = findOrCreateReport(target);
updateDependencyInfo(serverReport, t, tree.getDomain(), "PigeonService");
......
......@@ -103,6 +103,33 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.service.ProjectService</role>
<implementation>com.dianping.cat.service.ProjectService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.service.HostinfoService</role>
<implementation>com.dianping.cat.service.HostinfoService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.HostinfoDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.consumer.dependency.DatabaseParser</role>
<implementation>com.dianping.cat.consumer.dependency.DatabaseParser</implementation>
......@@ -121,7 +148,10 @@
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.DomainManager</role>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
</requirement>
<requirement>
<role>com.dianping.cat.consumer.dependency.DatabaseParser</role>
......
......@@ -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";
......
......@@ -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<Component> all = new ArrayList<Component>();
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) //
......
......@@ -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<StateReport> 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<StateReport> 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<StateReport> 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));
}
}
......
......@@ -294,6 +294,33 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.service.ProjectService</role>
<implementation>com.dianping.cat.service.ProjectService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.service.HostinfoService</role>
<implementation>com.dianping.cat.service.HostinfoService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.HostinfoDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.analysis.MessageAnalyzer</role>
<role-hint>state</role-hint>
......@@ -308,7 +335,10 @@
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.DomainManager</role>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
</requirement>
<requirement>
<role>com.dianping.cat.statistic.ServerStatisticManager</role>
......
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<String, String> m_ipDomains = new ConcurrentHashMap<String, String>();
private Map<String, String> m_unknownIps = new ConcurrentHashMap<String, String>();
private Map<String, String> m_cmdbs = new ConcurrentHashMap<String, String>();
private Set<String> m_domainsInCat = new HashSet<String>();
private Map<String, Hostinfo> m_ipsInCat = new ConcurrentHashMap<String, Hostinfo>();
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<Hostinfo> infos = m_hostInfoService.findAll();
for (Hostinfo info : infos) {
m_ipDomains.put(info.getIp(), info.getDomain());
m_ipsInCat.put(info.getIp(), info);
}
List<Project> 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<String> addedIps = new HashSet<String>();
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<String> addIps = new HashSet<String>();
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() {
}
}
}
......@@ -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<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
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));
......
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<String, String> m_ipDomains = new ConcurrentHashMap<String, String>();
private Map<String, String> m_unknownIps = new ConcurrentHashMap<String, String>();
private Map<String, String> m_cmdbs = new ConcurrentHashMap<String, String>();
private Map<String, Hostinfo> m_hostinfos = new ConcurrentHashMap<String, Hostinfo>();
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<Hostinfo> findAll() throws DalException {
return new ArrayList<Hostinfo>(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<String> addedIps = new HashSet<String>();
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<String> addIps = new HashSet<String>();
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() {
}
}
}
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<String, Project> m_projects = new ConcurrentHashMap<String, Project>();
private Set<String> m_domains = new HashSet<String>();
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<Entry<String, Project>> 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);
......
<plexus>
<components>
<component>
<role>com.dianping.cat.DomainManager</role>
<implementation>com.dianping.cat.DomainManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.service.ProjectService</role>
<implementation>com.dianping.cat.service.ProjectService</implementation>
......@@ -22,6 +7,9 @@
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
......@@ -31,6 +19,12 @@
<requirement>
<role>com.dianping.cat.core.dal.HostinfoDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
......
......@@ -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));
......
......@@ -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));
......
......@@ -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<A extends Action, M extends ActionContext<?>> extends
ViewModel<ReportPage, A, M> {
private Date m_creatTime;
private String m_customDate;
......@@ -45,13 +46,13 @@ public abstract class AbstractReportModel<A extends Action, M extends ActionCont
private DomainNavManager m_manager;
private DomainManager m_domainManager;
private HostinfoService m_hostinfoService;
public AbstractReportModel(M ctx) {
super(ctx);
try {
m_manager = ContainerLoader.getDefaultContainer().lookup(DomainNavManager.class);
m_domainManager = ContainerLoader.getDefaultContainer().lookup(DomainManager.class);
m_hostinfoService = ContainerLoader.getDefaultContainer().lookup(HostinfoService.class);
} catch (Exception e) {
Cat.logError(e);
}
......@@ -113,8 +114,8 @@ public abstract class AbstractReportModel<A extends Action, M extends ActionCont
return Integer.toString(hour);
}
}
public String getIpToHostnameStr(){
public String getIpToHostnameStr() {
return new JsonBuilder().toJson(getIpToHostname());
}
......@@ -140,7 +141,7 @@ public abstract class AbstractReportModel<A extends Action, M extends ActionCont
public String getIpAddress() {
return m_ipAddress;
}
public List<String> getIps() {
return new ArrayList<String>();
};
......@@ -150,7 +151,7 @@ public abstract class AbstractReportModel<A extends Action, M extends ActionCont
Map<String, String> ipToHostname = new HashMap<String, String>();
for (String ip : ips) {
String hostname = m_domainManager.queryHostnameByIp(ip);
String hostname = m_hostinfoService.queryHostnameByIp(ip);
ipToHostname.put(ip, hostname);
}
......
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) {
......
......@@ -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<Context> {
private PayloadNormalizer m_normalizePayload;
@Inject
private DomainManager m_domainManager;
private HostinfoService m_hostinfoService;
@Inject(type = ModelService.class, value = CrossAnalyzer.ID)
private ModelService<CrossReport> m_service;
......@@ -51,7 +51,7 @@ public class Handler implements PageHandler<Context> {
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<Context> {
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<Context> {
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<Context> {
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<Context> {
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<Context> {
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<Context> {
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<Context> {
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<Context> {
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;
......
......@@ -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) {
......
......@@ -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) {
......
......@@ -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) {
......
......@@ -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<Context> {
@Inject
......@@ -27,7 +27,7 @@ public class Handler implements PageHandler<Context> {
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<Context> {
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);
}
......
......@@ -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<String, Domain> stat = new HashMap<String, Domain>();
......@@ -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<TypeDetailInfo> callInfos = projectInfo.getCallProjectsInfo();
......
......@@ -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<TypeDetailInfo> 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);
......
......@@ -579,6 +579,9 @@
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
......@@ -588,6 +591,12 @@
<requirement>
<role>com.dianping.cat.core.dal.HostinfoDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
......@@ -1637,7 +1646,7 @@
<role>com.dianping.cat.report.service.ReportServiceManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.DomainManager</role>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
</requirements>
</component>
......@@ -1722,7 +1731,7 @@
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.DomainManager</role>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
</requirements>
</component>
......@@ -3196,7 +3205,7 @@
<role>com.dianping.cat.report.page.PayloadNormalizer</role>
</requirement>
<requirement>
<role>com.dianping.cat.DomainManager</role>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
<requirement>
<role>com.dianping.cat.report.page.model.spi.ModelService</role>
......@@ -3215,26 +3224,17 @@
</requirements>
</component>
<component>
<role>com.dianping.cat.DomainManager</role>
<implementation>com.dianping.cat.DomainManager</implementation>
<role>com.dianping.cat.service.HostinfoService</role>
<implementation>com.dianping.cat.service.HostinfoService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
<role>com.dianping.cat.core.dal.HostinfoDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.service.HostinfoService</role>
<implementation>com.dianping.cat.service.HostinfoService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.HostinfoDao</role>
<role>com.dianping.cat.service.ProjectService</role>
</requirement>
</requirements>
</component>
......@@ -3254,6 +3254,9 @@
<requirement>
<role>com.dianping.cat.core.dal.ProjectDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.ServerConfigManager</role>
</requirement>
</requirements>
</component>
<component>
......@@ -3634,7 +3637,7 @@
<role>com.dianping.cat.report.page.externalError.EventCollectManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.DomainManager</role>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
</requirements>
</component>
......@@ -4179,23 +4182,6 @@
<component>
<role>com.dianping.cat.report.task.alert.sender.sender.SenderManager</role>
<implementation>com.dianping.cat.report.task.alert.sender.sender.SenderManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>mail</role-hint>
<field-name>m_mailSender</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>weixin</role-hint>
<field-name>m_weixinSender</field-name>
</requirement>
<requirement>
<role>com.dianping.cat.report.task.alert.sender.sender.Sender</role>
<role-hint>sms</role-hint>
<field-name>m_smsSender</field-name>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.system.SystemModule</role>
......
......@@ -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"));
}
......
......@@ -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"));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册