package org.openstack.atlas.api.mgmt.resources;
import org.openstack.atlas.cfg.PublicApiServiceConfigurationKeys;
import org.openstack.atlas.service.domain.services.helpers.RdnsHelper;
import org.openstack.atlas.util.config.MossoConfigValues;
import org.openstack.atlas.cfg.ConfigurationKey;
import org.openstack.atlas.osgi.cfg.commons.ApacheCommonsConfiguration;
import org.openstack.atlas.util.config.LbConfiguration;
import org.openstack.atlas.util.debug.Debug;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.Alerts;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancerAudit;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.LoadBalancerAudits;
import org.openstack.atlas.docs.loadbalancers.api.management.v1.ListOfStrings;
import org.openstack.atlas.service.domain.entities.LoadBalancer;
import org.openstack.atlas.service.domain.events.entities.Alert;
import org.openstack.atlas.service.domain.exceptions.BadRequestException;
import org.openstack.atlas.api.helpers.ResponseFactory;
import org.openstack.atlas.api.mgmt.resources.providers.ManagementDependencyProvider;
import org.openstack.atlas.cfg.RestApiConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openstack.atlas.util.b64aes.Aes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import static org.openstack.atlas.util.converters.DateTimeConverters.isoTocal;
import static javax.ws.rs.core.MediaType.APPLICATION_ATOM_XML;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.MediaType.APPLICATION_XML;
public class AuditResource extends ManagementDependencyProvider {
private static Log LOG = LogFactory.getLog(AuditResource.class.getName());
@GET
@Path("lbconfig")
@Produces({APPLICATION_JSON})
public Response retrieveLbConfig() {
LbConfiguration conf = new LbConfiguration();
MossoConfigValues[] keys = MossoConfigValues.values();
if (!isUserInRole("ops")) {
return ResponseFactory.accessDenied();
}
String jsonResponse = retrieveConfig(conf, keys);
return Response.status(200).entity(jsonResponse).build();
}
@GET
@Path("restconfig")
@Produces({APPLICATION_JSON})
public Response retrieveRestConfig() {
RestApiConfiguration conf = new RestApiConfiguration();
PublicApiServiceConfigurationKeys[] keys = PublicApiServiceConfigurationKeys.values();
if (!isUserInRole("ops")) {
return ResponseFactory.accessDenied();
}
String jsonResponse = retrieveConfig(conf, keys);
return Response.status(200).entity(jsonResponse).build();
}
@GET
@Path("status")
@Produces({APPLICATION_XML, APPLICATION_JSON, APPLICATION_ATOM_XML})
public Response retrieveLoadBalancersByStatus(@QueryParam("status") String status, @QueryParam("changes-since") String changedSince) {
Calendar changedCal = null;
try {
if (changedSince != null) {
changedCal = isoTocal(changedSince);
}
LoadBalancerAudits loadBalancerAudits = new LoadBalancerAudits();
List<LoadBalancerAudit> loadBalancerAuditList = new ArrayList<LoadBalancerAudit>();
LoadBalancerAudit loadBalancerAudit;
//TODO: dozer map it...
if (status != null) {
List<LoadBalancer> loadBalancers = loadBalancerService.getLoadBalancersForAudit(status, changedCal);
for (LoadBalancer lb : loadBalancers) {
loadBalancerAudit = new LoadBalancerAudit();
org.openstack.atlas.docs.loadbalancers.api.management.v1.Alerts alerts = null;
for (Alert domainCl : alertService.getByLoadBalancerId(lb.getId())) {
alerts = new org.openstack.atlas.docs.loadbalancers.api.management.v1.Alerts();
alerts.getAlerts().add(getDozerMapper().map(domainCl, org.openstack.atlas.docs.loadbalancers.api.management.v1.Alert.class, "SIMPLE_ALERT"));
}
loadBalancerAudit.setId(lb.getId());
loadBalancerAudit.setCreated(lb.getCreated());
loadBalancerAudit.setUpdated(lb.getUpdated());
loadBalancerAudit.setStatus(lb.getStatus().toString());
if (alerts == null) {
alerts = new Alerts();
}
loadBalancerAudit.getAlertAudits().add(alerts);
loadBalancerAudits.getLoadBalancerAudits().add(loadBalancerAudit);
}
return Response.status(200).entity(loadBalancerAudits).build();
} else {
BadRequestException badRequestException = new BadRequestException("Must supply a status to query against.");
return ResponseFactory.getErrorResponse(badRequestException, null, null);
}
} catch (Exception e) {
return ResponseFactory.getErrorResponse(e, null, null);
}
}
private String retrieveConfig(ApacheCommonsConfiguration conf, ConfigurationKey[] keys) {
int i;
String resp = "{";
for (i = 0; i < keys.length; i++) {
ConfigurationKey key = keys[i];
String keyStr = key.toString();
String valueStr;
try {
valueStr = conf.getString(key);
} catch (Exception ex) {
valueStr = "????";
}
if (!keyStr.contains("auth") && !keyStr.contains("pass"))
resp += String.format("\n\t\"%s\": \"%s\",", keyStr, valueStr);
}
if (resp.endsWith(","))
resp = resp.substring(0, resp.length()-1);
resp += "\n}";
return resp;
}
}