add message data

Conflicts:
	src/main/java/com/ctrip/zeus/restful/resource/ActivateResource.java
	src/main/java/com/ctrip/zeus/restful/resource/GroupMemberResource.java
	src/main/java/com/ctrip/zeus/restful/resource/GroupResource.java
	src/main/java/com/ctrip/zeus/restful/resource/OperationResource.java
	src/main/java/com/ctrip/zeus/restful/resource/VirtualServerResource.java
This commit is contained in:
fanqq 2016-10-13 15:24:45 +08:00
parent 71ebfa1842
commit bcd0877783
8 changed files with 212 additions and 42 deletions

View file

@ -20,6 +20,7 @@ import com.ctrip.zeus.task.entity.TaskResult;
import com.ctrip.zeus.task.entity.TaskResultList;
import com.ctrip.zeus.util.AssertUtils;
import com.google.common.base.Joiner;
import com.ctrip.zeus.util.MessageUtil;
import com.netflix.config.DynamicLongProperty;
import com.netflix.config.DynamicPropertyFactory;
import org.springframework.stereotype.Component;
@ -114,11 +115,15 @@ public class ActivateResource {
propertyBox.set("status", "activated", "slb", _slbIds.toArray(new Long[_slbIds.size()]));
} catch (Exception ex) {
}
String slbMessageData = MessageUtil.getMessageData(request, null, null,
slbModelStatusMapping.getOfflineMapping().values().toArray(new Slb[]{}), null, true);
for (Long slbId : _slbIds) {
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), slbId, null);
messageQueueService.produceMessage(request.getRequestURI(), slbId, slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.ActivateSlb, slbId, null);
messageQueueService.produceMessage(MessageType.ActivateSlb, slbId, slbMessageData);
}
}
return responseHandler.handle(resultList, hh.getMediaType());
@ -241,11 +246,13 @@ public class ActivateResource {
} catch (Exception ex) {
}
String slbMessageData = MessageUtil.getMessageData(request,
mapping.getOfflineMapping().values().toArray(new Group[mapping.getOfflineMapping().size()]), null, null, null, true);
for (Long id : _groupIds) {
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), id, null);
messageQueueService.produceMessage(request.getRequestURI(), id, slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.ActivateGroup, id, null);
messageQueueService.produceMessage(MessageType.ActivateGroup, id, slbMessageData);
}
}
@ -323,10 +330,13 @@ public class ActivateResource {
propertyBox.set("status", "activated", "vs", vsId);
} catch (Exception ex) {
}
String slbMessageData = MessageUtil.getMessageData(request, null,
new VirtualServer[]{vsMaping.getOfflineMapping().get(vsId)}, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), vsId, null);
messageQueueService.produceMessage(request.getRequestURI(), vsId, slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.ActivateVs, vsId, null);
messageQueueService.produceMessage(MessageType.ActivateVs, vsId, slbMessageData);
}
return responseHandler.handle(resultList, hh.getMediaType());

View file

@ -23,6 +23,7 @@ import com.ctrip.zeus.status.entity.GroupStatus;
import com.ctrip.zeus.support.ObjectJsonParser;
import com.ctrip.zeus.tag.PropertyBox;
import com.ctrip.zeus.task.entity.OpsTask;
import com.ctrip.zeus.util.MessageUtil;
import com.google.common.base.Joiner;
import com.netflix.config.DynamicLongProperty;
import com.netflix.config.DynamicPropertyFactory;
@ -158,10 +159,11 @@ public class GroupMemberResource {
} finally {
lock.unlock();
}
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{group}, null,null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), group.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), group.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateGroup, group.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateGroup, group.getId(), slbMessageData);
}
return responseHandler.handle("Successfully added group servers to group with id " + gsl.getGroupId() + ".", hh.getMediaType());
}
@ -213,10 +215,12 @@ public class GroupMemberResource {
} finally {
lock.unlock();
}
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{group}, null,null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), group.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), group.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateGroup, group.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateGroup, group.getId(), slbMessageData);
}
return responseHandler.handle("Successfully updated group servers to group with id " + gsl.getGroupId() + ".", hh.getMediaType());
}
@ -266,10 +270,12 @@ public class GroupMemberResource {
} finally {
lock.unlock();
}
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{group}, null,null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), group.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), group.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateGroup, group.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateGroup, group.getId(), slbMessageData);
}
return responseHandler.handle("Successfully removed " + Joiner.on(",").join(ips) + " from group with id " + groupId + ".", hh.getMediaType());
}

