4 ## Copyright (c) 2010-2017 Intel Corporation
6 ## Licensed under the Apache License, Version 2.0 (the "License");
7 ## you may not use this file except in compliance with the License.
8 ## You may obtain a copy of the License at
10 ## http://www.apache.org/licenses/LICENSE-2.0
12 ## Unless required by applicable law or agreed to in writing, software
13 ## distributed under the License is distributed on an "AS IS" BASIS,
14 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 ## See the License for the specific language governing permissions and
16 ## limitations under the License.
21 from proxsocket import *
22 from remotesystem import *
25 def __init__(self, remoteSystem, cmd):
26 self._remoteSystem = remoteSystem
31 self._startDuration = None
33 def startThreaded(self):
34 self._start_thread = threading.Thread(target = self._run, args = (self, 1))
35 self._start_thread.start();
37 def joinThreaded(self):
38 self._start_thread.join();
44 def getStartDuration(self):
45 return self._startDuration;
51 self._remoteSystem.run("sudo killall -w -q -9 prox")
53 self._result = self._remoteSystem.run(self._cmd);
57 self._startDuration = after - before;
59 class StatsCmd(object):
60 def __init__(self, prox):
63 self._beforeParts = []
68 reply = self._prox._send(cmd)._recv()
72 if (len(self._cmd) != 0):
76 if (len(self._parts) == 0):
77 self._beforeParts += [0]
79 before = self._parts[-1] + self._beforeParts[-1];
80 self._beforeParts += [before]
82 self._parts += [stats.count(",") + 1];
85 return "stats " + self._cmd;
87 def setReply(self, reply):
88 self._reply = reply.split(",");
90 def getResult(self, idx):
91 start = self._beforeParts[idx];
92 end = start + self._parts[idx];
93 return self._reply[start:end]
96 def __init__(self, systemConfig):
97 self._systemConfig = systemConfig;
98 self._proxStarter = None
100 user = self._systemConfig._user
101 ip = self._systemConfig._ip
102 self._remoteSystem = remoteSystem(user, ip);
104 self.resetArguments()
106 def resetArguments(self):
109 def addArgument(self, arg):
110 self._args.append(arg);
114 self._proxStarter = ProxStarter(self._remoteSystem, cmd)
115 self._proxStarter.startThreaded();
118 ret = self.startJoinNoConnect();
119 self._connectSocket();
121 return self._proxStarter.getStartDuration();
123 def startJoinNoConnect(self):
124 return self._proxStarter.joinThreaded();
127 proxDir = self._systemConfig.getProxDir();
128 cfgFile = self._systemConfig.getCfgFile();
130 cmd = "cd " + proxDir + "; "
131 cmd += "sudo ./build/prox "
132 cmd += "-f " + cfgFile
134 for arg in self._args:
139 proxDir = self._systemConfig.getProxDir()
140 cmd = "cat " + proxDir + "/prox.log";
141 return self._remoteSystem.run(cmd)["out"];
144 return self._systemConfig._ip;
155 def getIerrors(self):
157 sc.add(self._buildIerrorsCmd());
159 return self._parseIerrorsReply(sc.getResult(0));
161 def _parseIerrorsReply(self, rep):
164 tot_ierrors += int(e);
167 def _buildIerrorsCmd(self):
169 for port in self._ports:
172 cmd += "port(%s).ierrors" % str(port)
175 def waitCmdFinished(self):
176 self._send("stats hz")._recv();
178 def waitAllLinksUp(self):
182 for port in self._ports:
183 cmd = "port link state %s" % str(port)
184 link_state = self._send(cmd)._recv();
185 if (link_state == "down"):
187 print "Link down on port " + str(port) + ", waiting one second"
191 def startAllCores(self):
192 self._send("start all");
194 def stopAllCores(self):
195 self._send("stop all");
198 self._send("quit_force")._recv();
201 self._remoteSystem.run("sudo killall -w -q -9 prox")
204 return self._getTsc();
207 return int(self._send("stats global.tsc")._recv());
209 def scpStatsDump(self, dst):
210 proxDir = self._systemConfig.getProxDir()
212 src = proxDir + "/stats_dump";
213 print "Copying " + src + " to " + dst
214 self._remoteSystem.scp(src, dst);
216 def _querySetup(self):
217 print "Query setup on " + str(self.getIP())
223 def _querySetup2(self):
224 print "running query 2"
228 self._send("quit")._recv();
231 self._hz = int(self._send("stats hz")._recv());
234 self._beg = self._getTsc();
236 def _queryPorts(self):
238 port_info_all = self._send("port info all")._recv();
239 port_info_list = port_info_all.split(',');
241 for port_info in port_info_list:
242 if (len(port_info) > 0):
243 self._ports.append(int(port_info.split(":")[0]));
245 def _connectSocket(self):
246 self._proxSocket = ProxSocket(self.getIP())
248 def _send(self, msg):
249 self._proxSocket.send(msg);
253 return self._proxSocket.recv();