提交 911746f5 编写于 作者: Y youyong205

add the router config function

上级 52f28464
......@@ -11,3 +11,5 @@
cat-client/src/main/resources/com/dianping/cat/configuration/client/config.xsd
cat-client/src/main/resources/com/dianping/cat/status/model/status.xsd
cat-client/src/test/java/com/dianping/cat/message/io/ChannelManagerTest.java
......@@ -14,7 +14,6 @@ import org.unidal.initialization.Module;
import org.unidal.initialization.ModuleContext;
import com.dianping.cat.configuration.ClientConfigManager;
import com.dianping.cat.configuration.ClientConfigReloader;
import com.dianping.cat.configuration.client.entity.ClientConfig;
import com.dianping.cat.message.internal.MilliSecondTimer;
import com.dianping.cat.message.io.TransportManager;
......@@ -56,10 +55,6 @@ public class CatClientModule extends AbstractModule {
ClientConfig config = clientConfigManager.getClientConfig();
if (config != null) {
Threads.forGroup("Cat").start(new ClientConfigReloader(clientConfigFile.getAbsolutePath(), config));
}
// MmapConsumerTask mmapReaderTask = ctx.lookup(MmapConsumerTask.class);
// Threads.forGroup("Cat").start(mmapReaderTask);
}
......
......@@ -157,8 +157,12 @@ public class ClientConfigManager implements LogEnabled {
List<Server> servers = m_config.getServers();
for (Server server : servers) {
return String.format("http://%s:%d/cat/s/router?domain=%s", server.getIp(), server.getPort(), getDomain()
.getId());
Integer httpPort = server.getHttpPort();
if (httpPort == null) {
httpPort = 8080;
}
return String.format("http://%s:%d/cat/s/router?domain=%s", server.getIp(), httpPort, getDomain().getId());
}
}
return null;
......
package com.dianping.cat.configuration;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import org.unidal.helper.Files;
import org.unidal.helper.Threads.Task;
import org.xml.sax.SAXException;
import com.dianping.cat.Cat;
import com.dianping.cat.configuration.client.entity.ClientConfig;
import com.dianping.cat.configuration.client.entity.Domain;
import com.dianping.cat.configuration.client.transform.DefaultSaxParser;
import com.dianping.cat.message.Message;
public class ClientConfigReloader implements Task {
private static final String CAT_CLIENT_XML = "/META-INF/cat/client.xml";
private ClientConfig m_config;
private File m_file;
private long m_lastModifyTime;
private volatile boolean m_active = true;
public ClientConfigReloader(String fileName, ClientConfig config) {
m_config = config;
m_file = new File(fileName);
m_lastModifyTime = m_file.lastModified();
}
public ClientConfig getClientConfig() throws IOException, SAXException {
ClientConfig clientConfig = null;
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(CAT_CLIENT_XML);
if (in == null) {
in = Cat.class.getResourceAsStream(CAT_CLIENT_XML);
}
if (in != null) {
String xml = Files.forIO().readFrom(in, "utf-8");
clientConfig = DefaultSaxParser.parse(xml);
}
String content = Files.forIO().readFrom(m_file, "utf-8");
ClientConfig globalConfig = DefaultSaxParser.parse(content);
if (globalConfig != null && clientConfig != null) {
globalConfig.accept(new ClientConfigMerger(clientConfig));
}
return clientConfig;
}
@Override
public String getName() {
return "ClientConfigReloader";
}
private boolean isActive() {
synchronized (this) {
return m_active;
}
}
@Override
public void run() {
while (isActive()) {
try {
try {
long now = m_file.lastModified();
if (now > m_lastModifyTime) {
ClientConfig newConfig = getClientConfig();
Map<String, Domain> domains = newConfig.getDomains();
Domain firstDomain = domains.isEmpty() ? null : domains.values().iterator().next();
boolean catEnable = false;
boolean oldEnabled = m_config.isEnabled();
if (firstDomain != null) {
if (firstDomain.getEnabled() != null && firstDomain.getEnabled() == true) {
catEnable = true;
}
}
if (oldEnabled != catEnable) {
if (oldEnabled) {
Cat.getProducer().logEvent("System", "Reload:" + catEnable, Message.SUCCESS,
String.format("Change from %s to %s", oldEnabled, catEnable));
}
synchronized (m_config) {
m_config.setEnabled(catEnable);
}
if (catEnable) {
Cat.getProducer().logEvent("System", "Reload:" + catEnable, Message.SUCCESS,
String.format("Change from %s to %s", oldEnabled, catEnable));
}
}
}
} catch (Throwable e) {
e.printStackTrace();
}
Thread.sleep(2000L);
} catch (InterruptedException e) {
m_active = false;
}
}
}
@Override
public void shutdown() {
m_active = false;
}
}
\ No newline at end of file
......@@ -62,27 +62,33 @@ public class ChannelManager implements Task {
private String m_lastServers;
private List<InetSocketAddress> parse(String content) {
List<String> strs = Splitters.by(";").noEmptyItem().split(content);
List<InetSocketAddress> address = new ArrayList<InetSocketAddress>();
try {
List<String> strs = Splitters.by(";").noEmptyItem().split(content);
List<InetSocketAddress> address = new ArrayList<InetSocketAddress>();
for (String str : strs) {
List<String> items = Splitters.by(":").noEmptyItem().split(str);
for (String str : strs) {
List<String> items = Splitters.by(":").noEmptyItem().split(str);
address.add(new InetSocketAddress(items.get(0), Integer.parseInt(items.get(1))));
address.add(new InetSocketAddress(items.get(0), Integer.parseInt(items.get(1))));
}
return address;
} catch (Exception e) {
m_logger.error(e.getMessage(), e);
}
return address;
return new ArrayList<InetSocketAddress>();
}
private String getServerConfig() {
try {
InputStream currentServer = Urls.forIO().readTimeout(3000).connectTimeout(1000)
.openStream(m_configManager.getServerConfigUrl());
String url = m_configManager.getServerConfigUrl();
InputStream currentServer = Urls.forIO().readTimeout(3000).connectTimeout(1000).openStream(url);
String content = Files.forIO().readFrom(currentServer, "utf-8");
return content.trim();
} catch (Exception e) {
return null;
}
return null;
}
private Pair<Boolean, String> serverConfigChanged() {
......@@ -109,18 +115,30 @@ public class ChannelManager implements Task {
}
}
private void initChannel(List<InetSocketAddress> serverAddresses) {
m_serverAddresses = serverAddresses;
int len = serverAddresses.size();
private void initChannel(List<InetSocketAddress> addresses) {
try {
StringBuilder sb = new StringBuilder();
for (InetSocketAddress address : addresses) {
sb.append(address.getAddress().getHostAddress()).append(":").append(address.getPort()).append(',');
}
m_logger.info("init CAT server:" + sb.toString());
for (int i = 0; i < len; i++) {
ChannelFuture future = createChannel(serverAddresses.get(i));
m_serverAddresses = addresses;
int len = addresses.size();
if (future != null) {
m_activeFuture = future;
m_activeIndex = i;
break;
for (int i = 0; i < len; i++) {
ChannelFuture future = createChannel(addresses.get(i));
if (future != null) {
m_activeFuture = future;
m_activeIndex = i;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
// ignore
}
}
......@@ -146,7 +164,7 @@ public class ChannelManager implements Task {
bootstrap.setOption("keepAlive", true);
m_bootstrap = bootstrap;
String serverConfig = getServerConfig();
if (serverConfig != null) {
......@@ -218,13 +236,16 @@ public class ChannelManager implements Task {
}
private boolean shouldCheckServerConfig(int count) {
int duration = 3600;
if (count % (duration) == 0) {
return true;
} else {
return false;
}
return true;
int duration = 3600;
if (count % (duration) == 0) {
return true;
} else {
return false;
}
}
@Override
......
......@@ -95,6 +95,8 @@ public class TcpSocketSender implements Task, MessageSender, LogEnabled {
MessageTree tree = m_queue.poll();
if (tree != null) {
System.out.println("write to====" + future.getChannel().getRemoteAddress());
sendInternal(tree);
tree.setMessage(null);
}
......@@ -102,6 +104,7 @@ public class TcpSocketSender implements Task, MessageSender, LogEnabled {
m_logger.error("Error when sending message over TCP socket!", t);
}
} else {
System.out.println("channel can't write");
try {
Thread.sleep(5);
} catch (Exception e) {
......
......@@ -40,6 +40,7 @@ import com.dianping.cat.report.service.impl.MatrixReportService;
import com.dianping.cat.report.service.impl.MetricReportService;
import com.dianping.cat.report.service.impl.NetTopologyReportService;
import com.dianping.cat.report.service.impl.ProblemReportService;
import com.dianping.cat.report.service.impl.RouterConfigService;
import com.dianping.cat.report.service.impl.ServiceReportService;
import com.dianping.cat.report.service.impl.StateReportService;
import com.dianping.cat.report.service.impl.TopReportService;
......@@ -90,6 +91,9 @@ public class ReportServiceComponentConfigurator extends AbstractResourceConfigur
all.add(C(ReportService.class, Constants.REPORT_ALERT, AlertReportService.class).req(HourlyReportDao.class,
DailyReportDao.class, WeeklyReportDao.class, MonthlyReportDao.class, HourlyReportContentDao.class,
DailyReportContentDao.class, WeeklyReportContentDao.class, MonthlyReportContentDao.class));
all.add(C(ReportService.class, Constants.REPORT_ROUTER, RouterConfigService.class).req(HourlyReportDao.class,
DailyReportDao.class, WeeklyReportDao.class, MonthlyReportDao.class, HourlyReportContentDao.class,
DailyReportContentDao.class, WeeklyReportContentDao.class, MonthlyReportContentDao.class));
all.add(C(ReportService.class, TopAnalyzer.ID, TopReportService.class).req(HourlyReportDao.class,
HourlyReportContentDao.class));
......
......@@ -28,17 +28,16 @@ public class RouterConfigService extends AbstractReportService<RouterConfig> {
@Override
public RouterConfig queryDailyReport(String domain, Date start, Date end) {
long startTime = start.getTime();
String name = Constants.REPORT_ROUTER;
try {
DailyReport report = m_dailyReportDao.findByDomainNamePeriod(domain, name, new Date(startTime),
DailyReport report = m_dailyReportDao.findByDomainNamePeriod(domain, name, start,
DailyReportEntity.READSET_FULL);
RouterConfig config = queryFromDailyBinary(report.getId(), domain);
return config;
} catch (DalNotFoundException e) {
//ignore
// ignore
} catch (Exception e) {
Cat.logError(e);
}
......@@ -51,7 +50,7 @@ public class RouterConfigService extends AbstractReportService<RouterConfig> {
if (content != null) {
return DefaultNativeParser.parse(content.getContent());
} else {
return new RouterConfig(domain);
return null;
}
}
......
package com.dianping.cat.report.task.router;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
......@@ -57,7 +58,7 @@ public class RouterConfigBuilder implements ReportTaskBuilder {
}
};
numbers = MapUtils.sortMap(numbers, compator);
Map<String, Long> servers = findAvaliableServers();
Map<Server, Long> servers = findAvaliableServers();
processMainServer(servers, routerConfig, numbers);
processBackServer(servers, routerConfig, numbers);
......@@ -73,7 +74,6 @@ public class RouterConfigBuilder implements ReportTaskBuilder {
dailyReport.setType(1);
byte[] binaryContent = DefaultNativeBuilder.build(routerConfig);
System.out.println(routerConfig);
m_reportService.insertDailyReport(dailyReport, binaryContent);
return true;
}
......@@ -93,21 +93,21 @@ public class RouterConfigBuilder implements ReportTaskBuilder {
throw new RuntimeException("router builder don't support weekly task");
}
private Map<String, Long> findAvaliableServers() {
List<String> servers = m_configManager.queryEnableServers();
Map<String, Long> result = new HashMap<String, Long>();
private Map<Server, Long> findAvaliableServers() {
List<Server> servers = m_configManager.queryEnableServers();
Map<Server, Long> result = new HashMap<Server, Long>();
for (String server : servers) {
for (Server server : servers) {
result.put(server, 0L);
}
return result;
}
private String findMinProcessServer(Map<String, Long> maps) {
private Server findMinProcessServer(Map<Server, Long> maps) {
long min = Long.MAX_VALUE;
String result = null;
Server result = null;
for (Entry<String, Long> entry : maps.entrySet()) {
for (Entry<Server, Long> entry : maps.entrySet()) {
Long value = entry.getValue();
if (value < min) {
......@@ -118,60 +118,71 @@ public class RouterConfigBuilder implements ReportTaskBuilder {
return result;
}
private void processBackServer(Map<String, Long> servers, RouterConfig routerConfig, Map<String, Long> numbers) {
Map<String, Map<String, Long>> backServers = new LinkedHashMap<String, Map<String, Long>>();
String backUpServer = m_configManager.queryBackUpServer();
int port = m_configManager.queryPort();
private void addServerList(List<Server> servers, Server server) {
for (Server s : servers) {
if (s.getId().equals(server.getId())) {
return;
}
}
servers.add(server);
}
for (Domain domain : routerConfig.getDomains().values()) {
private void processBackServer(Map<Server, Long> servers, RouterConfig routerConfig, Map<String, Long> numbers) {
Map<Server, Map<Server, Long>> backServers = new LinkedHashMap<Server, Map<Server, Long>>();
Server backUpServer = m_configManager.queryBackUpServer();
Collection<Domain> values = routerConfig.getDomains().values();
for (Domain domain : values) {
List<Server> domainServers = domain.getServers();
String domainName = domain.getId();
Domain defaultDomainConfig = m_configManager.getRouterConfig().getDomains().get(domainName);
if (defaultDomainConfig == null) {
String server = domain.getServers().get(0).getId();
Map<String, Long> serverProcess = backServers.get(server);
Server server = domain.getServers().get(0);
Map<Server, Long> serverProcess = backServers.get(server);
if (serverProcess == null) {
serverProcess = new LinkedHashMap<String, Long>();
serverProcess = new LinkedHashMap<Server, Long>();
for (Entry<String, Long> entry : servers.entrySet()) {
for (Entry<Server, Long> entry : servers.entrySet()) {
if (!entry.getKey().equals(server)) {
serverProcess.put(entry.getKey(), entry.getValue());
}
}
backServers.put(server, serverProcess);
}
String nextServer = findMinProcessServer(serverProcess);
Long oldValue = serverProcess.get(nextServer);
Server nextServer = findMinProcessServer(serverProcess);
serverProcess.put(nextServer, oldValue + numbers.get(domain.getId()));
domain.addServer(new Server().setId(nextServer).setPort(port));
domain.addServer(new Server().setId(backUpServer).setPort(port));
if (nextServer != null) {
Long oldValue = serverProcess.get(nextServer);
serverProcess.put(nextServer, oldValue + numbers.get(domain.getId()));
addServerList(domainServers, nextServer);
}
addServerList(domainServers, backUpServer);
}
}
}
private void processMainServer(Map<String, Long> servers, RouterConfig routerConfig, Map<String, Long> numbers) {
int port = m_configManager.queryPort();
private void processMainServer(Map<Server, Long> servers, RouterConfig routerConfig, Map<String, Long> numbers) {
for (Entry<String, Long> entry : numbers.entrySet()) {
String domainName = entry.getKey();
Domain defaultDomainConfig = m_configManager.getRouterConfig().getDomains().get(domainName);
Long value = entry.getValue();
if (defaultDomainConfig == null) {
String server = findMinProcessServer(servers);
Server server = findMinProcessServer(servers);
Long oldValue = servers.get(server);
Domain domainConfig = new Domain(domainName);
servers.put(server, oldValue + value);
domainConfig.addServer(new Server().setId(server).setPort(port));
domainConfig.addServer(server);
routerConfig.addDomain(domainConfig);
} else {
routerConfig.addDomain(defaultDomainConfig);
String server = defaultDomainConfig.getServers().get(0).getId();
Server server = defaultDomainConfig.getServers().get(0);
Long oldValue = servers.get(server);
if (oldValue != null) {
......
package com.dianping.cat.system.config;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
......@@ -16,7 +18,9 @@ import com.dianping.cat.core.config.Config;
import com.dianping.cat.core.config.ConfigDao;
import com.dianping.cat.core.config.ConfigEntity;
import com.dianping.cat.home.router.entity.DefaultServer;
import com.dianping.cat.home.router.entity.Domain;
import com.dianping.cat.home.router.entity.RouterConfig;
import com.dianping.cat.home.router.entity.Server;
import com.dianping.cat.home.router.transform.DefaultSaxParser;
public class RouterConfigManager implements Initializable, LogEnabled {
......@@ -41,35 +45,41 @@ public class RouterConfigManager implements Initializable, LogEnabled {
return m_routerConfig;
}
public String queryBackUpServer() {
return m_routerConfig.getBackupServer();
public Server queryBackUpServer() {
return new Server().setId(m_routerConfig.getBackupServer()).setPort(m_routerConfig.getBackupServerPort());
}
public int queryPort() {
return m_routerConfig.getPort();
}
public List<Server> queryServersByDomain(String domain) {
Domain domainConfig = m_routerConfig.findDomain(domain);
List<Server> result = new ArrayList<Server>();
if (domainConfig == null) {
Map<Server, Integer> map = new HashMap<Server, Integer>();
List<Server> servers = queryEnableServers();
int length = servers.size();
int index = (int) (Math.random() * length);
public List<String> queryRandomServers() {
List<String> servers = queryEnableServers();
int length = servers.size();
int index = (int) (Math.random() * length);
List<String> result = new ArrayList<String>();
for (int i = 0; i < 2; i++) {
map.put(servers.get((index + 1) % length), 0);
}
map.put(queryBackUpServer(), 0);
for (int i = 0; i < 2; i++) {
servers.add(servers.get((index + 1) % index));
result = new ArrayList<Server>(map.keySet());
} else {
for (Server server : domainConfig.getServers()) {
result.add(server);
}
}
servers.add(queryBackUpServer());
return result;
}
public List<String> queryEnableServers() {
public List<Server> queryEnableServers() {
List<DefaultServer> servers = m_routerConfig.getDefaultServers();
List<String> result = new ArrayList<String>();
List<Server> result = new ArrayList<Server>();
for (DefaultServer server : servers) {
if (server.isEnable()) {
result.add(server.getId());
result.add(new Server().setId(server.getId()).setPort(server.getPort()));
}
}
......
......@@ -57,9 +57,9 @@ public class Handler implements PageHandler<Context> {
if (domain == null) {
m_configManager.getRouterConfig().getDefaultServers();
List<String> servers = m_configManager.queryRandomServers();
List<Server> servers = m_configManager.queryServersByDomain(payload.getDomain());
str = buildServerStr(servers, m_configManager.queryPort());
str = buildServerStr(servers);
} else {
List<Server> servers = domain.getServers();
......@@ -84,15 +84,6 @@ public class Handler implements PageHandler<Context> {
}
}
private String buildServerStr(List<String> servers, int port) {
StringBuilder sb = new StringBuilder();
for (String server : servers) {
sb.append(server).append(":").append(port).append(";");
}
return sb.toString();
}
private String buildServerStr(List<Server> servers) {
StringBuilder sb = new StringBuilder();
......
package com.dianping.cat.system.page.router;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
......@@ -36,7 +35,7 @@ public class Payload implements ActionPayload<SystemPage, Action> {
public Date getDate() {
try {
return m_sdf.parse(m_date);
} catch (ParseException e) {
} catch (Exception e) {
return TimeUtil.getCurrentDay(-1);
}
}
......
......@@ -6,6 +6,7 @@
</entity>
<entity name="default-server">
<attribute name="id" value-type="String" />
<attribute name="port" value-type="int"/>
<attribute name="enable" value-type="boolean" />
</entity>
<entity name="domain">
......
......@@ -6,7 +6,7 @@
<attribute name="startTime" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<attribute name="domain" value-type="String" key="true"/>
<attribute name="backup-server" value-type="String"/>
<attribute name="port" value-type="int"/>
<attribute name="backup-server-port" value-type="int" primitive="true" />
<attribute name="endTime" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<entity-ref name="domain" type="map" names="domains" method-find-or-create='true'/>
</entity>
......@@ -16,5 +16,6 @@
</entity>
<entity name="server">
<attribute name="id" value-type="String"/>
<attribute name="port" value-type="int" primitive="true" />
</entity>
</model>
\ No newline at end of file
......@@ -1219,6 +1219,37 @@
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.service.ReportService</role>
<role-hint>router</role-hint>
<implementation>com.dianping.cat.report.service.impl.RouterConfigService</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.HourlyReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.core.dal.DailyReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.core.dal.WeeklyReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.core.dal.MonthlyReportDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.core.dal.HourlyReportContentDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.DailyReportContentDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.WeeklyReportContentDao</role>
</requirement>
<requirement>
<role>com.dianping.cat.home.dal.report.MonthlyReportContentDao</role>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.report.service.ReportService</role>
<role-hint>top</role-hint>
......
<router-config>
<default-server id="10.1.6.101" weight="1" port="2280" enable="true"/>
<default-server id="10.1.6.101" weight="1" port="2280" enable="false"/>
<default-server id="10.1.6.101" weight="1" port="2280" enable="true"/>
<domain id="Cat">
<server id="10.1.6.101" port="2280"></server>
<server id="10.1.6.102" port="2280"></server>
<server id="10.1.6.103" port="2280"></server>
</domain>
<domain></domain>
</router-config>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="10.1.6.128" backup-server-port="2280">
<default-server id="10.1.101.84" port="2280" enable="true"/>
<default-server id="10.1.110.21" port="2280" enable="true"/>
<default-server id="10.1.110.23" port="2280" enable="true"/>
<default-server id="10.1.110.57" port="2280" enable="true"/>
<default-server id="10.1.6.37" port="2280" enable="true"/>
<default-server id="10.1.6.102" port="2280" enable="true"/>
<default-server id="10.1.6.108" port="2280" enable="true"/>
<default-server id="10.1.6.126" port="2280" enable="true"/>
<default-server id="10.1.6.145" port="2280" enable="true"/>
<domain id="Cat">
<server id="10.1.6.37" port="2280"/>
<server id="10.1.6.128" port="2280"/>
</domain>
</router-config>
package com.dianping.cat.report.analyzer;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.Test;
import org.unidal.lookup.ComponentTestCase;
import com.dianping.cat.Constants;
import com.dianping.cat.core.dal.Task;
import com.dianping.cat.helper.TimeUtil;
import com.dianping.cat.home.router.entity.RouterConfig;
import com.dianping.cat.report.service.ReportServiceManager;
import com.dianping.cat.report.task.spi.ReportFacade;
public class RouterBuilderTest extends ComponentTestCase {
@Test
public void test() throws Exception {
ReportFacade reportFacade = (ReportFacade) lookup(ReportFacade.class);
Task task = new Task();
Date reportPeriod = new SimpleDateFormat("yyyy-MM-dd").parse("2014-07-28");
task.setReportName(Constants.REPORT_ROUTER);
task.setReportPeriod(reportPeriod);
task.setReportDomain(Constants.CAT);
task.setTaskType(1);
reportFacade.builderReport(task );
ReportServiceManager manager = (ReportServiceManager) lookup(ReportServiceManager.class);
RouterConfig report = manager.queryRouterConfigReport(Constants.CAT, reportPeriod, new Date(reportPeriod.getTime()+TimeUtil.ONE_DAY));
System.err.println(report);
}
}
......@@ -70,8 +70,8 @@ CREATE TABLE `graph` (
CREATE TABLE `hostinfo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(50) NOT NULL COMMENT '部署机器IP',
`domain` varchar(256) NOT NULL COMMENT '部署机器对应的项目名',
`hostname` varchar(256) DEFAULT NULL COMMENT '机器域名',
`domain` varchar(200) NOT NULL COMMENT '部署机器对应的项目名',
`hostname` varchar(200) DEFAULT NULL COMMENT '机器域名',
`creation_date` datetime NOT NULL,
`last_modified_date` datetime NOT NULL,
PRIMARY KEY (`id`),
......@@ -232,13 +232,13 @@ CREATE TABLE `scheduledReportSubscription` (
CREATE TABLE `project` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`domain` varchar(256) NOT NULL COMMENT '项目名称',
`cmdb_domain` varchar(256) DEFAULT NULL COMMENT 'cmdb项目名称',
`domain` varchar(128) NOT NULL COMMENT '项目名称',
`cmdb_domain` varchar(200) DEFAULT NULL COMMENT 'cmdb项目名称',
`project_line` varchar(50) DEFAULT NULL COMMENT '关联产品线名称',
`department` varchar(50) DEFAULT NULL COMMENT '关联项目组名称',
`owner` varchar(50) DEFAULT NULL COMMENT '项目负责人',
`email` varchar(256) DEFAULT NULL COMMENT '项目组邮件',
`phone` varchar(256) DEFAULT NULL COMMENT '联系电话',
`email` varchar(200) DEFAULT NULL COMMENT '项目组邮件',
`phone` varchar(200) DEFAULT NULL COMMENT '联系电话',
`creation_date` datetime DEFAULT NULL COMMENT '创建时间',
`modify_date` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册