File: //usr/local/qcloud/monitor/barad/plugin/collector/vm/mem.py
import sys
import os,time
sys.path.append(os.getcwd() + '/../../../comm/')
import constant
from plugin_base import VmBaseCollector
from utils.collect_tool import MemCollect
from utils.metric_handler import MetricHandler
class MemCollector(VmBaseCollector):
def init(self):
self.set_frequency(10)
self.collector = MemCollect()
self.handler = MetricHandler()
self.handler.namespace = 'qce/cvm'
self.handler.dimensions = [ 'vm_uuid', 'vmip']
self._last_report_nws_time = 0
self.tmp_mem_pagescan = 0
def do_collect(self):
now = int(time.time())
(mem_used, mem_total, mem_usage, mem_total_used, mem_cached, mem_buffers) = self.collector.get_mem_info()
(swap_used, swap_total, disk_swap_in, disk_swap_out) = self.collector.get_swap_info()
memory_error_status = self.collector.get_memory_status()
curr_pagescan = self.collector.get_specific_field_sum("/proc/vmstat","pgscan_")
mem_pagescan = 0 if self.tmp_mem_pagescan == 0 else curr_pagescan - self.tmp_mem_pagescan
self.tmp_mem_pagescan = curr_pagescan
vm_uuid = self.get_vm_uuid()
vmip = self.get_vmip()
dimensions = {'vm_uuid': vm_uuid, 'vmip': vmip } # not in docker cluster
if now - self._last_report_nws_time >= 60:
batch_metric = [
{'name':'mem_usage', 'value':mem_usage, 'unit': 'mib'},
{'name':'mem_total', 'value':mem_total, 'unit':'mib'},
{'name':'mem_used', 'value':mem_used, 'unit': 'mib'},
{'name':'mem_total_used', 'value':mem_total_used, 'unit': 'mib'},
{'name':'swap_total','value':swap_total, 'unit': 'mib'},
{'name':'swap_used','value':swap_used, 'unit': 'mib'},
{'name':'disk_swap_in', 'value':disk_swap_in, 'unit':'mps'},
{'name':'disk_swap_out', 'value':disk_swap_out, 'unit':'mps'},
{'name':'mem_pagescan', 'value':mem_pagescan, 'unit':'count'},
{'name':'mem_cached', 'value':mem_cached, 'unit': 'mib'},
{'name':'mem_buffers', 'value':mem_buffers, 'unit':'mib'},
]
if memory_error_status != -1:
batch_metric.append(
{'name': 'memory_error_status', 'value': memory_error_status})
self._last_report_nws_time = now
else:
batch_metric = [
{'name':'mem_usage', 'value':mem_usage, 'unit': 'mib'},
{'name':'mem_used', 'value':mem_used, 'unit': 'mib'},
{'name':'mem_total_used', 'value':mem_total_used, 'unit': 'mib'},
{'name':'mem_pagescan', 'value':mem_pagescan, 'unit':'count'},
]
tmp_mem_pagescan = mem_pagescan
self.handler.add_batch_metric(batch = batch_metric, dimensions = dimensions, timestamp = now)
if (len( self.handler.get_metrics()) > 0) :
data = {'sender':'nws_sender', 'datas': self.handler.pop_metrics()}
self.put_data(data)
def main():
collector = MemCollector()
collector.init()
while True:
collector.collect()
collector.dump_data()
time.sleep(10)
if __name__ == '__main__':
main()