class Test(unittest.TestCase): def testParseCreditHours(self): string = "3 or 4 credits" self.xmlreader = XMLReader() self.assertEqual(self.xmlreader.parse_credit_hours(string), [3, 4]) def testParseCreditHoursRange(self): string = "0 TO 4 credits" self.xmlreader = XMLReader() self.assertEqual(self.xmlreader.parse_credit_hours(string), [0, 1, 2, 3, 4]) def testParseTime(self): string = '12:50 PM' self.xmlreader = XMLReader() self.assertEqual(self.xmlreader.parse_time(string), 1250)
def _reading_file(self, path): ls_price = XMLReader(path).get_list_of_dicts() if ls_price: return ls_price else: raise Exception("File " + path + " is empty ")
cell_ketercapaiancpl.text = str(round(nilaicpl, 1)) def writeDesc(cell, nilai, cpmk, fail_desc): cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER cell_desc = cell.paragraphs[0] cell_desc.alignment = WD_ALIGN_PARAGRAPH.CENTER if float(nilai) > 50: cell_desc.text = 'Lulus {}'.format(cpmk.split("\n")[0]) else: cell_desc.text = fail_desc try: doc = Document(sys.argv[1]) xml_data = XMLReader(sys.argv[2]).getData() hapus_tabel_contoh(doc) table_cpl = tableNilaiCPL(doc) bobot_cpl = ambilBobotCPl(table_cpl) cpmk_cpl = CpmkCpl(table_cpl) # cari table rae table_table = doc.tables for table in table_table: if table.cell(0, 0).text == 'Mg ke\n(1)': rae_table = table cpmk = ambilCpmk(rae_table) mg_ke = ambilMinggu(rae_table)
def run(self): self.fixSessionobj = FIXSession(self.host, self.port, "U_" + self.senderCompId) if (not self.fixSessionobj.connect()): return self.frameLogonMsg() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) if (not self.recvLogonMsg()): self.printMsg("Failure in receiving Logon Msg") return self.removeTags(['141', '98', '108', '1137']) #Start the recv thread recvThread = threading.Thread(target=self.recvExecutionReport) recvThread.start() # For each Run. reload the properties from XML File run = 1 for line in self.inputList: tmpList = line.split(',') numberOfSecondsToRun = int(tmpList[0]) file = tmpList[1].strip('\n') try: xmlReaderobj = XMLReader(file) except Exception: self.printMsg( "Exception while parsing XML File...Shutting down...") self.shutDown = True self.doCleanup() recvThread.join() self.closeFilePointers() return reloadList = xmlReaderobj.getDriverProperties(self.senderCompId) self.reloadProperties(reloadList) runStartTime = datetime.datetime.now() currentTime = datetime.datetime.now() totMsgSentInThisRun = 0 while ((datetime.datetime.now() - runStartTime).seconds < numberOfSecondsToRun): msgsPerSec = float(self.sendRate) msgSent = 0 U10Msgs = round(msgsPerSec * float(self.U10Percent) * 0.01, 0) U12Msgs = round(msgsPerSec * float(self.U12Percent) * 0.01, 0) U14Msgs = round(msgsPerSec * float(self.U14Percent) * 0.01, 0) U16Msgs = round(msgsPerSec * float(self.U16Percent) * 0.01, 0) U18Msgs = round(msgsPerSec * float(self.U18Percent) * 0.01, 0) U20Msgs = round(msgsPerSec * float(self.U20Percent) * 0.01, 0) U22Msgs = round(msgsPerSec * float(self.U22Percent) * 0.01, 0) totalMsgToBeSent = U10Msgs + U12Msgs + U14Msgs + U16Msgs + U18Msgs + U20Msgs + U22Msgs sleepInterval = 1.0 / totalMsgToBeSent batchStartTime = datetime.datetime.now() while (msgSent < totalMsgToBeSent): if (self.shutDown): self.doCleanup() self.printMsg("Received shutdown event") recvThread.join() self.closeFilePointers() return self.checkHeartBeatMsg() currentTime = datetime.datetime.now() if ((currentTime - batchStartTime).seconds > 1): self.printMsg("Breaking out ") break if (U10Msgs > 0): #print("Sending new order") self.frameU10Msg() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) U10Msgs = U10Msgs - 1 msgSent = msgSent + 1 self.fixMsgDict.clear() time.sleep(sleepInterval) if (U12Msgs > 0): self.frameU12Msg() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) U12Msgs = U12Msgs - 1 msgSent = msgSent + 1 self.fixMsgDict.clear() time.sleep(sleepInterval) if (U14Msgs > 0): self.frameU14Msg() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['110']) U14Msgs = U14Msgs - 1 msgSent = msgSent + 1 self.fixMsgDict.clear() time.sleep(sleepInterval) if (U16Msgs > 0): self.frameU16Msg() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['110']) U16Msgs = U16Msgs - 1 msgSent = msgSent + 1 self.fixMsgDict.clear() time.sleep(sleepInterval) if (U18Msgs > 0): self.frameU18Msg() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['110']) U18Msgs = U18Msgs - 1 msgSent = msgSent + 1 self.fixMsgDict.clear() time.sleep(sleepInterval) if (U20Msgs > 0): self.frameU20Msg() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['110']) U20Msgs = U20Msgs - 1 msgSent = msgSent + 1 self.fixMsgDict.clear() time.sleep(sleepInterval) if (U22Msgs > 0): self.frameU22Msg(random.randint(0, 2)) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['110']) U22Msgs = U22Msgs - 1 msgSent = msgSent + 1 self.fixMsgDict.clear() time.sleep(sleepInterval) self.printMsg("Number of messages send in this batch is " + str(msgSent)) currentTime = datetime.datetime.now() if (currentTime - batchStartTime).seconds < 1: microsecondsLeft = 1000000.0 - ( (currentTime - batchStartTime).microseconds) if microsecondsLeft > 0: self.printMsg("Sleeping before starting the next run") time.sleep(float(microsecondsLeft / 1000000)) currentTime = datetime.datetime.now() totMsgSentInThisRun = totMsgSentInThisRun + msgSent self.printMsg("Number of messages send in run-" + str(run) + " is " + str(totMsgSentInThisRun)) run = run + 1 self.printMsg("Completed Runs..Going to shutdown..") self.shutDown = True self.doCleanup() recvThread.join() self.closeFilePointers() return
import socket, threading from clienttelnet import chatServer from XMLReader import XMLReader import sys config = XMLReader('../config/config.xml') HOST = config.getTelnetIP() PORT = int(config.getTelnetPort()) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(4) class mainServer(threading.Thread): def __init__(self): threading.Thread.__init__(self) print "Starting Telnet" sys.stdout.flush() def run(self): while True: chatServer(s.accept()).start()
def main(filename): #Global Thread List threads=[]; signalReceived=False; symList=[]; driversList=[]; driverObjects=[]; threadName="Main" logObj=getLogObject(); def printMsg(msg): #fmtString=str(datetime.datetime.now())+"\t"+threadName+"\t"+msg; logObj.info(msg); def signalhandler(signum,frame): printMsg("Signal Received:"+str(signum)); signalReceived=True; for driver in driverObjects: driver.stopRunning(); del driverObjects[:]; #Add signal Handler signal.signal(signal.SIGINT,signalhandler); fileList=[]; fileFp=open(filename,"r"); for line in fileFp: fileList.append(line); # Read from the XML File tmpList=fileList[0].split(','); filename=tmpList[1].strip('\n'); xmlReaderobj = XMLReader(filename); symList=xmlReaderobj.getSymbolList(); driversList=xmlReaderobj.getDriversList(); driverType=xmlReaderobj.getDriverType(); for driver in driversList: if (driverType == "XStream"): driverObj=Driver(symList,driver,fileList); elif (driverType == "EqFIX"): driverObj=EqDriver(symList,driver,fileList); #driverObj.printProperties(); driverObjects.append(driverObj); threads=[] for driver in driverObjects: t=threading.Thread(target=driver.run) threads.append(t); t.start(); while(True): time.sleep(2); #Check if all threads are alive. Othersise shutdown numberOfThreadsDown=0; for thread in threads: if(not thread.is_alive()): numberOfThreadsDown=numberOfThreadsDown+1 if (numberOfThreadsDown == len(threads)): printMsg("All threads have shut down...Shutting down now. Bye !!"); return; #Check signal received status if (len(driverObjects) == 0): printMsg("Received Shutdown Signal in Main. Shutting down now..."); for thread in threads: thread.join(); print("All threads joined..Exiting..Bye !!"); return;
def run(self): self.fixSessionobj=FIXSession(self.host,self.port,"U_"+self.senderCompId); if(not self.fixSessionobj.connect()): return; self.frameLogonMsg(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); if (not self.recvLogonMsg()): self.printMsg("Failure in receiving Logon Msg") return; self.removeTags(['141','98','108','1137']); #Start the recv thread recvThread=threading.Thread(target=self.recvExecutionReport) recvThread.start(); # For each Run. reload the properties from XML File run=1; for line in self.inputList: tmpList=line.split(','); numberOfSecondsToRun=int(tmpList[0]); file=tmpList[1].strip('\n'); try: xmlReaderobj=XMLReader(file); except Exception: self.printMsg("Exception while parsing XML File...Shutting down..."); self.shutDown=True; self.doCleanup(); recvThread.join(); self.closeFilePointers(); return; reloadList=xmlReaderobj.getDriverProperties(self.senderCompId); self.reloadProperties(reloadList); runStartTime=datetime.datetime.now(); currentTime=datetime.datetime.now(); totMsgSentInThisRun=0; while((datetime.datetime.now()-runStartTime).seconds < numberOfSecondsToRun): msgsPerSec=float(self.sendRate); msgSent=0; U10Msgs=round(msgsPerSec*float(self.U10Percent)*0.01,0); U12Msgs=round(msgsPerSec*float(self.U12Percent)*0.01,0); U14Msgs=round(msgsPerSec*float(self.U14Percent)*0.01,0); U16Msgs=round(msgsPerSec*float(self.U16Percent)*0.01,0); U18Msgs=round(msgsPerSec*float(self.U18Percent)*0.01,0); U20Msgs=round(msgsPerSec*float(self.U20Percent)*0.01,0); U22Msgs=round(msgsPerSec*float(self.U22Percent)*0.01,0); totalMsgToBeSent=U10Msgs+U12Msgs+U14Msgs+U16Msgs+U18Msgs+U20Msgs+U22Msgs; sleepInterval=1.0/totalMsgToBeSent; batchStartTime=datetime.datetime.now(); while(msgSent<totalMsgToBeSent): if (self.shutDown): self.doCleanup(); self.printMsg("Received shutdown event"); recvThread.join(); self.closeFilePointers(); return; self.checkHeartBeatMsg(); currentTime=datetime.datetime.now(); if ((currentTime-batchStartTime).seconds > 1): self.printMsg("Breaking out "); break; if (U10Msgs>0): #print("Sending new order") self.frameU10Msg(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); U10Msgs=U10Msgs-1; msgSent=msgSent+1; self.fixMsgDict.clear(); time.sleep(sleepInterval); if (U12Msgs>0): self.frameU12Msg(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); U12Msgs=U12Msgs-1; msgSent=msgSent+1; self.fixMsgDict.clear(); time.sleep(sleepInterval); if (U14Msgs>0): self.frameU14Msg(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['110']); U14Msgs=U14Msgs-1; msgSent=msgSent+1; self.fixMsgDict.clear(); time.sleep(sleepInterval); if (U16Msgs>0): self.frameU16Msg(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['110']); U16Msgs=U16Msgs-1; msgSent=msgSent+1; self.fixMsgDict.clear(); time.sleep(sleepInterval); if (U18Msgs>0): self.frameU18Msg(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['110']); U18Msgs=U18Msgs-1; msgSent=msgSent+1; self.fixMsgDict.clear(); time.sleep(sleepInterval); if (U20Msgs>0): self.frameU20Msg(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['110']); U20Msgs=U20Msgs-1; msgSent=msgSent+1; self.fixMsgDict.clear(); time.sleep(sleepInterval); if (U22Msgs>0): self.frameU22Msg(random.randint(0,2)); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['110']); U22Msgs=U22Msgs-1; msgSent=msgSent+1; self.fixMsgDict.clear(); time.sleep(sleepInterval); self.printMsg("Number of messages send in this batch is "+str(msgSent)); currentTime=datetime.datetime.now(); if(currentTime-batchStartTime).seconds < 1: microsecondsLeft=1000000.0-((currentTime-batchStartTime).microseconds); if microsecondsLeft>0: self.printMsg("Sleeping before starting the next run") time.sleep(float(microsecondsLeft/1000000)); currentTime=datetime.datetime.now(); totMsgSentInThisRun=totMsgSentInThisRun+msgSent; self.printMsg("Number of messages send in run-"+str(run)+" is "+str(totMsgSentInThisRun)); run=run+1; self.printMsg("Completed Runs..Going to shutdown.."); self.shutDown=True; self.doCleanup(); recvThread.join(); self.closeFilePointers(); return;
import time from updateInfo import UpdateInfo from updateRedis import UpdateRedis from maintelnet import mainServer import socket from Temp import Temperature from updateTemp import UpdateTemp from XMLReader import XMLReader from SetValue import SetValue config = XMLReader('../config/config.xml') ms = mainServer() ms.start() tempcontrol = Temperature(config.getSensorID()) setv = SetValue() configurl = config.getConfigURL() tempurl = config.getUpgradeTempURL() while True: update = UpdateInfo(config.getUsername(),config.getPassword(), configurl) info = update.getDBInfo() redis = UpdateRedis(info, 'lastcommit') redis.update() grade=tempcontrol.getTempC(); updtemp = UpdateTemp(grade, config.getUsername(), config.getPassword(), tempurl) updtemp.update() setv.check(grade,info) time.sleep(5)
def run(self): self.fixSessionobj = FIXSession(self.host, self.port, self.senderCompId, self.Logging) if (not self.fixSessionobj.connect()): self.printMsg("Unable to connect to Server.. Exiting:") return self.frameLogonMsg() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) if (not self.recvLogonMsg()): self.printMsg( "Failure in receiving Logon Msg...Exiting from Thread:") return self.removeTags(['141', '98', '108', '1137']) #Subscribe to Trading Session Status Request self.frameTradingSessionStatus() self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['335', '263']) #Start the recv thread recvThread = threading.Thread(target=self.recvExecutionReport) recvThread.start() # For each Run. reload the properties from XML File run = 1 for line in self.inputList: tmpList = line.split(',') numberOfSecondsToRun = int(tmpList[0]) file = tmpList[1].strip('\n') #self.printMsg(file); try: xmlReaderobj = XMLReader(file) except Exception: self.printMsg( "Exception while parsing XML File...Shutting down...") self.shutDown = True self.doCleanup() recvThread.join() self.closeFilePointers() return reloadList = xmlReaderobj.getDriverProperties(self.senderCompId) self.reloadProperties(reloadList) runStartTime = datetime.datetime.now() currentTime = datetime.datetime.now() totMsgSentInThisRun = 0 while ((datetime.datetime.now() - runStartTime).seconds < numberOfSecondsToRun): msgSent = 0 msgPerSec = float(self.sendRate) if (msgPerSec == 0): time.sleep(2) self.checkHeartBeatMsg() continue if (msgPerSec < 1): newOrders = 1 else: newOrders = round(msgPerSec * self.newOrderPercent * 0.01, 0) cancelOrders = round( msgPerSec * float(self.cancelOrderPercent) * 0.01, 0) modifyOrders = round( msgPerSec * float(self.modifyOrderPercent) * 0.01, 0) hiddenOrders = round( msgPerSec * float(self.hiddenOrderPercent) * 0.01, 0) marketOrders = round( msgPerSec * float(self.marketOrderPercent) * 0.01, 0) GTDOrders = round( msgPerSec * float(self.GTDOrderPercent) * 0.01, 0) expiryOrders = round( msgPerSec * float(self.expiryOrderPercent) * 0.01, 0) + cancelOrders rejectOrders = round( msgPerSec * float(self.rejectOrderPercent) * 0.01, 0) #self.printMsg("New="+str(newOrders)+";Cancel="+str(cancelOrders)+";Modifies="+str(modifyOrders)+";Hidden="+str(hiddenOrders)+";Market="+str(marketOrders)+";GTD="+str(GTDOrders)+";Expiry="+str(expiryOrders)+";Rejects="+str(rejectOrders)); totalMsgToBeSent = newOrders + cancelOrders + modifyOrders + hiddenOrders + marketOrders + GTDOrders + expiryOrders + rejectOrders if (totalMsgToBeSent == 0): time.sleep(1) self.checkHeartBeatMsg() continue sleepInterval = 1.0 / (totalMsgToBeSent * 2) #print(sleepInterval,msgPerSec,totalMsgToBeSent,newOrders,cancelOrders,modifyOrders,hiddenOrders,marketOrders); batchStartTime = datetime.datetime.now() while (msgSent < totalMsgToBeSent): if (self.shutDown): self.doCleanup() self.printMsg("Received shutdown event") recvThread.join() self.closeFilePointers() return self.checkHeartBeatMsg() currentTime = datetime.datetime.now() if ((currentTime - batchStartTime).seconds > 1.0): self.printMsg("Breaking out ") break if (newOrders > 0): self.frameNewOrderSingleMsg() self.alterNewOrderMsg() self.removeTags(['41']) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) newOrders = newOrders - 1 msgSent = msgSent + 1 time.sleep(sleepInterval) if (marketOrders > 0): self.frameNewOrderSingleMsg() self.alterNewMarketOrderMsg() self.removeTags(['41']) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) marketOrders = marketOrders - 1 msgSent = msgSent + 1 time.sleep(sleepInterval) if (hiddenOrders > 0): self.frameNewOrderSingleMsg() self.alterNewHiddenOrderMsg() self.removeTags(['41']) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['1138']) hiddenOrders = hiddenOrders - 1 msgSent = msgSent + 1 time.sleep(sleepInterval) if (GTDOrders > 0): self.frameNewOrderSingleMsg() self.alterNewGTDOrderMsg() self.removeTags(['41']) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['59']) GTDOrders = GTDOrders - 1 msgSent = msgSent + 1 time.sleep(sleepInterval) if (expiryOrders > 0): self.frameNewOrderSingleMsg() self.alterNewExpiryOrderMsg() self.removeTags(['41']) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) expiryOrders = expiryOrders - 1 msgSent = msgSent + 1 time.sleep(sleepInterval) if (rejectOrders > 0): self.frameNewOrderSingleMsg() self.alterNewRejectOrderMsg() self.removeTags(['41']) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) rejectOrders = rejectOrders - 1 msgSent = msgSent + 1 time.sleep(sleepInterval) if (cancelOrders > 0): queuedOrderListSize = len(self.queuedCancelOrdersList) if (queuedOrderListSize == 0): continue self.lockObj.acquire(True) execReport = self.queuedCancelOrdersList.pop( queuedOrderListSize - 1) self.lockObj.release() self.removeTags(['336', '386', '44', '1']) self.frameCancelOrderMsg(execReport['11'], execReport['54'], execReport['38'], execReport['55']) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) cancelOrders = cancelOrders - 1 msgSent = msgSent + 1 time.sleep(sleepInterval) if (modifyOrders > 0): queuedOrderListSize = len(self.queuedModifyOrdersList) if (queuedOrderListSize == 0): continue self.lockObj.acquire(True) execReport = self.queuedModifyOrdersList.pop( queuedOrderListSize - 1) self.lockObj.release() self.removeTags(['336', '386']) qty = str(int(execReport['38']) + 1) self.frameModifyOrderMsg(execReport['11'], execReport['54'], execReport['40'], qty, execReport['44'], execReport['55'], execReport['1']) self.fixSessionobj.sendFIXMsg(self.fixMsgDict) self.removeTags(['41']) modifyOrders = modifyOrders - 1 msgSent = msgSent + 1 time.sleep(sleepInterval) self.printMsg("Number of messages send in this batch is " + str(msgSent)) self.checkHeartBeatMsg() #Clear of the queuedOrderList queus self.lockObj.acquire(True) nomodifyOrders = int(msgPerSec * int(self.modifyOrderPercent) * 0.01) queueSize = len(self.queuedModifyOrdersList) #print(queueSize,nomodifyOrders,nocancelOrders); if (queueSize > nomodifyOrders): for i in list(range(queueSize - nomodifyOrders)): try: execReport = self.queuedModifyOrdersList.pop(i) except Exception: #self.printMsg("Exception Occured while popping out element at "+str(i)); break self.lockObj.release() self.lockObj.acquire(True) nocancelOrders = int(msgPerSec * int(self.cancelOrderPercent) * 0.01) queueSize = len(self.queuedCancelOrdersList) #print(queueSize,nomodifyOrders,nocancelOrders); if (queueSize > nocancelOrders): for i in list(range(queueSize - nocancelOrders)): try: execReport = self.queuedCancelOrdersList.pop(i) except Exception: #self.printMsg("Exception Occured while popping out element at "+str(i)); break self.lockObj.release() currentTime = datetime.datetime.now() if (currentTime - batchStartTime).seconds < 1: microsecondsLeft = 1000000.0 - ( (currentTime - batchStartTime).microseconds) if microsecondsLeft > 0: self.printMsg("Sleeping before starting the next run") time.sleep(float(microsecondsLeft / 1000000)) currentTime = datetime.datetime.now() totMsgSentInThisRun = totMsgSentInThisRun + msgSent self.printMsg("Number of messages send in run-" + str(run) + " is " + str(totMsgSentInThisRun)) run = run + 1 self.printMsg("Completed Runs..Going to shutdown..") self.shutDown = True self.doCleanup() recvThread.join() self.closeFilePointers() return
def run(self): self.fixSessionobj=FIXSession(self.host,self.port,self.senderCompId,self.Logging); if(not self.fixSessionobj.connect()): self.printMsg("Unable to connect to Server.. Exiting:"); return; self.frameLogonMsg(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); if (not self.recvLogonMsg()): self.printMsg("Failure in receiving Logon Msg...Exiting from Thread:"); return; self.removeTags(['141','98','108','1137']); #Subscribe to Trading Session Status Request self.frameTradingSessionStatus(); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['335','263']); #Start the recv thread recvThread=threading.Thread(target=self.recvExecutionReport) recvThread.start(); # For each Run. reload the properties from XML File run=1; for line in self.inputList: tmpList=line.split(','); numberOfSecondsToRun=int(tmpList[0]); file=tmpList[1].strip('\n'); #self.printMsg(file); try: xmlReaderobj=XMLReader(file); except Exception: self.printMsg("Exception while parsing XML File...Shutting down..."); self.shutDown=True; self.doCleanup(); recvThread.join(); self.closeFilePointers(); return; reloadList=xmlReaderobj.getDriverProperties(self.senderCompId); self.reloadProperties(reloadList); runStartTime=datetime.datetime.now(); currentTime=datetime.datetime.now(); totMsgSentInThisRun=0; while((datetime.datetime.now()-runStartTime).seconds < numberOfSecondsToRun): msgSent=0; msgPerSec=float(self.sendRate); if(msgPerSec == 0): time.sleep(2); self.checkHeartBeatMsg(); continue; if(msgPerSec<1): newOrders=1; else: newOrders=round(msgPerSec*self.newOrderPercent*0.01,0); cancelOrders=round(msgPerSec*float(self.cancelOrderPercent)*0.01,0); modifyOrders=round(msgPerSec*float(self.modifyOrderPercent)*0.01,0); hiddenOrders=round(msgPerSec*float(self.hiddenOrderPercent)*0.01,0); marketOrders=round(msgPerSec*float(self.marketOrderPercent)*0.01,0); GTDOrders=round(msgPerSec*float(self.GTDOrderPercent)*0.01,0); expiryOrders=round(msgPerSec*float(self.expiryOrderPercent)*0.01,0)+cancelOrders; rejectOrders=round(msgPerSec*float(self.rejectOrderPercent)*0.01,0); #self.printMsg("New="+str(newOrders)+";Cancel="+str(cancelOrders)+";Modifies="+str(modifyOrders)+";Hidden="+str(hiddenOrders)+";Market="+str(marketOrders)+";GTD="+str(GTDOrders)+";Expiry="+str(expiryOrders)+";Rejects="+str(rejectOrders)); totalMsgToBeSent=newOrders+cancelOrders+modifyOrders+hiddenOrders+marketOrders+GTDOrders+expiryOrders+rejectOrders; if(totalMsgToBeSent == 0): time.sleep(1); self.checkHeartBeatMsg(); continue; sleepInterval=1.0/(totalMsgToBeSent*2); #print(sleepInterval,msgPerSec,totalMsgToBeSent,newOrders,cancelOrders,modifyOrders,hiddenOrders,marketOrders); batchStartTime=datetime.datetime.now(); while(msgSent<totalMsgToBeSent): if (self.shutDown): self.doCleanup(); self.printMsg("Received shutdown event"); recvThread.join(); self.closeFilePointers(); return; self.checkHeartBeatMsg(); currentTime=datetime.datetime.now(); if ((currentTime-batchStartTime).seconds > 1.0): self.printMsg("Breaking out "); break; if (newOrders>0): self.frameNewOrderSingleMsg(); self.alterNewOrderMsg(); self.removeTags(['41']); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); newOrders=newOrders-1; msgSent=msgSent+1; time.sleep(sleepInterval); if (marketOrders>0): self.frameNewOrderSingleMsg(); self.alterNewMarketOrderMsg(); self.removeTags(['41']); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); marketOrders=marketOrders-1; msgSent=msgSent+1; time.sleep(sleepInterval); if (hiddenOrders>0): self.frameNewOrderSingleMsg(); self.alterNewHiddenOrderMsg(); self.removeTags(['41']); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['1138']); hiddenOrders=hiddenOrders-1; msgSent=msgSent+1; time.sleep(sleepInterval); if (GTDOrders>0): self.frameNewOrderSingleMsg(); self.alterNewGTDOrderMsg(); self.removeTags(['41']); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['59']); GTDOrders=GTDOrders-1; msgSent=msgSent+1; time.sleep(sleepInterval); if (expiryOrders>0): self.frameNewOrderSingleMsg(); self.alterNewExpiryOrderMsg(); self.removeTags(['41']); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); expiryOrders=expiryOrders-1; msgSent=msgSent+1; time.sleep(sleepInterval); if (rejectOrders>0): self.frameNewOrderSingleMsg(); self.alterNewRejectOrderMsg(); self.removeTags(['41']); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); rejectOrders=rejectOrders-1; msgSent=msgSent+1; time.sleep(sleepInterval); if (cancelOrders>0): queuedOrderListSize=len(self.queuedCancelOrdersList); if (queuedOrderListSize==0): continue; self.lockObj.acquire(True); execReport=self.queuedCancelOrdersList.pop(queuedOrderListSize-1); self.lockObj.release(); self.removeTags(['336','386','44','1']); self.frameCancelOrderMsg(execReport['11'],execReport['54'],execReport['38'],execReport['55']); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); cancelOrders=cancelOrders-1; msgSent=msgSent+1; time.sleep(sleepInterval); if (modifyOrders>0): queuedOrderListSize=len(self.queuedModifyOrdersList); if (queuedOrderListSize==0): continue; self.lockObj.acquire(True); execReport=self.queuedModifyOrdersList.pop(queuedOrderListSize-1); self.lockObj.release(); self.removeTags(['336','386']); qty=str(int(execReport['38'])+1); self.frameModifyOrderMsg(execReport['11'],execReport['54'],execReport['40'],qty,execReport['44'],execReport['55'],execReport['1']); self.fixSessionobj.sendFIXMsg(self.fixMsgDict); self.removeTags(['41']); modifyOrders=modifyOrders-1; msgSent=msgSent+1; time.sleep(sleepInterval); self.printMsg("Number of messages send in this batch is "+str(msgSent) ); self.checkHeartBeatMsg(); #Clear of the queuedOrderList queus self.lockObj.acquire(True); nomodifyOrders=int(msgPerSec*int(self.modifyOrderPercent)*0.01); queueSize=len(self.queuedModifyOrdersList); #print(queueSize,nomodifyOrders,nocancelOrders); if(queueSize > nomodifyOrders): for i in list(range(queueSize-nomodifyOrders)): try: execReport=self.queuedModifyOrdersList.pop(i); except Exception: #self.printMsg("Exception Occured while popping out element at "+str(i)); break; self.lockObj.release(); self.lockObj.acquire(True); nocancelOrders=int(msgPerSec*int(self.cancelOrderPercent)*0.01); queueSize=len(self.queuedCancelOrdersList); #print(queueSize,nomodifyOrders,nocancelOrders); if(queueSize > nocancelOrders): for i in list(range(queueSize-nocancelOrders)): try: execReport=self.queuedCancelOrdersList.pop(i); except Exception: #self.printMsg("Exception Occured while popping out element at "+str(i)); break; self.lockObj.release(); currentTime=datetime.datetime.now(); if(currentTime-batchStartTime).seconds < 1: microsecondsLeft=1000000.0-((currentTime-batchStartTime).microseconds); if microsecondsLeft>0: self.printMsg("Sleeping before starting the next run"); time.sleep(float(microsecondsLeft/1000000)); currentTime=datetime.datetime.now(); totMsgSentInThisRun=totMsgSentInThisRun+msgSent; self.printMsg("Number of messages send in run-"+str(run)+" is "+str(totMsgSentInThisRun)); run=run+1; self.printMsg("Completed Runs..Going to shutdown.."); self.shutDown=True; self.doCleanup(); recvThread.join(); self.closeFilePointers(); return;
def testParseTime(self): string = '12:50 PM' self.xmlreader = XMLReader() self.assertEqual(self.xmlreader.parse_time(string), 1250)
def testParseCreditHoursRange(self): string = "0 TO 4 credits" self.xmlreader = XMLReader() self.assertEqual(self.xmlreader.parse_credit_hours(string), [0, 1, 2, 3, 4])
def testParseCreditHours(self): string = "3 or 4 credits" self.xmlreader = XMLReader() self.assertEqual(self.xmlreader.parse_credit_hours(string), [3, 4])
def main(filename): #Global Thread List threads = [] signalReceived = False symList = [] driversList = [] driverObjects = [] threadName = "Main" logObj = getLogObject() def printMsg(msg): #fmtString=str(datetime.datetime.now())+"\t"+threadName+"\t"+msg; logObj.info(msg) def signalhandler(signum, frame): printMsg("Signal Received:" + str(signum)) signalReceived = True for driver in driverObjects: driver.stopRunning() del driverObjects[:] #Add signal Handler signal.signal(signal.SIGINT, signalhandler) fileList = [] fileFp = open(filename, "r") for line in fileFp: fileList.append(line) # Read from the XML File tmpList = fileList[0].split(',') filename = tmpList[1].strip('\n') xmlReaderobj = XMLReader(filename) symList = xmlReaderobj.getSymbolList() driversList = xmlReaderobj.getDriversList() driverType = xmlReaderobj.getDriverType() for driver in driversList: if (driverType == "XStream"): driverObj = Driver(symList, driver, fileList) elif (driverType == "EqFIX"): driverObj = EqDriver(symList, driver, fileList) #driverObj.printProperties(); driverObjects.append(driverObj) threads = [] for driver in driverObjects: t = threading.Thread(target=driver.run) threads.append(t) t.start() while (True): time.sleep(2) #Check if all threads are alive. Othersise shutdown numberOfThreadsDown = 0 for thread in threads: if (not thread.is_alive()): numberOfThreadsDown = numberOfThreadsDown + 1 if (numberOfThreadsDown == len(threads)): printMsg("All threads have shut down...Shutting down now. Bye !!") return #Check signal received status if (len(driverObjects) == 0): printMsg("Received Shutdown Signal in Main. Shutting down now...") for thread in threads: thread.join() print("All threads joined..Exiting..Bye !!") return