File: //usr/local/qcloud/monitor/barad/plugin/collector/vm/versioninfo.py
# -*- coding: UTF-8 -*-
import sys
import os,time
sys.path.append(os.getcwd() + '/../../../comm/')
sys.path.append(os.getcwd() + '/../utils/')
import constant
from plugin_base import VmBaseCollector
class VersionInfoCollector(VmBaseCollector):
def init(self):
self.set_frequency(60)
self.last_time = 0
self.uuid= self.get_vm_uuid()
self.barad_version = self.get_barad_version()
self.region = self.get_vm_region()
self.report_time = 7*24*60*60
def get_os_name(self):
try:
# 尝试读取标准系统文件
with open("/etc/os-release") as f:
for line in f:
if line.startswith("PRETTY_NAME="):
return line.split("=", 1)[1].strip().strip('"')
except IOError:
# 尝试读取/etc/*-release文件
try:
release_files = [f for f in os.listdir('/etc') if f.endswith('-release')]
for file in release_files:
with open(os.path.join('/etc', file)) as f:
content = f.read().strip()
if content:
return content.split('\n')[0]
except IOError:
return "Unknown"
return "Unknown"
def get_kernel_version(self):
try:
with open("/proc/version", "r") as file:
version_info = file.read().strip()
parts = version_info.split()
kernel_version = parts[2]
return kernel_version
except Exception:
self.logger().error("get kernel_version failed! /proc/version not found")
return "Unknown"
def do_collect(self):
#重启上报 或者 每周上报一次
now = int(time.time())
if now - self.last_time < self.report_time:
return
kernel_version = self.get_kernel_version()
os_version = self.get_os_name()
current_time = time.strftime("%Y-%m-%d %H:%M:%S")
if not self.region:
self.logger().error("get region is None!")
return
# 构造上报数据
data = {
"region": self.region,
"data": {
"meta": {
"namespace": "qce/cvm",
"domain": "version_info"
},
"values": [
{
"uuid": self.uuid,
"kernel_version": kernel_version,
"os_version": os_version,
"barad_version": self.barad_version,
"reported_at": current_time,
"__region__": self.region
}
]
}
}
datas = {'sender':'versioninfo_sender', 'datas': data}
self.put_data(datas)
self.last_time = now
def main():
collector = VersionInfoCollector()
collector.init()
collector.collect()
collector.dump_data()
if __name__ == '__main__':
main()