diff --git a/KeyRequestParser.egg-info/PKG-INFO b/KeyRequestParser.egg-info/PKG-INFO index 0ef3826..eb80030 100644 --- a/KeyRequestParser.egg-info/PKG-INFO +++ b/KeyRequestParser.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: KeyRequestParser -Version: 0.2 +Version: 0.4 License: MIT Parses Keyrequests diff --git a/build/lib/KRParser/krparser.py b/build/lib/KRParser/krparser.py index 29c3d0c..7305ba0 100644 --- a/build/lib/KRParser/krparser.py +++ b/build/lib/KRParser/krparser.py @@ -1,6 +1,7 @@ import re -from key_request_parser import patterns, keyrequests, helper +from KRParser import patterns, keyrequests, helper + from enum import Flag, auto import logging diff --git a/build/lib/__init__.py b/build/lib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/build/lib/helper.py b/build/lib/helper.py deleted file mode 100644 index cace378..0000000 --- a/build/lib/helper.py +++ /dev/null @@ -1,46 +0,0 @@ -import requests -from requests.adapters import HTTPAdapter, Retry - -def get_requestOld(url, headers, params): - #try: - response = requests.get(url, headers=headers, params=params, verify=False) - response.raise_for_status() - # except requests.exceptions.HTTPError as errh: - # return "An Http Error occurred:" + repr(errh) - # except requests.exceptions.ConnectionError as errc: - # return "An Error Connecting to the API occurred:" + repr(errc) - # except requests.exceptions.Timeout as errt: - # return "A Timeout Error occurred:" + repr(errt) - # except requests.exceptions.RequestException as err: - # return "An Unknown Error occurred" + repr(err) - - return response - -def get_request(url, headers, params): - #try: - session = requests.Session() - retry = Retry(connect=3, backoff_factor=10) - adapter = HTTPAdapter(max_retries=retry) - session.mount('http://', adapter) - session.mount('https://', adapter) - - #response = requests.get(url, headers=headers, params=params, verify=False) - response = session.get(url,headers=headers, params=params, verify=False) - - response.raise_for_status() - # except requests.exceptions.HTTPError as errh: - # return "An Http Error occurred:" + repr(errh) - # except requests.exceptions.ConnectionError as errc: - # return "An Error Connecting to the API occurred:" + repr(errc) - # except requests.exceptions.Timeout as errt: - # return "A Timeout Error occurred:" + repr(errt) - # except requests.exceptions.RequestException as err: - # return "An Unknown Error occurred" + repr(err) - - return response - -def contains(list, filter): - for x in list: - if filter(x): - return True - return False \ No newline at end of file diff --git a/build/lib/keyrequests.py b/build/lib/keyrequests.py deleted file mode 100644 index a877da3..0000000 --- a/build/lib/keyrequests.py +++ /dev/null @@ -1,157 +0,0 @@ -try: - # Python 3 - from collections.abc import MutableSequence -except ImportError: - # Python 2.7 - from collections import MutableSequence - -class KeyRequestGroup(MutableSequence): - """A container for manipulating lists of hosts""" - def __init__(self, data=None): - """Initialize the class""" - super(KeyRequestGroup, self).__init__() - if (data is not None): - self._list = list(data) - else: - self._list = list() - - def __repr__(self): - return "<{0} {1}>".format(self.__class__.__name__, self._list) - - def __len__(self): - """List length""" - return len(self._list) - - def __getitem__(self, ii): - """Get a list item""" - if isinstance(ii, slice): - return self.__class__(self._list[ii]) - else: - return self._list[ii] - - def __delitem__(self, ii): - """Delete an item""" - del self._list[ii] - - def __setitem__(self, ii, val): - # optional: self._acl_check(val) - self._list[ii] = val - - def __str__(self): - return str(self._list) - - def createExistsQuery(self, val): - - query="type(service_method)" - - val['services'] = list(map(lambda x: x.replace("~","") , val['services'])) - val['methods'] = list(map(lambda x: x.replace("~","") , val['methods'])) - #case Service Names exists - if len(val["services"]) > 0: - if val["services"][0].startswith("SERVICE-"): - query+=",fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityId(\""+'","'.join(val["services"])+"\"))" - else: - query+=",fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityName.in(\""+'","'.join(val["services"])+"\"))" - - if len(val["methods"]) > 0: - if val["methods"][0].startswith("SERVICE_METHOD-"): - query+=",entityId(\""+'","'.join(val["methods"])+"\")" - else: - query+=",entityName.in(\""+'","'.join(val["methods"])+"\")" - - val["existsQuery"]= query - - # def createServiceResolveQuery(self, val): - # query="type(SERVICE)" - # val['services'] = list(map(lambda x: x.replace("~","") , val['services'])) - - # if len(val["services"]) > 0: - # if val["services"][0].startswith("SERVICE-"): - # query+=",entityId(\""+'","'.join(val["services"])+"\")" - # else: - # query+=",entityName.in(\""+'","'.join(val["services"])+"\")" - - # val["resolveServiceQuery"]= query - - - def insert(self, ii, val): - self.createExistsQuery(val) - - self._list.insert(ii, val) - - - - def append(self, val): - - for g in val: - - if len(self._list) == 0: - #self._list.insert(ii, val) - self.insert(len(self._list), g) - return - - for group in self._list: - if len(set(group["services"]) - set(g["services"])) > 0 or len(set(group["methods"]) - set(g["methods"])) > 0: - self.insert(len(self._list), g) - - - -class KR: - - # def getNotExistingKeyRequests(self): - # return [k for k in self.keyRequests if k['exists']==False] - - # def hasNotExistingKeyRequests(self): - # for k in self.keyRequests: - # if k['exists']==False: - # return True - - # return False - - # def getNoData1WKeyRequests(self): - # return [k for k in self.keyRequests if k['hasData_1W']==False and k['exists']==True] - - # def hasNoData1WKeyRequests(self): - # for k in self.keyRequests: - # if k['hasData_1W']==False and k['exists'] == True: - # return True - - # return False - - def getKeyRequestByHasData(self,label): - return [k for k in self.keyRequests if k['hasData'][label]==False] - - def hasNoData(self,label): - for k in self.keyRequests: - if k['hasData'][label]==False: - return True - - return False - - - - - def checkKeyRequestsHasData(self): - pass - - def mergeServices(self, listServices): - listOfServiceIds=[o["entityId"] for o in self.services] - - for s in listServices: - if s["entityId"] not in listOfServiceIds: - self.services.append(s) - - def __init__(self, - metadata, - matchedGroups: KeyRequestGroup = None): - self.metadata=metadata - - if matchedGroups == None: - self.matchedGroups = KeyRequestGroup() - else: - self.matchedGroups = keyRequests_groups - - self.keyRequests=[] - self.services=[] - - diff --git a/build/lib/krparser.py b/build/lib/krparser.py deleted file mode 100644 index 29c3d0c..0000000 --- a/build/lib/krparser.py +++ /dev/null @@ -1,303 +0,0 @@ -import re - -from key_request_parser import patterns, keyrequests, helper - -from enum import Flag, auto -import logging -import threading -import concurrent.futures -import time -from jsonmerge import merge - - - -class KROption(Flag): - VALIDATE_EXISTS = auto() - VALIDATE_HASDATA = auto() - RESOLVEKEYREQUETS = auto() - RESOLVESERVICES = auto() - -class KRParser: - #threadLimiter = threading.BoundedSemaphore(3) - patterns=[patterns.Pattern1(), patterns.Pattern2(), patterns.Pattern3(), patterns.Pattern5(), patterns.Pattern4() ] - lock = threading.Lock() - - def normalize(self,x): - #tmp=x.replace("~","") - tmp=x.replace("\n","") - #tmp=tmp.replace("\"/","\"") - #tmp=tmp.replace("\"/","") -_>was active - #tmp=tmp.replace("/\"","\"") - tmp=tmp.replace("/\"","") - tmp=tmp.replace("\"","") - tmp=tmp.replace("\t","") - - tmp=re.sub("([\s]*)\)", ")", tmp) - - - - tmp=re.sub("\([\s\n\r]*", "(", tmp) - tmp=re.sub("\,[\s\n\r]*", ",", tmp) - tmp=re.sub("\)[\s\n\r]*,", "),", tmp) - tmp=re.sub("in[\s\n\r]*\(", "in(", tmp) - - return tmp - - - def applyPatterns(self,subject): - groups=None - for p in self.patterns: - groups=p.parseServicesAndMethods(subject) - - if len(groups) > 0: - break - - return groups - - - def checkKeyRequetsHasData(self,kr, tfrom, DTAPIURL, DTAPIToken): - - DTAPIURL = DTAPIURL + "/api/v2/entities" - - headers = { - 'Content-Type': 'application/json', - 'Authorization': 'Api-Token ' + DTAPIToken - } - - for gid, group in enumerate(kr.matchedGroups): - params={"entitySelector": group["existsQuery"], "from":tfrom["tfrom"], "fields": "fromRelationships"} - response = helper.get_request(DTAPIURL, headers, params) - entities = (response.json())['entities'] - - if len(entities) > 0: - y=0 - for method in kr.keyRequests: - if method["groupId"] == gid: - found = [x for x in entities if x[method["comparer"]] == method[method["comparer"]]] - - if len(found) > 0: - method["hasData"][tfrom["label"]]=True - #method["displayName"]=found[0]["displayName"] - #method["entityId"]=found[0]["entityId"] - #method["services"]=found[0]["fromRelationships"]["isServiceMethodOfService"] - - # for idx,o in enumerate(method["services"]): - # tmpS=[p for p in kr.services if p["entityId"]==o["id"]] - # if len(tmpS)>0: - # method["services"][idx]=tmpS[0] - - else: - method["hasData"][tfrom["label"]]=False - - def resolveServices(self,services, DTAPIURL, DTAPIToken): - #DTAPIURL = DTAPIURL + "/api/v2/entities" - - headers = { - 'Content-Type': 'application/json', - 'Authorization': 'Api-Token ' + DTAPIToken - } - - for gid, service in enumerate(services): - query="type(SERVICE),entityId("+service["id"]+")" - - params=merge(self.serviceLookupParams,{"entitySelector": query}) - #params={"entitySelector": query,"from":"now-2y", "fields":"tags"} - response = helper.get_request(DTAPIURL, headers, params) - entities = (response.json())['entities'] - - if len(entities)>0: - services[gid]=entities[0] - - def resolveKeyRequests(self,kr, DTAPIURL, DTAPIToken, options): - DTAPIURL = DTAPIURL + "/api/v2/entities" - - headers = { - 'Content-Type': 'application/json', - 'Authorization': 'Api-Token ' + DTAPIToken - } - - - for gid, k in enumerate(kr.keyRequests): - try: - query="type(service_method)" - group=kr.matchedGroups[k["groupId"]] - - if len(group["services"])> 0: - if group["services"][0].startswith("SERVICE-"): - query+=",fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityId(\""+'","'.join(group["services"])+"\"))" - else: - query+=",fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityName.in(\""+'","'.join(group["services"])+"\"))" - - if k["comparer"]=="entityId": - query+=",entityId("+k["entityId"]+")" - else: - query+=",entityName.in(\""+k["displayName"]+"\")" - - params={"entitySelector": query, "from":"now-1y","fields": "fromRelationships"} - response = helper.get_request(DTAPIURL, headers, params) - entities = (response.json())['entities'] - - # if len(entities) > 1: - # kr.keyRequests[gid]['foundCount']=len(entities) - # print("Multiple keyrequest found: ") - - if len(entities)> 0: - kr.keyRequests[gid]["found"]=True - kr.keyRequests[gid]['foundCount']=len(entities) - kr.keyRequests[gid]["displayName"]=entities[0]["displayName"] - kr.keyRequests[gid]["entityId"]=entities[0]["entityId"] - - if "isServiceMethodOfService" in entities[0]["fromRelationships"]: - kr.keyRequests[gid]["services"]=entities[0]["fromRelationships"]["isServiceMethodOfService"] - - if KROption.RESOLVESERVICES in options and len( kr.keyRequests[gid]["services"])>0: - self.resolveServices(kr.keyRequests[gid]["services"], DTAPIURL, DTAPIToken) - - except Exception as err: - kr.keyRequests[gid]["exception"]="resolveKeyRequests failed: "+repr(err) - - - - #kr.mergeServices(entities) - - - def getKeyRequestsByServices(self, services): - #type(SERVICE_METHOD),fromRelationship.isServiceMethodOfService(type("SERVICE"),entityName.in("btc-user-composite-service - PROD")) - DTAPIURL = self.DTAPIURL + "/api/v2/entities" - headers = { - 'Content-Type': 'application/json', - 'Authorization': 'Api-Token ' + self.DTAPIToken - } - - if len(services) > 0: - if services[0].startswith("SERVICE-"): - query="type(service_method),fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityId(\""+'","'.join(services)+"\"))" - else: - query="type(service_method),fromRelationship.isServiceMethodOfService(type(\"SERVICE\"),entityName.in(\""+'","'.join(services)+"\"))" - - params={"entitySelector": query} - response = helper.get_request(DTAPIURL, headers, params) - entities = (response.json())['entities'] - - return entities - - - def process(self, kr): - - for gid, group in enumerate(kr.matchedGroups): - - if len(group["services"]) > 0 and len(group["methods"])==0: - tmp_methods=self.getKeyRequestsByServices(group["services"]) - - for m in tmp_methods: - tmp={"displayName": None,"comparer": "entityId", "entityId":m["entityId"], "groupId":gid, "hasData":{}, "services":[], "found":False, "foundCount":0, "exception":""} #"exists":None, 'hasData_1W':None, - kr.keyRequests.append(tmp) - - for method in group["methods"]: - if method.startswith('SERVICE_METHOD-'): - tmp={"displayName": None,"comparer": "entityId", "entityId":method, "groupId":gid, "hasData":{}, "services":[], "found":False, "foundCount":0, "exception":""} #"exists":None, 'hasData_1W':None, - else: - tmp={"displayName":method,"comparer": "displayName", "entityId":None, "groupId":gid, "hasData":{}, "services":[], "found":False, "foundCount":0, "exception":""} #"exists":None, 'hasData_1W':None, - - kr.keyRequests.append(tmp) - - - - # for service in group["services"]: - # if service.startswith('SERVICE-'): - # tmp={"displayName": None,"comparer": "entityId", "entityId":service, "groupId":gid, "hasData":{}, "keyReuqests":[], "found":False, "foundCount":0, "exception":""} #"exists":None, 'hasData_1W':None, - # else: - # tmp={"displayName":service,"comparer": "displayName", "entityId":None, "groupId":gid, "hasData":{}, "keyReuqests":[], "found":False, "foundCount":0, "exception":""} #"exists":None, 'hasData_1W':None, - - # kr.services.append(tmp) - - - if self.options: - if KROption.RESOLVEKEYREQUETS in self.options: - self.resolveKeyRequests(kr,self.DTAPIURL, self.DTAPIToken, self.options) - - if KROption.VALIDATE_HASDATA in self.options: - self.checkKeyRequetsHasData(kr,{"label":"1W", "tfrom":"now-1w"},self.DTAPIURL, self.DTAPIToken) - self.checkKeyRequetsHasData(kr,{"label":"1M", "tfrom":"now-1M"},self.DTAPIURL, self.DTAPIToken) - # elif KROption.RESOLVEKEYREQUETS in self.options: - # self.checkKeyRequetsHasData(kr, {"label":"1W", "tfrom":"now-1w"},self.DTAPIURL, self.DTAPIToken) - # if KROption.RESOLVESERVICES in self.options: - # self.resolveServices(kr,self.DTAPIURL, self.DTAPIToken) - - return kr - - - def parseBySLO(self,index,row): - #normalize - print(index) - - try: - normFilter=self.normalize(row['filter']) - normExpresseion=self.normalize(row['metricExpression']) - - tmp_KR = keyrequests.KR({"sloName":row["name"], "env":row["env"], "metricExpression": normExpresseion, "filter": normFilter, "matchedGroups": None}) - - - #SLO with Filter - if normFilter.upper().startswith("TYPE(SERVICE_METHOD),") or normFilter.upper().startswith("TYPE(SERVICE),"): - subject=normFilter - else: - subject=normExpresseion - - groups=self.applyPatterns(subject) - - tmp_KR.matchedGroups.append(groups) - # for g in groups: - # #if g["methods"] != None and len(g["methods"]) > 0: - # tmp_KR.matchedGroups.append(g) - - #self.process(tmp_KR) - kr=self.process(tmp_KR) - with self.lock: - self.krs.append(kr) - - except Exception as err: - print(repr(err)) - #return self.process(tmp_KR) - - def parseBySLO_Threaded(self, slosF): - self.krs=[] - #i=1 - # threads = list() - # for index, row in slosF.iterrows(): - # logging.info("Main : create and start thread %d.", index) - # x = threading.Thread(target=self.parseBySLO, args=(row,)) - # threads.append(x) - # x.start() - - # #krs.append(krp.parseBySLO(row)) - - # for index, thread in enumerate(threads): - # logging.info("Main : before joining thread %d.", index) - # thread.join() - # logging.info("Main : thread %d done", index) - - # #resultSlos.extend(krs) - - - with concurrent.futures.ThreadPoolExecutor(10) as executor: - for index, row in slosF.iterrows(): - # if i % 25 == 0: - # time.sleep(0) - #args={index:index, } - executor.submit(self.parseBySLO, index,row) - # print(str(i)+"\n") - # i=i+1 - # x = threading.Thread(target=self.parseBySLO, args=(row,)) - # threads.append(x) - # x.start() - - return self.krs - - - def __init__(self, options: KROption=None ,serviceLookupParams={}, DTAPIURL=None, DTAPIToken=None ): - self.DTAPIURL= DTAPIURL - self.DTAPIToken=DTAPIToken - self.options=options - self.serviceLookupParams=merge({"from":"now-2y"},serviceLookupParams) - self.krs=[] \ No newline at end of file diff --git a/build/lib/patterns.py b/build/lib/patterns.py deleted file mode 100644 index ebd280b..0000000 --- a/build/lib/patterns.py +++ /dev/null @@ -1,96 +0,0 @@ -import re -import urllib - -class Pattern1: - - - def parseServicesAndMethods(self, metricExpression): - - #result = re.findall(r"type\(\"?service_method\"?\)[\s\n\r]*,[\s\n\r]*fromRelationship[\s\n\r]*\.[\s\n\r]*isServiceMethodOfService[\s\n\r]*\([\s\n\r]*type\(\"?service\"?\)[\s\n\r]*,[\s\n\r]*entityName[\s\n\r]*[\.]*[\s\n\r]*[in]*[\s\n\r]*\([\s\n\r]*([A-Z0-9\:\<\>\_\$\.\s\-\,\(\),\[\]\\\\/*]*)[\s\n\r]*\)[\s\n\r]*\)[\s\n\r]*,[\s\n\r]*entityName[\s\n\r]*[\.]*[\s\n\r]*[in]*[\s\n\r]*\([\s\n\r]*([A-Z0-9\:\<\>\_\$\.\s\-\,\(\),\[\]\\\\/*]*)\)[\s\n\r]*\)[\s\n\r]*\)[\s\n\r]*\)[\s\n\r]*\)[\s\n\r]*[\)]*", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - #result = re.findall(r"type\(\"?service_method\"?\)[\s\n\r]*,[\s\n\r]*fromRelationship[\s\n\r]*\.[\s\n\r]*isServiceMethodOfService[\s\n\r]*\([\s\n\r]*type\(\"?service\"?\)[\s\n\r]*,[\s\n\r]*entityName[\s\n\r]*[\.]*[\s\n\r]*[in]*[\s\n\r]*\([\s\n\r]*([\"]*[^.*]*[\"]*)[\s\n\r]*\)[\s\n\r]*\)[\s\n\r]*\,[\s\n\r]*entityName[\s\n\r]*\.[in]*[\s\n\r]*\([\s\n\r]*([\"]*[^.*\)]*)", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - - #result = re.findall(r"type\(\"?service_method\"?\)[\s\n\r]*,[\s\n\r]*fromRelationship[\s\n\r]*\.[\s\n\r]*isServiceMethodOfService[\s\n\r]*\([\s\n\r]*type\(\"?service\"?\)[\s\n\r]*,[\s\n\r]*entityName[\s\n\r]*[\.]*[\s\n\r]*[in]*[\s\n\r]*\([\s\n\r]*(\"[^.*]*\")[\s\n\r]*\)[\s\n\r]*\)[\s\n\r]*\,[\s\n\r]*entityName[\s\n\r]*\.[in]*[\s\n\r]*\([\s\n\r]*(\"[^.*]*)\)\"", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - - #Endoce - metricExpression=re.sub(r'~([A-Z0-9\:\<\>\_\$\.\s\-\,\(\),\[\]\\\\/*]*)~', lambda m: str(urllib.parse.quote_plus(m.group(1))), metricExpression, flags=re.IGNORECASE|re.X|re.MULTILINE) - result = re.findall(r"type\(\"?service_method\"?\),fromRelationship\.isServiceMethodOfService\(type\(\"?service\"?\),entityName[\.]*[in]*\(([^\)]*)\)\)\,entityName[\.]*[in]*\(([^\)]*)\)", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - #result = re.findall(r"type\(\"?service_method\"?\)[\s\n\r]*,[\s\n\r]*fromRelationship[\s\n\r]*\.[\s\n\r]*isServiceMethodOfService[\s\n\r]*\([\s\n\r]*type\(\"?service\"?\)[\s\n\r]*,[\s\n\r]*entityName[\s\n\r]*[\.]*[\s\n\r]*[in]*[\s\n\r]*\([\s\n\r]*([^\)]*)\)[\s\n\r]*\)[\s\n\r]*\,[\s\n\r]*entityName[\s\n\r]*[\.]*[\s\n\r]*[in]*\([\s\n\r]*([^\)]*)[\s\n\r]*\)", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - #services=[] - #methods=[] - groups=[] - if result: - for r in result: - services=[s.strip() for s in urllib.parse.unquote_plus(r[0]).split(",")] - methods=[s.strip() for s in urllib.parse.unquote_plus(r[1]).split(",")] - groups.append({"services":services, "methods":methods}) - #return services, methods - return groups - -class Pattern2: - - def parseServicesAndMethods(self, metricExpression): - metricExpression=re.sub(r'~([A-Z0-9\:\<\>\_\$\.\s\-\,\(\),\[\]\\\\/*]*)~', lambda m: str(urllib.parse.quote_plus(m.group(1))), metricExpression, flags=re.IGNORECASE|re.X|re.MULTILINE) - result = re.findall(r"type\(\"?service_method\"?\),fromRelationship\.isServiceMethodOfService\(type\([~]*service[~]*\),entityName[\.]*[in]*\(([^\)]*)\),tag\(([^\)]*)\)\),entityName[\.]*[in]*\(([^\)]*)\)", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - # services=[] - # methods=[] - groups=[] - if result: - for r in result: - services=[s.strip() for s in urllib.parse.unquote_plus(r[0]).split(",")] - methods=[s.strip() for s in urllib.parse.unquote_plus(r[2]).split(",")] - groups.append({"services":services, "methods":methods}) - - return groups - - - -class Pattern3: - - def parseServicesAndMethods(self, metricExpression): - metricExpression=re.sub(r'~([A-Z0-9\:\<\>\_\$\.\s\-\,\(\),\[\]\\\\/*]*)~', lambda m: str(urllib.parse.quote_plus(m.group(1))), metricExpression, flags=re.IGNORECASE|re.X|re.MULTILINE) - result = re.findall(r"type\(\"?service_method\"?\)[\s\n\r]*,[\s\n\r]*entityId[\s\n\r]*[\s\n\r]*\([\s\n\r]*[\s\n\r]*([^\)]*)[\s\n\r]*\)", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - # services=[] - # methods=[] - groups=[] - if result: - for r in result: - methods=[s.strip() for s in urllib.parse.unquote_plus(r).split(",")] - groups.append({"services":[], "methods":methods}) - - return groups - -class Pattern4: - - def parseServicesAndMethods(self, metricExpression): - metricExpression=re.sub(r'~([A-Z0-9\:\<\>\_\$\.\s\-\,\(\),\[\]\\\\/*]*)~', lambda m: str(urllib.parse.quote_plus(m.group(1))), metricExpression, flags=re.IGNORECASE|re.X|re.MULTILINE) - result = re.findall(r"type\(\"?service\"?\)[\s\n\r]*,[\s\n\r]*[entityName|entityId].*[equals|in]*\(([^\)]*)\)", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - - groups=[] - if result: - for r in result: - if not r: - #methods=[s.strip() for s in r.split(",")] - services=[s.strip() for s in urllib.parse.unquote_plus(r).split(",")] - groups.append({"services":services, "methods":[]}) - - return groups - -class Pattern5: - - def parseServicesAndMethods(self, metricExpression): - - #Endoce - metricExpression=re.sub(r'~([A-Z0-9\:\<\>\_\$\.\s\-\,\(\),\[\]\\\\/*]*)~', lambda m: str(urllib.parse.quote_plus(m.group(1))), metricExpression, flags=re.IGNORECASE|re.X|re.MULTILINE) - result = re.findall(r"type\(\"?service_method\"?\),fromRelationship\.isServiceMethodOfService\(type\(\"?service\"?\),entityName[\.]*[in]*\(([^\)]*)\)\)", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - #result = re.findall(r"type\(\"?service_method\"?\)[\s\n\r]*,[\s\n\r]*fromRelationship[\s\n\r]*\.[\s\n\r]*isServiceMethodOfService[\s\n\r]*\([\s\n\r]*type\(\"?service\"?\)[\s\n\r]*,[\s\n\r]*entityName[\s\n\r]*[\.]*[\s\n\r]*[in]*[\s\n\r]*\([\s\n\r]*([^\)]*)\)[\s\n\r]*\)[\s\n\r]*\,[\s\n\r]*entityName[\s\n\r]*[\.]*[\s\n\r]*[in]*\([\s\n\r]*([^\)]*)[\s\n\r]*\)", metricExpression,flags=re.IGNORECASE|re.X|re.MULTILINE) - #services=[] - #methods=[] - groups=[] - if result: - for r in result: - if not r: - services=[s.strip() for s in urllib.parse.unquote_plus(r).split(",")] - #methods=[s.strip() for s in urllib.parse.unquote_plus(r[1]).split(",")] - groups.append({"services":services, "methods":[]}) - #return services, methods - return groups \ No newline at end of file diff --git a/dist/KeyRequestParser-0.1-py3.10.egg b/dist/KeyRequestParser-0.1-py3.10.egg deleted file mode 100644 index e96c9f1..0000000 Binary files a/dist/KeyRequestParser-0.1-py3.10.egg and /dev/null differ diff --git a/dist/KeyRequestParser-0.2-py3.10.egg b/dist/KeyRequestParser-0.2-py3.10.egg deleted file mode 100644 index 9c0ec6f..0000000 Binary files a/dist/KeyRequestParser-0.2-py3.10.egg and /dev/null differ diff --git a/dist/KeyRequestParser-0.4-py3.10.egg b/dist/KeyRequestParser-0.4-py3.10.egg new file mode 100644 index 0000000..6157478 Binary files /dev/null and b/dist/KeyRequestParser-0.4-py3.10.egg differ