Source code: alice/tucson/ide/InspectorCore.java
1 package alice.tucson.ide;
2 import java.io.*;
3 import alice.tucson.*;
4 import alice.tuplemedium.*;
5 import alice.tuplemedium.runtime.*;
6 import alice.logictuple.LogicTuple;
7
8 public class InspectorCore extends alice.tuplemedium.runtime.Inspector {
9
10 InspectorAgent form;
11
12 boolean loggingTuples=false;
13 String logTupleFilename;
14 FileWriter logTupleWriter;
15 LogicTuple logTupleFilter;
16
17 boolean loggingQueries=false;
18 String logQueryFilename;
19 FileWriter logQueryWriter;
20 //LogicTuple logQueryFilter;
21
22 boolean loggingReactions=false;
23 String logReactionFilename;
24 FileWriter logReactionWriter;
25 //LogicTuple logQueryFilter;
26
27 public InspectorCore(InspectorAgent f,alice.tucson.AgentId id_,alice.tucson.TupleCentreId tid_) throws Exception {
28 super(id_,tid_);
29 setDaemonPort(alice.infrastructure.Tucson.DEFAULT_PORT);
30 form=f;
31 logTupleFilename="inspector-tuples.log";
32 logQueryFilename="inspector-queries.log";
33 logReactionFilename="inspector-reactions.log";
34 try {
35 logTupleWriter=new FileWriter(logTupleFilename,true);
36 logQueryWriter=new FileWriter(logQueryFilename,true);
37 logReactionWriter=new FileWriter(logReactionFilename,true);
38 } catch (Exception ex){
39 }
40 }
41
42 public void onVMEvent(InspectorMsg msg){
43 if (msg.tuples!=null){
44 TupleViewer viewer=form.getTupleForm();
45 viewer.setVMTime(msg.vmTime);
46 msg.localTime=System.currentTimeMillis();
47 viewer.setLocalTime(msg.localTime);
48 viewer.setNItems(msg.nTuplesMatchingFilter);
49 String st="";
50 for (int i=0; i<msg.nTuplesMatchingFilter; i++){
51 st=st+msg.tuples[i].toString()+"\n";
52 }
53 viewer.setText(st);
54 if (loggingTuples){
55 try {
56 st="";
57 logTupleWriter.write("snapshot( \n"+
58 " time_vm("+msg.vmTime+"),\n"+
59 " time_local("+msg.localTime+"),\n"+
60 " tuple_filter("+form.protocol.tsetFilter+"),\n"+
61 " tuple_log_filter("+logTupleFilter+"),\n"+
62 " tuple_list([ \n");
63
64 if (logTupleFilter==null){
65 boolean first=true;
66 for (int i=0; i<msg.nTuplesMatchingFilter; i++){
67 if (first){
68 st=st+" "+msg.tuples[i].toString();
69 first=false;
70 } else {
71 st=st+",\n "+msg.tuples[i].toString();
72 }
73 }
74 } else {
75 boolean first=true;
76 for (int i=0; i<msg.nTuplesMatchingFilter; i++){
77 if (first){
78 st=st+" "+msg.tuples[i].toString();
79 first=false;
80 } else {
81 st=st+",\n "+msg.tuples[i].toString();
82 }
83 }
84 }
85 logTupleWriter.write(st+"])).\n");
86 logTupleWriter.flush();
87 } catch (Exception ex){
88 }
89 }
90 }
91 if (msg.wnEvents!=null){
92 EventViewer viewer=form.getQueryForm();
93 msg.localTime=System.currentTimeMillis();
94 viewer.setVMTime(msg.vmTime);
95 viewer.setLocalTime(msg.localTime);
96 viewer.setNItems(msg.wnEvents.length);
97 String st="";
98 for (int i=0; i<msg.wnEvents.length; i++){
99 Event ev=msg.wnEvents[i];
100 String tupleEvent="query(";
101 if (ev.operation.toString().equals("in_1")){
102 tupleEvent+="in(";
103 } else {
104 tupleEvent+="rd(";
105 }
106 if (ev.tuple!=null){
107 tupleEvent+=ev.tuple+"),agent-id("+ev.idAgent+"))";
108 } else {
109 tupleEvent+=ev.template+"),agent-id("+ev.idAgent+"))";
110 }
111 st=st+tupleEvent+"\n";
112 }
113 viewer.setText(st);
114 if (loggingQueries){
115 try {
116 st="";
117 logQueryWriter.write("snapshot( \n"+
118 " time_vm("+msg.vmTime+"),\n"+
119 " time_local("+msg.localTime+"),\n"+
120 //" query_filter("+form.protocol.queryFilter+"),\n"+
121 //" query_log_filter("+logQueryFilter+"),\n"+
122 " query_list([ \n");
123
124 //if (logQueryFilter==null){
125 boolean first=true;
126 for (int i=0; i<msg.wnEvents.length; i++){
127 Event ev=msg.wnEvents[i];
128 if (first){
129 st=st+" "+"query( id("+ev.id+"), op("+ev.operation+"), tuple("+ev.tuple+"), agent("+ev.idAgent+"))";
130 first=false;
131 } else {
132 st=st+",\n "+"query( id("+ev.id+"), op("+ev.operation+"), tuple("+ev.tuple+"), agent("+ev.idAgent+"))";
133 }
134 }
135 /*
136 } else {
137 for (int i=0; i<msg.nTuplesMatchingFilter; i++){
138 if (msg.tuples[i].match(logTupleFilter))
139 st=st+" "+msg.tuples[i].toString()+",\n";
140 }
141 }
142 */
143 logQueryWriter.write(st+"])).\n");
144 logQueryWriter.flush();
145 } catch (Exception ex){
146 }
147 }
148 }
149
150 if (msg.reactionOk!=null){
151 ReactionViewer viewer=form.getReactionForm();
152 TriggeredReaction tr=msg.reactionOk;
153 viewer.appendText("time: "+msg.vmTime+"\n"+tr.reaction+" OK\n");
154 if (loggingReactions){
155 try {
156 logReactionWriter.write("succeed-reaction( time("+msg.vmTime+"), "+tr.reaction+").\n");
157 } catch (Exception ex){
158 }
159 }
160
161 } else if (msg.reactionFailed!=null){
162 ReactionViewer viewer=form.getReactionForm();
163 TriggeredReaction tr=msg.reactionFailed;
164 viewer.appendText("time: "+msg.vmTime+"\n"+tr.reaction+" FAILED\n");
165 if (loggingReactions){
166 try {
167 logReactionWriter.write("failed-reaction( time("+msg.vmTime+"), "+tr.reaction+").\n");
168 } catch (Exception ex){
169 }
170 }
171 }
172 }
173
174 void changeLogTupleFile(String name){
175 logTupleFilename=name;
176 if (logTupleWriter!=null){
177 try {
178 logTupleWriter.close();
179 } catch (Exception ex){
180 }
181 }
182 try {
183 logTupleWriter=new FileWriter(logTupleFilename,true);
184 } catch (Exception ex){
185 }
186 }
187
188 void changeLogQueryFile(String name){
189 logQueryFilename=name;
190 if (logQueryWriter!=null){
191 try {
192 logQueryWriter.close();
193 } catch (Exception ex){
194 }
195 }
196 try {
197 logQueryWriter=new FileWriter(logQueryFilename,true);
198 } catch (Exception ex){
199 }
200 }
201
202 void changeLogReactionFile(String name){
203 logReactionFilename=name;
204 if (logReactionWriter!=null){
205 try {
206 logReactionWriter.close();
207 } catch (Exception ex){
208 }
209 }
210 try {
211 logReactionWriter=new FileWriter(logReactionFilename,true);
212 } catch (Exception ex){
213 }
214 }
215 }