annotate src/main/java/christie/topology/manager/TopologyManager.java @ 44:6664efac18ee

fix CheckCommingHost ConfigWaiter IncommingHosts
author akahori
date Thu, 02 Aug 2018 11:44:47 +0900
parents cf5a75bc3e55
children 12c9bf81d429
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
1 package christie.topology.manager;
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
2
41
akahori
parents: 38
diff changeset
3 import christie.annotation.Peek;
38
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
4 import christie.codegear.CodeGear;
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
5 import christie.codegear.CodeGearManager;
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
6
41
akahori
parents: 38
diff changeset
7 import java.io.File;
akahori
parents: 38
diff changeset
8 import java.io.FileNotFoundException;
akahori
parents: 38
diff changeset
9 import java.io.FileReader;
akahori
parents: 38
diff changeset
10 import java.util.ArrayList;
akahori
parents: 38
diff changeset
11 import java.util.HashMap;
akahori
parents: 38
diff changeset
12 import java.util.LinkedList;
akahori
parents: 38
diff changeset
13
akahori
parents: 38
diff changeset
14 import org.apache.log4j.Logger;
akahori
parents: 38
diff changeset
15
akahori
parents: 38
diff changeset
16 import com.alexmerz.graphviz.ParseException;
akahori
parents: 38
diff changeset
17 import com.alexmerz.graphviz.Parser;
akahori
parents: 38
diff changeset
18 import com.alexmerz.graphviz.objects.*;
akahori
parents: 38
diff changeset
19
38
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
20 public class TopologyManager extends CodeGear {
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
21
41
akahori
parents: 38
diff changeset
22 @Peek
akahori
parents: 38
diff changeset
23 TopologyManagerConfig config;
akahori
parents: 38
diff changeset
24
akahori
parents: 38
diff changeset
25 Logger logger = Logger.getLogger(TopologyManager.class);
akahori
parents: 38
diff changeset
26
akahori
parents: 38
diff changeset
27
38
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
28 @Override
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
29 protected void run(CodeGearManager cgm) {
41
akahori
parents: 38
diff changeset
30 cgm.setup(new CheckComingHost());
38
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
31
41
akahori
parents: 38
diff changeset
32 // if (!conf.dynamic) は, conf.dynamic = trueの動作がわからないので, 省いた.
akahori
parents: 38
diff changeset
33
akahori
parents: 38
diff changeset
34 LinkedList<String> nodeNames = new LinkedList<String>();
akahori
parents: 38
diff changeset
35 HashMap<String, LinkedList<NodeInfo>> topology = new HashMap<String, LinkedList<NodeInfo>>();
akahori
parents: 38
diff changeset
36 int nodeNum = 0;
akahori
parents: 38
diff changeset
37
akahori
parents: 38
diff changeset
38 try {
akahori
parents: 38
diff changeset
39 FileReader reader = new FileReader(new File(config.confFilePath));
akahori
parents: 38
diff changeset
40 Parser parser = new Parser();
akahori
parents: 38
diff changeset
41 parser.parse(reader);
akahori
parents: 38
diff changeset
42
akahori
parents: 38
diff changeset
43
akahori
parents: 38
diff changeset
44 ArrayList<Graph> digraphs = parser.getGraphs();
akahori
parents: 38
diff changeset
45
akahori
parents: 38
diff changeset
46
akahori
parents: 38
diff changeset
47 for (Graph digraph : digraphs) {
akahori
parents: 38
diff changeset
48 ArrayList<Node> nodes = digraph.getNodes(false);
akahori
parents: 38
diff changeset
49 nodeNum = nodes.size();
akahori
parents: 38
diff changeset
50
akahori
parents: 38
diff changeset
51 for (Node node : nodes) {
akahori
parents: 38
diff changeset
52 String nodeName = node.getId().getId();
akahori
parents: 38
diff changeset
53 nodeNames.add(nodeName);
akahori
parents: 38
diff changeset
54 topology.put(nodeName, new LinkedList<NodeInfo>());
akahori
parents: 38
diff changeset
55 }
akahori
parents: 38
diff changeset
56
akahori
parents: 38
diff changeset
57 ArrayList<Edge> edges = digraph.getEdges();
akahori
parents: 38
diff changeset
58 HashMap<String, NodeInfo> hash = new HashMap<String, NodeInfo>();
akahori
parents: 38
diff changeset
59
akahori
parents: 38
diff changeset
60 String connection;
akahori
parents: 38
diff changeset
61 String source;
akahori
parents: 38
diff changeset
62 String target;
akahori
parents: 38
diff changeset
63
akahori
parents: 38
diff changeset
64 NodeInfo nodeInfo;
akahori
parents: 38
diff changeset
65
akahori
parents: 38
diff changeset
66 // まず1回グラフを読み込む
akahori
parents: 38
diff changeset
67 for (Edge edge : edges) {
akahori
parents: 38
diff changeset
68 connection = edge.getAttribute("label");
akahori
parents: 38
diff changeset
69 source = edge.getSource().getNode().getId().getId();
akahori
parents: 38
diff changeset
70 target = edge.getTarget().getNode().getId().getId();
akahori
parents: 38
diff changeset
71 nodeInfo = new NodeInfo(source, connection);
akahori
parents: 38
diff changeset
72
akahori
parents: 38
diff changeset
73 //Question: この下の2行はどんな役目?
akahori
parents: 38
diff changeset
74 //LinkedList<NodeInfo> sources = topology.get(target);
akahori
parents: 38
diff changeset
75 //sources.add(nodeInfo); // addしてその後の使い道は...?
akahori
parents: 38
diff changeset
76
akahori
parents: 38
diff changeset
77 hash.put(source + "," + target, nodeInfo);
akahori
parents: 38
diff changeset
78 }
akahori
parents: 38
diff changeset
79
akahori
parents: 38
diff changeset
80 // hash.get(target + "," + source); をして, グラフを逆にたどって, reverseNameにlabelを入れてる.
akahori
parents: 38
diff changeset
81 for (Edge edge : edges) {
akahori
parents: 38
diff changeset
82 connection = edge.getAttribute("label");
akahori
parents: 38
diff changeset
83 source = edge.getSource().getNode().getId().getId();
akahori
parents: 38
diff changeset
84 target = edge.getTarget().getNode().getId().getId();
akahori
parents: 38
diff changeset
85 nodeInfo = hash.get(target + "," + source);
akahori
parents: 38
diff changeset
86
akahori
parents: 38
diff changeset
87 if (nodeInfo != null) {
akahori
parents: 38
diff changeset
88 nodeInfo.reverseName = connection;
akahori
parents: 38
diff changeset
89 }
akahori
parents: 38
diff changeset
90
akahori
parents: 38
diff changeset
91 }
akahori
parents: 38
diff changeset
92 }
akahori
parents: 38
diff changeset
93
akahori
parents: 38
diff changeset
94 } catch (FileNotFoundException e) {
akahori
parents: 38
diff changeset
95 logger.error("File not found: " + config.confFilePath);
akahori
parents: 38
diff changeset
96 e.printStackTrace();
akahori
parents: 38
diff changeset
97 } catch (ParseException e) {
akahori
parents: 38
diff changeset
98 logger.error("File format error: " + config.confFilePath);
akahori
parents: 38
diff changeset
99 e.printStackTrace();
akahori
parents: 38
diff changeset
100 }
akahori
parents: 38
diff changeset
101
akahori
parents: 38
diff changeset
102 // for recode topology information
akahori
parents: 38
diff changeset
103 // cookie List
akahori
parents: 38
diff changeset
104 getLocalDGM().put("running", false);
akahori
parents: 38
diff changeset
105 getLocalDGM().put("resultParse", topology);
akahori
parents: 38
diff changeset
106 getLocalDGM().put("nodeNames", nodeNames);
akahori
parents: 38
diff changeset
107
akahori
parents: 38
diff changeset
108 cgm.setup(new IncomingHosts());
akahori
parents: 38
diff changeset
109
akahori
parents: 38
diff changeset
110
akahori
parents: 38
diff changeset
111
akahori
parents: 38
diff changeset
112 // Question: この処理何をやっているのかわからない. 一応, その下にそれっぽいコードを書いた.
akahori
parents: 38
diff changeset
113 // ConfigWaiter cs3 = new ConfigWaiter(nodeNum);
akahori
parents: 38
diff changeset
114 // cs3.done.setKey("local", "done");
akahori
parents: 38
diff changeset
115
akahori
parents: 38
diff changeset
116 cgm.setup(new ConfigWaiter());
akahori
parents: 38
diff changeset
117 getLocalDGM().put("nodeNum", nodeNum);
akahori
parents: 38
diff changeset
118 getLocalDGM().put("done", false);
38
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
119
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
120 }
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
121
41
akahori
parents: 38
diff changeset
122
38
02991eabdcbe add TopologyManager.java
akahori
parents:
diff changeset
123 }