blob: f6e2c58876eba46409047ec86e24d075806fc414 [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.bookkeeper.http;
import java.util.HashMap;
import java.util.Map;
/**
* Provide the mapping of http endpoints and handlers and function
* to bind endpoint to the corresponding handler.
*/
public abstract class HttpRouter<Handler> {
// Define endpoints here.
public static final String HEARTBEAT = "/heartbeat";
public static final String SERVER_CONFIG = "/api/v1/config/server_config";
public static final String METRICS = "/metrics";
// ledger
public static final String DELETE_LEDGER = "/api/v1/ledger/delete";
public static final String LIST_LEDGER = "/api/v1/ledger/list";
public static final String GET_LEDGER_META = "/api/v1/ledger/metadata";
public static final String READ_LEDGER_ENTRY = "/api/v1/ledger/read";
// bookie
public static final String LIST_BOOKIES = "/api/v1/bookie/list_bookies";
public static final String LIST_BOOKIE_INFO = "/api/v1/bookie/list_bookie_info";
public static final String LAST_LOG_MARK = "/api/v1/bookie/last_log_mark";
public static final String LIST_DISK_FILE = "/api/v1/bookie/list_disk_file";
public static final String EXPAND_STORAGE = "/api/v1/bookie/expand_storage";
public static final String GC = "/api/v1/bookie/gc";
public static final String GC_DETAILS = "/api/v1/bookie/gc_details";
public static final String BOOKIE_STATE = "/api/v1/bookie/state";
public static final String BOOKIE_IS_READY = "/api/v1/bookie/is_ready";
public static final String BOOKIE_INFO = "/api/v1/bookie/info";
// autorecovery
public static final String AUTORECOVERY_STATUS = "/api/v1/autorecovery/status";
public static final String RECOVERY_BOOKIE = "/api/v1/autorecovery/bookie";
public static final String LIST_UNDER_REPLICATED_LEDGER = "/api/v1/autorecovery/list_under_replicated_ledger";
public static final String WHO_IS_AUDITOR = "/api/v1/autorecovery/who_is_auditor";
public static final String TRIGGER_AUDIT = "/api/v1/autorecovery/trigger_audit";
public static final String LOST_BOOKIE_RECOVERY_DELAY = "/api/v1/autorecovery/lost_bookie_recovery_delay";
public static final String DECOMMISSION = "/api/v1/autorecovery/decommission";
private final Map<String, Handler> endpointHandlers = new HashMap<>();
public HttpRouter(AbstractHttpHandlerFactory<Handler> handlerFactory) {
this.endpointHandlers.put(HEARTBEAT, handlerFactory.newHandler(HttpServer.ApiType.HEARTBEAT));
this.endpointHandlers.put(SERVER_CONFIG, handlerFactory.newHandler(HttpServer.ApiType.SERVER_CONFIG));
this.endpointHandlers.put(METRICS, handlerFactory.newHandler(HttpServer.ApiType.METRICS));
// ledger
this.endpointHandlers.put(DELETE_LEDGER, handlerFactory.newHandler(HttpServer.ApiType.DELETE_LEDGER));
this.endpointHandlers.put(LIST_LEDGER, handlerFactory.newHandler(HttpServer.ApiType.LIST_LEDGER));
this.endpointHandlers.put(GET_LEDGER_META, handlerFactory.newHandler(HttpServer.ApiType.GET_LEDGER_META));
this.endpointHandlers.put(READ_LEDGER_ENTRY, handlerFactory.newHandler(HttpServer.ApiType.READ_LEDGER_ENTRY));
// bookie
this.endpointHandlers.put(LIST_BOOKIES, handlerFactory.newHandler(HttpServer.ApiType.LIST_BOOKIES));
this.endpointHandlers.put(LIST_BOOKIE_INFO, handlerFactory.newHandler(HttpServer.ApiType.LIST_BOOKIE_INFO));
this.endpointHandlers.put(LAST_LOG_MARK, handlerFactory.newHandler(HttpServer.ApiType.LAST_LOG_MARK));
this.endpointHandlers.put(LIST_DISK_FILE, handlerFactory.newHandler(HttpServer.ApiType.LIST_DISK_FILE));
this.endpointHandlers.put(EXPAND_STORAGE, handlerFactory.newHandler(HttpServer.ApiType.EXPAND_STORAGE));
this.endpointHandlers.put(GC, handlerFactory.newHandler(HttpServer.ApiType.GC));
this.endpointHandlers.put(GC_DETAILS, handlerFactory.newHandler(HttpServer.ApiType.GC_DETAILS));
this.endpointHandlers.put(BOOKIE_STATE, handlerFactory.newHandler(HttpServer.ApiType.BOOKIE_STATE));
this.endpointHandlers.put(BOOKIE_IS_READY, handlerFactory.newHandler(HttpServer.ApiType.BOOKIE_IS_READY));
this.endpointHandlers.put(BOOKIE_INFO, handlerFactory.newHandler(HttpServer.ApiType.BOOKIE_INFO));
// autorecovery
this.endpointHandlers.put(AUTORECOVERY_STATUS, handlerFactory
.newHandler(HttpServer.ApiType.AUTORECOVERY_STATUS));
this.endpointHandlers.put(RECOVERY_BOOKIE, handlerFactory.newHandler(HttpServer.ApiType.RECOVERY_BOOKIE));
this.endpointHandlers.put(LIST_UNDER_REPLICATED_LEDGER,
handlerFactory.newHandler(HttpServer.ApiType.LIST_UNDER_REPLICATED_LEDGER));
this.endpointHandlers.put(WHO_IS_AUDITOR, handlerFactory.newHandler(HttpServer.ApiType.WHO_IS_AUDITOR));
this.endpointHandlers.put(TRIGGER_AUDIT, handlerFactory.newHandler(HttpServer.ApiType.TRIGGER_AUDIT));
this.endpointHandlers.put(LOST_BOOKIE_RECOVERY_DELAY,
handlerFactory.newHandler(HttpServer.ApiType.LOST_BOOKIE_RECOVERY_DELAY));
this.endpointHandlers.put(DECOMMISSION, handlerFactory.newHandler(HttpServer.ApiType.DECOMMISSION));
}
/**
* Bind all endpoints to corresponding handlers.
*/
public void bindAll() {
for (Map.Entry<String, Handler> entry : endpointHandlers.entrySet()) {
bindHandler(entry.getKey(), entry.getValue());
}
}
/**
* Bind the given endpoint to its corresponding handlers.
* @param endpoint http endpoint
* @param handler http handler
*/
public abstract void bindHandler(String endpoint, Handler handler);
}