package com.hqyg;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.Resource;
import org.I0Itec.zkclient.ZkClient;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.junit.Before;
import org.junit.Test;
import com.hqyg.disjob.common.Constants;
import com.hqyg.disjob.common.util.LocalHost;
import com.hqyg.disjob.register.center.pool.ThreadLocalClient;
import com.hqyg.disjob.register.domain.EjobServerInfo;
import com.hqyg.disjob.register.domain.Job;
import com.hqyg.disjob.register.job.JobOperationService;
import com.hqyg.disjob.register.job.WeightedRoundRobinScheduling;
import com.hqyg.disjob.register.repository.ZnodeApiCuratorImpl;
import com.hqyg.disjob.register.rpc.SubscribeService;
import com.hqyg.disjob.rpc.client.HURL;
import com.hqyg.disjob.slaver.utils.SlaveUtils;
import com.google.gson.Gson;
/**
* <pre>
*
* File: ConsoleApiTest.java
*
* Copyright (c) 2016, globalegrow.com All Rights Reserved.
*
* Description:
* TODO
*
* Revision History
* Date, Who, What;
* 2016年6月14日 Disjob Initial.
*
* </pre>
*/
public class ConsoleApiTest extends BaseJunitTest
{
@Resource
public SubscribeService subscribeService;
@Resource
public JobOperationService jobOperationService;
@Resource
public ThreadLocalClient threadLocalClient;
HURL zkUrl = null;
HURL clientUrl = null;
ZkClient client = null;
CuratorFramework curatorClient = null;
SubscribeService sub = new SubscribeService();
final List<String> groupList = new ArrayList<String>();
final ConcurrentHashMap<String, List<String>> serverMap = new ConcurrentHashMap<String, List<String>>();
@Before
public void init(){
// zkUrl = new HURL("zookeeper", "10.40.6.100", 2181, "service4");
// clientUrl = new HURL(EJobConstants.PROTOCOL_MOTAN, "10.40.6.100", 2181, "2");
LocalHost localHost = new LocalHost();
//clientUrl = new HURL("oms",EJobConstants.PROTOCOL_MOTAN, localHost.getIp(), 1, "test");
clientUrl = new HURL("oms", localHost.getIp(), "test8");
client = new ZkClient("10.40.6.100:2181");
curatorClient = CuratorFrameworkFactory.builder()
.connectString("10.40.6.100:2181")
.sessionTimeoutMs(5000)
.retryPolicy(new ExponentialBackoffRetry(1000, 3))
.build();
curatorClient.start();
}
@Test
public void testAllGroup(){
ZnodeApiCuratorImpl znode = new ZnodeApiCuratorImpl();
List<String> currentChilds = znode.getChildren(curatorClient, Constants.ROOT+Constants.PATH_SEPARATOR+Constants.EJOB_RPC_NODE_ROOT);
if(CollectionUtils.isNotEmpty(currentChilds)){
for(String str : currentChilds){
System.out.println("groupName is "+ str);
}
}
}
@Test
public void getJobListByGroup()
{ String groupName = "oms6";
ZnodeApiCuratorImpl znode = new ZnodeApiCuratorImpl();
List<String> currentChilds = znode.getChildren(curatorClient, Constants.ROOT+Constants.EJOB_RPC_NODE_ROOT+Constants.PATH_SEPARATOR+groupName);
List<Job> result = new ArrayList<Job>();
if(CollectionUtils.isNotEmpty(currentChilds)){
for(String jobName:currentChilds){
String data = znode.getData(curatorClient, Constants.ROOT+Constants.APP_JOB_NODE_ROOT+Constants.PATH_SEPARATOR+groupName+Constants.PATH_SEPARATOR+jobName+Constants.APP_JOB_NODE_CONFIG);
if(StringUtils.isNotEmpty(data)){
Job job = new Gson().fromJson(data, Job.class);
result.add(job);
System.out.println(job.toString());
}
}
}
}
@Test
public void getJobByGroupAndJobName()
{
String groupName ="oms" ;
String jobName="test";
ZnodeApiCuratorImpl znode = new ZnodeApiCuratorImpl();
List<String> currentChilds = znode.getChildren(curatorClient, Constants.ROOT+Constants.EJOB_RPC_NODE_ROOT+Constants.PATH_SEPARATOR+groupName);
Job result=null;
if(CollectionUtils.isNotEmpty(currentChilds)){
for(String tmJob:currentChilds){
if(tmJob.equals(jobName)){
String data = znode.getData(curatorClient, Constants.ROOT+Constants.APP_JOB_NODE_ROOT+Constants.PATH_SEPARATOR+groupName+Constants.PATH_SEPARATOR+tmJob+Constants.APP_JOB_NODE_CONFIG);
if(StringUtils.isNotEmpty(data)){
Job job = new Gson().fromJson(data, Job.class);
result = job;
System.out.println(result.toString());
return;
}
}
}
}
}
@Test
public void testWeightedRoundRobinScheduling(){
ConcurrentHashMap<String,String> map = SlaveUtils.getGroupAndJobMapByIp(curatorClient, "192.168.238.1");
Iterator<EjobServerInfo> item = SlaveUtils.getAvailableAlaveIps(curatorClient).iterator();
Iterator<EjobServerInfo> item1 = SlaveUtils.getAvailableAlaveIps(curatorClient).iterator();
while(item1.hasNext()){
EjobServerInfo info1 = item1.next();
System.out.println("yes:"+info1.getIp());
}
List<EjobServerInfo> list = new ArrayList<EjobServerInfo>();
list.add(new EjobServerInfo("192.168.1.1",1));
list.add(new EjobServerInfo("192.168.1.2",1));
list.add(new EjobServerInfo("192.168.1.3",1));
list.add(new EjobServerInfo("192.168.1.4",1));
list.add(new EjobServerInfo("192.168.1.5",1));
list.add(new EjobServerInfo("192.168.1.6",1));
list.add(new EjobServerInfo("192.168.1.7",1));
list.add(new EjobServerInfo("192.168.1.8",1));
/* for(int i = 0;i<10;i++){
EjobServerInfo info = com.hqyg.disjob.register.job.WeightedRoundRobinScheduling.GetBestSlaveServerTest(curatorClient,list);
System.out.println(info.getIp());
}*/
SlaveUtils.refreshSlaveIp(curatorClient);
for(int i = 0;i<10;i++){
EjobServerInfo slaver = WeightedRoundRobinScheduling.GetBestSlaveServer(curatorClient);
System.out.println(slaver.getIp());
}
}
@Test
public void testGetGroupAndJobMapByIp(){
ConcurrentHashMap<String,String> jobMap = SlaveUtils.getGroupAndJobMapByIp(curatorClient, "10.40.6.243");
System.out.println(jobMap);
}
@Test
public void testClearSlave(){
ZnodeApiCuratorImpl nodeApi = new ZnodeApiCuratorImpl();
String ip = "192.168.56.1";
String jobPath = nodeApi.makePath(Constants.ROOT, Constants.EJOB_SERVER_NODE_ROOT,Constants.EJOB_SERVER_NODE_SLAVE,Constants.PATH_SEPARATOR+ip,Constants.EJOB_SERVER_NODE_SLAVE_EXECUTION);
List<String> groupList = nodeApi.getChildren(curatorClient, jobPath);
if(CollectionUtils.isNotEmpty(groupList)){
for(String group : groupList){
String groupNode = jobPath + Constants.PATH_SEPARATOR + group;
nodeApi.deleteByZnode(curatorClient, groupNode);
}
}
}
@Test
public void testCreateMasterHost(){
ZnodeApiCuratorImpl nodeApi = new ZnodeApiCuratorImpl();
/*nodeApi.createPersistent(curatorClient, "/ejob/scheduler/master/host", "192.168.1.1");
String ip = nodeApi.getData(curatorClient, "/ejob/scheduler/master/host");*/
String data = nodeApi.getData(curatorClient, "/ejob/scheduler/slave/192.168.56.1/status");
System.out.println(StringUtils.isEmpty(data));
System.out.println( data);
//nodeApi.update(curatorClient, Constants.EJOB_SERVER_NODE_MASTER_IP, new LocalHost().getIp());
}
@Test
public void testAdd(){
ZnodeApiCuratorImpl nodeApi = new ZnodeApiCuratorImpl();
/*nodeApi.createPersistent(curatorClient, "/ejob/scheduler/master/host", "192.168.1.1");
String ip = nodeApi.getData(curatorClient, "/ejob/scheduler/master/host");*/
// nodeApi.createPersistent(curatorClient, "/ejob/rpc/group1/test1", null);
nodeApi.createPersistent(curatorClient, "/ejob/scheduler/slave/1.1.1.1/status","READY");
nodeApi.createPersistent(curatorClient, "/ejob/scheduler/slave/1.1.1.1/execution/oms/server","job1|job2");
//nodeApi.update(curatorClient, Constants.EJOB_SERVER_NODE_MASTER_IP, new LocalHost().getIp());
}
@Test
public void testGetPrivoderUrl(){
List<HURL> urls = subscribeService.getHURListProvidesByService("grouptest6", "jobtest6");
if(CollectionUtils.isNotEmpty(urls)){
for(HURL hurl:urls){
System.out.println(hurl);
}
}
}
}