/* * 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.lifecycle.internal.statistics; import com.dangdang.ddframe.job.lite.internal.storage.JobNodePath; import com.dangdang.ddframe.job.lite.lifecycle.api.ServerStatisticsAPI; import com.dangdang.ddframe.job.lite.lifecycle.domain.ServerBriefInfo; import com.dangdang.ddframe.job.reg.base.CoordinatorRegistryCenter; import lombok.RequiredArgsConstructor; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** * 作业服务器状态展示的实现类. * * @author caohao */ @RequiredArgsConstructor public final class ServerStatisticsAPIImpl implements ServerStatisticsAPI { private final CoordinatorRegistryCenter regCenter; @Override public int getServersTotalCount() { Set<String> servers = new HashSet<>(); for (String jobName : regCenter.getChildrenKeys("/")) { JobNodePath jobNodePath = new JobNodePath(jobName); for (String each : regCenter.getChildrenKeys(jobNodePath.getServerNodePath())) { servers.add(each); } } return servers.size(); } @Override public Collection<ServerBriefInfo> getAllServersBriefInfo() { ConcurrentHashMap<String, ServerBriefInfo> servers = new ConcurrentHashMap<>(); for (String jobName : regCenter.getChildrenKeys("/")) { JobNodePath jobNodePath = new JobNodePath(jobName); for (String each : regCenter.getChildrenKeys(jobNodePath.getServerNodePath())) { servers.putIfAbsent(each, new ServerBriefInfo(each)); ServerBriefInfo serverInfo = servers.get(each); if ("DISABLED".equalsIgnoreCase(regCenter.get(jobNodePath.getServerNodePath(each)))) { serverInfo.getDisabledJobsNum().incrementAndGet(); } serverInfo.getJobNames().add(jobName); serverInfo.setJobsNum(serverInfo.getJobNames().size()); } List<String> instances = regCenter.getChildrenKeys(jobNodePath.getInstancesNodePath()); for (String each : instances) { String serverIp = each.split("@-@")[0]; ServerBriefInfo serverInfo = servers.get(serverIp); if (null != serverInfo) { serverInfo.getInstances().add(each); serverInfo.setInstancesNum(serverInfo.getInstances().size()); } } } List<ServerBriefInfo> result = new ArrayList<>(servers.values()); Collections.sort(result); return result; } }