HEX
Server: nginx/1.22.1
System: Linux VM-16-9-centos 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64
User: www (1001)
PHP: 7.3.31
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,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_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: //bin/cagent_tools
#!/usr/local/qcloud/monitor/python26/bin/python
# -*- coding: utf-8 -*-
__author__ = 'samhuang'

# *********************************************************************
# Description       : cloud monitor agent tool 
#										 	 									
# Input parameters  : 
#                      					
# Output Parameters : #					 
# created by        : samhuang, 2014-Feb-13
# return state value: null  
# note              : 
#                    
# modified by       : hetiulin, 2014-Oct-27
# *********************************************************************

import sys
import urllib2, time, json, os

realPath = os.path.dirname(os.path.realpath(__file__)) + '/../comm/'
sys.path.append(realPath)
import cutils
import constant
sys.path.append(os.getcwd()+"/../plugin/collector/utils/")
from collect_vm_msg import CollectVmMesg


class AlarmSender:
    def __init__(self):
        self.__config = cutils.generate_config(constant.PLUGIN_CONFIG_PATH, self.__class__.__name__)
        self.metadata = CollectVmMesg()
        
    def sendData(self, data, policy_id):
        try:
            data['localip'] = cutils.local_ip()
            data['clientKey'] = self.metadata.get_client_key()
            data['localtime'] = int(time.time())
            with open('/etc/uuid', 'r') as f:
                uuid = f.read().split('=')[1].replace('"', '').replace('\'', '').strip()
            data['uuid'] = uuid
            if policy_id is not None:
                data['policyId'] = policy_id
            url = cutils.get_url('AlarmSender','new_alarm_url','alarm_url')
            timeout = float(self.__config['alarm_timeout']) / 1000

            http_ret = urllib2.urlopen(url, json.dumps(data), timeout)
            response = http_ret.read()
            try:
                json_resp = json.loads(response)
                retcode = int(json_resp["returnCode"])
                if retcode != 0:
                    error_msg = json_resp["msg"]

                    (retcode, retinfo) = (constant.ErrorCode.HTTP_RESPONSE_ERROR, error_msg)
                else:
                    (retcode, retinfo) = (constant.ErrorCode.SUCC, "OK")

            except ValueError, e:
                (retcode, retinfo) = (constant.ErrorCode.HTTP_RESPONSE_ERROR, "server return an invalid data")

        except urllib2.URLError, e:
            (retcode, retinfo) = (constant.ErrorCode.HTTP_SEND_ERROR, "send to server failed")

        return (retcode, retinfo)


def help():
    print 'usage: %s  <subcommand> args' % sys.argv[0]
    print '\tsubcommand list as:'
    print '\talarm alarmString policyId' +\
          '\n\t\texample:%s alarm "hello world" cm-ah7hc3md (policyId can be acquired from the cloud monitor console)' % sys.argv[0]
    exit(0)


# const variable definitions
MAX_ALARM_LEN = 1024

# ------ program start here ------------
if len(sys.argv) < 3 or len(sys.argv) > 4:
    help()

subCmd = sys.argv[1]
if cmp(subCmd, 'alarm') == 0:
    if len(sys.argv[2]) > MAX_ALARM_LEN:
        print "alarm string's length is over the max length %d, please shorten it" % MAX_ALARM_LEN
        exit(1)
    alarm_str = {'alarmString': sys.argv[2]}
    policy_id = sys.argv[3] if len(sys.argv) == 4 else None
    alarmObj = AlarmSender()
    ret_code, ret_msg = alarmObj.sendData(alarm_str, policy_id)
    if ret_code == 0:
        print "send alarm string OK!"
    else:
        print "fail to send alarm string as " + ret_msg + ", please try again!"
    exit(ret_code)
else:
    help()