Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 30a9df5

Browse filesBrowse files
author
LENOVO-PC\Vasilis
committed
Added some metrics to the Node class
1 parent 1b5f769 commit 30a9df5
Copy full SHA for 30a9df5

File tree

2 files changed

+184
-5
lines changed
Filter options

2 files changed

+184
-5
lines changed

‎Assignment3/src/assignment3/node/IComponent.java

Copy file name to clipboardExpand all lines: Assignment3/src/assignment3/node/IComponent.java
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.rmi.Remote;
44
import java.rmi.RemoteException;
5+
import java.util.List;
6+
import java.util.Map;
57

68
import assignment3.link.Link;
79
import assignment3.message.Message;
@@ -17,4 +19,8 @@ public interface IComponent extends Remote {
1719
public void wakeUp() throws RemoteException;
1820
public IComponent[] getEntities() throws RemoteException;
1921
public int getID() throws RemoteException;
22+
public Map<String,Integer> getMetrics() throws RemoteException;
23+
public Map<Double,Link> getCores() throws RemoteException;
24+
public Map<Double,Link> getMST() throws RemoteException;
25+
public Map<Integer,List<Link>> getLevels() throws RemoteException;
2026
}

‎Assignment3/src/assignment3/node/Node.java

Copy file name to clipboardExpand all lines: Assignment3/src/assignment3/node/Node.java
+178-5Lines changed: 178 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,25 @@ public class Node extends UnicastRemoteObject implements IComponent {
2929
private Link testEdge;
3030
private Link inBranch; //the adjacent edge leading to the core of the fragment
3131
public AtomicInteger findCount; // maybe atomic implementation
32+
public AtomicInteger ConnectSent;
33+
public AtomicInteger TestSent;
34+
public AtomicInteger InitiateSent;
35+
public AtomicInteger ReportSent;
36+
public AtomicInteger AcceptSent;
37+
public AtomicInteger RejectSent;
38+
public AtomicInteger ChangeRootSent;
39+
public AtomicInteger ConnectReceived;
40+
public AtomicInteger TestReceived;
41+
public AtomicInteger InitiateReceived;
42+
public AtomicInteger ReportReceived;
43+
public AtomicInteger AcceptReceived;
44+
public AtomicInteger RejectReceived;
45+
public AtomicInteger ChangeRootReceived;
46+
public AtomicInteger merges;
47+
public AtomicInteger absorbs;
48+
public Map<Double,Link> cores;
49+
public Map<Double,Link> mstEdges;
50+
public Map<Integer,List<Link>> levels;
3251

3352
public Node(int id, Queue<Link> links) throws RemoteException {
3453
super();
@@ -37,13 +56,36 @@ public Node(int id, Queue<Link> links) throws RemoteException {
3756
level = 0;
3857
this.links = new PriorityQueue<Link>(links);
3958
fragmentName = id;
40-
// bestEdge = links.peek();
59+
initializeMetrics();
60+
cores = new HashMap<Double,Link>();
61+
mstEdges = new HashMap<Double,Link>();
62+
levels = new HashMap<Integer,List<Link>>();
4163
}
4264

65+
private void initializeMetrics(){
66+
ConnectSent = new AtomicInteger(0);
67+
TestSent = new AtomicInteger(0);
68+
InitiateSent = new AtomicInteger(0);
69+
ReportSent = new AtomicInteger(0);
70+
AcceptSent = new AtomicInteger(0);
71+
RejectSent = new AtomicInteger(0);
72+
ChangeRootSent = new AtomicInteger(0);
73+
ConnectReceived = new AtomicInteger(0);
74+
TestReceived = new AtomicInteger(0);
75+
InitiateReceived = new AtomicInteger(0);
76+
ReportReceived = new AtomicInteger(0);
77+
AcceptReceived = new AtomicInteger(0);
78+
RejectReceived = new AtomicInteger(0);
79+
ChangeRootReceived = new AtomicInteger(0);
80+
merges = new AtomicInteger(0);
81+
absorbs = new AtomicInteger(0);
82+
}
83+
4384
@Override
4485
public void wakeUp() throws RemoteException {
4586
Link edge = links.peek();
4687
edge.setState(LinkState.IN_MST);
88+
mstEdges.put(edge.getWeight(), edge);
4789
System.out.println(id + ":Wakeup");
4890

4991
System.out.println(id + ": changing link to " + edge.getReceiver(id) + " to IN_MST");
@@ -52,6 +94,7 @@ public void wakeUp() throws RemoteException {
5294
findCount = new AtomicInteger(0);
5395
Message msg = new Message(MessageType.CONNECT, 0);
5496
System.out.println(id + ":Sending Connect to " + edge.getReceiver(id));
97+
ConnectSent.getAndIncrement();
5598
new java.util.Timer().schedule(
5699
new java.util.TimerTask() {
57100
@Override
@@ -81,24 +124,31 @@ public synchronized void receive(Message message, Link link) throws RemoteExcept
81124
Link myLink = getMyLink(link);
82125
switch (message.getType()) {
83126
case TEST:
127+
TestReceived.getAndIncrement();
84128
receiveTest(message, myLink);
85129
break;
86130
case ACCEPT:
131+
AcceptReceived.getAndIncrement();
87132
receiveAccept(message, myLink);
88133
break;
89134
case CONNECT:
135+
ConnectReceived.getAndIncrement();
90136
receiveConnect(message, myLink);
91137
break;
92138
case INITIATE:
139+
InitiateReceived.getAndIncrement();
93140
receiveInitiate(message, myLink);
94141
break;
95142
case REPORT:
143+
ReportReceived.getAndIncrement();
96144
receiveReport(message, myLink);
97145
break;
98146
case REJECT:
147+
RejectReceived.getAndIncrement();
99148
receiveReject(message, myLink);
100149
break;
101150
case CHANGE_ROOT:
151+
ChangeRootReceived.getAndIncrement();
102152
receiveChangeRoot(message, myLink);
103153
break;
104154
}
@@ -144,7 +194,10 @@ public synchronized void receiveConnect(Message message, Link link) throws Remot
144194
if (message.getLevel() < this.level) {
145195
System.out.println(id + ": changing link to " + link.getReceiver(id) + " to IN_MST");
146196
link.setState(LinkState.IN_MST);
197+
mstEdges.put(link.getWeight(), link);
147198
Message msg = new Message(MessageType.INITIATE, level, fragmentName, state);
199+
InitiateSent.getAndIncrement();
200+
absorbs.getAndIncrement();
148201
new java.util.Timer().schedule(
149202
new java.util.TimerTask() {
150203
@Override
@@ -176,7 +229,7 @@ public void run() {
176229
public void run() {
177230
try {
178231
Thread.sleep(3000);
179-
nodes[id].receive(message, link);
232+
nodes[id].receiveConnect(message, link);
180233
} catch (RemoteException e) {
181234
e.printStackTrace();
182235
} catch (InterruptedException e) {
@@ -188,6 +241,16 @@ public void run() {
188241
} else {
189242
// the merging case: l == l' and MOE == MOE'
190243
Message msg = new Message(MessageType.INITIATE, level + 1, link.getWeight(), NodeState.FIND);
244+
InitiateSent.getAndIncrement();
245+
merges.getAndIncrement();
246+
cores.put(link.getWeight(), link);
247+
List<Link> tt;
248+
if (levels.containsKey(level+1))
249+
tt = levels.get(level+1);
250+
else
251+
tt = new ArrayList<Link>();
252+
tt.add(link);
253+
levels.put(level+1, tt);
191254
System.out.println(id + ":Sending Initiate to " + link.getReceiver(id));
192255
new java.util.Timer().schedule(
193256
new java.util.TimerTask() {
@@ -222,6 +285,7 @@ private synchronized void receiveInitiate(Message message, Link link) throws Rem
222285
if (adjescentLink.compareTo(link) != 0 && adjescentLink.getState() == LinkState.IN_MST) {
223286
Message msg = new Message(MessageType.INITIATE, level, fragmentName, state);
224287
System.out.println(id + ": Sending Initiate to " + adjescentLink.getReceiver(id));
288+
InitiateSent.getAndIncrement();
225289
new java.util.Timer().schedule(
226290
new java.util.TimerTask() {
227291
@Override
@@ -258,6 +322,7 @@ private synchronized void test() throws RemoteException {
258322

259323
Message msg = new Message(MessageType.TEST, level, fragmentName);
260324
System.out.println(id + ":Sending Receive test to " + testEdge.getReceiver(id) + " fragment" + fragmentName);
325+
TestSent.getAndIncrement();
261326
int reciverID = testEdge.getReceiver(id);
262327
new java.util.Timer().schedule(
263328
new java.util.TimerTask() {
@@ -318,6 +383,7 @@ public void run() {
318383
if (message.getfName() != fragmentName) {
319384
Message msg = new Message(MessageType.ACCEPT);
320385
System.out.println(id + "Sending Accept to " + link.getReceiver(id));
386+
AcceptSent.getAndIncrement();
321387
new java.util.Timer().schedule(
322388
new java.util.TimerTask() {
323389
@Override
@@ -357,6 +423,7 @@ public void run() {
357423
public void run() {
358424
try {
359425
System.out.println(id + ":Sending Reject to " + link.getReceiver(id));
426+
RejectSent.getAndIncrement();
360427
Message msg = new Message(MessageType.REJECT);
361428
Thread.sleep(100);
362429
nodes[link.getReceiver(id)].receive(msg, link);
@@ -405,6 +472,7 @@ private synchronized void report() throws RemoteException {
405472
this.state = NodeState.FOUND;
406473
Message msg = new Message(MessageType.REPORT, weightBestAdjacent);
407474
System.out.println(id + ":Sending Report to " + inBranch.getReceiver(id));
475+
ReportSent.getAndIncrement();
408476
new java.util.Timer().schedule(
409477
new java.util.TimerTask() {
410478
@Override
@@ -448,7 +516,7 @@ public synchronized void receiveReport(Message message, Link link) throws Remote
448516
public void run() {
449517
try {
450518
Thread.sleep(5000);
451-
nodes[id].receive(message, link);
519+
nodes[id].receiveReport(message, link);
452520
} catch (RemoteException e) {
453521
e.printStackTrace();
454522
} catch (InterruptedException e) {
@@ -464,7 +532,51 @@ public void run() {
464532
if (message.getWeight() == weightBestAdjacent &&
465533
weightBestAdjacent == Double.POSITIVE_INFINITY) {
466534
System.out.println(id + ":HAAAAAAAAAAAAAAAAAAAAAAAAAALT");
467-
// TODO: HALT
535+
Map<String,Integer> stats = null;
536+
Map<String,Integer> temp;
537+
int t;
538+
for (IComponent node:nodes){
539+
if (node.getID()==id){
540+
temp = getMetrics();
541+
}
542+
else{
543+
temp = node.getMetrics();
544+
for (Double w:node.getMST().keySet()){
545+
if (!mstEdges.containsKey(w))
546+
mstEdges.put(w, node.getMST().get(w));
547+
}
548+
for (Double w:node.getCores().keySet()){
549+
if (!cores.containsKey(w))
550+
cores.put(w, node.getCores().get(w));
551+
}
552+
for(int i:node.getLevels().keySet()){
553+
if (!levels.containsKey(i)){
554+
levels.put(i, node.getLevels().get(i));
555+
}
556+
else{
557+
List<Link> tt;
558+
for (Link l:node.getLevels().get(i)){
559+
if (!levels.get(i).stream().anyMatch(p -> p.getWeight() == l.getWeight())){
560+
tt = levels.get(i);
561+
tt.add(l);
562+
levels.put(i, tt);
563+
}
564+
}
565+
}
566+
}
567+
}
568+
if (stats==null)
569+
stats = new HashMap<String,Integer>(temp);
570+
else{
571+
for (String k: stats.keySet()){
572+
t = stats.get(k);
573+
stats.put(k, t+temp.get(k));
574+
}
575+
}
576+
}
577+
t = stats.get("merges");
578+
stats.put("merges", t/2);
579+
presentStats(stats);
468580
}
469581
}
470582
}
@@ -476,6 +588,7 @@ private void changeRoot() throws RemoteException {
476588

477589
if (bestEdge.getState() == LinkState.IN_MST) {
478590
Message msg = new Message(MessageType.CHANGE_ROOT);
591+
ChangeRootSent.getAndIncrement();
479592
new java.util.Timer().schedule(
480593
new java.util.TimerTask() {
481594
@Override
@@ -498,6 +611,7 @@ public void run() {
498611
} else {
499612
Message msg = new Message(MessageType.CONNECT, level);
500613
System.out.println(id + ":Sending connect message " + bestEdge.getReceiver(id));
614+
ConnectSent.getAndIncrement();
501615
new java.util.Timer().schedule(
502616
new java.util.TimerTask() {
503617
@Override
@@ -518,6 +632,7 @@ public void run() {
518632
);
519633
System.out.println(id + ": changing bestEdge to " + bestEdge.getReceiver(id) + " to IN_MST");
520634
bestEdge.setState(LinkState.IN_MST);
635+
mstEdges.put(bestEdge.getWeight(), bestEdge);
521636

522637
}
523638
}
@@ -540,7 +655,65 @@ public IComponent[] getEntities() throws RemoteException{
540655

541656
@Override
542657
public int getID() throws RemoteException {
543-
// TODO Auto-generated method stub
544658
return id;
545659
}
660+
661+
@Override
662+
public Map<String,Integer> getMetrics() throws RemoteException {
663+
// TODO Auto-generated method stub
664+
Map<String,Integer> stat = new HashMap<String, Integer>();
665+
stat.put("ConnectSent", ConnectSent.get());
666+
stat.put("InitiateSent", InitiateSent.get());
667+
stat.put("AcceptSent", AcceptSent.get());
668+
stat.put("RejectSent", RejectSent.get());
669+
stat.put("TestSent", TestSent.get());
670+
stat.put("ReportSent", ReportSent.get());
671+
stat.put("ChangeRootSent", ChangeRootSent.get());
672+
stat.put("ConnectReceived", ConnectReceived.get());
673+
stat.put("InitiateReceived", InitiateReceived.get());
674+
stat.put("AcceptReceived", AcceptReceived.get());
675+
stat.put("RejectReceived", RejectReceived.get());
676+
stat.put("TestReceived", TestReceived.get());
677+
stat.put("ReportReceived", ReportReceived.get());
678+
stat.put("ChangeRootReceived", ChangeRootReceived.get());
679+
stat.put("merges", merges.get());
680+
stat.put("absorbs", absorbs.get());
681+
return stat;
682+
}
683+
684+
685+
private void presentStats(Map<String, Integer> stats){
686+
for (String k:stats.keySet()){
687+
System.out.println(k+": "+stats.get(k));
688+
}
689+
System.out.println("---------- MST ----------");
690+
for (Double w:mstEdges.keySet()){
691+
System.out.println("("+mstEdges.get(w).getFrom()+ " - "+mstEdges.get(w).getTo()+")");
692+
}
693+
System.out.println("---------- Core-Level Values ----------");
694+
for (int l:levels.keySet()){
695+
System.out.println("In level "+ l);
696+
for (Link e: levels.get(l)){
697+
System.out.println("("+e.getFrom()+ " - "+e.getTo()+")");
698+
}
699+
}
700+
}
701+
702+
@Override
703+
public Map<Double, Link> getCores() throws RemoteException {
704+
// TODO Auto-generated method stub
705+
return cores;
706+
}
707+
708+
@Override
709+
public Map<Double, Link> getMST() throws RemoteException {
710+
// TODO Auto-generated method stub
711+
return mstEdges;
712+
}
713+
714+
@Override
715+
public Map<Integer, List<Link>> getLevels() throws RemoteException {
716+
// TODO Auto-generated method stub
717+
return levels;
718+
}
546719
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.