def _get_components(self): ''' query components, the result like: { "Statistics": "ACTIVE", "Billing": "ACTIVE", "LocationDataStream": "ACTIVE", ... } ''' cmd = r'fdsinstall -u Setup -p Earth_#10 -s' data = os.popen(cmd).read() if not data: Debug.error("query components state error: %s" % cmd) return None # parse state lines = data.split('\n') components = {} for line in lines: # FSC-Event/4.1/linux-eagle-32/1 ACTIVE linux-eagle-32 pattern = r'([^/]*)\/(\d\.\d)\/([^/]*)\/(\d)\s*(\w+)\s+' matchObj = re.match(pattern, line) if matchObj: components[matchObj.group(1)] = matchObj.group(5) # components[matchObj.group(1)] = { # "Version": matchObj.group(2), # "State": matchObj.group(5) # } return components
def json_dumps4(jdata): ''' dump json string with pretty format ''' try: return json.dumps(jdata, indent=4) except Exception as err: Debug.error("Error: dump data error: %s" % (err)) return ""
def json_dumps(jdata): ''' dump json string inline ''' try: return json.dumps(jdata) except Exception as err: Debug.error("Error: dump data error: %s" % (err)) return ""
def json_parse(data): ''' parse json string ''' try: if not data: return {} return json.loads(data) except Exception as err: Debug.error("Error: parse data (%.25s...) error: %s" % (data, err)) return {}
def base64decode(data): ''' base64 decode string ''' try: val = base64.b64decode(data).decode("UTF-8") if val is not None: if type(val) == str: return val return val.decode("UTF-8") except Exception as err: Debug.error("Error: b64decode data (%.25s...) error: %s" % (data, err)) return ""
def _fdsserver_is_ready(self): ''' check fdsserver is ready return True if state is ready ''' cmd = "netstat -napt 2>&1 | grep 10000 | grep FDSServer" data = os.popen(cmd).read() if not data: Debug.error("query fdsserver state error, command: %s!" % cmd) return False Debug.debug("FDSServer: %s" % data) return True
def health_check(ipport): ''' health check returns: 0 -port is opened and listening 2 -port is not opened ''' cmd = "netstat -napu 2>&1 | grep " + ipport + " | grep PluginContain" data = os.popen(cmd).read() if not data: Debug.error("query udp sip state error, command: %s!" % cmd) return SERVICE_CRITICAL Debug.debug("port status: %s" % data) return SERVICE_PASSING
def _components_is_ready(self): ''' check all components in ACTIVE return True/False ''' # query components components = self._components; # check all components are in ACTIVE for comp_name, comp_stat in components.items(): if not comp_stat or comp_stat != "ACTIVE": Debug.error("Component %s is not in ACTIVE" % comp_name) return False return True
def http_get_request(ipport, reqfile): ''' request http server, return JSON response ''' Debug.notice("GET http://{0}{1}".format(':'.join(str(n) for n in ipport), reqfile)) resp = "" try: httpClient = httplib.HTTPConnection(*ipport, timeout=100) httpClient.request('GET', reqfile) response = httpClient.getresponse() Debug.notice("HTTP response: %s" % response.status) resp = response.read().decode() except Exception as err: Debug.error("%%Error post_req: %s" % str(err)) finally: if httpClient: httpClient.close() return json_parse(resp)
def http_put_request(ipport, reqfile, jdata): ''' request http server, return JSON response ''' Debug.debug("PUT http://{0}{1} : {2}".format( ':'.join(str(n) for n in ipport), reqfile, jdata)) resp = "" try: httpClient = httplib.HTTPConnection(*ipport, timeout=100) headers = {"Content-type": "application/json"} httpClient.request('PUT', reqfile, json_dumps(jdata), headers) response = httpClient.getresponse() Debug.debug("HTTP response: %s" % response.status) resp = response.read().decode() except Exception as err: Debug.error("%%Error post_req: %s" % str(err)) finally: if httpClient: httpClient.close() return json_parse(resp)
def service_is_registered(self): consul_ipport = get_consul_address(); reqfile = "/v1/catalog/service/" + self._service_name Debug.debug("service_check service: {0}".format(self._service_name)) jdata = http_get_request(consul_ipport, reqfile) ''' http response shall like: [{ ... "ServiceID": "xxx", "ServiceName": "{component}", "ServiceTags": ["hostname"], "ServiceAddress": "{ip}", "ServicePort": {port}, ... }, ...] ''' if not type(jdata) is type([]): Debug.error("Bad data type(requied []): %s" % str(type(jdata))) return False; if len(jdata) <= 0 or not "ServiceName" in jdata[0].keys(): return False return True
GMPC_COMPONENTS = ("Statistics", "Billing", "LocationDataStream", "HTTPServer", "dgpscontroller", "FSC-SystemMonitor", "AssistanceDataHandler", "ESABridge", "Map", "FSC-EventLog", "FSC-CGIEventLog", "lanmonitor", "FSC-Event", "FSC-LTEEventLog", "PPE112", "PPRouter", "SOAPServer", "ttmonitor", "RANEventLocation", "RequestMonitor", "EBMServer", "FSC-OMEventLog", "MLP", "CWSL", "Wireline", "AnyPhone", "ppgps", "GnssAssistanceDataHandler", "Diameter", "OM", "AllPhone", "ss7manager", "PPATI", "FSC-SAIEventLog", "Authority", "IMSRDF", "TriggerLocation", "UPEngine", "PacketLocationFeeder", "NetworkStorage") SMPC_COMPONENTS = ("FSC-Event", "Statistics", "dgpscontroller", "lanmonitor", "PPSelector", "ss7manager", "OM", "Bssap", "ppcgi", "ppaecid", "pplteaecid", "ppgps", "ttmonitor", "GnssAssistanceDataHandler", "PPUTDOA", "UTDOAOM", "ppsas", "ppesmlc", "PositioningRecord", "PPLTEEvent", "PPRNCEvent", "AssistanceDataHandler", "FSC-EventLog", "FSC-CGIEventLog", "FSC-CELLIDEventLog", "FSC-LTEEventLog", "FSC-PDEEventLog", "FSC-PMCEventLog", "FSC-FixedXYEventLog", "FSC-OMEventLog", "FSC-SystemMonitor", "ESABridge") if __name__ == '__main__': Debug.debug_flags = {"aaa": False, "bbb": False} Debug.set_debug('aaa', True) Debug.set_debug('ccc', True) Debug.error("test", Debug.get_debug('aaa'), Debug.get_debugs())