View file

@ -24,6 +24,7 @@ import com.ctrip.zeus.tag.PropertyBox;
import com.ctrip.zeus.tag.entity.Property;
import com.ctrip.zeus.tag.TagBox;
import com.ctrip.zeus.util.MessageUtil;
import com.google.common.base.Joiner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -243,10 +244,11 @@ public class GroupResource {
}
addHealthProperty(g.getId());
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{g}, null, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), g.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), g.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.NewGroup, g.getId(), null);
messageQueueService.produceMessage(MessageType.NewGroup, g.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedGroup(g), hh.getMediaType());
@ -323,10 +325,12 @@ public class GroupResource {
}
addHealthProperty(g.getId());
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{g}, null, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), g.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), g.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateGroup, g.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateGroup, g.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedGroup(g), hh.getMediaType());
@ -386,10 +390,11 @@ public class GroupResource {
} finally {
lock.unlock();
}
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{g}, null, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), g.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), g.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateGroup, g.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateGroup, g.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedGroup(g), hh.getMediaType());
}
@ -457,10 +462,12 @@ public class GroupResource {
} finally {
lock.unlock();
}
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{target}, null, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), target.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), target.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateGroup, target.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateGroup, target.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedGroup(target), hh.getMediaType());
@ -509,10 +516,11 @@ public class GroupResource {
lock.unlock();
}
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{target}, null, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), target.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), target.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateGroup, target.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateGroup, target.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedGroup(target), hh.getMediaType());
@ -553,10 +561,12 @@ public class GroupResource {
} catch (Exception ex) {
}
String slbMessageData = MessageUtil.getMessageData(request, null, null, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), groupId, null);
messageQueueService.produceMessage(request.getRequestURI(), groupId, slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.DeleteGroup, groupId, null);
messageQueueService.produceMessage(MessageType.DeleteGroup, groupId, slbMessageData);
}
return responseHandler.handle("Group is deleted.", hh.getMediaType());

View file

@ -26,6 +26,7 @@ import com.ctrip.zeus.status.entity.ServerStatus;
import com.ctrip.zeus.tag.PropertyBox;
import com.ctrip.zeus.task.entity.OpsTask;
import com.ctrip.zeus.task.entity.TaskResult;
import com.ctrip.zeus.util.MessageUtil;
import com.google.common.base.Joiner;
import com.netflix.config.DynamicBooleanProperty;
import com.netflix.config.DynamicLongProperty;
@ -704,17 +705,16 @@ public class OperationResource {
GroupStatus groupStatus = groupStatusService.getOfflineGroupStatus(groupId);
addHealthyProperty(groupStatus);
String slbMessageData = MessageUtil.getMessageData(request, new Group[]{offlineGroup}, null, null, ips.toArray(new String[ips.size()]), true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), groupId, null);
messageQueueService.produceMessage(request.getRequestURI(), groupId, slbMessageData);
} else {
if (type.equals(TaskOpsType.HEALTHY_OPS)) {
messageQueueService.produceMessage(MessageType.OpsHealthy, groupId, null);
}
if (type.equals(TaskOpsType.PULL_MEMBER_OPS)) {
messageQueueService.produceMessage(MessageType.OpsPull, groupId, null);
}
if (type.equals(TaskOpsType.MEMBER_OPS)) {
messageQueueService.produceMessage(MessageType.OpsMember, groupId, null);
messageQueueService.produceMessage(MessageType.OpsHealthy, groupId, slbMessageData);
} else if (type.equals(TaskOpsType.PULL_MEMBER_OPS)) {
messageQueueService.produceMessage(MessageType.OpsPull, groupId, slbMessageData);
} else if (type.equals(TaskOpsType.MEMBER_OPS)) {
messageQueueService.produceMessage(MessageType.OpsMember, groupId, slbMessageData);
}
}

View file

@ -25,6 +25,7 @@ import com.ctrip.zeus.service.model.IdVersion;
import com.ctrip.zeus.service.query.VirtualServerCriteriaQuery;
import com.ctrip.zeus.support.ObjectJsonParser;
import com.ctrip.zeus.support.ObjectJsonWriter;
import com.ctrip.zeus.util.MessageUtil;
import com.ctrip.zeus.tag.PropertyBox;
import com.ctrip.zeus.tag.TagBox;
import com.ctrip.zeus.tag.entity.Property;
@ -179,10 +180,11 @@ public class VirtualServerResource {
if (extendedView.getTags() != null) {
addTag(vs.getId(), extendedView.getTags());
}
String slbMessageData = MessageUtil.getMessageData(request, null, new VirtualServer[]{vs}, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), vs.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), vs.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.NewVs, vs.getId(), null);
messageQueueService.produceMessage(MessageType.NewVs, vs.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedVs(vs), hh.getMediaType());
@ -225,10 +227,11 @@ public class VirtualServerResource {
addTag(vs.getId(), extendedView.getTags());
}
String slbMessageData = MessageUtil.getMessageData(request, null, new VirtualServer[]{vs}, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), vs.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), vs.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateVs, vs.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateVs, vs.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedVs(vs), hh.getMediaType());
@ -264,10 +267,11 @@ public class VirtualServerResource {
} catch (Exception ex) {
}
String slbMessageData = MessageUtil.getMessageData(request, null, new VirtualServer[]{vs}, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), vs.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), vs.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateVs, vs.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateVs, vs.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedVs(vs), hh.getMediaType());
@ -310,10 +314,12 @@ public class VirtualServerResource {
}
} catch (Exception ex) {
}
String slbMessageData = MessageUtil.getMessageData(request, null, new VirtualServer[]{vs}, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), vs.getId(), null);
messageQueueService.produceMessage(request.getRequestURI(), vs.getId(), slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.UpdateVs, vs.getId(), null);
messageQueueService.produceMessage(MessageType.UpdateVs, vs.getId(), slbMessageData);
}
return responseHandler.handle(new ExtendedView.ExtendedVs(vs), hh.getMediaType());
}
@ -345,10 +351,12 @@ public class VirtualServerResource {
tagBox.clear("vs", vsId);
} catch (Exception ex) {
}
String slbMessageData = MessageUtil.getMessageData(request, null, null, null, null, true);
if (configHandler.getEnable("use.new,message.queue.producer", false)) {
messageQueueService.produceMessage(request.getRequestURI(), vsId, null);
messageQueueService.produceMessage(request.getRequestURI(), vsId, slbMessageData);
} else {
messageQueueService.produceMessage(MessageType.DeleteVs, vsId, null);
messageQueueService.produceMessage(MessageType.DeleteVs, vsId, slbMessageData);
}
return responseHandler.handle("Successfully deleted virtual server with id " + vsId + ".", hh.getMediaType());
}

View file

