package org.shanbo.feluca.node.worker;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.shanbo.feluca.common.Constants;
import org.shanbo.feluca.node.JobManager;
import org.shanbo.feluca.node.RoleModule;
import org.shanbo.feluca.node.job.FelucaJob;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class WorkerModule extends RoleModule{
private String dataDir; //
private JobManager jobManager;
private String workerName;
public WorkerModule(String workerName){
this.workerName = workerName;
this.dataDir = Constants.Base.getWorkerRepository() + Constants.Base.DATA_DIR;
this.jobManager = new JobManager();
new File(Constants.Base.getWorkerRepository() + Constants.Base.DATA_DIR).mkdirs();
new File(Constants.Base.getWorkerRepository() + Constants.Base.MODEL_DIR).mkdirs();
new File(Constants.Base.getWorkerRepository() + Constants.Base.RESOURCE_DIR).mkdirs();
}
/**
* TODO
* @param dataName
* @return
*/
public List<String> listDataBlocks(String dataName){
File dataSet = new File(dataDir + "/" + dataName);
if (dataSet.isDirectory()){
String[] segments = dataSet.list();
Pattern pattern = Pattern.compile(dataName + "_(\\d+)\\.dat");
ArrayList<String> list = new ArrayList<String>();
for(String name : segments){
Matcher matcher = pattern.matcher(name);
if (matcher.find()){
list.add(matcher.group(1));
}
}
return list;
}else{
return Collections.emptyList();
}
}
/**
*
* @return
*/
public List<String> listDataSets(){
String[] datasets = new File(dataDir).list();
return Arrays.asList(datasets);
}
public String getJobStatus(){
return jobManager.getCurrentJobState();
}
public JSONObject searchJobInfo(String jobName){
return this.jobManager.searchJobInfo(jobName);
}
public String submitJob(Class<? extends FelucaJob> clz, JSONObject conf) throws Exception{
Constructor<? extends FelucaJob> constructor = clz.getConstructor(JSONObject.class);
FelucaJob job = constructor.newInstance(conf);
if (job.isLegal())
return this.jobManager.asynRunJob(job);
return null;
}
public String killJob(String jobName){
if (StringUtils.isBlank(jobName))
return "jobName empty!?";
return
this.jobManager.killJob(jobName);
}
public JSONArray getLatestJobStates() {
return this.jobManager.getLatestJobStates(1);
}
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("java", "test1");
Process p = pb.start();
}
}