class PingThread(threading.Thread):
def __init__(self, start_time, end_time, delay, csv_file, ip_address):
threading.Thread.__init__(self)
self.task_start_time = common_util.str2date(start_time)
self.task_end_time = common_util.str2date(end_time)
self.delay = delay
self.csv_file = csv_file
self.ip_address = ip_address
"""
执行执行start方法后,会调用该方法中的任务
"""
def run(self) -> None:
self.get_ping_time()
"""
获取ping 的时间
"""
def get_ping_time(self) -> None:
remaining_time_for_start = (self.task_start_time - datetime.now()).total_seconds()
if remaining_time_for_start > 0:
time.sleep(remaining_time_for_start)
while True:
start_time = time.time()
self.ping_task()
cost_time = time.time() - start_time
sleep_time = self.delay - cost_time
if sleep_time > 0:
time.sleep(sleep_time)
if datetime.now() > self.task_end_time:
break
def ping_task(self):
start_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
if platform.system().lower() == 'windows':
avg_time = common_util.win_ping_avg_time(self.ip_address)
else:
avg_time = common_util.linux_ping_avg_time(self.ip_address)
write_file(start_time + "," + avg_time + "\n", self.csv_file)
"""url调用响应时间的线程定义"""
class UrlThread(threading.Thread):
def __init__(self, start_time, end_time, delay, csv_file, exit_id):
threading.Thread.__init__(self)
self.task_start_time = common_util.str2date(start_time)
self.task_end_time = common_util.str2date(end_time)
self.delay = delay
self.csv_file = csv_file
self.exit_id = exit_id
def run(self):
self.get_response_time()
"""
根据url获取响应时间
"""
def get_response_time(self):
remaining_time_for_start = (self.task_start_time - datetime.now()).total_seconds()
if remaining_time_for_start > 0:
time.sleep(remaining_time_for_start)
while True:
"""
下面逻辑保证同时触发启动
"""
start_time = time.time()
self.url_task()
cost_time = time.time() - start_time
sleep_time = self.delay - cost_time
if sleep_time > 0:
time.sleep(sleep_time)
if datetime.now() > self.task_end_time:
break
def url_task(self):
url = ""
args = {"extId": self.exit_id}
headers = {'Content-Type': 'application/json'}
dt = datetime.now()
start_time = dt.strftime('%Y-%m-%d %H:%M:%S')
url_delay_time = -2
try:
res = requests.post(url, headers=headers, data=json.dumps(args))
response = res.json()
url_delay_time = response['data']['delayTime']
except Exception as e:
print(f"{self.exit_id}:response请求异常")
write_file(str(start_time) + "," + str(url_delay_time) + ",", self.csv_file)
root_path=common_util.files_name()
first_content = ""
second_content = ""
def write_file(content, csv_file):
global first_content, second_content
lock = threading.Lock()
if lock.acquire():
if content.endswith("\n"):
second_content = content
else:
first_content = content
if first_content != "" and second_content != "":
try:
with open(root_path + csv_file, "a+") as f:
f.write(first_content + second_content)
f.flush()
finally:
first_content = ""
second_content = ""
lock.release()
def start_record(start_time, end_time, exit_id, ip):
vehicle_Name = common_util.vehicle_Name(exit_id)
file_name = vehicle_Name + '~' + start_time.replace(":", "-") + '~' + end_time.replace(":", '-')
csv_file = file_name + ".csv"
t1 = PingThread(start_time, end_time, 120, csv_file, ip)
t2 = UrlThread(start_time, end_time, 120, csv_file, exit_id)
with open(root_path + csv_file, "a+") as file:
file.write("url_start_time,url_time(ms),ping_start_time,ping_time(ms)\n")
t1.start()
t2.start()
return csv_file