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

add project and hostname refresh method

上级 d5b1c9c4
......@@ -6,10 +6,13 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
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.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
......@@ -31,26 +34,26 @@ public class HostinfoService implements Initializable {
public boolean deleteHostinfo(Hostinfo host) {
int id = host.getId();
Iterator<Entry<String, Hostinfo>> iterator = m_hostinfos.entrySet().iterator();
String ip = null;
while (iterator.hasNext()) {
Entry<String, Hostinfo> entry = iterator.next();
Hostinfo hostinfo = entry.getValue();
if (hostinfo.getId() == id) {
iterator.remove();
ip = hostinfo.getIp();
break;
}
}
try {
hostinfo.setKeyId(hostinfo.getId());
m_hostinfoDao.deleteByPK(hostinfo);
m_hostinfos.remove(ip);
m_hostinfoDao.deleteByPK(host);
return true;
} catch (Exception e) {
Cat.logError("delete hostinfo error " + hostinfo.toString(), e);
Cat.logError("delete hostinfo error " + host.toString(), e);
return false;
}
}
}
return true;
}
public List<Hostinfo> findAll() throws DalException {
return new ArrayList<Hostinfo>(m_hostinfos.values());
......@@ -76,11 +79,18 @@ public class HostinfoService implements Initializable {
@Override
public void initialize() throws InitializationException {
Threads.forGroup("Cat").start(new HostinfoReloadTask());
}
public void refresh() {
try {
List<Hostinfo> hostinfos = m_hostinfoDao.findAllIp(HostinfoEntity.READSET_FULL);
synchronized (this) {
for (Hostinfo hostinfo : hostinfos) {
m_hostinfos.put(hostinfo.getIp(), hostinfo);
}
}
} catch (DalException e) {
Cat.logError("initialize HostService error", e);
}
......@@ -108,4 +118,39 @@ public class HostinfoService implements Initializable {
return false;
}
}
public class HostinfoReloadTask implements Task {
@Override
public void run() {
boolean active = true;
while (active) {
try {
refresh();
} catch (Exception ex) {
Cat.logError("reload hostinfo error", ex);
}
try {
TimeUnit.MINUTES.sleep(1);
} catch (InterruptedException ex) {
Cat.logError("reload hostinfo stop", ex);
active = false;
}
}
}
@Override
public String getName() {
return "hostinfo-reload";
}
@Override
public void shutdown() {
}
}
}
......@@ -6,10 +6,13 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
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.Threads;
import org.unidal.helper.Threads.Task;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
......@@ -31,26 +34,27 @@ public class ProjectService implements Initializable {
public boolean deleteProject(Project project) {
int id = project.getId();
Iterator<Entry<String, Project>> iterator = m_projects.entrySet().iterator();
String domainName = null;
while (iterator.hasNext()) {
Entry<String, Project> entry = iterator.next();
Project pro = entry.getValue();
if (pro.getId() == id) {
iterator.remove();
domainName = pro.getDomain();
break;
}
}
try {
pro.setKeyId(pro.getId());
m_projectDao.deleteByPK(pro);
m_projects.remove(domainName);
m_projectDao.deleteByPK(project);
return true;
} catch (Exception e) {
Cat.logError("delete project error " + pro.toString(), e);
Cat.logError("delete project error ", e);
return false;
}
}
}
return true;
}
public List<Project> findAll() throws DalException {
return new ArrayList<Project>(m_projects.values());
......@@ -66,21 +70,28 @@ public class ProjectService implements Initializable {
while (iterator.hasNext()) {
Entry<String, Project> entry = iterator.next();
Project pro = entry.getValue();
if (pro.getId() == id) {
return pro;
}
}
return new Project();
}
@Override
public void initialize() throws InitializationException {
Threads.forGroup("Cat").start(new ProjectReloadTask());
}
public void refresh() {
try {
List<Project> projects = m_projectDao.findAll(ProjectEntity.READSET_FULL);
synchronized (this) {
for (Project project : projects) {
m_projects.put(project.getDomain(), project);
}
}
} catch (DalException e) {
Cat.logError("initialize ProjectService error", e);
}
......@@ -108,4 +119,38 @@ public class ProjectService implements Initializable {
return false;
}
}
public class ProjectReloadTask implements Task {
@Override
public void run() {
boolean active = true;
while (active) {
try {
refresh();
} catch (Exception ex) {
Cat.logError("reload project error", ex);
}
try {
TimeUnit.MINUTES.sleep(1);
} catch (InterruptedException ex) {
Cat.logError("reload project stop", ex);
active = false;
}
}
}
@Override
public String getName() {
return "project-reload";
}
@Override
public void shutdown() {
}
}
}
......@@ -3258,7 +3258,7 @@
<implementation>com.dianping.cat.DomainManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.core.dal.HostinfoDao</role>
<role>com.dianping.cat.service.HostinfoService</role>
</requirement>
<requirement>
<role>com.dianping.cat.service.ProjectService</role>
......@@ -3268,6 +3268,15 @@
</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>
</requirements>
</component>
<component>
<role>com.dianping.cat.core.dal.HostinfoDao</role>
<implementation>com.dianping.cat.core.dal.HostinfoDao</implementation>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册