# webmon_bypycurl.py
# -*- coding: utf-8 -*-
import os
import sys
import pycurl
Web_URL = "https://www.baidu.com"
c = pycurl.Curl()
c.setopt(pycurl.URL, Web_URL) # 设置要连接的URL
c.setopt(pycurl.CONNECTTIMEOUT, 5) # 连接前等待时间
c.setopt(pycurl.TIMEOUT, 5) # 连接超时时间
c.setopt(pycurl.FORBID_REUSE, 1) # 禁止重用
c.setopt(pycurl.MAXREDIRS, 5) # 允许5级重定向
c.setopt(pycurl.NOPROGRESS, 1) # 禁止下载进度条
c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30) # DNS缓存过期事件
# 打开一个文件记录返回的网页头部
head_file = open(os.path.dirname(os.path.realpath(__file__)) + "/head.txt", "wb")
c.setopt(pycurl.WRITEHEADER, head_file)
# 将返回的网页内容输出到空设备文件,以免其输出到控制台
fnull = open('/dev/null', 'wb')
c.setopt(pycurl.WRITEDATA, fnull)
# 发起会话执行传输任务
try:
c.perform()
except Exception as e:
print("链接错误connecion error:" + str(e))
head_file.close()
fnull.close()
c.close()
sys.exit()
'''汇集返回的信息'''
def gather_data():
effective_url = c.getinfo(pycurl.EFFECTIVE_URL)
http_code = c.getinfo(c.HTTP_CODE)
content_type = c.getinfo(c.CONTENT_TYPE)
namelookup_time = c.getinfo(c.NAMELOOKUP_TIME)
connect_time = c.getinfo(c.CONNECT_TIME)
pretransfer_time = c.getinfo(c.PRETRANSFER_TIME)
starttransfer_time = c.getinfo(c.STARTTRANSFER_TIME)
total_time = c.getinfo(c.TOTAL_TIME)
size_download = c.getinfo(c.SIZE_DOWNLOAD)
header_size = c.getinfo(c.HEADER_SIZE)
content_length_download = c.getinfo(c.CONTENT_LENGTH_DOWNLOAD)
speed_download = c.getinfo(c.SPEED_DOWNLOAD)
c.close()
head_file.close()
return dict(effective_url=effective_url, http_code=http_code, content_type=content_type,
namelookup_time=namelookup_time,
connect_time=connect_time, pretransfer_time=pretransfer_time, starttransfer_time=starttransfer_time,
total_time=total_time, size_download=size_download, header_size=header_size,
content_length_download=content_length_download,
speed_download=speed_download)
'''输出报告'''
def report():
data = gather_data()
print("网页地址:%s" % (data["effective_url"]))
print("HTTP状态码:%s" % (data["http_code"]))
print("请求内容类型:%s" % (data["content_type"]))
print("域名解析时间:%.2f ms" % (data["namelookup_time"] * 1000))
print("连接建立时间:%.2f ms" % (data["connect_time"] * 1000))
print("准备传输时间:%.2f ms" % (data["pretransfer_time"] * 1000))
print("传输开始时间:%.2f ms" % (data["starttransfer_time"] * 1000))
print("请求总时间:%.2f ms" % (data["total_time"] * 1000))
print("下载数据包大小:%.2f MB" % (data["size_download"] / 1024))
print("HTTP头部大小:%.2f MB" % (data["header_size"] / 1204))
print("下载内容长度:%.2f MB" % (data["content_length_download"] / 1204))
print("平均下载速度:%.2f MB/s" % (data["speed_download"] / 1024))
if __name__ == '__main__':
report()
# sysinfo_byapscheduer
from datetime import datetime
import os
import sys
from apscheduler.schedulers.blocking import BlockingScheduler
# 从sysinfo_bypsutil.py文件导入report()函数
from sysinfo_bypsutil import report
'''定义要执行的任务'''
def monjob():
file = sys.stdout # 存储控制台输出对象
sys.stdout = open('sysinfo.txt', 'a') # 将屏幕输出的内容写入文件
print('监测时间: %s' % datetime.now()) # 写入文件
print(report()) # 继续写入文件
sys.stdout.close() # 关闭重定向
sys.stdout = file # 将 print()的输出结果返回给控制台
if __name__ == '__main__':
scheduler = BlockingScheduler()
scheduler.add_job(monjob, 'interval', minutes=5)
# 给出强制退出的组合键,兼顾Linux和Windows平台
print('按 Ctrl+{0} 键退出'.format('Break' if os.name == 'nt' else 'C'))
# 先运行一次定义的任务,再启动调度器
monjob()
try:
scheduler.start()
except (KeyboardInterrupt, SystemExit):
print('已退出!')
exit()