comparison src/main/java/christie/topology/manager/TopologyManager.java @ 41:cf5a75bc3e55

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