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/comm/receiver/cloud_agent.py
import cutils, constant
import socket,json,struct,time
from base_client import BaseClient
import constant
from collect_vm_msg import CollectVmMesg

class CloudClient(BaseClient):
    MSG_ALARM = 0x01
    MSG_USER_DATA = 0x02
    MAGIC_WORD = 0x8f6f6d72
    def __init__(self, reactor, sock, addr, event, logger, router):
        super(CloudClient, self).__init__(reactor, sock, event, logger, router)
        self.metadata = CollectVmMesg()
        
    def decode(self, buffer):
        if len(buffer) < 12:
            return 0
        magic, type, data_len, reserved = struct.unpack('Ihhi', buffer[0:12])
        if data_len <= 12:
            return -1
        if magic != self.MAGIC_WORD:
            return -2
        if len(buffer) >= data_len:
            data = buffer[12:data_len]
            self.logger().info("recv type : %d \t msg : %s" % (type, data))     
            if type == self.MSG_ALARM:
                self.process_alarm_msg(data)
            elif type == self.MSG_USER_DATA:
                self.process_user_data(data)
            else:
                self.logger().error("invalid msg type : %d " % type)
                return -3
                
        return data_len
    
    def process_alarm_msg(self, data):
        try:
            json_data = json.loads(data)
            host_ip = cutils.local_ip()
            json_data["localip"] = host_ip
            json_data["localtime"] = int(time.time())
            json_data["clientKey"] = self.metadata.get_client_key()
            json_str = json.dumps(json_data)
            #send_data = { 'sender':'alarm_sender', 'datas': json_str }
            #self.router().route(constant.QUEUE_TO_DISPATCHER, send_data)
            from alarm_sender import AlarmSender
            sender = AlarmSender()
            sender.init()
            (retcode, retinfo) = sender.send_data(json_str)  
        except Exception,e:
            import traceback
            self.logger().error("parse json failed, data : %s\n%s", data, traceback.format_exc())
            retcode = constant.ErrorCode.REQUEST_DECODE_ERROR
            retinfo = 'parse json failed'
        
        str_info = json.dumps({"retCode":retcode, "retMsg": retinfo})
        send_data = struct.pack('i', len(str_info))
        send_data += str_info
        self.send_response(send_data)
        
    def process_user_data(self, data):
        #use define msg  , not finished yet
        pass