All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.joyqueue.service.impl.BrokerRestUrlMappingServiceImpl Maven / Gradle / Ivy

/**
 * Copyright 2019 The JoyQueue Authors.
 *
 * 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 org.joyqueue.service.impl;

import org.joyqueue.model.domain.Broker;
import org.joyqueue.service.BrokerRestUrlMappingService;
import org.joyqueue.util.NullUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * 托管url mapping ,要求field name以Path结尾,
 * 参数用String.format占位符
 *
 **/
@Service("brokerRestUrlMappingService")
public class BrokerRestUrlMappingServiceImpl implements BrokerRestUrlMappingService {
    private Logger logger= LoggerFactory.getLogger(BrokerRestUrlMappingServiceImpl.class);

    /** message preview pending path  */
    private static final String pendingByteMessagePath="/manage/topic/%s/app/%s/message/pending?count=%s";
    /** message preview path  */
    private static final String previewMessagePath="/manage/topic/%s/app/%s/message/view?count=%s";

    private String lastestMessagePath="/manage/topic/%s/app/%s/message/last";
    private String partitoinMessagePath="/manage/topic/%s/app/%s/partition/%d/message";

    /** monitor path */
    private String appMonitorPath="/monitor/topic/%s/app/%s/%s"; // topic|app|type{producer/consumer}
    private String appPartitionMonitorPath="/monitor/topic/%s/app/%s/%s/partitions"; // topic|app|type{producer/consumer}
    private String appClientMonitorPath="/monitor/topic/%s/app/%s/%s/connections/detail";

    private String appConnectionPath="/monitor/topic/%s/app/%s/connections";   //monitor/topic/:topic/app/:app/connections
    private String consumerPartitionGroupsMonitorPath="/monitor/topic/%s/app/%s/consumer/partitionGroup/%s";///monitor/topic/:topic/app/:app/consumer/partitionGroup/:partitionGroupId
    private String partitionGroupsMonitorPath="/monitor/topic/%s/app/%s/partitionGroup/%s";  //monitor/topic/:topic/app/:app/partitionGroup/:partitionGroupId
    private String appPartitionGroupsMonitorPath="/monitor/topic/%s/app/%s/%s/partitionGroup/%s";///monitor/topic/:topic/app/:app/{consumer|producer}/partitionGroup/:partitionGroupId
//    /monitor/topic/:topic/app/:app/consumer
    private String appTopicMonitorConsumerPath ="/monitor/topic/%s/app/%s/consumer";
//    /monitor/topic/:topic/app/:app/producer
    private String appTopicMonitorProducerPath ="/monitor/topic/%s/app/%s/producer";
//    /monitor/connections/detail
    private String appConnectionDetailPath = "/monitor/connections/detail";
    //    /manage/topic/:topic/partitionGroup/:partitionGroup/store/metric
    private String partitiongroupIndexPath="/manage/topic/%s/partitionGroup/%s/store/metric";

    /** offset management*/
    private String appConsumeOffsetMonitorPath="/manage/topic/%s/app/%s/acks"; // topic|app
    private String appPartitionOffsetMonitorPath="/manage/topic/%s/app/%s/partition/%s/ack";// topic|app|partition,method=get|put
    private String resetAppPartitionOffsetPath="/manage/topic/%s/app/%s/partition/%s/ack?index=%s";// topic|app|partition,method=get|put
    private String resetAppPartitionOffsetByTimePath="/manage/topic/%s/app/%s/partition/%s/ackByTime?timestamp=%s";// topic|app|partition,method=put
    private String resetAppTopicOffsetByTimePath="/manage/topic/%s/app/%s/ackByTime?timestamp=%s";// topic|app|partition,method=put
    private String getTopicAppOffsetPath = "/manage/topic/%s/app/%s/timestamp/%s/ackByTime"; ///manage/topic/:topic/app/:app/timestamp/%s/ackByTime,method=get
//    /manage/topic/:topic/app/:app/partition/:partition/message ?count=&index=
    private String getPartitionMessageByIndexPath="/manage/topic/%s/app/%s/partition/%s/message?index=%s&count=%s";

//    /manage/topic/:topic/app/:app/partition/:partition/ackByTime
    private String getTopicAppPartitionIndexByTimePath="/manage/topic/%s/app/%s/partition/%s/ackByTime?timestamp=%s";
    /** topic */
    private String topicPartitionGroupsMonitorPath ="/monitor/topic/%s/app/%s/partitionGroups";
    private String topicPartitionGroupMetadataPath="/monitor/topic/%s/metadata?isCluster=true";

