首页 > 编程语言 >对服务器进行心跳检测 python django

对服务器进行心跳检测 python django

时间:2023-02-16 13:35:25浏览次数:58  
标签:.__ python self ret django start program 服务器进行 mem

(由于春节期间连不上服务器,但又不知道是不是服务器关机了,因此写一个心跳检测功能遇到问题时可以排查部分原因)

具体来说分为客户端和服务端,客户端为校园服务器,服务端为我们自己搭建的http服务器。客户端每k秒钟发送包含CPU利用率、内存使用情况等的心跳包给服务端,由服务端接收和保存分析。(代码在下面)

过程中遇到的问题

1.使用top命令获取系统资源占用情况,获取的结果是带有格式的,

如上图例如数字加粗了,导致得到的结果中带有许多格式信息,使用正则表达式提取数字会得到许多多余的数字。因此改用了vmstat命令。另外,如果不用正则表达式,而是通过切片的方式获取目标数值也是一种方法。

还有一种方法是将print输出后的结果赋值给变量,然后再通过正则表达式匹配数字。赋值方法https://blog.csdn.net/manmanpa/article/details/56479273

2.不同命令得到的CPU占用率结果不同

客户端

功能:每k秒钟向服务端发送心跳包。实现:python

代码:

import subprocess
import json
import requests
from threading import Timer
from datetime import datetime
import re

class MySend:
    def send_info(self):
        '''获取当前时间'''
        current_time=str(datetime.now())
        cmd1='vmstat'
        ret=subprocess.run(cmd1, shell=True, capture_output=True, encoding='utf-8')
        s=ret.stdout
        value_ret=re.findall(r"\d+\.?\d*",s)
        cpu_use_ratio=100-float(value_ret[-3])

        mem_total='grep MemTotal /proc/meminfo'
        mem_ret=subprocess.run(mem_total, shell=True, capture_output=True, encoding='utf-8')
        total_mem=re.findall(r"\d+\.?\d*",mem_ret.stdout)
        total_mem=float(total_mem[0])/1024.0
        
        cmd1='vmstat'
        ret=subprocess.run(cmd1, shell=True, capture_output=True, encoding='utf-8')
        s=ret.stdout
        value_ret=re.findall(r"\d+\.?\d*",s)
        memory_ratio=(total_mem-float(value_ret[3])/1024.0)/total_mem*100

        dict_trans={'current_time':current_time,'cpu_use_ratio':cpu_use_ratio,'memory_ratio':memory_ratio}
        json_trans=json.dumps(dict_trans)
        '''传输json串,用requests'''
        response=requests.post(url='http:/......../',data=json_trans)

class MyTimer():
    def __init__(self, start_time, interval, program):
        self.__timer=None
        self.__start_time=start_time
        self.__interval=interval
        self.__program=program
    
    def exec_program(self):
        # print(1)
        self.__program()
        self.__timer=Timer(self.__interval,self.exec_program)  #用于执行等待的时间,要执行的方法
        self.__timer.start()

    def start(self):
        #中止时间减去已经进行了多少时间   (现在的时间减去起始的时间)
        interval=self.__interval-(datetime.now().timestamp()-self.__start_time.timestamp())
        self.__timer=Timer(interval,self.exec_program)  #用于执行等待的时间,要执行的方法
        self.__timer.start() #开始才能执行上一个语句
    def cancel(self):
        self.__timer.cancel()
        self.__timer=None

if __name__=='__main__':
    send=MySend() 
    start=datetime.now()
    tmr=MyTimer(start,5,send.send_info) #每五秒钟发送一次
    tmr.start()

定时方法参考了https://www.zhiu.cn/54667.html

 服务端:接收并保存分析客户端发来的心跳包。实现:Django

代码:服务端的代码完善后放到github

 

 以上为个人学习心得,如有问题请指出

标签:.__,python,self,ret,django,start,program,服务器进行,mem
From: https://www.cnblogs.com/yz-lucky77/p/17122376.html

相关文章

  • Python装饰器实例讲解(三)
    Python装饰器实例讲解(三)本文多参考《流畅的python》,在此基础上增加了一些实例便于理解姊妹篇Python装饰器实例讲解(一),让你简单的会用Python装饰器实例讲解(二),主要......
  • python3常用模块和方法
    1、使用索引反转字符串str="hello"print(str[::-1])2、zip函数获取可迭代对象,将它们聚合到一个元组中,然后返回结果。语法是zip(*iterables)numbers=[1,2,3]strin......
  • apriori算法 python实现
    fromtypingimport*fromtypingimportList,TuplefromitertoolsimportcombinationsdefloadDataSet():return[{1,2,4,5},{2,3,5},{1,2,3,5},......
  • python数据类型
    python数据类型:Number(数字): int、float、bool、complex(复数)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)如何查看数据类型:使用type()函数查看数据类型,例......
  • 用Python制作各种用途的二维码
    当你提到二维码时,大多数人想到的是仓库管理或产品标签等"工业"应用,但这篇文章在很大程度上是关于二维码的个人和社会用途。有趣的事实二维(QR)码是在1994年发明的,最近几......
  • python gz解压
    defdecompose_file(data):#ungz_file_path=gz_file_path.replace(".gz","")#withgzip.open(gz_file_path,'rb')asf_in:#withopen(ungz_fil......
  • python 识别二维码内容 及pyzbar OSError: [WinError 126] 报错解决
    importcv2frompyzbar.pyzbarimportdecodeqrcode_image=cv2.imread('bbb.png')aa=decode(qrcode_image)printaa 如果Windows安装pyzbar后遇到OSError:[......
  • 用myBadboy(用python自主开发工具)启动谷歌浏览器并自动录制jmeter脚本
    一、源代码下载https://gitee.com/rmtic/mybadboy 二、操作说明1、在conf目录的config.ini文件中可以配置初始打开网页地址,也可以后面在浏览器中直接修改  2、......
  • python 数据写入yaml 文件中文和排序问题
    前言数据写入yaml文件时遇到的一些问题总结,主要是中文问题和字典的排序问题。环境准备python3.8版本PyYAML版本6.0使用示例将一段python的字典类型,转成yaml文件i......
  • python-pandas提取网页内tables(表格类型)数据
    比如,下面网页里大学排行的数据 分析这个页面,表格内的数据是包裹在tables里的  这样就可以使用pandas对数据进行提取并且导出成csv文件,具体代码很简单 import......