@ -0,0 +1,82 @@
package com.ctrip.zeus.util;
import com.ctrip.zeus.model.entity.Group;
import com.ctrip.zeus.model.entity.Slb;
import com.ctrip.zeus.model.entity.VirtualServer;
import com.ctrip.zeus.queue.entity.GroupData;
import com.ctrip.zeus.queue.entity.SlbData;
import com.ctrip.zeus.queue.entity.SlbMessageData;
import com.ctrip.zeus.queue.entity.VsData;
import com.ctrip.zeus.queue.transform.DefaultJsonParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* Created by fanqq on 2016/10/13.
*/
public class MessageUtil {
static Logger logger = LoggerFactory.getLogger(MessageUtil.class);
public static String getMessageData(HttpServletRequest request, Group[] groups, VirtualServer[] vses, Slb[] slbs, String[] ips, boolean success) {
SlbMessageData res = new SlbMessageData();
res.setQuery(request.getQueryString())
.setUri(request.getRequestURI())
.setSuccess(success)
.setUser(UserUtils.getUserName(request))
.setClientIp(getClientIP(request));
if (groups != null && groups.length > 0) {
for (Group group : groups) {
res.addGroupData(new GroupData().setId(group.getId()).setName(group.getName()).setVersion(group.getVersion()));
}
}
if (slbs != null && slbs.length > 0) {
for (Slb slb : slbs) {
res.addSlbData(new SlbData().setId(slb.getId()).setName(slb.getName()).setVersion(slb.getVersion()));
}
}
if (vses != null && vses.length > 0) {
for (VirtualServer vs : vses) {
res.addVsData(new VsData().setId(vs.getId()).setName(vs.getName()).setVersion(vs.getVersion()));
}
}
if (ips != null && ips.length > 0) {
for (String ip : ips) {
res.addIp(ip);
}
}
return String.format(SlbMessageData.JSON, res);
}
public static SlbMessageData parserSlbMessageData(String res) {
try {
if (res == null) return null;
return DefaultJsonParser.parse(SlbMessageData.class, res);
} catch (IOException e) {
logger.warn("Parser Slb Message Data Failed. Message:" + res, e);
return null;
}
}
private static String getClientIP(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}

View file

@ -2,6 +2,7 @@
<model>
<entity name="queue" root="true">
<entity-ref name="message" />
<entity-ref name="slb-message-data" />
</entity>
<entity name="message">
<element name="performer" value-type="String" />
@ -11,5 +12,31 @@
<element name="target-data" value-type="String" />
<element name="create-time" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
</entity>
<entity name="slb-message-data">
<element name="uri" value-type="String" />
<element name="query" value-type="String" />
<element name="user" value-type="String" />
<element name="client-ip" value-type="String" />
<element name="success" value-type="boolean" />
<element name="ip" value-type="String" type="list" names="ips" />
<entity-ref name="group-data" type="list" names="group-datas" />
<entity-ref name="vs-data" type="list" names="vs-datas" />
<entity-ref name="slb-data" type="list" names="slb-datas" />
</entity>
<entity name="group-data">
<element name="id" value-type="long" />
<element name="name" value-type="String" />
<element name="version" value-type="int" />
</entity>
<entity name="vs-data">
<element name="id" value-type="long" />
<element name="name" value-type="String" />
<element name="version" value-type="int" />
</entity>
<entity name="slb-data">
<element name="id" value-type="long" />
<element name="name" value-type="String" />
<element name="version" value-type="int" />
</entity>
</model>

View file

@ -7,4 +7,31 @@
<target-data>Unsupported content type:</target-data>
<create-time>2013-05-20 13:34:00</create-time>
</message>
<slb-message-data>
<uri>/api/</uri>
<query>abc=abc</query>
<user>ff</user>
<client-ip>10.2.2.2</client-ip>
<success>true</success>
<group-data>
<id>123456789809</id>
<name>name</name>
<version>12345678</version>
</group-data>
<group-data/>
<vs-data>
<id>123456789809</id>
<name>name</name>
<version>12345678</version>
</vs-data>
<vs-data/>
<slb-data>
<id>123456789809</id>
<name>name</name>
<version>12345678</version>
</slb-data>
<slb-data/>
<ip>ip</ip>
<ip/>
</slb-message-data>
</queue>