    /** partition group*/
    private String partitionGroupCoordinatorInfoMonitorPath="/monitor/coordinator/group/%s/detail"; // groupId
    private String partitionGroupCoordinatorDetailMonitorPath="/monitor/coordinator/namespace/%s/group/%s?topic=%s&isFormat=true";    // namespace|groupId
//    /manage/topic/:topic/partitionGroup/detail
    private String partitionGroupDetailPath = "/manage/topic/%s/partitionGroup/detail";


    /** archive monitor*/
    private String archiveMonitorPath="/monitor/archive/info";

    /** store **/
    private String topicListPath = "/manage/topic/list";
    private String storeTreeViewPath = "/manage/store/tree/view/%s"; // recursive
    private String deleteGarbageFilePath = "/manage/store/delete/garbage/file/%s/%s"; // filename|retain

    /** broker **/
    private String brokerMonitorPath = "/monitor/broker";
    private String startupInfoPath = "/startInfo";


    /** proxy monitor */
    private String mqttProxySummaryMonitorPath="/monitor/mqtt/proxy/summary";
    private String mqttProxyConnectionsMonitorPath="/monitor/mqtt/proxy/connections?page=%s&pageSize=%s";
    private String mqttProxyConnectionMonitorPath="/monitor/mqtt/proxy/connections/%s"; //params:clientId
    private String mqttProxySessionsMonitorPath="/monitor/mqtt/proxy/sessions?page=%s&pageSize=%s";
    private String mqttProxySessionMonitorPath="/monitor/mqtt/proxy/sessions/%s";        //params:clientId
    private String mqttProxyThreadsMonitorPath="/monitor/mqtt/proxy/%s/threads/summary";     // consume|delivery
    private String mqttProxyThreadClientsMonitorPath="/monitor/mqtt/proxy/%s/clients/detail/thread/%s?page=%s&pageSize=%s";//consume|delivery/:threadId
    private String mqttProxyApplicationPublishMonitorPath="/monitor/mqtt/proxy/publish/total/app/%s"; //application
    private String mqttProxyApplicationTopicPublishMonitorPath="/monitor/mqtt/proxy/publish/total/app/%s/topic/%s"; //:application/:topic
    private String mqttProxyApplicationClientPublishMonitorPath="/monitor/mqtt/proxy/publish/total/client/%s"; //clientID
    private String mqttProxyConnectionDisconnectManagementPath="/manage/mqtt/proxy/connection/disconnect/%s";  //clientID

    private String mqttProxyClientDebugStatusManagementPath="/manage/mqtt/proxy/set/consume/client/debug/status/%s?status=%s";  //clientID|put
    private String mqttProxyThreadDebugStatusManagementPath="/manage/mqtt/proxy/set/consume/thread/debug/status/%s?status=%s";  //threadId|put


    private String taskExecutorStateMonitorPath="/task/executor/state/monitor";
    /**
     * host:port template
     **/
    private String brokerRestUrl="http://%s:%s";



    private Map urlMapping=new HashMap<>(64);
    public BrokerRestUrlMappingServiceImpl(){
        try {
            loadUrlMapping();
        }catch (IllegalAccessException e){
            throw new IllegalStateException("parse broker routing config file failure!");
        }
    }

    private void loadUrlMapping() throws IllegalAccessException {
         Field[] fields= this.getClass().getDeclaredFields();
         String   key;
         for(Field f:fields){
             if(f.getName().endsWith("Path")){
                 key=f.getName().substring(0,f.getName().length()-4);
                 f.setAccessible(true);
                 urlMapping.put(key,(String)f.get(this));
                 logger.info(String.format("register broker rest monitorUrl,key:%s,value:%s",key,(String)f.get(this)));
             }
         }
    }

    @Override
    public String pathTemplate(String key) {
        String subPath=urlMapping.get(key);
        if(NullUtil.isEmpty(subPath)){
            logger.info("not found monitorUrl template "+key);
            return null;
        }
        return subPath;
    }

    @Override
    public String urlTemplate(String key) {
        return brokerRestUrl+pathTemplate(key);
    }

    @Override
    public String monitorUrl(Broker broker) {
        return String.format(brokerRestUrl,broker.getIp(),broker.getMonitorPort());
    }

    @Override
    public String url(String ip, int port) {
        return String.format(brokerRestUrl,ip,port);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy