mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-22 00:26:05 +08:00
add app service interface
This commit is contained in:
parent
09d960f01b
commit
35ef02b0ef
5
pom.xml
5
pom.xml
|
@ -223,11 +223,6 @@
|
|||
<artifactId>commons-exec</artifactId>
|
||||
<version>1.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.3.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.ctrip.zeus.client;
|
||||
|
||||
import com.ctrip.zeus.nginx.entity.NginxResponse;
|
||||
import com.ctrip.zeus.nginx.entity.NginxServerStatus;
|
||||
import com.ctrip.zeus.nginx.entity.UpstreamStatus;
|
||||
import com.ctrip.zeus.nginx.transform.DefaultJsonParser;
|
||||
|
||||
|
@ -14,8 +16,9 @@ public class NginxClient extends AbstractRestClient {
|
|||
super(url);
|
||||
}
|
||||
|
||||
public void load() {
|
||||
getTarget().path("/api/nginx/load").request().get(String.class);
|
||||
public NginxResponse load() throws IOException{
|
||||
String responseStr = getTarget().path("/api/nginx/load").request().get(String.class);
|
||||
return DefaultJsonParser.parse(NginxResponse.class, responseStr);
|
||||
}
|
||||
|
||||
public UpstreamStatus getUpstreamStatus() throws IOException {
|
||||
|
@ -23,4 +26,9 @@ public class NginxClient extends AbstractRestClient {
|
|||
System.out.println(result);
|
||||
return DefaultJsonParser.parse(UpstreamStatus.class, result);
|
||||
}
|
||||
|
||||
public NginxServerStatus getNginxServerStatus() throws IOException {
|
||||
//TODO
|
||||
return new NginxServerStatus();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.ctrip.zeus.nginx;
|
||||
|
||||
import com.ctrip.zeus.nginx.entity.NginxResponse;
|
||||
import com.ctrip.zeus.nginx.entity.NginxServerStatus;
|
||||
import org.apache.commons.exec.CommandLine;
|
||||
import org.apache.commons.exec.DefaultExecutor;
|
||||
import org.apache.commons.exec.PumpStreamHandler;
|
||||
|
@ -56,8 +58,8 @@ public class NginxOperator {
|
|||
String error = errorStream.toString("UTF-8");
|
||||
|
||||
NginxResponse response = new NginxResponse();
|
||||
response.setOutMessage(out);
|
||||
response.setErrMessage(error);
|
||||
response.setOutMsg(out);
|
||||
response.setErrMsg(error);
|
||||
response.setSucceed(!failed);
|
||||
|
||||
return response;
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
package com.ctrip.zeus.nginx;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
/**
|
||||
* User: mag
|
||||
* Date: 3/24/2015
|
||||
* Time: 1:39 PM
|
||||
*/
|
||||
public class NginxResponse {
|
||||
private boolean succeed = true;
|
||||
private String serverIP;
|
||||
private String outMessage;
|
||||
private String errMessage;
|
||||
|
||||
public boolean isSucceed() {
|
||||
return succeed;
|
||||
}
|
||||
|
||||
public void setSucceed(boolean succeed) {
|
||||
this.succeed = succeed;
|
||||
}
|
||||
|
||||
public String getServerIP() {
|
||||
return serverIP;
|
||||
}
|
||||
|
||||
public void setServerIP(String serverIP) {
|
||||
this.serverIP = serverIP;
|
||||
}
|
||||
|
||||
public String getOutMessage() {
|
||||
return outMessage;
|
||||
}
|
||||
|
||||
public void setOutMessage(String outMessage) {
|
||||
this.outMessage = outMessage;
|
||||
}
|
||||
|
||||
public String getErrMessage() {
|
||||
return errMessage;
|
||||
}
|
||||
|
||||
public void setErrMessage(String errMessage) {
|
||||
this.errMessage = errMessage;
|
||||
}
|
||||
|
||||
public String toJson(){
|
||||
Gson gson = new Gson();
|
||||
return gson.toJson(this);
|
||||
}
|
||||
|
||||
public static NginxResponse fromJson(String jsonStr){
|
||||
Gson gson = new Gson();
|
||||
return gson.fromJson(jsonStr,NginxResponse.class);
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
package com.ctrip.zeus.nginx;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
/**
|
||||
* User: mag
|
||||
* Date: 3/24/2015
|
||||
* Time: 1:32 PM
|
||||
*/
|
||||
public class NginxServerStatus {
|
||||
private static enum Status{STARTED,STOPPED}
|
||||
|
||||
private String serverIP;
|
||||
private Status status;
|
||||
private int activeConnections;
|
||||
|
||||
|
||||
public String toJson(){
|
||||
Gson gson = new Gson();
|
||||
return gson.toJson(this);
|
||||
}
|
||||
|
||||
public static NginxServerStatus fromJson(String jsonStr){
|
||||
Gson gson = new Gson();
|
||||
return gson.fromJson(jsonStr,NginxServerStatus.class);
|
||||
}
|
||||
}
|
|
@ -8,7 +8,7 @@ import com.ctrip.zeus.model.transform.DefaultSaxParser;
|
|||
import com.ctrip.zeus.service.Activate.ActivateService;
|
||||
import com.ctrip.zeus.service.build.BuildInfoService;
|
||||
import com.ctrip.zeus.service.build.BuildService;
|
||||
import com.ctrip.zeus.service.nginx.NginxAgentService;
|
||||
import com.ctrip.zeus.service.nginx.NginxService;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -35,7 +35,7 @@ public class ActivateResource {
|
|||
@Resource
|
||||
private ActivateService activateConfService;
|
||||
@Resource
|
||||
private NginxAgentService nginxAgentService;
|
||||
private NginxService nginxAgentService;
|
||||
@Resource
|
||||
private BuildInfoService buildInfoService;
|
||||
@Resource
|
||||
|
@ -94,7 +94,7 @@ public class ActivateResource {
|
|||
if(buildService.build(buildslbName,ticket))
|
||||
{
|
||||
//Push Service
|
||||
nginxAgentService.reloadConf(buildslbName);
|
||||
nginxAgentService.loadAll(buildslbName);
|
||||
}
|
||||
}
|
||||
}else {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.ctrip.zeus.restful.resource;
|
||||
|
||||
import com.ctrip.zeus.service.conf.ConfService;
|
||||
import com.ctrip.zeus.service.nginx.NginxAgentService;
|
||||
import com.ctrip.zeus.service.nginx.NginxService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
@ -24,7 +24,7 @@ public class ConfResource {
|
|||
@Resource
|
||||
private ConfService confService;
|
||||
@Resource
|
||||
private NginxAgentService nginxAgentService;
|
||||
private NginxService nginxAgentService;
|
||||
|
||||
@GET
|
||||
@Path("/activate")
|
||||
|
@ -35,6 +35,10 @@ public class ConfResource {
|
|||
}
|
||||
|
||||
private void reloadNginxConf() {
|
||||
nginxAgentService.reloadConf("default");
|
||||
try {
|
||||
nginxAgentService.loadAll("default");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
package com.ctrip.zeus.restful.resource;
|
||||
|
||||
import com.ctrip.zeus.nginx.NginxResponse;
|
||||
import com.ctrip.zeus.nginx.NginxServerStatus;
|
||||
import com.ctrip.zeus.service.SlbException;
|
||||
import com.ctrip.zeus.nginx.entity.NginxResponse;
|
||||
import com.ctrip.zeus.nginx.entity.NginxResponseList;
|
||||
import com.ctrip.zeus.nginx.entity.NginxServerStatus;
|
||||
import com.ctrip.zeus.nginx.entity.NginxServerStatusList;
|
||||
import com.ctrip.zeus.service.nginx.NginxService;
|
||||
import com.google.gson.Gson;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -29,54 +31,71 @@ public class NginxResource {
|
|||
|
||||
@GET
|
||||
@Path("/load")
|
||||
@Produces({"*/*"})
|
||||
public Response load() {
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response load(@Context HttpHeaders hh) {
|
||||
try {
|
||||
NginxResponse result = nginxService.load();
|
||||
if (result.isSucceed()) {
|
||||
return Response.ok(result.toJson()).type(MediaType.APPLICATION_JSON_TYPE).build();
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(NginxResponse.XML, result)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.serverError().entity(result.toJson()).type(MediaType.APPLICATION_JSON_TYPE).build();
|
||||
return Response.status(200).entity(String.format(NginxResponse.JSON, result)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
} catch (SlbException e) {
|
||||
return Response.serverError().build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/status")
|
||||
@Produces({"*/*"})
|
||||
public Response status() {
|
||||
try {
|
||||
NginxServerStatus status = nginxService.getStatus();
|
||||
|
||||
return Response.ok(status.toJson()).type(MediaType.APPLICATION_JSON_TYPE).build();
|
||||
} catch (Exception e) {
|
||||
return Response.serverError().build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/loadAll")
|
||||
@Produces({"*/*"})
|
||||
public Response loadAll() {
|
||||
@Path("/status")
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response status(@Context HttpHeaders hh) {
|
||||
try {
|
||||
List<NginxResponse> result = nginxService.loadAll();
|
||||
Gson gson = new Gson();
|
||||
return Response.ok(gson.toJson(result)).type(MediaType.APPLICATION_JSON_TYPE).build();
|
||||
NginxServerStatus status = nginxService.getStatus();
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(NginxServerStatus.XML, status)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.status(200).entity(String.format(NginxServerStatus.JSON, status)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return Response.serverError().build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/loadAll/slb/{slbName:[a-zA-Z0-9_-]+}")
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response loadAll(@Context HttpHeaders hh, @PathParam("slbName") String slbName) {
|
||||
try {
|
||||
List<NginxResponse> nginxResponseList = nginxService.loadAll(slbName);
|
||||
NginxResponseList result = new NginxResponseList();
|
||||
for (NginxResponse nginxResponse : nginxResponseList) {
|
||||
result.addNginxResponse(nginxResponse);
|
||||
}
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(NginxResponseList.XML, result)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.status(200).entity(String.format(NginxResponseList.JSON, result)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
}catch (Exception e){
|
||||
return Response.serverError().build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/allStatus")
|
||||
@Produces({"*/*"})
|
||||
public Response allStatus() throws IOException {
|
||||
@Path("/allStatus/slb/{slbName:[a-zA-Z0-9_-]+}")
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response allStatus(@Context HttpHeaders hh, @PathParam("slbName") String slbName) {
|
||||
try {
|
||||
List<NginxServerStatus> result = nginxService.getStatusAll();
|
||||
Gson gson = new Gson();
|
||||
return Response.ok(gson.toJson(result)).type(MediaType.APPLICATION_JSON_TYPE).build();
|
||||
List<NginxServerStatus> nginxServerStatusList = nginxService.getStatusAll(slbName);
|
||||
NginxServerStatusList result = new NginxServerStatusList();
|
||||
for (NginxServerStatus nginxServerStatus : nginxServerStatusList) {
|
||||
result.addNginxServerStatus(nginxServerStatus);
|
||||
}
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(NginxServerStatusList.XML, result)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.status(200).entity(String.format(NginxServerStatusList.JSON, result)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
}catch (Exception e){
|
||||
return Response.serverError().build();
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import com.ctrip.zeus.model.transform.DefaultSaxParser;
|
|||
import com.ctrip.zeus.service.build.BuildInfoService;
|
||||
import com.ctrip.zeus.service.build.BuildService;
|
||||
import com.ctrip.zeus.service.model.SlbRepository;
|
||||
import com.ctrip.zeus.service.nginx.NginxAgentService;
|
||||
import com.ctrip.zeus.service.nginx.NginxService;
|
||||
import com.ctrip.zeus.service.status.StatusService;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.xml.sax.SAXException;
|
||||
|
@ -37,7 +37,7 @@ public class ServerResource {
|
|||
@Resource
|
||||
private BuildInfoService buildInfoService;
|
||||
@Resource
|
||||
private NginxAgentService nginxAgentService;
|
||||
private NginxService nginxAgentService;
|
||||
@Resource
|
||||
private SlbRepository slbClusterRepository;
|
||||
|
||||
|
@ -70,7 +70,7 @@ public class ServerResource {
|
|||
int ticket = buildInfoService.getTicket(slbname);
|
||||
if(buildService.build(slbname,ticket))
|
||||
{
|
||||
nginxAgentService.reloadConf(slbname);
|
||||
nginxAgentService.loadAll(slbname);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -108,7 +108,7 @@ public class ServerResource {
|
|||
//build config
|
||||
if (buildService.build(slbname, ticket)) {
|
||||
//push
|
||||
nginxAgentService.reloadConf(slbname);
|
||||
nginxAgentService.loadAll(slbname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ public class ServerResource {
|
|||
if(buildService.build(slbname,ticket))
|
||||
{
|
||||
//push
|
||||
nginxAgentService.reloadConf(slbname);
|
||||
nginxAgentService.loadAll(slbname);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -185,7 +185,7 @@ public class ServerResource {
|
|||
//build config
|
||||
if (buildService.build(slbname, ticket)) {
|
||||
//push
|
||||
nginxAgentService.reloadConf(slbname);
|
||||
nginxAgentService.loadAll(slbname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
package com.ctrip.zeus.restful.resource;
|
||||
|
||||
import com.ctrip.zeus.model.entity.AppServerStatus;
|
||||
import com.ctrip.zeus.model.entity.AppStatus;
|
||||
import com.ctrip.zeus.model.entity.AppStatusList;
|
||||
import com.ctrip.zeus.service.status.AppStatusService;
|
||||
import com.ctrip.zeus.service.status.StatusService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author:xingchaowang
|
||||
|
@ -22,17 +27,98 @@ import javax.ws.rs.core.Response;
|
|||
public class StatusResource {
|
||||
|
||||
@Resource
|
||||
private StatusService statusService;
|
||||
private AppStatusService appStatusService;
|
||||
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response status(@Context HttpHeaders hh) {
|
||||
AppStatusList appStatusList = null;//statusService.getAllAppStatus("default");
|
||||
public Response allAppStatus(@Context HttpHeaders hh) {
|
||||
try {
|
||||
List<AppStatus> statusList = appStatusService.getAllAppStatus();
|
||||
AppStatusList result = new AppStatusList();
|
||||
for (AppStatus appStatus : statusList) {
|
||||
result.addAppStatus(appStatus);
|
||||
}
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(AppStatusList.XML, result)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.status(200).entity(String.format(AppStatusList.JSON, result)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
}catch (Exception e){
|
||||
return Response.status(500).build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/slb/{slbName:[a-zA-Z0-9_-]+}")
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response allAppStatusInSlb(@Context HttpHeaders hh, @PathParam("slbName") String slbName) {
|
||||
try {
|
||||
List<AppStatus> statusList = appStatusService.getAllAppStatus(slbName);
|
||||
AppStatusList result = new AppStatusList();
|
||||
for (AppStatus appStatus : statusList) {
|
||||
result.addAppStatus(appStatus);
|
||||
}
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(AppStatusList.XML, result)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.status(200).entity(String.format(AppStatusList.JSON, result)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
}catch (Exception e){
|
||||
return Response.status(500).build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/app/{appName:[a-zA-Z0-9_-]+}")
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response appStatus(@Context HttpHeaders hh, @PathParam("appName") String appName) {
|
||||
try {
|
||||
List<AppStatus> statusList = appStatusService.getAppStatus(appName);
|
||||
AppStatusList result = new AppStatusList();
|
||||
for (AppStatus appStatus : statusList) {
|
||||
result.addAppStatus(appStatus);
|
||||
}
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(AppStatusList.XML, result)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.status(200).entity(String.format(AppStatusList.JSON, result)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
}catch (Exception e){
|
||||
return Response.status(500).build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/app/{appName:[a-zA-Z0-9_-]+}/slb/{slbName:[a-zA-Z0-9_-]+}}")
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response appSlbStatus(@Context HttpHeaders hh, @PathParam("appName") String appName, @PathParam("slbName") String slbName) {
|
||||
try{
|
||||
AppStatus appStatus = appStatusService.getAppStatus(appName,slbName);
|
||||
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(AppStatusList.XML, appStatusList)).type(MediaType.APPLICATION_XML).build();
|
||||
return Response.status(200).entity(String.format(AppStatusList.XML, appStatus)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.status(200).entity(String.format(AppStatusList.JSON, appStatusList)).type(MediaType.APPLICATION_JSON).build();
|
||||
return Response.status(200).entity(String.format(AppStatusList.JSON, appStatus)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
}catch (Exception e){
|
||||
return Response.status(500).build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/app/{appName:[a-zA-Z0-9_-]+}/slb/{slbName:[a-zA-Z0-9_-]+}}/server/{sip:[a-zA-Z0-9_-]+}")
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response appServerStatus(@Context HttpHeaders hh, @PathParam("appName") String appName, @PathParam("slbName") String slbName,@PathParam("sip") String sip) {
|
||||
try {
|
||||
AppServerStatus appServerStatus = appStatusService.getAppServerStatus(appName, slbName, sip);
|
||||
|
||||
if (MediaType.APPLICATION_XML_TYPE.equals(hh.getMediaType())) {
|
||||
return Response.status(200).entity(String.format(AppStatusList.XML, appServerStatus)).type(MediaType.APPLICATION_XML).build();
|
||||
} else {
|
||||
return Response.status(200).entity(String.format(AppStatusList.JSON, appServerStatus)).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
} catch (Exception e){
|
||||
return Response.status(500).build();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
package com.ctrip.zeus.service;
|
||||
|
||||
/**
|
||||
* User: mag
|
||||
* Date: 3/26/2015
|
||||
* Time: 10:33 AM
|
||||
*/
|
||||
public class SlbException extends Exception{
|
||||
public SlbException(){
|
||||
super();
|
||||
}
|
||||
|
||||
public SlbException(String message, Throwable t){
|
||||
super(message,t);
|
||||
}
|
||||
|
||||
public SlbException(Throwable t){
|
||||
super(t);
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
package com.ctrip.zeus.service.nginx;
|
||||
|
||||
/**
|
||||
* @author:xingchaowang
|
||||
* @date: 3/17/2015.
|
||||
*/
|
||||
public interface NginxAgentService {
|
||||
void reloadConf(String slbName);
|
||||
}
|
|
@ -1,8 +1,7 @@
|
|||
package com.ctrip.zeus.service.nginx;
|
||||
|
||||
import com.ctrip.zeus.nginx.NginxResponse;
|
||||
import com.ctrip.zeus.nginx.NginxServerStatus;
|
||||
import com.ctrip.zeus.service.SlbException;
|
||||
import com.ctrip.zeus.nginx.entity.NginxResponse;
|
||||
import com.ctrip.zeus.nginx.entity.NginxServerStatus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -11,12 +10,28 @@ import java.util.List;
|
|||
* @date: 3/8/2015.
|
||||
*/
|
||||
public interface NginxService {
|
||||
NginxResponse load() throws SlbException;
|
||||
/**
|
||||
* load the colocated nginx server conf
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
NginxResponse load() throws Exception;
|
||||
|
||||
NginxServerStatus getStatus() throws SlbException;
|
||||
/**
|
||||
* fetch the status of colocated nginx server status
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
NginxServerStatus getStatus() throws Exception;
|
||||
|
||||
List<NginxResponse> loadAll() throws SlbException;
|
||||
/**
|
||||
* load all nginx server conf in the slb
|
||||
* @param slbName
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
List<NginxResponse> loadAll(String slbName) throws Exception;
|
||||
|
||||
List<NginxServerStatus> getStatusAll() throws SlbException;
|
||||
List<NginxServerStatus> getStatusAll(String slbName) throws Exception;
|
||||
|
||||
}
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
package com.ctrip.zeus.service.nginx.impl;
|
||||
|
||||
import com.ctrip.zeus.client.NginxClient;
|
||||
import com.ctrip.zeus.dal.core.NginxServerDao;
|
||||
import com.ctrip.zeus.dal.core.NginxServerDo;
|
||||
import com.ctrip.zeus.dal.core.NginxServerEntity;
|
||||
import com.ctrip.zeus.service.nginx.NginxAgentService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.unidal.dal.jdbc.DalException;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author:xingchaowang
|
||||
* @date: 3/17/2015.
|
||||
*/
|
||||
@Service("nginxAgentService")
|
||||
public class NginxAgentServiceImpl implements NginxAgentService {
|
||||
|
||||
@Resource
|
||||
private NginxServerDao nginxServerDao;
|
||||
|
||||
@Override
|
||||
public void reloadConf(String slbName) {
|
||||
try {
|
||||
List<NginxServerDo> list = nginxServerDao.findAllBySlbName(slbName, NginxServerEntity.READSET_FULL);
|
||||
for (NginxServerDo d : list) {
|
||||
System.out.println(d.getIp() + "###");
|
||||
NginxClient nginxClient = new NginxClient("http://"+d.getIp() + ":8099");
|
||||
try {
|
||||
nginxClient.load();
|
||||
System.out.println(d.getIp());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,10 +1,18 @@
|
|||
package com.ctrip.zeus.service.nginx.impl;
|
||||
|
||||
import com.ctrip.zeus.dal.core.*;
|
||||
import com.ctrip.zeus.nginx.NginxResponse;
|
||||
import com.ctrip.zeus.nginx.NginxServerStatus;
|
||||
import com.ctrip.zeus.client.NginxClient;
|
||||
import com.ctrip.zeus.dal.core.NginxServerDao;
|
||||
import com.ctrip.zeus.dal.core.NginxServerDo;
|
||||
import com.ctrip.zeus.dal.core.NginxServerEntity;
|
||||
import com.ctrip.zeus.model.entity.NginxConfServerData;
|
||||
import com.ctrip.zeus.model.entity.NginxConfUpstreamData;
|
||||
import com.ctrip.zeus.model.entity.Slb;
|
||||
import com.ctrip.zeus.model.entity.SlbServer;
|
||||
import com.ctrip.zeus.nginx.NginxOperator;
|
||||
import com.ctrip.zeus.service.SlbException;
|
||||
import com.ctrip.zeus.nginx.entity.NginxResponse;
|
||||
import com.ctrip.zeus.nginx.entity.NginxServerStatus;
|
||||
import com.ctrip.zeus.service.build.NginxConfService;
|
||||
import com.ctrip.zeus.service.model.SlbRepository;
|
||||
import com.ctrip.zeus.service.nginx.NginxService;
|
||||
import com.ctrip.zeus.util.S;
|
||||
import com.netflix.config.DynamicIntProperty;
|
||||
|
@ -12,15 +20,9 @@ import com.netflix.config.DynamicPropertyFactory;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.unidal.dal.jdbc.DalException;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -34,39 +36,30 @@ public class NginxServiceImpl implements NginxService {
|
|||
private static DynamicIntProperty adminServerPort = DynamicPropertyFactory.getInstance().getIntProperty("server.port", 8099);
|
||||
|
||||
@Resource
|
||||
private NginxServerDao nginxServerDao;
|
||||
@Resource
|
||||
private SlbDao slbDao;
|
||||
@Resource
|
||||
private BuildInfoDao buildInfoDao;
|
||||
@Resource
|
||||
private NginxConfDao nginxConfDao;
|
||||
@Resource
|
||||
private NginxConfServerDao nginxConfServerDao;
|
||||
@Resource
|
||||
private NginxConfUpstreamDao nginxConfUpstreamDao;
|
||||
private SlbRepository slbRepository;
|
||||
|
||||
@Resource
|
||||
private NginxConfService nginxConfService;
|
||||
|
||||
@Resource
|
||||
private NginxServerDao nginxServerDao;
|
||||
|
||||
@Override
|
||||
public NginxResponse load() throws SlbException {
|
||||
public NginxResponse load() throws Exception {
|
||||
String ip = S.getIp();
|
||||
try {
|
||||
NginxServerDo nginxServerDo = nginxServerDao.findByIp(ip, NginxServerEntity.READSET_FULL);
|
||||
SlbDo slbDo = slbDao.findByName(nginxServerDo.getSlbName(), SlbEntity.READSET_FULL);
|
||||
String slbName = slbDo.getName();
|
||||
BuildInfoDo buildInfoDo = buildInfoDao.findByName(slbName, BuildInfoEntity.READSET_FULL);
|
||||
int version = buildInfoDo.getCurrentTicket();
|
||||
Slb slb = slbRepository.getBySlbServer(ip);
|
||||
String slbName = slb.getName();
|
||||
int version = nginxConfService.getCurrentVersion(slbName);
|
||||
|
||||
NginxOperator nginxOperator = new NginxOperator(slbDo.getNginxConf(), slbDo.getNginxBin());
|
||||
writeConfToDisk(slbName, version, nginxOperator);
|
||||
// reload configuration
|
||||
NginxResponse response = reloadConf(nginxOperator);
|
||||
nginxServerDao.updateByPK(nginxServerDo.setVersion(version), NginxServerEntity.UPDATESET_FULL);
|
||||
return response;
|
||||
} catch (Exception e){
|
||||
LOGGER.error("Fail to update and reload configuration.",e);
|
||||
throw new SlbException(e);
|
||||
}
|
||||
NginxOperator nginxOperator = new NginxOperator(slb.getNginxConf(), slb.getNginxBin());
|
||||
writeConfToDisk(slbName, version, nginxOperator);
|
||||
// reload configuration
|
||||
NginxResponse response = reloadConf(nginxOperator);
|
||||
|
||||
// update the used version in the db
|
||||
NginxServerDo nginxServerDo =nginxServerDao.findByIp(ip, NginxServerEntity.READSET_FULL);
|
||||
nginxServerDao.updateByPK(nginxServerDo.setVersion(version), NginxServerEntity.UPDATESET_FULL);
|
||||
return response;
|
||||
}
|
||||
|
||||
private NginxResponse reloadConf(NginxOperator nginxOperator) throws IOException {
|
||||
|
@ -74,7 +67,7 @@ public class NginxServiceImpl implements NginxService {
|
|||
return nginxOperator.reloadConf();
|
||||
}
|
||||
|
||||
private void writeConfToDisk(String slbName, int version, NginxOperator nginxOperator) throws DalException, IOException {
|
||||
private void writeConfToDisk(String slbName, int version, NginxOperator nginxOperator) throws Exception {
|
||||
LOGGER.info("Start writing nginx configuration.");
|
||||
// write nginx conf
|
||||
writeNginxConf(slbName, version, nginxOperator);
|
||||
|
@ -85,111 +78,70 @@ public class NginxServiceImpl implements NginxService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public NginxServerStatus getStatus() throws SlbException {
|
||||
try {
|
||||
String ip = S.getIp();
|
||||
NginxServerDo nginxServerDo = nginxServerDao.findByIp(ip, NginxServerEntity.READSET_FULL);
|
||||
SlbDo slbDo = slbDao.findByName(nginxServerDo.getSlbName(), SlbEntity.READSET_FULL);
|
||||
NginxOperator nginxOperator = new NginxOperator(slbDo.getNginxConf(), slbDo.getNginxBin());
|
||||
return nginxOperator.getRuntimeStatus();
|
||||
}catch (Exception e){
|
||||
LOGGER.error("Fail to get nginx status",e);
|
||||
throw new SlbException(e);
|
||||
}
|
||||
public NginxServerStatus getStatus() throws Exception {
|
||||
String ip = S.getIp();
|
||||
Slb slb = slbRepository.getBySlbServer(ip);
|
||||
NginxOperator nginxOperator = new NginxOperator(slb.getNginxConf(), slb.getNginxBin());
|
||||
return nginxOperator.getRuntimeStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NginxResponse> loadAll() throws SlbException {
|
||||
try {
|
||||
List<NginxResponse> result = new ArrayList<>();
|
||||
String ip = S.getIp();
|
||||
result.add(load());
|
||||
NginxServerDo nginxServerDo = nginxServerDao.findByIp(ip, NginxServerEntity.READSET_FULL);
|
||||
List<NginxServerDo> serverList = nginxServerDao.findAllBySlbName(nginxServerDo.getSlbName(), NginxServerEntity.READSET_FULL);
|
||||
for (NginxServerDo serverDo : serverList) {
|
||||
if (ip.equals(serverDo.getIp())) {
|
||||
continue;
|
||||
}
|
||||
String responseStr = request(buildRemoteUrl(serverDo.getIp(), "/nginx/load"));
|
||||
NginxResponse response = NginxResponse.fromJson(responseStr);
|
||||
result.add(response);
|
||||
public List<NginxResponse> loadAll(String slbName) throws Exception {
|
||||
List<NginxResponse> result = new ArrayList<>();
|
||||
String ip = S.getIp();
|
||||
Slb slb = slbRepository.get(slbName);
|
||||
|
||||
List<SlbServer> slbServers = slb.getSlbServers();
|
||||
for (SlbServer slbServer : slbServers) {
|
||||
if (ip.equals(slbServer.getIp())) {
|
||||
result.add(load());
|
||||
continue;
|
||||
}
|
||||
return result;
|
||||
}catch (Exception e){
|
||||
LOGGER.error("error happens when load nginx conf",e);
|
||||
throw new SlbException(e);
|
||||
NginxClient nginxClient = new NginxClient(buildRemoteUrl(slbServer.getIp()));
|
||||
NginxResponse response = nginxClient.load();
|
||||
result.add(response);
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NginxServerStatus> getStatusAll() throws SlbException {
|
||||
try {
|
||||
List<NginxServerStatus> result = new ArrayList<>();
|
||||
String ip = S.getIp();
|
||||
result.add(getStatus());
|
||||
NginxServerDo nginxServerDo = nginxServerDao.findByIp(ip, NginxServerEntity.READSET_FULL);
|
||||
List<NginxServerDo> serverList = nginxServerDao.findAllBySlbName(nginxServerDo.getSlbName(), NginxServerEntity.READSET_FULL);
|
||||
for (NginxServerDo serverDo : serverList) {
|
||||
if (ip.equals(serverDo.getIp())) {
|
||||
continue;
|
||||
}
|
||||
String responseStr = request(buildRemoteUrl(serverDo.getIp(), "/nginx/load"));
|
||||
NginxServerStatus response = NginxServerStatus.fromJson(responseStr);
|
||||
result.add(response);
|
||||
public List<NginxServerStatus> getStatusAll(String slbName) throws Exception {
|
||||
List<NginxServerStatus> result = new ArrayList<>();
|
||||
String ip = S.getIp();
|
||||
|
||||
Slb slb = slbRepository.get(slbName);
|
||||
for (SlbServer slbServer : slb.getSlbServers()) {
|
||||
if (ip.equals(slbServer.getIp())) {
|
||||
result.add(getStatus());
|
||||
continue;
|
||||
}
|
||||
return result;
|
||||
}catch (Exception e){
|
||||
LOGGER.error("error happens when load nginx conf",e);
|
||||
throw new SlbException(e);
|
||||
NginxClient nginxClient = new NginxClient(buildRemoteUrl(slbServer.getIp()));
|
||||
NginxServerStatus response = nginxClient.getNginxServerStatus();
|
||||
result.add(response);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private String buildRemoteUrl(String ip, String uri) {
|
||||
return "http://" + ip + ":" + adminServerPort.get() + uri;
|
||||
private String buildRemoteUrl(String ip) {
|
||||
return "http://" + ip + ":" + adminServerPort.get();
|
||||
}
|
||||
|
||||
private String request(String urlStr) throws IOException {
|
||||
|
||||
URL url = new URL(urlStr);
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setConnectTimeout(10000);
|
||||
conn.setReadTimeout(1000 * 20);
|
||||
|
||||
conn.setRequestMethod("GET");
|
||||
|
||||
InputStream inputStream = conn.getInputStream();
|
||||
String res = consumeStream(inputStream);
|
||||
inputStream.close();
|
||||
return res;
|
||||
}
|
||||
|
||||
private String consumeStream(InputStream inputStream) throws IOException {
|
||||
BufferedInputStream bis = new BufferedInputStream(inputStream);
|
||||
ByteArrayOutputStream buf = new ByteArrayOutputStream();
|
||||
int result = bis.read();
|
||||
while (result != -1) {
|
||||
byte b = (byte) result;
|
||||
buf.write(b);
|
||||
result = bis.read();
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
private void writeNginxConf(String slbName, int version, NginxOperator nginxOperator) throws DalException, IOException {
|
||||
String nginxConf = nginxConfDao.findBySlbNameAndVersion(slbName,version, NginxConfEntity.READSET_FULL).getContent();
|
||||
private void writeNginxConf(String slbName, int version, NginxOperator nginxOperator) throws Exception {
|
||||
String nginxConf = nginxConfService.getNginxConf(slbName, version);
|
||||
nginxOperator.writeNginxConf(nginxConf);
|
||||
}
|
||||
|
||||
private void writeServerConf(String slbName, int version, NginxOperator nginxOperator) throws DalException, IOException {
|
||||
List<NginxConfServerDo> nginxConfServerDoList = nginxConfServerDao.findAllBySlbNameAndVersion(slbName, version, NginxConfServerEntity.READSET_FULL);
|
||||
for (NginxConfServerDo d : nginxConfServerDoList) {
|
||||
private void writeServerConf(String slbName, int version, NginxOperator nginxOperator) throws Exception {
|
||||
List<NginxConfServerData> nginxConfServerDataList = nginxConfService.getNginxConfServer(slbName, version);
|
||||
for (NginxConfServerData d : nginxConfServerDataList) {
|
||||
nginxOperator.writeServerConf(d.getName(), d.getContent());
|
||||
}
|
||||
}
|
||||
|
||||
private void writeUpstreamConf(String slbName, int version, NginxOperator nginxOperator) throws DalException, IOException {
|
||||
List<NginxConfUpstreamDo> nginxConfUpstreamDoList = nginxConfUpstreamDao.findAllBySlbNameAndVersion(slbName, version, NginxConfUpstreamEntity.READSET_FULL);
|
||||
for (NginxConfUpstreamDo d : nginxConfUpstreamDoList) {
|
||||
private void writeUpstreamConf(String slbName, int version, NginxOperator nginxOperator) throws Exception {
|
||||
List<NginxConfUpstreamData> nginxConfUpstreamList = nginxConfService.getNginxConfUpstream(slbName, version);
|
||||
for (NginxConfUpstreamData d : nginxConfUpstreamList) {
|
||||
nginxOperator.writeUpstreamsConf(d.getName(), d.getContent());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
package com.ctrip.zeus.service.status;
|
||||
|
||||
import com.ctrip.zeus.model.entity.AppServerStatus;
|
||||
import com.ctrip.zeus.model.entity.AppStatus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* User: mag
|
||||
* Date: 4/1/2015
|
||||
* Time: 10:54 AM
|
||||
*/
|
||||
public interface AppStatusService {
|
||||
/**
|
||||
* Find all app status
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
List<AppStatus> getAllAppStatus() throws Exception;
|
||||
|
||||
/**
|
||||
* Find all app status in the specific slb cluster
|
||||
* @param slbName
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
List<AppStatus> getAllAppStatus(String slbName) throws Exception;
|
||||
|
||||
List<AppStatus> getAppStatus(String appName) throws Exception;
|
||||
|
||||
AppStatus getAppStatus(String appName,String slbName) throws Exception;
|
||||
|
||||
AppServerStatus getAppServerStatus(String appName, String slbName, String ip) throws Exception;
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
package com.ctrip.zeus.service.status.impl;
|
||||
|
||||
import com.ctrip.zeus.client.NginxClient;
|
||||
import com.ctrip.zeus.model.entity.AppServerStatus;
|
||||
import com.ctrip.zeus.model.entity.AppSlb;
|
||||
import com.ctrip.zeus.model.entity.AppStatus;
|
||||
import com.ctrip.zeus.model.entity.Slb;
|
||||
import com.ctrip.zeus.nginx.entity.S;
|
||||
import com.ctrip.zeus.nginx.entity.UpstreamStatus;
|
||||
import com.ctrip.zeus.service.model.AppRepository;
|
||||
import com.ctrip.zeus.service.model.SlbRepository;
|
||||
import com.ctrip.zeus.service.status.AppStatusService;
|
||||
import com.ctrip.zeus.service.status.StatusService;
|
||||
import com.netflix.config.DynamicIntProperty;
|
||||
import com.netflix.config.DynamicPropertyFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* User: mag
|
||||
* Date: 4/1/2015
|
||||
* Time: 2:26 PM
|
||||
*/
|
||||
@Service("appStatusService")
|
||||
public class AppStatusServiceImpl implements AppStatusService {
|
||||
private static DynamicIntProperty nginxStatusPort = DynamicPropertyFactory.getInstance().getIntProperty("slb.nginx.status-port", 10001);
|
||||
|
||||
@Resource
|
||||
SlbRepository slbRepository;
|
||||
|
||||
@Resource
|
||||
AppRepository appRepository;
|
||||
|
||||
@Resource
|
||||
StatusService statusService;
|
||||
|
||||
@Override
|
||||
public List<AppStatus> getAllAppStatus() throws Exception {
|
||||
List<AppStatus> result = new ArrayList<>();
|
||||
List<Slb> slbList = slbRepository.list();
|
||||
for (Slb slb : slbList) {
|
||||
result.addAll(getAllAppStatus(slb.getName()));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AppStatus> getAllAppStatus(String slbName) throws Exception {
|
||||
List<AppStatus> result = new ArrayList<>();
|
||||
|
||||
List<AppSlb> appSlbs = slbRepository.listAppSlbsBySlb(slbName);
|
||||
for (AppSlb appSlb : appSlbs) {
|
||||
AppStatus appStatus = getAppStatus(appSlb.getAppName(), appSlb.getSlbName());
|
||||
result.add(appStatus);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AppStatus> getAppStatus(String appName) throws Exception {
|
||||
List<AppStatus> result = new ArrayList<>();
|
||||
List<Slb> slbList = slbRepository.listByApps(new String[]{appName});
|
||||
for (Slb slb : slbList) {
|
||||
String slbName = slb.getName();
|
||||
result.add(getAppStatus(appName,slbName));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppStatus getAppStatus(String appName, String slbName) throws Exception {
|
||||
AppStatus status = new AppStatus();
|
||||
status.setAppName(appName);
|
||||
status.setSlbName(slbName);
|
||||
|
||||
List<String> appServerList = appRepository.listAppServersByApp(appName);
|
||||
for (String appServer : appServerList) {
|
||||
AppServerStatus serverStatus = getAppServerStatus(appName, slbName, appServer);
|
||||
status.addAppServerStatus(serverStatus);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppServerStatus getAppServerStatus(String appName, String slbName, String ip) throws Exception {
|
||||
AppServerStatus appServerStatus = new AppServerStatus();
|
||||
appServerStatus.setIp(ip);
|
||||
|
||||
boolean memberUp = statusService.getAppServerStatus(slbName,appName,ip);
|
||||
boolean serverUp = statusService.getServerStatus(ip);
|
||||
boolean backendUp = getUpstreamStatus(ip);
|
||||
|
||||
appServerStatus.setServer(serverUp);
|
||||
appServerStatus.setMember(memberUp);
|
||||
appServerStatus.setUp(backendUp);
|
||||
|
||||
return appServerStatus;
|
||||
}
|
||||
|
||||
//TODO: should include port to get accurate upstream
|
||||
private boolean getUpstreamStatus(String ip) throws IOException {
|
||||
NginxClient nginxClient = new NginxClient("127.0.0.1:" + nginxStatusPort.get());
|
||||
UpstreamStatus upstreamStatus = nginxClient.getUpstreamStatus();
|
||||
List<S> servers = upstreamStatus.getServers().getServer();
|
||||
for (S server : servers) {
|
||||
String ipPort = server.getName();
|
||||
String[] ipPorts = ipPort.split(":");
|
||||
if (ipPorts.length == 2){
|
||||
if (ipPorts[0].equals(ip)){
|
||||
return "up".equalsIgnoreCase(server.getStatus());
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -102,6 +102,7 @@
|
|||
</entity>
|
||||
<entity name="app-status">
|
||||
<element name="app-name" value-type="String" />
|
||||
<element name="slb-name" value-type="String" />
|
||||
<entity-ref name="app-server-status" type="list" names="app-server-statuses" />
|
||||
</entity>
|
||||
<entity name="app-server-status">
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
<model>
|
||||
<entity name="nginx" root="true">
|
||||
<entity-ref name="upstream-status" />
|
||||
<entity-ref name="nginx-response" />
|
||||
<entity-ref name="nginx-server-status" />
|
||||
<entity-ref name="nginx-response-list" />
|
||||
<entity-ref name="nginx-server-status-list" />
|
||||
</entity>
|
||||
<entity name="upstream-status">
|
||||
<entity-ref name="servers" />
|
||||
|
@ -21,5 +25,24 @@
|
|||
<element name="type" value-type="String" />
|
||||
<element name="port" value-type="int" />
|
||||
</entity>
|
||||
<entity name="nginx-response">
|
||||
<element name="succeed" value-type="boolean" />
|
||||
<element name="server-ip" value-type="String" />
|
||||
<element name="err-msg" value-type="String" />
|
||||
<element name="out-msg" value-type="String" />
|
||||
</entity>
|
||||
<entity name="nginx-server-status">
|
||||
<element name="server-ip" value-type="String" />
|
||||
<element name="status" value-type="String" />
|
||||
<element name="active-connections" value-type="int" />
|
||||
</entity>
|
||||
<entity name="nginx-response-list">
|
||||
<element name="total" value-type="int" />
|
||||
<entity-ref name="nginx-response" type="list" names="nginx-responses" xml-indent="true" />
|
||||
</entity>
|
||||
<entity name="nginx-server-status-list">
|
||||
<element name="total" value-type="int" />
|
||||
<entity-ref name="nginx-server-status" type="list" names="nginx-server-statuses" xml-indent="true" />
|
||||
</entity>
|
||||
</model>
|
||||
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
package com.ctrip.zeus.nginx;
|
||||
|
||||
import com.ctrip.zeus.model.entity.*;
|
||||
import com.ctrip.zeus.nginx.conf.ConfWriter;
|
||||
import com.ctrip.zeus.nginx.conf.NginxConf;
|
||||
import com.ctrip.zeus.nginx.conf.ServerConf;
|
||||
import com.ctrip.zeus.nginx.conf.UpstreamsConf;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
|
||||
<app-status>
|
||||
<app-name>app1</app-name>
|
||||
<slb-name>default</slb-name>
|
||||
<app-server-status>
|
||||
<ip>192.168.1.1</ip>
|
||||
<port>80</port>
|
||||
|
|
|
@ -27,4 +27,29 @@
|
|||
</server>
|
||||
</servers>
|
||||
</upstream-status>
|
||||
<nginx-response>
|
||||
<succeed>true</succeed>
|
||||
<server-ip>127.0.0.1</server-ip>
|
||||
<err-msg>error</err-msg>
|
||||
<out-msg></out-msg>
|
||||
</nginx-response>
|
||||
<nginx-server-status>
|
||||
<server-ip>127.0.0.1</server-ip>
|
||||
<status>up</status>
|
||||
<active-connections>100</active-connections>
|
||||
</nginx-server-status>
|
||||
<nginx-response-list>
|
||||
<total>11</total>
|
||||
<nginx-responses>
|
||||
<nginx-response/>
|
||||
<nginx-response/>
|
||||
</nginx-responses>
|
||||
</nginx-response-list>
|
||||
<nginx-server-status-list>
|
||||
<total>11</total>
|
||||
<nginx-server-statuses>
|
||||
<nginx-server-status/>
|
||||
<nginx-server-status/>
|
||||
</nginx-server-statuses>
|
||||
</nginx-server-status-list>
|
||||
</nginx>
|
Loading…
Reference in a new issue