Commit 6e3cac7c authored by jthu's avatar jthu

重新添加路径计算module群 更新 正式测通版本

parent b65532d4
...@@ -48,5 +48,21 @@ ...@@ -48,5 +48,21 @@
</dependency> </dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${springboot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> </project>
\ No newline at end of file
...@@ -15,5 +15,11 @@ public class BpsoConfig { ...@@ -15,5 +15,11 @@ public class BpsoConfig {
// //
public String k; public String k;
public String D;
public String c;
public String dev;
public String nt;
} }
...@@ -49,21 +49,25 @@ public class DataCtrl { ...@@ -49,21 +49,25 @@ public class DataCtrl {
//包装图片 //包装图片
Picture picture = cpcTrans.packagePic(ImageIO.read(file.getInputStream())); Picture picture = cpcTrans.packagePic(ImageIO.read(file.getInputStream()));
//包装数据包 //包装数据包
//倘若数据不只是0-9之内,应用,隔开
String[] path_1s = path_1.split(",");
String[] path_2s = path_2.split(",");
String[] funs = fun.split(",");
//得到链路图 //得到链路图
int length = path_2.length(); /* int length = path_2.length();
int func_length = fun.length(); int func_length = fun.length();*/
int[] func = new int[func_length]; int[] func = new int[funs.length];
int[][] link = new int[2][length]; int[][] link = new int[2][path_1s.length];
for(int i=0; i<length; i++) { for(int i=0; i<path_1s.length; i++) {
link[0][i] = path_1.charAt(i) - '0'; link[0][i] = Integer.parseInt(path_1s[i]);
} }
for(int i=0; i<length; i++) { for(int i=0; i<path_1s.length; i++) {
link[1][i] = path_2.charAt(i) - '0'; link[1][i] = Integer.parseInt(path_2s[i]);
} }
for(int i=0; i<length; i++) { for(int i=0; i<funs.length; i++) {
func[i] = fun.charAt(i) - '0'; func[i] = Integer.parseInt(funs[i]);
} }
......
...@@ -28,11 +28,11 @@ public class Bpso { ...@@ -28,11 +28,11 @@ public class Bpso {
* 业务参数 * 业务参数
*/ */
//数据量MB? //数据量MB?
static double[] D = {10, 10, 1, 3, 0.8, 2.4, 0.7, 1.2}; // static double[] D = {10, 10, 1, 3, 0.8, 2.4, 0.7, 1.2};
static double[] D;
//子任务数 //子任务数
static int c = 8; //8 // static int c = 8; //8
static int c;
//子任务依赖关系 边 //子任务依赖关系 边
static int[][] link; // static int[][] link; //
//task编号 //task编号
...@@ -42,17 +42,20 @@ public class Bpso { ...@@ -42,17 +42,20 @@ public class Bpso {
//固定映射任务数==起始任务+终止任务 //固定映射任务数==起始任务+终止任务
static final int C_STABLE = 2; static final int C_STABLE = 2;
//实际需映射任务数 /* //实际需映射任务数
static int n1 = c - C_STABLE; static int n1 = c - C_STABLE;*/
/* /*
* 网络参数 * 网络参数
*/ */
//设备数 //设备数
public static int num = 12; // public static int num = 12;
public static int num;
//设备计算能力参数s GB/s //设备计算能力参数s GB/s
static double[] nt = {1.112341341313, 0.5196272109574349, 0.675827555541419, 0.7637869915859579, 0.7998320296858645, // static double[] nt = {1.112341341313, 0.5196272109574349, 0.675827555541419, 0.7637869915859579, 0.7998320296858645,
0.638652700648973, 0.6396760676518485, 0.5615337810185533, 0.6356797503522186, 0.8266103444996542,0.8102279249524735, 1.17057296148341216}; //32节点 // 0.638652700648973, 0.6396760676518485, 0.5615337810185533, 0.6356797503522186, 0.8266103444996542,0.8102279249524735, 1.17057296148341216}; //32节点
static double[] nt;
//时隙大小 //时隙大小
public static double slot = 100*1000; public static double slot = 100*1000;
//时隙数目 //时隙数目
...@@ -67,8 +70,8 @@ public class Bpso { ...@@ -67,8 +70,8 @@ public class Bpso {
static final int N_STABLE = 2; static final int N_STABLE = 2;
//实际可映射设备数 //实际可映射设备数
static int n2; static int n2;
//单时隙可映射设备数 /* //单时隙可映射设备数
static int mapdev = num - N_STABLE ; static int mapdev = num - N_STABLE ;*/
/* /*
* BPSO参数 * BPSO参数
*/ */
...@@ -90,7 +93,7 @@ public class Bpso { ...@@ -90,7 +93,7 @@ public class Bpso {
//节点最终分配结果 //节点最终分配结果
public static int[] result = new int[c]; public static int[] result;
//节点间最短路由 //节点间最短路由
public static Stack[] route; public static Stack[] route;
//业务发起时刻 //业务发起时刻
...@@ -102,8 +105,14 @@ public class Bpso { ...@@ -102,8 +105,14 @@ public class Bpso {
public void doMapApp(int[][] link1, int[] func1,BpsoConfig bpsoConfig) throws ParseException { public void doMapApp(int[][] link1, int[] func1,BpsoConfig bpsoConfig) throws ParseException {
k = Integer.parseInt(bpsoConfig.getK()); // 加载粒子群配置项 种群 迭代 任务 设备等参数
n = Integer.parseInt(bpsoConfig.getN()); parseConfig(bpsoConfig);
//实际需映射任务数
int n1 = c - C_STABLE;
//单时隙可映射设备数
int mapdev = num - N_STABLE ;
//节点最终分配结果
result = new int[c];
link = link1; link = link1;
func = func1; func = func1;
route = new Stack[link[0].length+1]; route = new Stack[link[0].length+1];
...@@ -113,12 +122,12 @@ public class Bpso { ...@@ -113,12 +122,12 @@ public class Bpso {
//slotnum = 3; //slotnum = 3;
dev = num*slotnum; dev = num*slotnum;
n2 = dev - N_STABLE*slotnum; n2 = dev - N_STABLE*slotnum;
//1组装最短路矩阵 //1组装最短路矩阵 加权时间扩展图
double[][] edgeWeight = Wteg.getWteg(num*slotnum); double[][] edgeWeight = Wteg.getWteg(num*slotnum);
InterSlotDijstraV2 dijs = new InterSlotDijstraV2(num, slot); InterSlotDijstraV2 dijs = new InterSlotDijstraV2(num, slot);
InterSlotDijstraV2.pathRecord pathRecord = dijs.dijstra(edgeWeight, testLatency); InterSlotDijstraV2.pathRecord pathRecord = dijs.dijstra(edgeWeight, testLatency);
//2最短路由矩阵 //2最短路由矩阵 时间扩展图最短路由时延矩阵
double[][] lt = pathRecord.pathWeight; double[][] lt = pathRecord.pathWeight;
lastHop = pathRecord.lastHop; lastHop = pathRecord.lastHop;
for (int j = 0;j<lastHop.length;j++){ for (int j = 0;j<lastHop.length;j++){
...@@ -130,6 +139,7 @@ public class Bpso { ...@@ -130,6 +139,7 @@ public class Bpso {
} }
} }
} }
// 一跳路由转发表
String[][] routetest = new String[lastHop.length][lastHop[0].length]; String[][] routetest = new String[lastHop.length][lastHop[0].length];
for (int l = 0; l < lastHop.length/num; l++) { for (int l = 0; l < lastHop.length/num; l++) {
for (int i = l*num; i < num+l*num; i++) { for (int i = l*num; i < num+l*num; i++) {
...@@ -205,6 +215,26 @@ public class Bpso { ...@@ -205,6 +215,26 @@ public class Bpso {
} }
} }
private void parseConfig(BpsoConfig bpsoConfig) {
k = Integer.parseInt(bpsoConfig.getK());
n = Integer.parseInt(bpsoConfig.getN());
c = Integer.parseInt(bpsoConfig.getC());
num = Integer.parseInt(bpsoConfig.getDev());
String bpsoConfigD = bpsoConfig.getD();
String[] bpsoConfigDs = bpsoConfigD.split(",");
double[] Dc = new double[c];
for (int i = 0;i<c;i++){
Dc[i] = Double.parseDouble(bpsoConfigDs[i]);
}
D = Dc;
String[] bpsoConfigDevs = bpsoConfig.getNt().split(",");
double[] ntdev = new double[num];
for (int i = 0;i<num;i++){
ntdev[i] = Double.parseDouble(bpsoConfigDevs[i]);
}
nt = ntdev;
}
/* /*
* 粒子群算法主方法 * 粒子群算法主方法
*/ */
...@@ -247,6 +277,9 @@ public class Bpso { ...@@ -247,6 +277,9 @@ public class Bpso {
par_array[j] = temp[0]; par_array[j] = temp[0];
best_par = temp[1]; best_par = temp[1];
} }
log.info("当前迭代次数:"+i);
log.info("最佳粒子时延:"+(1/best_par.fit));
} }
return best_par; return best_par;
} }
......
...@@ -81,17 +81,19 @@ public class CpcTrans implements TransService { ...@@ -81,17 +81,19 @@ public class CpcTrans implements TransService {
//task编号 //task编号
//int[] func = {0, 2, 3, 3, 1, 1, 4, 0}; //int[] func = {0, 2, 3, 3, 1, 1, 4, 0};
//任务表 //任务表
String[] tasks = {"start/end","binaryProcess", "cutProcess", "greyProcess", "mergeProcess", "distributeProcess"}; String[] tasks = {"start/end","binaryProcess", "cutProcess", "greyProcess", "mergeProcess","tailorProcess", "distributeProcess"};
Bpso doMap = new Bpso(); Bpso doMap = new Bpso();
doMap.doMapApp(link,func,bpsoConfig); doMap.doMapApp(link,func,bpsoConfig);
//映射结果 //映射结果
int[] result = doMap.result; int[] result = doMap.result;
System.out.println("optimal mapping scheme"+ Arrays.toString(result)); // System.out.println("optimal mapping scheme"+ Arrays.toString(result));
log.info("optimal mapping scheme"+ Arrays.toString(result)); log.info("optimal mapping scheme"+ Arrays.toString(result));
//路径表 //路径表
String[] path = new String[link[0].length]; String[] path = new String[link[0].length];
/* int sateEndNum = result[result.length - 1];
int sateStartNum = result[0];*/
for (int tm = 0;tm<link[0].length;tm++){ for (int tm = 0;tm<link[0].length;tm++){
String startHop = "sate"+result[link[0][tm]]; String startHop = "sate"+result[link[0][tm]];
String endHop = "sate"+result[link[1][tm]]; String endHop = "sate"+result[link[1][tm]];
...@@ -101,10 +103,10 @@ public class CpcTrans implements TransService { ...@@ -101,10 +103,10 @@ public class CpcTrans implements TransService {
} }
//要修改 //要修改
//todo //todo
if(endHop.equals("sate31")){ /* if(endHop.equals("sate"+sateEndNum)){
path[tm] = startHop +"->"+ "D2"; path[tm] = startHop +"->"+ "D2";
continue; continue;
} }*/
//左为边起点,右为边终点 //左为边起点,右为边终点
path[tm] = startHop+"->"+endHop; path[tm] = startHop+"->"+endHop;
} }
...@@ -120,10 +122,10 @@ public class CpcTrans implements TransService { ...@@ -120,10 +122,10 @@ public class CpcTrans implements TransService {
} }
//要修改 //要修改
//todo //todo
if(hop.equals("sate31")){ /* if(hop.equals("sate"+sateEndNum)){
taskTable.put("D2",tasks[func[tm]]); taskTable.put("D2",tasks[func[tm]]);
continue; continue;
} }*/
taskTable.put(hop,tasks[func[tm]]); taskTable.put(hop,tasks[func[tm]]);
} }
...@@ -141,9 +143,9 @@ public class CpcTrans implements TransService { ...@@ -141,9 +143,9 @@ public class CpcTrans implements TransService {
} }
//要修改 //要修改
//todo //todo
if (route[i][j].equals("sate31")){ /* if (route[i][j].equals("sate"+(sateEndNum-1))){
route[i][j]="D2"; route[i][j]="D2";
} }*/
} }
} }
log.info("跨时隙路由表:"+Arrays.deepToString(route)); log.info("跨时隙路由表:"+Arrays.deepToString(route));
...@@ -176,7 +178,9 @@ public class CpcTrans implements TransService { ...@@ -176,7 +178,9 @@ public class CpcTrans implements TransService {
//ip池 //ip池
// dataPackage.setIpPool(findService.findIPool()); // dataPackage.setIpPool(findService.findIPool());
String[] routeself = findService.findRoute(dataPackage.getCurrentSataHop(), dataPackage.getRoute()); String[] routeself = findService.findRoute(dataPackage.getCurrentSataHop(), dataPackage.getRoute());
log.info("该节点转发路由表:"+Arrays.toString(routeself));
ArrayList<String> destinSataHops = findService.findDestinSataHops(path,"D1"); ArrayList<String> destinSataHops = findService.findDestinSataHops(path,"D1");
log.info("该子任务边终止卫星:"+destinSataHops);
for(String des : destinSataHops) { for(String des : destinSataHops) {
CnfData transferPackage = dataPackage; CnfData transferPackage = dataPackage;
//目的 //目的
...@@ -187,10 +191,12 @@ public class CpcTrans implements TransService { ...@@ -187,10 +191,12 @@ public class CpcTrans implements TransService {
transferPackage.setCurrentSataHop(transferPackage.getNextSataHop()); transferPackage.setCurrentSataHop(transferPackage.getNextSataHop());
//ip //ip
String ip = ipService.getIpByAppName(transferPackage.getNextSataHop()); String ip = ipService.getIpByAppName(transferPackage.getNextSataHop());
// log.info("下一跳ip地址:"+ip);
transferPackage.setNextIPHop(ip); transferPackage.setNextIPHop(ip);
// transferPackage.setNextIPHop(findService.findIp(transferPackage.getNextSataHop(),transferPackage.getIpPool())); // transferPackage.setNextIPHop(findService.findIp(transferPackage.getNextSataHop(),transferPackage.getIpPool()));
//终止节点 //终止节点
transferPackage.setEndSateHop("sate11"); int SerialsNum = Bpso.num-1;
transferPackage.setEndSateHop("sate"+SerialsNum);
//返回一个数据包 //返回一个数据包
cnfDatas.add(transferPackage); cnfDatas.add(transferPackage);
} }
...@@ -210,12 +216,15 @@ public class CpcTrans implements TransService { ...@@ -210,12 +216,15 @@ public class CpcTrans implements TransService {
*/ */
@Override @Override
public String sendData(CnfData cnfData, String url) { public String sendData(CnfData cnfData, String url) {
String IP = url + ":8083";
String IP = "172.17.0.2:8083";
// String IP =url+":8083";
log.info("目标地址:"+IP);
ResponseEntity<String> res = restTemplate.postForEntity("http://" + IP + "/transfer", cnfData, String.class); ResponseEntity<String> res = restTemplate.postForEntity("http://" + IP + "/transfer", cnfData, String.class);
if (!res.getStatusCode().is2xxSuccessful()) { if (!res.getStatusCode().is2xxSuccessful()) {
throw new RuntimeException("send Error!"); throw new RuntimeException("send Error!");
} }
return "sucess"; return "success";
} }
/** /**
......
...@@ -82,7 +82,8 @@ public class FindServiceImpl implements FindService { ...@@ -82,7 +82,8 @@ public class FindServiceImpl implements FindService {
@Override @Override
public String findNextHop(String destinSataHop, String[] route) { public String findNextHop(String destinSataHop, String[] route) {
int index = Integer.parseInt(destinSataHop.split("sate")[1]); int index = Integer.parseInt(destinSataHop.split("sate")[1]);
return route[index-1]; // return route[index-1];
return "sate1";
} }
@Override @Override
......
...@@ -15,6 +15,14 @@ spring.servlet.multipart.max-request-size=1024000000000MB ...@@ -15,6 +15,14 @@ spring.servlet.multipart.max-request-size=1024000000000MB
# 粒子群配置 # 粒子群配置
# 迭代次数 # 迭代次数
bps.k=500 bps.k=50
# 种群规模 # 种群规模
bps.n=10 bps.n=10
\ No newline at end of file # 任务总数
bps.c=10
# 子任务数据量 与任务总数一致
bps.D=10,10,1,3,0.8,2.4,0.7,1.2,0.4,1.2
# 设备总数
bps.dev=12
# 设备计算能力 与设备数量一致
bps.nt=1,1.112341341313,0.5196272109574349,0.675827555541419,0.7637869915859579,0.7998320296858645,0.638652700648973,0.6396760676518485,0.5615337810185533,0.6356797503522186,0.8266103444996542,0.8102279249524735,1.17057296148341216,1
\ No newline at end of file
...@@ -25,6 +25,10 @@ ...@@ -25,6 +25,10 @@
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
</dependency> </dependency>
<dependency>
<groupId>top.ninwoo</groupId>
<artifactId>cnf-client-starter</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package top.ninwoo.edge.config; package top.ninwoo.edge.config;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@Configuration //@Configuration
public class RestConfig { public class RestConfig {
private ApplicationContext applicationContext = null; private ApplicationContext applicationContext = null;
@Bean // @Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) { public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
return new RestTemplate(factory); return new RestTemplate(factory);
} }
@Bean // @Bean
ClientHttpRequestFactory simpleClientHttpRequestFactory() { ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(1000000); factory.setReadTimeout(1000000);
......
...@@ -56,6 +56,7 @@ public class DataController { ...@@ -56,6 +56,7 @@ public class DataController {
* pass 当前节点仅转发数据包 * pass 当前节点仅转发数据包
* */ * */
String res = transService.parseData(cnfData); String res = transService.parseData(cnfData);
log.info("current task status:"+res);
FindServiceImpl findService = new FindServiceImpl(); FindServiceImpl findService = new FindServiceImpl();
switch (res) { switch (res) {
...@@ -66,9 +67,12 @@ public class DataController { ...@@ -66,9 +67,12 @@ public class DataController {
//装包 get0很奇怪 //装包 get0很奇怪
CnfData newtransData = transService.packageData(cnfData).get(0); CnfData newtransData = transService.packageData(cnfData).get(0);
System.out.println("nextsataHop: "+newtransData.getNextSataHop()); log.info("next sate name: "+newtransData.getNextSataHop());
// System.out.println("nextsataHop: "+newtransData.getNextSataHop());
//发包 //发包
log.info("next sate ip: "+newtransData.getNextIPHop());
transService.sendData(newtransData, newtransData.getNextIPHop()); transService.sendData(newtransData, newtransData.getNextIPHop());
log.info("transfer success!");
System.out.println("transfer sucess"); System.out.println("transfer sucess");
return "transfer sucess"; return "transfer sucess";
...@@ -82,6 +86,7 @@ public class DataController { ...@@ -82,6 +86,7 @@ public class DataController {
//储存图片节点 //储存图片节点
saveToFile(cnfData.getPicture(), "/pic/out-"+cnfData.getPicture().getSliceId()+".jpg"); saveToFile(cnfData.getPicture(), "/pic/out-"+cnfData.getPicture().getSliceId()+".jpg");
String message = cnfData.getCurrentSataHop(); String message = cnfData.getCurrentSataHop();
log.info("current node is the end node:"+message);
transService.backEarth(message); transService.backEarth(message);
System.out.println("end hop"); System.out.println("end hop");
return "end"; return "end";
...@@ -93,18 +98,20 @@ public class DataController { ...@@ -93,18 +98,20 @@ public class DataController {
//完成路径计算 //完成路径计算
case "pathComputing": case "pathComputing":
System.out.println("pathComputing task sucess"); System.out.println("pathComputing task process...");
//完成图像处理功能 //完成图像处理功能
picService.PicTask(); picService.PicTask();
//得到图像 //得到图像
LinkedList<Picture> pictures = picService.getPicPara(); LinkedList<Picture> pictures = picService.getPicPara();
//装包 //装包
for (CnfData newData:transService.packageData(cnfData, pictures)) { for (CnfData newData:transService.packageData(cnfData, pictures)) {
log.info("next sate name:"+newData.getNextSataHop());
System.out.println("nextSate: "+newData.getNextSataHop()); System.out.println("nextSate: "+newData.getNextSataHop());
//发包 //发包
transService.sendData(newData, newData.getNextIPHop()); transService.sendData(newData, newData.getNextIPHop());
} }
System.out.println("cpc transfer sucess"); System.out.println("cpc transfer success");
log.info("cpc & transfer success");
return "cpc task&transfer success"; return "cpc task&transfer success";
case "distributeProcess": case "distributeProcess":
......
package top.ninwoo.edge.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.ninwoo.bishe.starter.service.NetworkService;
import java.util.List;
@Service
public class IPService {
@Autowired
private NetworkService networkService;
public String getIpByAppName(String appName) {
List<String> ipList = networkService.getIpListByAppName(11111l, appName);
if(!ipList.isEmpty()){
String ip_tmp = ipList.get(0);
String[] split_list = ip_tmp.split("/");
return split_list[0];
}
return null;
}
}
package top.ninwoo.edge.service.impl; package top.ninwoo.edge.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import top.ninwoo.api.Picture; import top.ninwoo.api.Picture;
...@@ -8,7 +9,7 @@ import java.lang.reflect.Constructor; ...@@ -8,7 +9,7 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.LinkedList; import java.util.LinkedList;
@Slf4j
@Service @Service
public class PicServiceImpl { public class PicServiceImpl {
...@@ -25,7 +26,8 @@ public class PicServiceImpl { ...@@ -25,7 +26,8 @@ public class PicServiceImpl {
//清空图像 //清空图像
delPicPara(); delPicPara();
// 创建图像处理功能对象 // 创建图像处理功能对象
picRes = getPicService(taskName,1,picOrigin); log.info("prepare to invoke "+taskName);
picRes = getPicService(taskName,1,picOrigin); //sliceNum 参数没用到
picOrigin.clear(); picOrigin.clear();
} }
...@@ -34,7 +36,8 @@ public class PicServiceImpl { ...@@ -34,7 +36,8 @@ public class PicServiceImpl {
private LinkedList<Picture> getPicService(String taskName, int SliceNum, LinkedList<Picture> picOrigin) { private LinkedList<Picture> getPicService(String taskName, int SliceNum, LinkedList<Picture> picOrigin) {
String in = (taskName.substring(0, 1).toUpperCase() + taskName.substring(1)+"Impl") String in = (taskName.substring(0, 1).toUpperCase() + taskName.substring(1)+"Impl")
.replace("Process","Service"); .replace("Process","Service");
String packagePath = "org.elf.cnf.sate.service.impl.picService."; String packagePath = "top.ninwoo.edge.service.impl.picService.";
log.info("subtask class name:"+(packagePath+in));
LinkedList<Picture> result = null; LinkedList<Picture> result = null;
try { try {
Class<?> name = Class.forName(packagePath+in); Class<?> name = Class.forName(packagePath+in);
...@@ -79,7 +82,7 @@ public class PicServiceImpl { ...@@ -79,7 +82,7 @@ public class PicServiceImpl {
taskName = task; taskName = task;
//单图片情况及多图片并且全都收到 //单图片情况及多图片并且全都收到
if(picture.getSliceNum() == picOrigin.size() || !taskName.equals("mergeProcess")){ if(picture.getSliceNum() == picOrigin.size() || !taskName.equals("mergeProcess")){
return "sucess"; return "success";
} }
//多图片未完全收到 //多图片未完全收到
else{ else{
......
...@@ -9,7 +9,7 @@ import java.util.LinkedList; ...@@ -9,7 +9,7 @@ import java.util.LinkedList;
import static top.ninwoo.edge.service.impl.fileService.SaveFile.loadPicture; import static top.ninwoo.edge.service.impl.fileService.SaveFile.loadPicture;
import static top.ninwoo.edge.service.impl.fileService.SaveFile.saveToFile; import static top.ninwoo.edge.service.impl.fileService.SaveFile.saveToFile;
public class SplitServiceImpl implements PicService { public class CutServiceImpl implements PicService {
public static LinkedList<Picture> picPara = new LinkedList<>(); public static LinkedList<Picture> picPara = new LinkedList<>();
@Override @Override
public LinkedList<Picture> picProcess(int num, LinkedList<Picture> pictures) { public LinkedList<Picture> picProcess(int num, LinkedList<Picture> pictures) {
......
...@@ -9,7 +9,7 @@ import java.util.LinkedList; ...@@ -9,7 +9,7 @@ import java.util.LinkedList;
import static top.ninwoo.edge.service.impl.fileService.SaveFile.loadPicture; import static top.ninwoo.edge.service.impl.fileService.SaveFile.loadPicture;
import static top.ninwoo.edge.service.impl.fileService.SaveFile.saveToFile; import static top.ninwoo.edge.service.impl.fileService.SaveFile.saveToFile;
public class GrayServiceImpl implements PicService { public class GreyServiceImpl implements PicService {
public static LinkedList<Picture> picPara = new LinkedList<>(); public static LinkedList<Picture> picPara = new LinkedList<>();
@Override @Override
public LinkedList<Picture> picProcess(int num, LinkedList<Picture> pictures) { public LinkedList<Picture> picProcess(int num, LinkedList<Picture> pictures) {
......
...@@ -9,7 +9,7 @@ import java.util.LinkedList; ...@@ -9,7 +9,7 @@ import java.util.LinkedList;
import static top.ninwoo.edge.service.impl.fileService.SaveFile.loadPicture; import static top.ninwoo.edge.service.impl.fileService.SaveFile.loadPicture;
import static top.ninwoo.edge.service.impl.fileService.SaveFile.saveToFile; import static top.ninwoo.edge.service.impl.fileService.SaveFile.saveToFile;
public class MerageServiceImpl implements PicService { public class MergeServiceImpl implements PicService {
public static LinkedList<Picture> picPara = new LinkedList<>(); public static LinkedList<Picture> picPara = new LinkedList<>();
@Override @Override
public LinkedList<Picture> picProcess(int num, LinkedList<Picture> pictures) { public LinkedList<Picture> picProcess(int num, LinkedList<Picture> pictures) {
......
...@@ -9,7 +9,7 @@ import top.ninwoo.api.CnfData; ...@@ -9,7 +9,7 @@ import top.ninwoo.api.CnfData;
import top.ninwoo.api.Picture; import top.ninwoo.api.Picture;
import top.ninwoo.api.TacticsCtl; import top.ninwoo.api.TacticsCtl;
import top.ninwoo.edge.service.DistributeService; import top.ninwoo.edge.service.DistributeService;
import top.ninwoo.edge.service.impl.picService.GrayServiceImpl; import top.ninwoo.edge.service.impl.picService.GreyServiceImpl;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
...@@ -148,7 +148,7 @@ public class DistributeServiceImpl implements DistributeService { ...@@ -148,7 +148,7 @@ public class DistributeServiceImpl implements DistributeService {
@Override @Override
public String packageHasCut(CnfData cnfData, Picture picture) { public String packageHasCut(CnfData cnfData, Picture picture) {
System.out.println("=====packageHasCut start"); System.out.println("=====packageHasCut start");
GrayServiceImpl picService = new GrayServiceImpl(); GreyServiceImpl picService = new GreyServiceImpl();
LinkedList<Picture> pic = new LinkedList<>(); LinkedList<Picture> pic = new LinkedList<>();
pic.add(picture); pic.add(picture);
......
...@@ -143,6 +143,7 @@ public class FindServiceImpl implements FindService { ...@@ -143,6 +143,7 @@ public class FindServiceImpl implements FindService {
//找到本卫星的路由 //找到本卫星的路由
private String[] findCurrentRoute(String sataname, String[][] routeTable){ private String[] findCurrentRoute(String sataname, String[][] routeTable){
// 这里减1是为了将卫星真实编号与索引值对应
int index = Integer.parseInt(sataname.split("sate")[1]); int index = Integer.parseInt(sataname.split("sate")[1]);
// System.out.println(index); // System.out.println(index);
return routeTable[index]; return routeTable[index];
......
package top.ninwoo.edge.service.impl.transferService; package top.ninwoo.edge.service.impl.transferService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -9,14 +10,17 @@ import top.ninwoo.api.CnfData; ...@@ -9,14 +10,17 @@ import top.ninwoo.api.CnfData;
import top.ninwoo.api.Picture; import top.ninwoo.api.Picture;
import top.ninwoo.api.TacticsCtl; import top.ninwoo.api.TacticsCtl;
import top.ninwoo.edge.service.FindService; import top.ninwoo.edge.service.FindService;
import top.ninwoo.edge.service.IPService;
import top.ninwoo.edge.service.TransferService; import top.ninwoo.edge.service.TransferService;
import top.ninwoo.edge.service.impl.PicServiceImpl; import top.ninwoo.edge.service.impl.PicServiceImpl;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList; import java.util.LinkedList;
@Service @Service
@Slf4j
public class TransServiceImpl implements TransferService { public class TransServiceImpl implements TransferService {
@Resource @Resource
...@@ -28,6 +32,9 @@ public class TransServiceImpl implements TransferService { ...@@ -28,6 +32,9 @@ public class TransServiceImpl implements TransferService {
@Autowired @Autowired
private PicServiceImpl picService; private PicServiceImpl picService;
@Autowired
private IPService ipService;
@Override @Override
public String sendData(CnfData cnfData, String url){ public String sendData(CnfData cnfData, String url){
...@@ -37,7 +44,7 @@ public class TransServiceImpl implements TransferService { ...@@ -37,7 +44,7 @@ public class TransServiceImpl implements TransferService {
throw new RuntimeException("send Error!"); throw new RuntimeException("send Error!");
} }
System.out.println("send picRes sucess"); System.out.println("send picRes sucess");
return "sucess"; return "success";
} }
/** /**
...@@ -79,6 +86,9 @@ public class TransServiceImpl implements TransferService { ...@@ -79,6 +86,9 @@ public class TransServiceImpl implements TransferService {
} }
//是否为该边节点 //是否为该边节点
log.info("current sate: "+cnfData.getCurrentSataHop());
log.info("Destination sate: "+cnfData.getDestinSataHop());
if (cnfData.getCurrentSataHop().equals(cnfData.getDestinSataHop())){ if (cnfData.getCurrentSataHop().equals(cnfData.getDestinSataHop())){
// 通过任务分配表和当前卫星名寻找当前任务 // 通过任务分配表和当前卫星名寻找当前任务
String task = findService.findTask(cnfData.getCurrentSataHop(),cnfData.getTaskTable()); String task = findService.findTask(cnfData.getCurrentSataHop(),cnfData.getTaskTable());
...@@ -97,7 +107,7 @@ public class TransServiceImpl implements TransferService { ...@@ -97,7 +107,7 @@ public class TransServiceImpl implements TransferService {
// 传输当前任务名及待处理图片,返回节点执行状态 // 传输当前任务名及待处理图片,返回节点执行状态
String status = picService.setPicOrigin(task, cnfData.getPicture()); String status = picService.setPicOrigin(task, cnfData.getPicture());
switch (status) { switch (status) {
case "sucess": case "success":
//正义执行 //正义执行
return "pathComputing"; return "pathComputing";
case "wait": case "wait":
...@@ -124,15 +134,15 @@ public class TransServiceImpl implements TransferService { ...@@ -124,15 +134,15 @@ public class TransServiceImpl implements TransferService {
LinkedList<CnfData> newData = new LinkedList<>(); LinkedList<CnfData> newData = new LinkedList<>();
//找到路由 //找到路由
String[] route = findService.findRoute(cnfData.getCurrentSataHop(), cnfData.getRoute()); String[] route = findService.findRoute(cnfData.getCurrentSataHop(), cnfData.getRoute());
log.info("current sate route: "+ Arrays.toString(route));
CnfData newDataPackage = cnfData; CnfData newDataPackage = cnfData;
//设置下一跳地址 //设置下一跳地址
newDataPackage.setNextSataHop(findService.findNextHop(newDataPackage.getDestinSataHop(), route)); newDataPackage.setNextSataHop(findService.findNextHop(newDataPackage.getDestinSataHop(), route));
//设置本机地址 //设置本机地址
newDataPackage.setCurrentSataHop(newDataPackage.getNextSataHop()); newDataPackage.setCurrentSataHop(newDataPackage.getNextSataHop());
//设置下一跳ip地址 //设置下一跳ip地址
String nextIP = ipService.getIpByAppName(newDataPackage.getNextSataHop());
String nextIP = findService.findIp(newDataPackage.getNextSataHop(),newDataPackage.getIpPool()); // String nextIP = findService.findIp(newDataPackage.getNextSataHop(),newDataPackage.getIpPool());
newDataPackage.setNextIPHop(nextIP); newDataPackage.setNextIPHop(nextIP);
newData.add(newDataPackage); newData.add(newDataPackage);
return newData; return newData;
...@@ -152,7 +162,7 @@ public class TransServiceImpl implements TransferService { ...@@ -152,7 +162,7 @@ public class TransServiceImpl implements TransferService {
newDataPackage.setTaskTable(cnfData.getTaskTable()); newDataPackage.setTaskTable(cnfData.getTaskTable());
newDataPackage.setRoute(cnfData.getRoute()); newDataPackage.setRoute(cnfData.getRoute());
newDataPackage.setPathTable(cnfData.getPathTable()); newDataPackage.setPathTable(cnfData.getPathTable());
newDataPackage.setIpPool(cnfData.getIpPool() ); // newDataPackage.setIpPool(cnfData.getIpPool() );
//设置目的地址 //设置目的地址
newDataPackage.setDestinSataHop(destinSataHop); newDataPackage.setDestinSataHop(destinSataHop);
//设置下一跳地址 //设置下一跳地址
...@@ -160,7 +170,8 @@ public class TransServiceImpl implements TransferService { ...@@ -160,7 +170,8 @@ public class TransServiceImpl implements TransferService {
//设置本机地址 //设置本机地址
newDataPackage.setCurrentSataHop(newDataPackage.getNextSataHop()); newDataPackage.setCurrentSataHop(newDataPackage.getNextSataHop());
//设置下一跳ip地址 //设置下一跳ip地址
String nextIP = findService.findIp(newDataPackage.getNextSataHop(),newDataPackage.getIpPool()); String nextIP =ipService.getIpByAppName(newDataPackage.getNextSataHop());
// String nextIP = findService.findIp(newDataPackage.getNextSataHop(),newDataPackage.getIpPool());
newDataPackage.setNextIPHop(nextIP); newDataPackage.setNextIPHop(nextIP);
//放入图片 //放入图片
newDataPackage.setPicture(pictures.removeFirst()); newDataPackage.setPicture(pictures.removeFirst());
...@@ -171,7 +182,7 @@ public class TransServiceImpl implements TransferService { ...@@ -171,7 +182,7 @@ public class TransServiceImpl implements TransferService {
@Override @Override
public void backEarth(String message){ public void backEarth(String message){
String IP = "192.168.31.213" + ":8082"; String IP = "192.168.253.130" + ":8082";
String res = restTemplate.postForObject("http://" + IP + "/getDate?message=", message, String.class); String res = restTemplate.postForObject("http://" + IP + "/getDate?message=", message, String.class);
System.out.println(res); System.out.println(res);
} }
......
...@@ -6,9 +6,11 @@ import org.springframework.boot.context.properties.ConfigurationProperties; ...@@ -6,9 +6,11 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
@Data @Data
@ConfigurationProperties(prefix = "bishe.app") @ConfigurationProperties(prefix = "bishe.app")
public class ClientProperties { public class ClientProperties {
private String zookeeperUrl = "zookeeper://127.0.0.1:2181"; // private String zookeeperUrl = "zookeeper://127.0.0.1:2181";
private String cloudUrl = "127.0.0.1:9300";//"192.168.47.130:9091"; private String zookeeperUrl = "zookeeper://192.168.253.1:2181";
// private String cloudUrl = "127.0.0.1:9300";//"192.168.47.130:9091";
// private String cloudUrl = "127.0.0.1:9091";
private String cloudUrl = "192.168.253.1:9091";
private String appName = "default"; private String appName = "default";
} }
package top.ninwoo;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import top.ninwoo.bishe.starter.service.ClusterService;
import top.ninwoo.bishe.starter.service.NetworkService;
import top.ninwoo.client.BisheTestMain;
import top.ninwoo.common.entity.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BisheTestMain.class)
public class StaticSateDeploy {
@Autowired
private ClusterService clusterService;
@Resource
private NetworkService networkService;
@Test
public void testSendSeparateConfig() {
int sateNum = 12;
ArrayList<SeparatedClusterConfig> clusterConfigs = new ArrayList<>();
SeparatedClusterConfig separatedClusterConfig = new SeparatedClusterConfig();
// TODO: 这个ID应该是从借口获取的
separatedClusterConfig.setEdgeNodeId("192.168.253.130:18088");
ClusterConfig clusterConfig = new ClusterConfig();
clusterConfig.setId(11111l);
clusterConfig.setOwner("joliu");
List<ContainerDescription> cds = new ArrayList<>();
for (int i = 1;i<=sateNum;i++) {
ContainerDescription containerDescription = new ContainerDescription();
containerDescription.setMode("normal");
containerDescription.setReplicas(1);
DockerContainer container = new DockerContainer();
container.setName("sate"+i);
container.setCommand("sh");
container.setImage("jthu/pathcomp");
containerDescription.setDockerContainer(container);
cds.add(containerDescription);
}
/* ContainerDescription containerDescription1 = new ContainerDescription();
containerDescription1.setMode("normal");
containerDescription1.setReplicas(1);
DockerContainer container1 = new DockerContainer();
container1.setName("APP");
container1.setCommand("sh");
container1.setImage("jthu/pathcomp");
containerDescription1.setDockerContainer(container1);
cds.add(containerDescription1);*/
clusterConfig.setDockers(cds);
NetworkTopology topo = new NetworkTopology();
String[] devices = new String[sateNum+1];
for (int i = 1;i<=sateNum;i++) {
devices[i-1] = "sate"+i;
}
devices[sateNum] = "br:ovs1";
log.info("设备列表:"+Arrays.toString(devices));
topo.setAppNames(devices);
// 这个参数好像没啥用
topo.setTopologyId(11);
int[][] devicesTopo = new int[sateNum+1][sateNum+1];
for (int i = 0;i<=sateNum;i++) {
for (int j = 0;j<=sateNum;j++) {
if (i<sateNum){
devicesTopo[i][j] = 0;
}else if (j!=sateNum){
devicesTopo[i][j] = 1;
}else devicesTopo[i][j] = 0;
}
}
log.info("网络拓扑:"+ Arrays.deepToString(devicesTopo));
topo.setTopology(devicesTopo);
// topo.setTopology(new int[][]{{0,0,0},{0,0,0},{1,1,0}});
clusterConfig.setTopology(topo);
separatedClusterConfig.setClusterConfig(clusterConfig);
clusterConfigs.add(separatedClusterConfig);
clusterService.sendClusterConfigToEdgeNode(clusterConfigs);
}
@Test
public void removeClusterFromEdgeNodeTest() {
clusterService.removeClusterFromEdgeNode(11111L);
}
}
L101-To-L201ÿStart TimeUTGC,L101-To-L201ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L201-To-L301ÿStart TimeUTGC,L201-To-L301ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L301-To-L401ÿStart TimeUTGC,L301-To-L401ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L401-To-L501ÿStart TimeUTGC,L401-To-L501ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L501-To-L601ÿStart TimeUTGC,L501-To-L601ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L102-To-L202ÿStart TimeUTGC,L102-To-L202ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L202-To-L302ÿStart TimeUTGC,L202-To-L302ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L302-To-L402ÿStart TimeUTGC,L302-To-L402ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L402-To-L502ÿStart TimeUTGC,L402-To-L502ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L502-To-L602ÿStart TimeUTGC,L502-To-L602ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L103-To-L203ÿStart TimeUTGC,L103-To-L203ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L203-To-L303ÿStart TimeUTGC,L203-To-L303ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L303-To-L403ÿStart TimeUTGC,L303-To-L403ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L403-To-L503ÿStart TimeUTGC,L403-To-L503ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L503-To-L603ÿStart TimeUTGC,L503-To-L603ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L104-To-L204ÿStart TimeUTGC,L104-To-L204ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L204-To-L304ÿStart TimeUTGC,L204-To-L304ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L304-To-L404ÿStart TimeUTGC,L304-To-L404ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L404-To-L504ÿStart TimeUTGC,L404-To-L504ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L504-To-L604ÿStart TimeUTGC,L504-To-L604ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L105-To-L205ÿStart TimeUTGC,L105-To-L205ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L205-To-L305ÿStart TimeUTGC,L205-To-L305ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L305-To-L405ÿStart TimeUTGC,L305-To-L405ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L405-To-L505ÿStart TimeUTGC,L405-To-L505ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L505-To-L605ÿStart TimeUTGC,L505-To-L605ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L106-To-L206ÿStart TimeUTGC,L106-To-L206ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L206-To-L306ÿStart TimeUTGC,L206-To-L306ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L306-To-L406ÿStart TimeUTGC,L306-To-L406ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L406-To-L506ÿStart TimeUTGC,L406-To-L506ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L506-To-L606ÿStart TimeUTGC,L506-To-L606ÿStop TimeUTGC
4:00:00 ,4:13:27
4:32:46 ,5:04:48
5:24:07 ,5:56:09
,
L107-To-L207ÿStart TimeUTGC,L107-To-L207ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L207-To-L307ÿStart TimeUTGC,L207-To-L307ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L307-To-L407ÿStart TimeUTGC,L307-To-L407ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L407-To-L507ÿStart TimeUTGC,L407-To-L507ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L507-To-L607ÿStart TimeUTGC,L507-To-L607ÿStop TimeUTGC
4:00:00 ,4:03:11
4:22:30 ,4:54:32
5:13:51 ,5:45:53
,
L108-To-L208ÿStart TimeUTGC,L108-To-L208ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L208-To-L308ÿStart TimeUTGC,L208-To-L308ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L308-To-L408ÿStart TimeUTGC,L308-To-L408ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L408-To-L508ÿStart TimeUTGC,L408-To-L508ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L508-To-L608ÿStart TimeUTGC,L508-To-L608ÿStop TimeUTGC
4:12:14 ,4:44:16
5:03:34 ,5:35:37
5:54:55 ,6:26:59
,
L109-To-L209ÿStart TimeUTGC,L109-To-L209ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L209-To-L309ÿStart TimeUTGC,L209-To-L309ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L309-To-L409ÿStart TimeUTGC,L309-To-L409ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L409-To-L509ÿStart TimeUTGC,L409-To-L509ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L509-To-L609ÿStart TimeUTGC,L509-To-L609ÿStop TimeUTGC
4:01:57 ,4:34:00
4:53:18 ,5:25:20
5:44:39 ,6:16:41
,
L110-To-L210ÿStart TimeUTGC,L110-To-L210ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L210-To-L310ÿStart TimeUTGC,L210-To-L310ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L310-To-L410ÿStart TimeUTGC,L310-To-L410ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L410-To-L510ÿStart TimeUTGC,L410-To-L510ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L510-To-L610ÿStart TimeUTGC,L510-To-L610ÿStop TimeUTGC
4:00:00 ,4:23:44
4:43:02 ,5:15:04
5:34:23 ,6:06:26
,
L101-To-L102ÿStart TimeUTGC,L101-To-L102ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L102-To-L103ÿStart TimeUTGC,L102-To-L103ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L103-To-L104ÿStart TimeUTGC,L103-To-L104ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L104-To-L105ÿStart TimeUTGC,L104-To-L105ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L105-To-L106ÿStart TimeUTGC,L105-To-L106ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L106-To-L107ÿStart TimeUTGC,L106-To-L107ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L107-To-L108ÿStart TimeUTGC,L107-To-L108ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L108-To-L109ÿStart TimeUTGC,L108-To-L109ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L109-To-L110ÿStart TimeUTGC,L109-To-L110ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L110-To-L111ÿStart TimeUTGC,L110-To-L111ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L201-To-L202ÿStart TimeUTGC,L201-To-L202ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L202-To-L203ÿStart TimeUTGC,L202-To-L203ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L203-To-L204ÿStart TimeUTGC,L203-To-L204ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L204-To-L205ÿStart TimeUTGC,L204-To-L205ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L205-To-L206ÿStart TimeUTGC,L205-To-L206ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L206-To-L207ÿStart TimeUTGC,L206-To-L207ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L207-To-L208ÿStart TimeUTGC,L207-To-L208ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L208-To-L209ÿStart TimeUTGC,L208-To-L209ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L209-To-L210ÿStart TimeUTGC,L209-To-L210ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L210-To-L211ÿStart TimeUTGC,L210-To-L211ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L301-To-L302ÿStart TimeUTGC,L301-To-L302ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L302-To-L303ÿStart TimeUTGC,L302-To-L303ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L303-To-L304ÿStart TimeUTGC,L303-To-L304ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L304-To-L305ÿStart TimeUTGC,L304-To-L305ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L305-To-L306ÿStart TimeUTGC,L305-To-L306ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L306-To-L307ÿStart TimeUTGC,L306-To-L307ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L307-To-L308ÿStart TimeUTGC,L307-To-L308ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L308-To-L309ÿStart TimeUTGC,L308-To-L309ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L309-To-L310ÿStart TimeUTGC,L309-To-L310ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L310-To-L311ÿStart TimeUTGC,L310-To-L311ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L401-To-L402ÿStart TimeUTGC,L401-To-L402ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L402-To-L403ÿStart TimeUTGC,L402-To-L403ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L403-To-L404ÿStart TimeUTGC,L403-To-L404ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L404-To-L405ÿStart TimeUTGC,L404-To-L405ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L405-To-L406ÿStart TimeUTGC,L405-To-L406ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L406-To-L407ÿStart TimeUTGC,L406-To-L407ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L407-To-L408ÿStart TimeUTGC,L407-To-L408ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L408-To-L409ÿStart TimeUTGC,L408-To-L409ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L409-To-L410ÿStart TimeUTGC,L409-To-L410ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L410-To-L411ÿStart TimeUTGC,L410-To-L411ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L501-To-L502ÿStart TimeUTGC,L501-To-L502ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L502-To-L503ÿStart TimeUTGC,L502-To-L503ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L503-To-L504ÿStart TimeUTGC,L503-To-L504ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L504-To-L505ÿStart TimeUTGC,L504-To-L505ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L505-To-L506ÿStart TimeUTGC,L505-To-L506ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L506-To-L507ÿStart TimeUTGC,L506-To-L507ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L507-To-L508ÿStart TimeUTGC,L507-To-L508ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L508-To-L509ÿStart TimeUTGC,L508-To-L509ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L509-To-L510ÿStart TimeUTGC,L509-To-L510ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L510-To-L511ÿStart TimeUTGC,L510-To-L511ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L601-To-L602ÿStart TimeUTGC,L601-To-L602ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L602-To-L603ÿStart TimeUTGC,L602-To-L603ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L603-To-L604ÿStart TimeUTGC,L603-To-L604ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L604-To-L605ÿStart TimeUTGC,L604-To-L605ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L605-To-L606ÿStart TimeUTGC,L605-To-L606ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L606-To-L607ÿStart TimeUTGC,L606-To-L607ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L607-To-L608ÿStart TimeUTGC,L607-To-L608ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L608-To-L609ÿStart TimeUTGC,L608-To-L609ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L609-To-L610ÿStart TimeUTGC,L609-To-L610ÿStop TimeUTGC
4:00:00 ,7:00:00
,
L610-To-L611ÿStart TimeUTGC,L610-To-L611ÿStop TimeUTGC
4:00:00 ,7:00:00
,
T2-To-L610ÿStart TimeUTGC,T2-To-L610ÿStop TimeUTGC
4:00:00 ,7:00:00
,
T1-To-L510ÿStart TimeUTGC,T1-To-L510ÿStop TimeUTGC
4:00:00 ,7:00:00
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment