/*
* Copyright 1999-2015 dangdang.com.
* <p>
* 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.
* </p>
*/
package com.dangdang.ddframe.job.lite.internal.storage;
import lombok.RequiredArgsConstructor;
/**
* 作业节点路径类.
*
* <p>
* 作业节点是在普通的节点前加上作业名称的前缀.
* </p>
*
* @author zhangliang
*/
@RequiredArgsConstructor
public final class JobNodePath {
private static final String LEADER_HOST_NODE = "leader/election/instance";
private static final String CONFIG_NODE = "config";
private static final String SERVERS_NODE = "servers";
private static final String INSTANCES_NODE = "instances";
private static final String SHARDING_NODE = "sharding";
private final String jobName;
/**
* 获取节点全路径.
*
* @param node 节点名称
* @return 节点全路径
*/
public String getFullPath(final String node) {
return String.format("/%s/%s", jobName, node);
}
/**
* 获取配置节点根路径.
*
* @return 配置节点根路径
*/
public String getConfigNodePath() {
return String.format("/%s/%s", jobName, CONFIG_NODE);
}
/**
* 获取leader选举地址节点路径.
*
* @return leader选举地址节点路径
*/
public String getLeaderHostNodePath() {
return String.format("/%s/%s", jobName, LEADER_HOST_NODE);
}
/**
* 获取作业节点IP地址根路径.
*
* @return 作业节点IP地址根路径
*/
public String getServerNodePath() {
return String.format("/%s/%s", jobName, SERVERS_NODE);
}
/**
* 根据IP地址获取作业节点路径.
*
* @param serverIp 作业服务器IP地址
* @return 作业节点IP地址路径
*/
public String getServerNodePath(final String serverIp) {
return String.format("%s/%s", getServerNodePath(), serverIp);
}
/**
* 获取作业实例节点根路径.
*
* @return 作业实例节点根路径
*/
public String getInstancesNodePath() {
return String.format("/%s/%s", jobName, INSTANCES_NODE);
}
/**
* 根据作业实例ID获取作业实例节点路径.
*
* @param instanceId 作业实例ID
* @return 作业实例节点路径
*/
public String getInstanceNodePath(final String instanceId) {
return String.format("%s/%s", getInstancesNodePath(), instanceId);
}
/**
* 获取分片节点根路径.
*
* @return 分片节点根路径
*/
public String getShardingNodePath() {
return String.format("/%s/%s", jobName, SHARDING_NODE);
}
/**
* 获取分片节点路径.
*
* @param item 分片项
* @param nodeName 子节点名称
* @return 分片节点路径
*/
public String getShardingNodePath(final String item, final String nodeName) {
return String.format("%s/%s/%s", getShardingNodePath(), item, nodeName);
}
}