devops之Python编程-类的基础架构
Python中,可以通过关键字class来定义一个类。类是一种自定义数据类型,它可以包含属性(变量)和方法(函数)。下面是一个示例:
class MyClass:
def __init__(self, name):
self.name = name
def say_hello(self):
print("Hello, " + self.name + "!")
在上面的示例中,我们定义了一个名为MyClass的类。该类有一个构造方法__init__,它会在创建类的实例时被调用。构造方法接受一个参数name,并将其保存在实例变量self.name中。
另外,该类还有一个方法say_hello,用于打印出问候消息。在方法定义中,我们使用self来引用当前实例对象。
要使用这个类,可以创建一个类的实例,并调用其方法:
obj = MyClass("Alice")
obj.say_hello() # 输出:Hello, Alice!
通过类的实例,我们可以访问实例变量和调用方法。这是面向对象编程的基本概念。
(注:以上内容摘录自互联网人工智能大数据,因为其理论定义更官方哈哈!以下内容则为本人原创,欢迎大家指教!)
实战示例:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Filename: get_gluster_data.py
# CreateDate: 20230417
# Description: 获取glusterfs分布式存储集群性能数据
# ------------------------------------------------------------
# Version 1.2
# ------------------------------------------------------------
"""
用法:
python get_gluster_data.py
"""
import time
import os
import re
import commands
import getopt
import logging
import logging.handlers
import sys
reload(sys)
sys.setdefaultencoding('utf8')
LOG_FILE = "/tmp/get_gluster_data.log"
handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024*1024, backupCount = 5)
fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'
formatter = logging.Formatter(fmt)
handler.setFormatter(formatter)
logger = logging.getLogger('get_gluster_data')
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
#file_path = "/var/lib/sdsom/var/log/diamond/ops.data"
class storageCluster: #定义一个存储集群类
def __init__(self, data_file): #定义一个构造方法,声明类属性:集群的性能数据文件
self.data_file = data_file
def get_performance_data(self): #获取性能数据的方法
gather_cmd = "/var/lib/sdsom/venv/bin/whisper-fetch.py --from=$(date +%s -d \"-5 min\") /var/lib/sdsom/var/lib/graphite/whisper/gluster/cluster/"
cmd = gather_cmd + self.data_file + ".wsp | grep -v None | tail -1 | awk '{print $2}'"
value = commands.getoutput(cmd) ##执行shell
key = self.data_file
print key + ":" + value
if re.search("ops", key): #不同的性能数据进行单位换算
zabbix_value = float('%.2f' % float(value))
print zabbix_value
return zabbix_value
elif re.search("mbps", key):
value = float(value)/1024/1024
zabbix_value = float('%.2f' % value)
print zabbix_value
return zabbix_value
elif re.search("latency", key):
value = float(value)/1000
zabbix_value = float('%.2f' % value)
print zabbix_value
return zabbix_value
def send_zabbix(self, key, value): #数据发送到zabbix服务端的方法
cmd = "/opt/aspire/product/zabbix/bin/zabbix_sender -c /opt/aspire/product/zabbix/conf/zabbix_agentd.conf -k %s -o %s "%(key,value)
logger.debug(cmd) #记录日志
status,value = commands.getstatusoutput(cmd) #执行shell
print ("Program Execution_code: ") + str(status) + ",",("result: ") + str(value)
logger.debug("%s,%s"%(str(status),value))
if status==0:
print "%s,send to zabbix successfully!"%(cmd)
print (" ")
print ("------------------------------------------------------------")
logger.debug("%s,True"%(cmd))
return True
else:
print "%s,send to zabbix failed!"%(cmd)
print (" ")
print ("------------------------------------------------------------")
logger.debug("%s,False"%(cmd))
return False
def get_performance_log(self): #记录本地性能数据日志的方法
date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #格式化时间
logdir = "/var/log/ops/"
#判断/var/log/ops/目录是否存在,如果不存在则创建
if os.path.exists(logdir) is False:
os.mkdir(logdir)
performance_log = logdir + self.data_file + ".log"
with open(performance_log, 'a+') as f:
value = self.get_performance_data()
log = date + '\t' + str(value) + '\n'
print(log)
f.write(log)
f.close()
if __name__ == '__main__':
startTime = time.time() #脚本执行开始时间
data_list = [ops, read_ops, write_ops, write_mbps, read_mbps, write_latency, read_latency] #创建性能数据文件列表
for i in data_list:
storcluster = storageCluster(i).send_zabbix(key=self.data_file, value=self.get_performance_data()) #实例化类并获取性能数据并发送到zabbix服务端
storcluster = storageCluster(i).get_performance_log()
#storcluster = storageCluster("ops").get_performance_data() #获取性能数据
#storcluster = storageCluster("read_ops").get_performance_log() #记录本地性能数据日志
endTime = time.time() #脚本执行结束时间
runtime = startTime - endTime
print(runtime)
print("performance_data send completed !")
devops之Python编程-类的基础架构的更多相关文章
- Python编程--类的分析
一.类的概念 python是面向对象的编程语言,详细来说,我们把一类相同的事物叫做类,其中用相同的属性(其实就是变量描述),里面封装了相同的方法,比如:汽车是一个类,它包括价格.品牌等属性.那么我们如 ...
- Python——面向对象(类)的基础疑难点
相信用Python写def函数大家都信手拈来了,但Python作为面向对象的编程语言,怎么能浪费呢? 那问题来了.什么是类呢?什么是实例?什么是对象?方法是什么??属性又是什么???继承?封装?多态? ...
- 编程类-----matlab基础语法复习(1)
2019年美赛随笔记录: 具体功能:基础语法+基本运算+画图+矩阵+excel读取....... 所遇问题及其解决方案: 1. que:matlab中plot画图无法复制下来图片? ...
- 编程类-----matlab基础语法复习(2)
2019年美赛准备:matlab基本题目运算 clear,clc %% 计算1/3 + 2/5 + ...3/7 +10/21 % i = 1; j = 3; ans = 0; % while i & ...
- python编程之操作系统基础
操作系统发展史: 最早的计算机没有操作系统的概念:是使用打孔机和打孔卡片来进行计算的.只能一个一个处理. 后来产生了批处理系统,可以批量处理,进而加快计算的速度. 批处理系统:串行 数据处理速度加快 ...
- 翻译"Python编程无师自通——专业程序员的养成"
这本书在 畅销Python编程类入门书,美国亚马逊Kindle编程类排行榜榜一. 开始初学python,也有不少书了,不想在白花钱(买了就放那里不看了),看一个英文文档的原著,准备每天翻译一点,放到b ...
- Python编程无师自通PDF高清完整版免费下载|百度网盘
百度网盘:Python编程无师自通PDF高清完整版免费下载 提取码:cx73 内容介绍 畅销Python编程类入门书,美国亚马逊Kindle编程类排行榜榜一. 作者从文科毕业,通过自学编程转行为专业程 ...
- 学习Python编程的最好的几本书
读书是汲取某个特定学科的知识以及更深入的理解该学科的最好的方式.在这个科技世界,通晓计算机系统各个不同的技术领域是至关重要的.其中最重要的内容之一便是计算机程序语言.现今,计算机中存在许多不同类型的程 ...
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- 图解Python 【第五篇】:面向对象-类-初级基础篇
由于类的内容比较多,分为类-初级基础篇和类-进阶篇 类的内容总览图: 本节主要讲基础和面向对象的特性 本节内容一览图: 前言总结介绍: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 ...
随机推荐
- Django4全栈进阶之路16 项目实战(用户管理):user_list.html用户列表画面设计
首先在template模板文件夹中新建account子文件夹,用于存放用户管理相关模块页面. 下面开始正式的设计: 1.模块代码设计 {% extends 'base.html' %} {% bloc ...
- STM32为何在诸多的单片机中脱颖而出?
1.前言 在STM32之前,都是老大头51,带着它的"小弟们" MSP430.AVR.PIC在单片机界呼风唤雨.那个时候,市场上遍布8位机,大学教材用51入门,个人.企业学单片机 ...
- Cobalt Strike 连接启动教程,制作图片🐎(2)
扫描有两种方式:arp 和 icmp 查看进程列表 攻击----生成后门-----Payload 可以生成各类语言免杀牧马---(输出:选择C或者python或者php) go.咕.com 生成c语言 ...
- 关于建立一个Java项目全过程(专对于新手)
关于建立一个Java项目全过程 一.Java开发环境搭建 1.JDK与JRE JDK = JRE + 开发工具集(例如Javac编译工具等) JRE = JVM + Java SE标准类库 2.JDK ...
- 一定要看的前端codeReview规范指南
一.前言 针对目录结构.CSS规范.JavaScript规范.Vue规范 可参照官方给出的 风格指南 这里主要总结业务开发中常遇到的代码问题和实践,帮助大家后续各自做好codeReview,一些你遇到 ...
- 2023-06-12:如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数。 现在,给定两个正整数 L 和 R (以字符串形式表示), 返回包含在范围 [L, R] 中
2023-06-12:如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数. 现在,给定两个正整数 L 和 R (以字符串形式表示), 返回包含在范围 [L, R] 中 ...
- 解密Prompt系列8. 无需训练让LLM支持超长输入:知识库 & unlimiformer & PCW & NBCE
这一章我们聊聊有哪些方案可以不用微调直接让大模型支持超长文本输入,注意这里主要针对无限输入场景.之前在BERT系列中我们就介绍过稀疏注意力和片段递归的一些长文本建模方案长文本建模 BigBird &a ...
- Java Websocket 01: 原生模式 Websocket 基础通信
目录 Java Websocket 01: 原生模式 Websocket 基础通信 Java Websocket 02: 原生模式通过 Websocket 传输文件 Websocket 原生模式 原生 ...
- 现代C++学习指南-类型系统
在前一篇,我们提供了一个方向性的指南,但是学什么,怎么学却没有详细展开.本篇将在前文的基础上,着重介绍下怎样学习C++的类型系统. 写在前面 在进入类型系统之前,我们应该先达成一项共识--尽可能使用C ...
- 宋红康-Java基础复习笔记详细版
Java基础复习笔记 第01章:Java语言概述 1. Java基础学习的章节划分 第1阶段:Java基本语法 Java语言概述.Java的变量与进制.运算符.流程控制语句(条件判断.循环结构).br ...