HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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()