summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils
diff options
context:
space:
mode:
authoritraviv <itraviv@cisco.com>2016-08-18 15:24:21 +0300
committeritraviv <itraviv@cisco.com>2016-08-18 16:26:09 +0300
commitb64ee3961384a4b0ddb9613a5940c58a517de30d (patch)
tree3fd60c06bbe8c8067f94063e0849f465919a21fd /scripts/automation/trex_control_plane/stl/trex_stl_lib/utils
parenta08d3b9ba1c5010827029bab030ef61d73368fa3 (diff)
parent6796bb99573f15c77a007434feabb30291ac1670 (diff)
Merge branch 'scapy_server'
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/trex_stl_lib/utils')
-rwxr-xr-xscripts/automation/trex_control_plane/stl/trex_stl_lib/utils/GAObjClass.py179
1 files changed, 121 insertions, 58 deletions
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/GAObjClass.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/GAObjClass.py
index 164aae7a..3993ad5e 100755
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/GAObjClass.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/utils/GAObjClass.py
@@ -1,4 +1,3 @@
-#import requests # need external lib for that
try: # Python2
import Queue
from urllib2 import *
@@ -9,7 +8,7 @@ except: # Python3
import threading
import sys
from time import sleep
-
+from pprint import pprint
"""
GAObjClass is a class destined to send Google Analytics Information.
@@ -26,57 +25,88 @@ A maximum of 20 hits can be specified per request.
The total size of all hit payloads cannot be greater than 16K bytes.
No single hit payload can be greater than 8K bytes.
"""
-
-url_single = 'http://www.google-analytics.com/collect' #sending single event
-url_batched = 'http://www.google-analytics.com/batch' #sending batched events
-url_debug = 'http://www.google-analytics.com/debug/collect' #verifying hit is valid
+url_single = 'https://www.google-analytics.com/collect' #sending single event
+url_batched = 'https://www.google-analytics.com/batch' #sending batched events
+url_debug = 'https://www.google-analytics.com/debug/collect' #verifying hit is valid
url_conn = 'http://172.217.2.196' # testing internet connection to this address (google-analytics server)
+#..................................................................class GA_ObjClass................................................................
+class GA_ObjClass:
+ def __init__(self,cid,trackerID,appName,appVer):
+ self.cid = cid
+ self.trackerID = trackerID
+ self.appName = appName
+ self.appVer = appVer
+ self.payload = ''
+ self.payload = GA_ObjClass.generate_payload(self)
+ self.size = sys.getsizeof(self.payload)
+
+ def generate_payload(self):
+ self.payload+='v=1&t=event&tid='+str(self.trackerID)
+ self.payload+='&cid='+str(self.cid)
+ self.payload+='&an='+str(self.appName)
+ self.payload+='&av='+str(self.appVer)
+ return self.payload
+
#..................................................................class GA_EVENT_ObjClass................................................................
-class GA_EVENT_ObjClass:
+class GA_EVENT_ObjClass(GA_ObjClass):
def __init__(self,cid,trackerID,command,action,label,value,appName,appVer):
- self.cid = cid
- self.trackerID = trackerID
+ GA_ObjClass.__init__(self,cid,trackerID,appName,appVer)
self.command = command
self.action = action
self.label = label
self.value = value
- self.appName = appName
- self.appVer = appVer
- self.generate_payload()
+ self.payload = self.generate_payload()
self.size = sys.getsizeof(self.payload)
def generate_payload(self):
- self.payload ='v=1&t=event&tid='+str(self.trackerID)
- self.payload+='&cid='+str(self.cid)
self.payload+='&ec='+str(self.command)
self.payload+='&ea='+str(self.action)
self.payload+='&el='+str(self.label)
self.payload+='&ev='+str(self.value)
- self.payload+='&an='+str(self.appName)
- self.payload+='&av='+str(self.appVer)
+ return self.payload
#..................................................................class GA_EXCEPTION_ObjClass................................................................
#ExceptionFatal - BOOLEAN
-class GA_EXCEPTION_ObjClass:
+class GA_EXCEPTION_ObjClass(GA_ObjClass):
def __init__(self,cid,trackerID,ExceptionName,ExceptionFatal,appName,appVer):
- self.cid = cid
- self.trackerID = trackerID
+ GA_ObjClass.__init__(self,cid,trackerID,appName,appVer)
self.ExceptionName = ExceptionName
self.ExceptionFatal = ExceptionFatal
- self.appName = appName
- self.appVer = appVer
- self.generate_payload()
+ self.payload = self.generate_payload()
def generate_payload(self):
- self.payload ='v=1&t=exception&tid='+str(self.trackerID)
- self.payload+='&cid='+str(self.cid)
self.payload+='&exd='+str(self.ExceptionName)
self.payload+='&exf='+str(self.ExceptionFatal)
- self.payload+='&an='+str(self.appName)
- self.payload+='&av='+str(self.appVer)
+ return self.payload
+
+
+
+#..................................................................class GA_TESTING_ObjClass................................................................
+class GA_TESTING_ObjClass(GA_ObjClass):
+ def __init__(self,cid,uuid,trackerID,TRexMode,test_name,setup_name,appName,appVer,commitID,bandwidthPerCore,goldenBPC):
+ GA_ObjClass.__init__(self,cid,trackerID,appName,appVer)
+ self.uid = uuid
+ self.TRexMode = TRexMode
+ self.test_name = test_name
+ self.setup_name = setup_name
+ self.commitID = commitID
+ self.bandwidthPerCore = bandwidthPerCore
+ self.goldenBPC = goldenBPC
+ self.payload = self.generate_payload()
+ self.size = sys.getsizeof(self.payload)
+ def generate_payload(self):
+ self.payload+='&ec='+str(self.TRexMode)
+ self.payload+='&ea=RegressionReport'
+ self.payload+='&cd5='+str(self.uid)
+ self.payload+='&cd1='+str(self.test_name)
+ self.payload+='&cd2='+str(self.setup_name)
+ self.payload+='&cd3='+str(self.commitID)
+ self.payload+='&cm1='+str(self.bandwidthPerCore)
+ self.payload+='&cm2='+str(self.goldenBPC)
+ return self.payload
#.....................................................................class ga_Thread.................................................................
"""
@@ -85,7 +115,6 @@ Google analytics thread manager:
will report and empty queue of google analytics items to GA server, every Timeout (parameter given on initialization)
will perform connectivity check every timeout*10 seconds
-
"""
class ga_Thread (threading.Thread):
@@ -93,7 +122,6 @@ class ga_Thread (threading.Thread):
threading.Thread.__init__(self)
self.threadID = threadID
self.gManager = gManager
-
def run(self):
keepAliveCounter=0
#sys.stdout.write('thread started \n')
@@ -116,9 +144,6 @@ class ga_Thread (threading.Thread):
self.gManager.threadLock.release()
# sys.stdout.write('finished \n')
# sys.stdout.flush()
-
-
-
#.....................................................................class GAmanager.................................................................
"""
@@ -145,6 +170,7 @@ BlockingMode - set to 1 if you wish every Google Analytic Object will be submitt
*** Restriction - Google's restriction for amount of packages being sent per session per second is: 1 event per second, per session. session length is 30min ***
"""
+
class GAmanager:
def __init__(self,GoogleID,UserID,appName,appVer,QueueSize,Timeout,UserPermission,BlockingMode):
self.UserID = UserID
@@ -173,13 +199,13 @@ class GAmanager:
self.gaAddObject(GA_EXCEPTION_ObjClass(self.UserID,self.GoogleID,ExceptionName,ExceptionFatal,self.appName,self.appVer))
def gaAddObject(self,Object):
- if self.BlockingMode==1:
- while self.GA_q.full():
+ if (self.BlockingMode==1):
+ while (self.GA_q.full()):
sleep(self.Timeout)
# sys.stdout.write('blocking mode=1 \n queue full - sleeping for timeout \n') # within Timout, the thread will empty part of the queue
# sys.stdout.flush()
lockState = self.threadLock.acquire(self.BlockingMode)
- if lockState==1:
+ if (lockState==1):
# sys.stdout.write('got lock, adding item \n')
# sys.stdout.flush()
try:
@@ -198,21 +224,23 @@ class GAmanager:
obj_list.append(self.GA_q.get_nowait().payload)
items+=1
# print items
+ return obj_list
def reportBatched(self,batched):
req = Request(url_batched, data=batched.encode('ascii'))
urlopen(req)
- #requests.post(url_batched,data=batched)
-
+# pprint(r.json())
+
def emptyAndReportQ(self):
obj_list = []
- self.emptyQueueToList(obj_list)
- if not len(obj_list):
+ obj_list = self.emptyQueueToList(obj_list)
+ if (len(obj_list)==0):
return
batched = '\n'.join(obj_list)
+# print sys.getsizeof(batched)
# print batched # - for debug
self.reportBatched(batched)
-
+
def printSelf(self):
print('remaining in queue:')
while not self.GA_q.empty():
@@ -231,24 +259,65 @@ class GAmanager:
self.thread.start()
+#.....................................................................class GAmanager_Regression.................................................................
+"""
+ *-*-*-*-Google Analytics Regression Manager-*-*-*-*
+ attributes:
+GoogleID - the tracker ID that Google uses in order to track the activity of a property. for regression use: 'UA-75220362-4'
+AnalyticsUserID - text value - used by Google to differ between 2 users sending data. (will not be presented on reports). use only as a way to differ between different users
+UUID - text - will be presented on analysis. put here UUID
+TRexMode - text - will be presented on analysis. put here TRexMode
+appName - text - will be presented on analysis. put here appName as string describing app name
+appVer - text - will be presented on analysis. put here the appVer
+QueueSize - integer - determines the queue size. the queue will hold pending request before submission. RECOMMENDED VALUE: 20
+Timeout - integer (seconds) - the timeout in seconds between automated reports when activating reporting thread
+UserPermission - boolean (1/0) - required in order to send packets, should be 1.
+BlockingMode - boolean (1/0) - required when each tracked event is critical and program should halt until the event is reported
+SetupName - text - will be presented on analysis. put here setup name as string.
+CommitID - text - will be presented on analysis. put here CommitID
+"""
+class GAmanager_Regression(GAmanager):
+ def __init__(self,GoogleID,AnalyticsUserID,UUID,TRexMode,appName,appVer,
+ QueueSize,Timeout,UserPermission,BlockingMode,SetupName,CommitID):
+ GAmanager.__init__(self,GoogleID,AnalyticsUserID,appName,appVer,
+ QueueSize,Timeout,UserPermission,BlockingMode)
+ self.UUID = UUID
+ self.TRexMode = TRexMode
+ self.SetupName = SetupName
+ self.CommitID = CommitID
+
+ def gaAddTestQuery(self,TestName,BandwidthPerCore,GoldenBPC):
+ self.gaAddObject(GA_TESTING_ObjClass(self.UserID,self.UUID,self.GoogleID,
+ self.TRexMode,TestName,self.SetupName,
+ self.appName,self.appVer,self.CommitID,
+ BandwidthPerCore,GoldenBPC))
+
+
+
#***************************************------TEST--------------**************************************
-if __name__ == '__main__':
- g = GAmanager(GoogleID='UA-75220362-4',UserID="Foo",QueueSize=100,Timeout=5,UserPermission=1,BlockingMode=1,appName='TRex',appVer='1.11.232') #timeout in seconds
-#for i in range(0,35,1):
-#i = 42
- g.gaAddAction(Event='stl',action='stl/udp_1pkt_simple.py {packet_count:1000,packet_len:9000}',label='Boo',value=20)
- #g.gaAddAction(Event='test',action='start',label='Boo1',value=20)
+#if __name__ == '__main__':
+
+#g= GAmanager_Regression(GoogleID='UA-75220362-4',AnalyticsUserID=3845,UUID='trex18UUID_GA_TEST',TRexMode='stateFull_GA_TEST',
+# appName='TRex_GA_TEST',appVer='1.1_GA_TEST',QueueSize=20,Timeout=11,UserPermission=1,BlockingMode=0,SetupName='setup1_GA_TEST',CommitID='commitID1_GA_TEST')
+#for j in range(1,3,1):
+#for i in range(100,118,1):
+# g.gaAddTestQuery('test_name_GA_TEST',i+0.5,150)
+# sleep(11)
+# print "finished batch"
+#g.emptyAndReportQ()
+
+#g.printSelf()
+#g.emptyAndReportQ()
+
+#g = GAmanager(GoogleID='UA-75220362-4',UserID=1,QueueSize=100,Timeout=5,UserPermission=1,BlockingMode=0,appName='TRex',appVer='1.11.232') #timeout in seconds
+#for i in range(0,35,1):
+# g.gaAddAction(Event='test',action='start',label='1',value=i)
#g.gaAddException('MEMFAULT',1)
-#g.gaAddException('MEMFAULT',1)
-#g.gaAddException('MEMFAULT',1)
-#g.gaAddException('MEMFAULT',1)
-#g.gaAddException('MEMFAULT',1)
-#g.gaAddException('MEMFAULT',1)
- g.emptyAndReportQ()
-# g.printSelf()
+#g.emptyAndReportQ()
+#g.printSelf()
#print g.payload
#print g.size
@@ -278,12 +347,6 @@ if __name__ == '__main__':
# sys.stdout.flush()
-# add timing mechanism - DONE
-# add exception mechanism - DONE
-# add version mechanism - DONE
-# ask Itay for unique ID generation per user
-
-