From e3871a3d7b65e87c7c4a8759af4b4f70f0b7eaec Mon Sep 17 00:00:00 2001 From: fumingwei Date: Mon, 6 Sep 2021 19:09:48 +0800 Subject: [PATCH] =?UTF-8?q?feature:=E6=96=B0=E5=A2=9E=E4=BD=BF=E7=94=A8log?= =?UTF-8?q?ging=E5=B0=86testcase=E7=9A=84=E7=BB=93=E6=9E=9C=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E5=88=B0=E6=96=87=E4=BB=B6=E5=92=8Cconsole=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- compose/docker-compose.yml | 3 +- images_build/client/dign_client/bin/client.py | 100 ++++++++++-------- .../client/dign_client/etc/client.conf | 8 +- 3 files changed, 55 insertions(+), 56 deletions(-) diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index 8c94a43..1f04df1 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -81,8 +81,7 @@ services: arp -i eth0 -s 192.0.2.130 02:42:c0:a8:fd:82 arp -i eth0 -s 192.0.2.131 02:42:C0:A8:FD:83 arp -i eth0 -s 192.0.2.135 02:42:C0:A8:FD:85 - mkdir -p /opt/dign_client/log/dign_client - mkdir -p /opt/dign_client/log/conn_traffic_status + mkdir -p /opt/dign_client/log cp -rf /opt/dign_client/etc/certs_import/certs/sets/current/gen/crt/ca-root.crt /usr/local/share/ca-certificates update-ca-certificates cat /opt/dign_client/etc/hosts >> /etc/hosts diff --git a/images_build/client/dign_client/bin/client.py b/images_build/client/dign_client/bin/client.py index 1f37a2c..6011849 100644 --- a/images_build/client/dign_client/bin/client.py +++ b/images_build/client/dign_client/bin/client.py @@ -17,6 +17,7 @@ import random import dns.exception import dns.resolver import sys +import logging suite_test_config_dict = {'test_securityPolicy_bypass': {'enabled':1,'conn_timeout':1,'max_recv_speed_large':6553600}, @@ -58,8 +59,7 @@ suite_test_config_dict = {'test_securityPolicy_bypass': {'enabled':1,'conn_timeo 'test_ssl_firewall_allow': {'enabled':1,'conn_timeout':1,'max_recv_speed_large':6553600}, 'test_ssl_firewall_deny_drop': {'enabled':1,'conn_timeout':4,'max_recv_speed_large':6553600}, 'test_ssl_firewall_deny_rst': {'enabled':1,'conn_timeout':1,'max_recv_speed_large':6553600}, - 'start_time_random_delay_range': {'enabled':1,'left_edge':1,'right_edge':30}, - 'telegraf': {'host':'192.51.100.1','port':8100,'tags_key':'app_name','tags_value' :'tsg-diagnose'}} + 'start_time_random_delay_range': {'enabled':1,'left_edge':1,'right_edge':30}} ssl_bypass_info_re = "Ssl connection bypass success" @@ -150,6 +150,22 @@ DnsAAAARequestFirewallAllow = "Dns rdtype AAAA request data is sucess" DnsCNAMERequestFirewallAllow = "Dns rdtype CNAME request data is sucess" +def get_logger(logPath,enableConsole=True): + logger = logging.getLogger() + fileHandler = logging.FileHandler(logPath) + fmt = '%(asctime)s, %(levelname)s, %(message)s' + formatter = logging.Formatter(fmt=fmt, datefmt='%a %b %d %H:%M:%S %Y') + fileHandler.setFormatter(formatter) + fileHandler.setLevel(logging.DEBUG) + logger.addHandler(fileHandler) + if enableConsole == True: + consoleHandler = logging.StreamHandler() + consoleHandler.setFormatter(formatter) + consoleHandler.setLevel(logging.DEBUG) + logger.addHandler(consoleHandler) + logger.setLevel(logging.DEBUG) + return logger + class DNSCheckRequestBuild: def dns_action_deny_subaction_drop(self): dns_resolver=dns.resolver.Resolver() @@ -613,28 +629,12 @@ class SSLFileDownloadBuild: self.conn.setopt(self.conn.URL,url) self.conn.setopt(self.conn.TIMEOUT, int(suite_test_config_dict[test_suite_name]['conn_timeout'])) - def _write_in_nezha(self, sizeStr, connInfoDict): - nzdict = {} - nzname = 'conn_taffic_status_size_' + sizeStr - dictKeyTime = "conn_traffic_" + sizeStr + "_size_total_time" - dcitKeyStatus = "conn_traffic_" + sizeStr + "_size_status" - nzdict[dictKeyTime] = connInfoDict['total_time'] - nzdict[dcitKeyStatus] = connInfoDict['status'] - self.client.metric(nzname, nzdict) - def _write_in_logfile(self, sizeStr, connInfoDict): - logNewestPath = "/opt/dign_client/log/conn_traffic_status/conn_traffic_status_" + sizeStr - logPath = logNewestPath + time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime()) + connInfoLogPath = "/opt/dign_client/log/download_conn_info.log" + '.' + time.strftime("%Y-%m-%d", time.localtime()) + connInfoLogger = get_logger(connInfoLogPath,enableConsole=False) connInfoStr = json.dumps(connInfoDict) - with open(logNewestPath,"w+") as f: - f.write(connInfoStr) - f.close() + connInfoLogger.debug("Fize Size:" + sizeStr + ";connection info:" + connInfoStr) - with open(logPath,"w+") as f: - fn = open(logNewestPath,'r') - f.write(fn.read()) - fn.close() - f.close() def conn_traffic(self,test_suite_name,url,conn_taffic_re,sizeStr, size): self._set_conn_opt(test_suite_name, url) @@ -657,7 +657,6 @@ class SSLFileDownloadBuild: raise Exception("Error: Intercept fail: no Tango cert,cert info:%s" % issuer[1]) if int(conninfo["size_download"]) == size: - self._write_in_nezha(sizeStr,conninfo) self._write_in_logfile(sizeStr,conninfo) raise Exception(conn_taffic_re) else: @@ -965,7 +964,7 @@ class SslUnitTest(unittest.TestCase): with self.assertRaisesRegex(Exception, ssl_firewall_deny_rst_re): requestHandler.action_deny_subaction_rst('test_ssl_firewall_deny_rst') -class TsgDiagnoseRun: +class TsgDiagnose: def __init__(self): self.interval = 1 self.loop = False @@ -973,8 +972,9 @@ class TsgDiagnoseRun: self.config = None self.client = None self.config_dict = {} + self.dign_duration = 0 - def _get_suite_option(self): + def _get_dign_option(self): parser = argparse.ArgumentParser(description="Tsg Tools - tsg diagnose", epilog = "Example:help") parser.add_argument('-i','--interval', type = int, default = 30,help='Wait interval seconds between each tsg disagnose. The default is to wait for 30 seconds between each tsg diagnose.') parser.add_argument('-c','--count', type = int, default = 1, help='Specifies the count of tsg diagnoses ,range:1-65535') @@ -990,7 +990,7 @@ class TsgDiagnoseRun: parser.print_help() sys.exit(1) - def _get_suite_config(self): + def _get_dign_config(self): global suite_test_config_dict config = ConfigParser() config.read(self.config, encoding='UTF-8') @@ -1000,13 +1000,19 @@ class TsgDiagnoseRun: else: suite_test_config_dict[section] = dict(config.items(section)) self.config_dict = suite_test_config_dict + for config_value in self.config_dict.values(): + if 'conn_timeout' not in config_value: + continue + if int(config_value['enabled']) != 1: + continue + self.dign_duration += int(config_value['conn_timeout']) def _add_suite(self,test_suite_name): if int(self.config_dict[test_suite_name]['enabled']) == 1: self.suite.addTest(SslUnitTest(test_suite_name)) - def _init_suite(self): + def _add_dign_case(self): self.suite = unittest.TestSuite() self.suite._cleanup = False self._add_suite('test_dnsRequest_deny_drop') @@ -1049,37 +1055,37 @@ class TsgDiagnoseRun: self._add_suite('test_ssl_firewall_deny_drop') self._add_suite('test_ssl_firewall_deny_rst') - def _stdout_suite_result(self): - print(format(("Test start time: " + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())),'#^120s')) - runner = unittest.TextTestRunner(verbosity=2) + def _dign_running(self): + runningLogPath = "/opt/dign_client/log/tsg-diagnose.log" + '.' + time.strftime("%Y-%m-%d", time.localtime()) + runningLogger = get_logger(runningLogPath, True) + runningLogger.debug("Diagnose Start,the It will take up to %d seconds" %(self.dign_duration)) + result_stream = io.StringIO() + runner = unittest.TextTestRunner(stream=result_stream,verbosity=2) runner.run(self.suite) - print(format(("Test end time: " + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())),'=^120s')) + runningLogger.debug("Diagnose end, Testing results:" + "\n" + result_stream.getvalue()) - def _output_suite_result(self): - self._stdout_suite_result() - - def execute_suite_tsg_diagnose(self): - self._get_suite_option() - self._get_suite_config() - self._init_suite() + def dign_exec(self): + self._get_dign_option() + self._get_dign_config() + self._add_dign_case() + dign_counter = 0 try: if int(self.config_dict['start_time_random_delay_range']['enabled']) == 1: - time.sleep(random.randint(int(self.config_dict['start_time_random_delay_range']['left_edge']),int(self.config_dict['start_time_random_delay_range']['right_edge']))) - counter = 0 - print("Tsg diagnose run sum: %d" % self.count) + time.sleep(random.randint( \ + int(self.config_dict['start_time_random_delay_range']['left_edge']),\ + int(self.config_dict['start_time_random_delay_range']['right_edge']))) while True: - print("\nRUN %d" %(counter + 1)) - self._output_suite_result() - counter = counter + 1 + print("\nRUN %d" %(dign_counter + 1)) + self._dign_running() + dign_counter = dign_counter + 1 if not self.loop: - if counter >= self.count: + if dign_counter >= self.count: break time.sleep(self.interval) except Exception as ex: print("Process get an exception, will exit, Exception info:", ex) sys.exit(1) - if __name__ == '__main__': - tsg_diagnose_run = TsgDiagnoseRun() - tsg_diagnose_run.execute_suite_tsg_diagnose() + tsg_diagnose_running = TsgDiagnose() + tsg_diagnose_running.dign_exec() diff --git a/images_build/client/dign_client/etc/client.conf b/images_build/client/dign_client/etc/client.conf index d8cd740..2aeeb86 100644 --- a/images_build/client/dign_client/etc/client.conf +++ b/images_build/client/dign_client/etc/client.conf @@ -198,14 +198,8 @@ conn_timeout = 1 max_recv_speed_large = 6553600 [start_time_random_delay_range] -enabled = 1 +enabled = 0 #Left_edge is the left edge of the randomly generated time in seconds left_edge = 0 #Left_edge is the right edge of the randomly generated time in seconds right_edge = 30 - -[telegraf] -host = 192.51.100.1 -port = 8100 -tags_key = app_name -tags_value = tsg-diagnose