
com.northernwall.hadrian.handlers.BasicHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Hadrian Show documentation
Show all versions of Hadrian Show documentation
Hadrian is a DevOps UI, Inventory, and Auditing system that plugs into other tools to execute actions.
/*
* Copyright 2014 Richard Thurston.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.northernwall.hadrian.handlers;
import com.google.gson.Gson;
import com.google.gson.JsonIOException;
import com.google.gson.stream.JsonWriter;
import com.northernwall.hadrian.config.Const;
import com.northernwall.hadrian.db.DataAccess;
import com.northernwall.hadrian.domain.Host;
import com.northernwall.hadrian.domain.Module;
import com.northernwall.hadrian.domain.Service;
import com.northernwall.hadrian.domain.Team;
import com.northernwall.hadrian.domain.Vip;
import com.northernwall.hadrian.handlers.routing.Http400BadRequestException;
import com.northernwall.hadrian.handlers.routing.Http404NotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.util.List;
import java.util.concurrent.Future;
import java.util.function.Predicate;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class BasicHandler extends AbstractHandler {
private final static Logger LOGGER = LoggerFactory.getLogger(BasicHandler.class);
private final DataAccess dataAccess;
private final Gson gson;
public BasicHandler(DataAccess dataAccess, Gson gson) {
this.dataAccess = dataAccess;
this.gson = gson;
}
public DataAccess getDataAccess() {
return dataAccess;
}
public Gson getGson() {
return gson;
}
protected final T fromJson(org.eclipse.jetty.server.Request request, Class classOfT) throws IOException {
Reader reader = new InputStreamReader(request.getInputStream());
T temp = gson.fromJson(reader, classOfT);
if (temp == null) {
LOGGER.warn("Stream->Json returned null");
throw new Http400BadRequestException("JSON payload is missing");
}
LOGGER.info("Stream->Json {}", gson.toJson(temp));
return temp;
}
protected final void toJson(HttpServletResponse response, Object data) throws IOException, JsonIOException {
response.setContentType(Const.JSON);
try (JsonWriter jw = new JsonWriter(new OutputStreamWriter(response.getOutputStream()))) {
getGson().toJson(data, data.getClass(), jw);
}
}
protected Team getTeam(Request request) {
return getTeam(
request.getParameter("teamId"),
request.getParameter("teamName"));
}
protected Team getTeam(String teamId, String teamName) {
if (teamId != null && !teamId.isEmpty()) {
Team team = dataAccess.getTeam(teamId);
if (team != null) {
return team;
}
throw new Http404NotFoundException("Could not find team with ID " + teamId);
}
if (teamName != null && !teamName.isEmpty()) {
for (Team team : dataAccess.getTeams()) {
if (team.getTeamName().equalsIgnoreCase(teamName)) {
return team;
}
}
}
throw new Http404NotFoundException("Could not find team");
}
protected Service getService(Request request) {
return getService(
request.getParameter("serviceId"),
request.getParameter("serviceName"));
}
protected Service getService(String serviceId, String serviceName) {
if (serviceId != null && !serviceId.isEmpty()) {
Service service = dataAccess.getService(serviceId);
if (service != null) {
return service;
}
throw new Http404NotFoundException("Could not find service with ID " + serviceId);
}
if (serviceName != null && !serviceName.isEmpty()) {
for (Service service : dataAccess.getActiveServices()) {
if (service.getServiceName().equalsIgnoreCase(serviceName)) {
return service;
}
}
}
throw new Http404NotFoundException("Could not find service");
}
protected Module getModule(Request request, Service service) {
return getModule(
request.getParameter("moduleId"),
request.getParameter("moduleName"),
service);
}
protected Module getModule(String moduleId, String moduleName, Service service) {
if (moduleId != null && !moduleId.isEmpty()) {
Module module = dataAccess.getModule(service.getServiceId(), moduleId);
if (module != null) {
return module;
}
}
if (moduleName != null && !moduleName.isEmpty()) {
for (Module module : dataAccess.getModules(service.getServiceId())) {
if (module.getModuleName().equalsIgnoreCase(moduleName)) {
return module;
}
}
}
throw new Http404NotFoundException("Could not find module");
}
protected String getFileName(Request request) {
return request.getParameter("fileName");
}
protected Host getHost(Request request, Service service) {
return getHost(
request.getParameter("hostId"),
request.getParameter("hostName"),
service);
}
protected Host getHost(String hostId, String hostName, Service service) {
if (hostId != null && !hostId.isEmpty()) {
Host host = dataAccess.getHost(service.getServiceId(), hostId);
if (host != null) {
return host;
}
}
if (hostName != null && !hostName.isEmpty()) {
for (Host host : dataAccess.getHosts(service.getServiceId())) {
if (host.getHostName().equalsIgnoreCase(hostName)) {
return host;
}
}
}
throw new Http404NotFoundException("Could not find host");
}
protected Vip getVip(Request request, Service service) {
return getVip(
request.getParameter("vipId"),
service);
}
protected Vip getVip(String vipId, Service service) {
if (vipId != null && !vipId.isEmpty()) {
Vip vip = dataAccess.getVip(service.getServiceId(), vipId);
if (vip != null) {
return vip;
}
}
throw new Http404NotFoundException("Could not find vip");
}
protected void waitForFutures(List futures, int loopMax, int loopSleep) {
if (futures == null || futures.isEmpty()) {
return;
}
for (int i = 0; i < loopMax; i++) {
try {
Thread.sleep(loopSleep);
} catch (InterruptedException ex) {
}
futures.removeIf(new Predicate() {
@Override
public boolean test(Future t) {
return t.isDone();
}
});
if (futures.isEmpty()) {
return;
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy