1function [result, iterations] = parseXMLResults(self, filename)
2% [RESULT, ITERATIONS] = PARSEXMLRESULTS(FILENAME)
4import javax.xml.parsers.*;
10numOfCalls = lqn.ncalls;
11Avg.Nodes.Utilization = NaN*ones(numOfNodes,1);
12Avg.Nodes.Phase1Utilization = NaN*ones(numOfNodes,1);
13Avg.Nodes.Phase2Utilization = NaN*ones(numOfNodes,1);
14Avg.Nodes.Phase1ServiceTime = NaN*ones(numOfNodes,1);
15Avg.Nodes.Phase2ServiceTime = NaN*ones(numOfNodes,1);
16Avg.Nodes.Throughput = NaN*ones(numOfNodes,1);
17Avg.Nodes.ProcWaiting = NaN*ones(numOfNodes,1);
18Avg.Nodes.ProcUtilization = NaN*ones(numOfNodes,1);
19Avg.Edges.Waiting = NaN*ones(numOfCalls,1);
21% init Java XML parser and load file
22dbFactory = DocumentBuilderFactory.newInstance();
23dBuilder = dbFactory.newDocumentBuilder();
25[fpath,fname,~] = fileparts(filename);
26resultFilename = [fpath,filesep,fname,
'.lqxo'];
28if self.options.verbose
29 line_printf(
'\nParsing LQNS result file: %s\n',resultFilename);
31 %line_printf(
'\nLQNS result file available at: %s',resultFilename);
35doc = dBuilder.parse(resultFilename);
36doc.getDocumentElement().normalize();
39solverParams = doc.getElementsByTagName(
'solver-params');
40for i = 0:solverParams.getLength()-1
41 solverParam = solverParams.item(i);
42 result = solverParam.getElementsByTagName(
'result-general');
43 iterations = str2double(result.item(0).getAttribute(
'iterations'));
46procList = doc.getElementsByTagName(
'processor');
47for i = 0:procList.getLength()-1
49 procNode = procList.item(i);
50 if (procNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE)
51 procElement = procNode;
52 procName = char(procElement.getAttribute(
'name'));
53 procPos = findstring(lqn.names,procName);
54 procResult = procElement.getElementsByTagName(
'result-processor');
55 uRes = str2double(procResult.item(0).getAttribute(
'utilization'));
56 Avg.Nodes.ProcUtilization(procPos) = uRes;
58 taskList = procElement.getElementsByTagName(
'task');
59 for j = 0:taskList.getLength()-1
61 taskElement = taskList.item(j);
62 taskName = char(taskElement.getAttribute(
'name'));
63 taskPos = findstring(lqn.names,taskName);
64 taskResult = taskElement.getElementsByTagName(
'result-task');
65 uRes = str2double(taskResult.item(0).getAttribute(
'utilization'));
66 p1uRes = str2double(taskResult.item(0).getAttribute(
'phase1-utilization'));
67 p2uRes = str2double(taskResult.item(0).getAttribute(
'phase2-utilization'));
68 tRes = str2double(taskResult.item(0).getAttribute(
'throughput'));
69 puRes = str2double(taskResult.item(0).getAttribute(
'proc-utilization'));
70 Avg.Nodes.Utilization(taskPos) = uRes;
71 Avg.Nodes.Phase1Utilization(taskPos) = p1uRes;
72 Avg.Nodes.Phase2Utilization(taskPos) = ifthenelse(isempty(p2uRes),NaN,p2uRes);
73 Avg.Nodes.Throughput(taskPos) = tRes;
74 Avg.Nodes.ProcUtilization(taskPos) = puRes;
76 entryList = taskElement.getElementsByTagName(
'entry');
77 for k = 0:entryList.getLength()-1
79 entryElement = entryList.item(k);
80 entryName = char(entryElement.getAttribute(
'name'));
81 entryPos = findstring(lqn.names,entryName);
82 entryResult = entryElement.getElementsByTagName(
'result-entry');
83 uRes = str2double(entryResult.item(0).getAttribute(
'utilization'));
84 p1uRes = str2double(entryResult.item(0).getAttribute(
'phase1-utilization'));
85 p2uRes = str2double(entryResult.item(0).getAttribute(
'phase2-utilization'));
86 p1stRes = str2double(entryResult.item(0).getAttribute(
'phase1-service-time'));
87 p2stRes = str2double(entryResult.item(0).getAttribute(
'phase2-service-time'));
88 tRes = str2double(entryResult.item(0).getAttribute(
'throughput'));
89 puRes = str2double(entryResult.item(0).getAttribute(
'proc-utilization'));
90 Avg.Nodes.Utilization(entryPos) = uRes;
91 Avg.Nodes.Phase1Utilization(entryPos) = p1uRes;
92 Avg.Nodes.Phase2Utilization(entryPos) = ifthenelse(isempty(p2uRes),NaN,p2uRes);
93 Avg.Nodes.Phase1ServiceTime(entryPos) = p1stRes;
94 Avg.Nodes.Phase2ServiceTime(entryPos) = ifthenelse(isempty(p2stRes),NaN,p2stRes);
95 Avg.Nodes.Throughput(entryPos) = tRes;
96 Avg.Nodes.ProcUtilization(entryPos) = puRes;
100 taskActsList = taskElement.getElementsByTagName(
'task-activities');
101 if taskActsList.getLength > 0
102 taskActsElement = taskActsList.item(0);
103 actList = taskActsElement.getElementsByTagName(
'activity');
104 for l = 0:actList.getLength()-1
106 actElement = actList.item(l);
107 if strcmp(
char(actElement.getParentNode().getNodeName()),
'task-activities')
108 actName =
char(actElement.getAttribute('name'));
109 actPos = findstring(lqn.names,actName);
110 actResult = actElement.getElementsByTagName('result-activity');
111 uRes = str2double(actResult.item(0).getAttribute('utilization'));
112 stRes = str2double(actResult.item(0).getAttribute('service-time'));
113 tRes = str2double(actResult.item(0).getAttribute('throughput'));
114 pwRes = str2double(actResult.item(0).getAttribute('proc-waiting'));
115 puRes = str2double(actResult.item(0).getAttribute('proc-utilization'));
116 Avg.Nodes.Utilization(actPos) = uRes;
117 Avg.Nodes.Phase1ServiceTime(actPos) = stRes;
118 Avg.Nodes.Throughput(actPos) = tRes;
119 Avg.Nodes.ProcWaiting(actPos) = pwRes;
120 Avg.Nodes.ProcUtilization(actPos) = puRes;
122 actID = lqn.names{actPos};
124 synchCalls = actElement.getElementsByTagName(
'synch-call');
125 for m = 0:synchCalls.getLength()-1
126 callElement = synchCalls.item(m);
127 destName = char(callElement.getAttribute(
'dest'));
128 destPos = findstring(lqn.names,destName);
129 destID = lqn.names{destPos};
130 callPos = findstring(lqn.callnames,[actID,
'=>',destID]);
131 callResult = callElement.getElementsByTagName(
'result-call');
132 wRes = str2double(callResult.item(0).getAttribute(
'waiting'));
133 Avg.Edges.Waiting(callPos) = wRes;
136 asynchCalls = actElement.getElementsByTagName(
'asynch-call');
137 for m = 0:asynchCalls.getLength()-1
138 callElement = asynchCalls.item(m);
139 destName = char(callElement.getAttribute(
'dest'));
140 destPos = findstring(lqn.names,destName);
141 destID = lqn.names{destPos};
142 callPos = findstring(lqn.callnames,[actID,
'->',destID]);
143 callResult = callElement.getElementsByTagName(
'result-call');
144 wRes = str2double(callResult.item(0).getAttribute(
'waiting'));
145 Avg.Edges.Waiting(callPos) = wRes;
154self.result.RawAvg = Avg;
155self.result.Avg.ProcUtil = Avg.Nodes.ProcUtilization(:);
156self.result.Avg.SvcT = Avg.Nodes.Phase1ServiceTime(:);
157self.result.Avg.Tput = Avg.Nodes.Throughput(:);
158self.result.Avg.Util = Avg.Nodes.Utilization(:);
159self.result.Avg.RespT = NaN*Avg.Nodes.ProcWaiting(:);
160self.result.Avg.QLen = NaN*Avg.Nodes.ProcWaiting(:);