Example #1
0
 def start(self):
     cur_time = time.time() - P_C.INTERVAL_CHECK
     while self.on:
         t = time.time()
         if t - cur_time < P_C.INTERVAL_CHECK:
             gevent.sleep(1)
             continue
         cur_time = t
         client = InfluxDBClient(P_C.IP_INFLUXDB, P_C.PORT_INFLUXDB, P_C.USER_INFLUXDB, P_C.PASSWORD_INFLUXDB, 'property')
         sql = """select * from property_list where time < now() - 1m and time > now() - 5m order by time desc;"""
         try:
             sql_result = client.query(sql)
         except Exception, e:
             continue
         list_data = list()
         list_re = list(sql_result.get_points())
         if not list_re:
             continue
         time_old = list_re[0]['time']
         for sql_re in list_re:
             if sql_re['time'] == time_old:
                 if isinstance(sql_re, dict) and sql_re.get('value'):
                     _dt = {
                         "time": int(time.mktime(time.strptime(sql_re['time'], '%Y-%m-%dT%H:%M:00Z'))) + 8 * 60 * 60,
                         "hostname": sql_re['hostname'],
                         "sn": sql_re['sn'],
                         "data": sql_re['value']
                     }
                     msg = u"更新主机%s属性信息" % sql_re['hostname']
                     logger = logging.getLogger('log_file')
                     logger.info(msg)
                     if C.LOG_SCREEN == 'ON':
                         logger = logging.getLogger('log_screen')
                         logger.info(msg)
                     list_data.append(_dt)
         C_agent = Config()
         HOSTNAME = C_agent.item(item_name='HOSTNAME', group_name='ASSET', default=None)
         SN = C_agent.item(item_name='SN', group_name='ASSET', default=None)
         TIME_LOCAL = C_agent.item(item_name='TIME_LOCAL', group_name='ASSET', default=None)
         if list_data and HOSTNAME:
             json_data = {'time': TIME_LOCAL, 'hostname': HOSTNAME, 'sn': SN, 'data': list_data}
             url_report = P_C.URL_REPORT + 'property'
             report_re = request(url_report, data=json_data, timeout=300)
             if report_re['success']:
                 msg = u"属性上报成功"
                 logger = logging.getLogger('log_file')
                 logger.info(msg)
                 if C.LOG_SCREEN == 'ON':
                     logger = logging.getLogger('log_screen')
                     logger.info(msg)
             else:
                 msg = u"属性上报失败"
                 logger = logging.getLogger('log_file')
                 logger.error(msg)
                 if C.LOG_SCREEN == 'ON':
                     logger = logging.getLogger('log_screen')
                     logger.error(msg)
Example #2
0
 def _get_tasks(self):
     C_agent = Config()
     data = {
         "hostname": C_agent.item(item_name='HOSTNAME', group_name='ASSET', default=None),
         "sn": C_agent.item(item_name='SN', group_name='ASSET', default=None)
     }
     try:
         if data['hostname'] and data['sn']:
             response_data = request(A_C.URL_NETWORK_DETECT_TASK, data=data)
             if not isinstance(response_data, dict):
                 try:
                     response_data = eval(response_data)
                 except Exception, e:
                     response_data = json.loads(str(response_data))
             if response_data['success']:
                 if isinstance(response_data['data'], str):
                     response_data['data'] = json.loads(response_data['data'])
                 return True, response_data
             else:
                 return False, {}
         else:
Example #3
0
    def _loop(self):

        cur_time = time.time() - A_C.INTERVAL_CHECK
        while self.on:
            t = time.time()
            if t - cur_time < A_C.INTERVAL_CHECK:
                gevent.sleep(1)
                continue
            cur_time = t
            data = self.queue.get()
            data['time'] = t
            C_agent = Config()
            json_report = {
                "hostname": C_agent.item(item_name='HOSTNAME', group_name='ASSET', default=None),
                "sn": C_agent.item(item_name='SN', group_name='ASSET', default=None),
                "data": []
            }
            json_report['data'].append(data)
            print json_report
            if json_report['hostname'] and json_report['sn']:
                print self._report_tasks(data=json_report, reciver='network_detect')
            json_report['data'] = []
Example #4
0
# (c) 2016 , Tianbiao Zu <*****@*****.**>
#
# 该文件是白泽自动化管理系统的一部分,是白泽系统的常量库

###################################################################################################
import os
import sys
sys.path.append('/usr/local/baize/')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "baize.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
from API.API_agent.config_items import Config
from APP.APP_agent.config import *
###################################################################################################

C_agent = Config()
# 抓取属性的名称
NAME_PROPERTY = C_agent.item(item_name='NAME_PROPERTY',
                             group_name='DEFAULT',
                             default=NAME_PROPERTY,
                             type='str')
# 属性上报地址
URL_REPORT = C_agent.item(item_name='URL_REPORT',
                          group_name='DEFAULT',
                          default=URL_REPORT,
                          type='str')
# 检查探测任务的频率(单位: 秒)
INTERVAL_CHECK = C_agent.item(item_name='INTERVAL_CHECK',
                              group_name='DEFAULT',
                              default=INTERVAL_CHECK,
                              type='int')
Example #5
0
 def start(self):
     cur_time = time.time() - A_C.INTERVAL_CHECK
     while self.on:
         t = time.time()
         if t - cur_time < A_C.INTERVAL_CHECK:
             time.sleep(1)
             continue
         cur_time = t
         json_property = {"name": A_C.NAME_PROPERTY}
         json_re = remote_control_capture(json_property)
         if json_re['success']:
             localtime = json_re['msg']['ansible_date_time']['epoch']
             hostname = json_re['msg']['ansible_hostname']
             sn = json_re['msg']['ansible_product_serial']
             C_agent = Config()
             if hostname != C_agent.item(item_name='HOSTNAME',
                                         group_name='ASSET',
                                         default=None):
                 HOSTNAME = C_agent.item(item_name='HOSTNAME',
                                         group_name='ASSET',
                                         default=hostname)
             if sn != C_agent.item(
                     item_name='SN', group_name='ASSET', default=None):
                 SN = C_agent.item(item_name='SN',
                                   group_name='ASSET',
                                   default=sn)
             if localtime != C_agent.item(item_name='TIME_LOCAL',
                                          group_name='ASSET',
                                          default=sn):
                 TIME_LOCAL = C_agent.item(item_name='TIME_LOCAL',
                                           group_name='ASSET',
                                           default=localtime)
             json_re['msg']['proxy_server'] = A_C.PROXY_SERVER
             json_re['msg'][
                 'remote_control_server'] = A_C.REMOTE_CONTROL_SERVER
             json_data = {
                 'time': localtime,
                 'hostname': hostname,
                 'sn': sn,
                 'data': json_re['msg']
             }
             msg = u"属性抓取成功"
             logger = logging.getLogger('log_file')
             logger.info(msg)
             if C.LOG_SCREEN == 'ON':
                 logger = logging.getLogger('log_screen')
                 logger.info(msg)
             url_report = A_C.URL_REPORT + 'property'
             report_re = request(url=url_report, data=json_data)
             if report_re['success']:
                 msg = u"属性接收成功"
                 logger = logging.getLogger('log_file')
                 logger.info(msg)
                 if C.LOG_SCREEN == 'ON':
                     logger = logging.getLogger('log_screen')
                     logger.info(msg)
             else:
                 msg = u"属性接收失败"
                 logger = logging.getLogger('log_file')
                 logger.error(msg)
                 if C.LOG_SCREEN == 'ON':
                     logger = logging.getLogger('log_screen')
                     logger.error(msg)
         else:
             msg = u"属性抓取失败"
             logger = logging.getLogger('log_file')
             logger.error(msg)
             if C.LOG_SCREEN == 'ON':
                 logger = logging.getLogger('log_screen')
                 logger.error(msg)
Example #6
0
    def _get_tasks(self):
        C_agent = Config()
        data = {
            "hostname":
            C_agent.item(item_name='HOSTNAME',
                         group_name='ASSET',
                         default=None),
            "sn":
            C_agent.item(item_name='SN', group_name='ASSET', default=None)
        }
        try:
            if data['hostname'] and data['sn']:
                try:
                    response_data = request(A_C.URL_WORK_MANAGE_TASK,
                                            data=data,
                                            timeout=300)
                except Exception, e:
                    msg = u"抓取任务超时"
                    logger = logging.getLogger('log_file')
                    logger.error(msg)
                    if C.LOG_SCREEN == 'ON':
                        logger = logging.getLogger('log_screen')
                        logger.error(msg)
                    return False, {}
                if not isinstance(response_data, dict):
                    try:
                        response_data = eval(response_data)
                    except Exception, e:
                        response_data = json.loads(str(response_data))
                if response_data['success']:
                    if not isinstance(response_data['data'], list):
                        response_data['data'] = json.loads(
                            response_data['data'])
                    list_work = response_data['data']
                    for work in list_work:
                        jobs = work['jobs']
                        msg = u"抓取到作业%s" % work['name_cn']
                        logger = logging.getLogger('log_file')
                        logger.info(msg)
                        if C.LOG_SCREEN == 'ON':
                            logger = logging.getLogger('log_screen')
                            logger.info(msg)
                        for json_module_args in jobs:
                            if json_module_args['type'] == 'script':
                                if isinstance(json_module_args['script'],
                                              unicode):
                                    json_module_args[
                                        'script'] = json_module_args[
                                            'script'].encode('utf8')

                                if isinstance(json_module_args['script'],
                                              list):
                                    string_script_name = os.path.join(
                                        os.path.dirname(__file__),
                                        "../../../static/upload/Script_auto_" +
                                        json_module_args['md5'])
                                    dir_script_name = os.path.dirname(
                                        string_script_name)
                                    if not os.path.exists(dir_script_name):
                                        os.makedirs(dir_script_name)
                                    obj_fp = open(string_script_name, 'w')
                                    for _line in json_module_args['script']:
                                        obj_fp.write(_line.encode('utf8'))
                                    obj_fp.close()
                                    if hashlib.md5(
                                            open(string_script_name,
                                                 'rb').read()).hexdigest(
                                                 ) == json_module_args['md5']:
                                        json_module_args[
                                            'script'] = string_script_name
                                    else:
                                        msg = u"%s文件MD5不一致" % json_module_args[
                                            'dest']
                                        logger = logging.getLogger('log_file')
                                        logger.error(msg)
                                        if C.LOG_SCREEN == 'ON':
                                            logger = logging.getLogger(
                                                'log_screen')
                                            logger.error(msg)
                                        return False, {}
                            elif json_module_args['type'] == 'copy':
                                if isinstance(json_module_args['src'],
                                              unicode):
                                    json_module_args['src'] = json_module_args[
                                        'src'].encode('utf8')

                                if isinstance(json_module_args['src'], list):
                                    string_script_name = os.path.join(
                                        os.path.dirname(__file__),
                                        "../../../files/scripts/upload/Copy_auto_"
                                        + json_module_args['md5'])
                                    obj_fp = open(string_script_name, 'w')
                                    for line in json_module_args['src']:
                                        obj_fp.write(line.encode('utf8'))
                                    obj_fp.close()
                                    if hashlib.md5(
                                            open(string_script_name,
                                                 'rb').read()).hexdigest(
                                                 ) == json_module_args['md5']:
                                        json_module_args[
                                            'src'] = string_script_name
                                    else:
                                        msg = u"%s文件MD5不一致" % json_module_args[
                                            'dest']
                                        logger = logging.getLogger('log_file')
                                        logger.error(msg)
                                        if C.LOG_SCREEN == 'ON':
                                            logger = logging.getLogger(
                                                'log_screen')
                                            logger.error(msg)
                                        return False, {}
                                else:
                                    json_module_args['src'] = base64.b64decode(
                                        json_module_args['src'])
                                    string_script_name = os.path.join(
                                        os.path.dirname(__file__),
                                        "../../../files/scripts/upload/Copy_auto_"
                                        + json_module_args['md5'])
                                    obj_fp = open(string_script_name, 'wb')
                                    obj_fp.write(json_module_args['src'])
                                    obj_fp.close()
                                    if hashlib.md5(
                                            open(string_script_name,
                                                 'rb').read()).hexdigest(
                                                 ) == json_module_args['md5']:
                                        json_module_args[
                                            'src'] = string_script_name
                                    else:
                                        msg = u"%s文件MD5不一致" % json_module_args[
                                            'dest']
                                        logger = logging.getLogger('log_file')
                                        logger.error(msg)
                                        if C.LOG_SCREEN == 'ON':
                                            logger = logging.getLogger(
                                                'log_screen')
                                            logger.error(msg)
                                        return False, {}
                        if isinstance(jobs, list):
                            jobs = json.dumps(jobs)
                        try:
                            _configure_manage_work = Configure_Manage_Work.objects.get(
                                jobs=jobs,
                                name_cn=work['name_cn'],
                                name_en=work['name_en'],
                                sync=work['sync'],
                                timeout=work['timeout'],
                                desc=work['desc'],
                                type=work['type'])
                            if _configure_manage_work.status == 1 or _configure_manage_work.status == 4:
                                msg = u"作业%s正在执行中" % work['name_cn']
                                logger = logging.getLogger('log_file')
                                logger.info(msg)
                                if C.LOG_SCREEN == 'ON':
                                    logger = logging.getLogger('log_screen')
                                    logger.info(msg)
                                list_work.remove(work)
                            elif _configure_manage_work.status != 0:
                                msg = u"新增作业%s发现已经有结果" % work['name_cn']
                                logger = logging.getLogger('log_file')
                                logger.info(msg)
                                if C.LOG_SCREEN == 'ON':
                                    logger = logging.getLogger('log_screen')
                                    logger.info(msg)
                            else:
                                msg = u"新增作业%s发现已存在" % work['name_cn']
                                logger = logging.getLogger('log_file')
                                logger.info(msg)
                                if C.LOG_SCREEN == 'ON':
                                    logger = logging.getLogger('log_screen')
                                    logger.info(msg)
                        except Exception, e:
                            msg = u"新增作业%s" % work['name_cn']
                            logger = logging.getLogger('log_file')
                            logger.info(msg)
                            if C.LOG_SCREEN == 'ON':
                                logger = logging.getLogger('log_screen')
                                logger.info(msg)
                            _configure_manage_work = Configure_Manage_Work(
                                jobs=jobs,
                                name_cn=work['name_cn'],
                                name_en=work['name_en'],
                                sync=work['sync'],
                                timeout=work['timeout'],
                                desc=work['desc'],
                                type=work['type'],
                                status=0)
                            _configure_manage_work.save()
                    response_data['data'] = list_work
                    return True, response_data
Example #7
0
 def _loop(self):
     while self.on:
         if not self.queue.empty():
             data = self.queue.get()
             list_work = data['data']
             for work in list_work:
                 jobs = work['jobs']
                 name_cn = work['name_cn']
                 if isinstance(jobs, list):
                     jobs = json.dumps(jobs)
                 try:
                     _configure_manage_work = Configure_Manage_Work.objects.get(
                         jobs=jobs,
                         name_cn=work['name_cn'],
                         name_en=work['name_en'],
                         sync=work['sync'],
                         timeout=work['timeout'],
                         desc=work['desc'],
                         type=work['type'])
                 except Exception, e:
                     continue
                 if work['type'] == 'test':
                     if work['success']:
                         _configure_manage_work.status = 2
                     else:
                         _configure_manage_work.status = 3
                 else:
                     if work['success']:
                         _configure_manage_work.status = 5
                     else:
                         _configure_manage_work.status = 6
                 if isinstance(work['result'], list):
                     work['result'] = json.dumps(work['result'])
                 _configure_manage_work.result = work['result']
                 _configure_manage_work.save()
             data['time'] = time.time()
             C_agent = Config()
             json_report = {
                 "hostname":
                 C_agent.item(item_name='HOSTNAME',
                              group_name='ASSET',
                              default=None),
                 "sn":
                 C_agent.item(item_name='SN',
                              group_name='ASSET',
                              default=None),
                 "data": []
             }
             json_report['data'].append(data)
             if json_report['hostname'] and json_report['sn']:
                 report_re = self._report_tasks(data=json_report,
                                                reciver='work_manage')
                 if report_re['success']:
                     msg = u"作业%s结果上报成功" % name_cn
                     logger = logging.getLogger('log_file')
                     logger.info(msg)
                     if C.LOG_SCREEN == 'ON':
                         logger = logging.getLogger('log_screen')
                         logger.info(msg)
                 else:
                     msg = u"作业%s结果上报失败" % name_cn
                     logger = logging.getLogger('log_file')
                     logger.error(msg)
                     if C.LOG_SCREEN == 'ON':
                         logger = logging.getLogger('log_screen')
                         logger.error(msg)
             json_report['data'] = []
         else:
             gevent.sleep(1)
Example #8
0
 def _loop(self):
     while self.on:
         if not self.inqueue.empty():
             task = self.inqueue.get()
             if not isinstance(task, dict):
                 task = json.loads(task)
             work = task
             jobs = work['jobs']
             if isinstance(jobs, list):
                 jobs = json.dumps(jobs)
             if task['type'] == 'online':
                 try:
                     _configure_manage_work = Configure_Manage_Work.objects.get(
                         jobs=jobs,
                         name_cn=work['name_cn'],
                         name_en=work['name_en'],
                         sync=work['sync'],
                         timeout=work['timeout'],
                         desc=work['desc'],
                         type=work['type'])
                 except Exception, e:
                     msg = u"作业%s数据丢失" % work['name_cn']
                     logger = logging.getLogger('log_file')
                     logger.error(msg)
                     if C.LOG_SCREEN == 'ON':
                         logger = logging.getLogger('log_screen')
                         logger.error(msg)
                     continue
                 if _configure_manage_work.status < 4:
                     try:
                         _configure_manage_work2 = Configure_Manage_Work.objects.filter(
                             sync=False, type='online', status=4)
                         if len(_configure_manage_work2) >= 1:
                             msg = u"作业%s不允许并行,其他任务等待" % _configure_manage_work2[
                                 0].name_cn
                             logger = logging.getLogger('log_file')
                             logger.info(msg)
                             if C.LOG_SCREEN == 'ON':
                                 logger = logging.getLogger('log_screen')
                                 logger.info(msg)
                             continue
                         else:
                             _configure_manage_work.status = 4
                             _configure_manage_work.save()
                             task = do_work(task)
                             self.outqueue.put(task)
                     except Exception, e:
                         _configure_manage_work.status = 4
                         _configure_manage_work.save()
                         task = do_work(task)
                         self.outqueue.put(task)
                 elif _configure_manage_work.status == 5:
                     result = _configure_manage_work.result
                     success = True
                     work['result'] = result
                     work['success'] = success
                     if success:
                         msg = u"作业%s已存在并且执行成功" % work['name_cn']
                         logger = logging.getLogger('log_file')
                         logger.info(msg)
                         if C.LOG_SCREEN == 'ON':
                             logger = logging.getLogger('log_screen')
                             logger.info(msg)
                     else:
                         msg = u"作业%s已存在并且执行失败" % work['name_cn']
                         logger = logging.getLogger('log_file')
                         logger.error(msg)
                         if C.LOG_SCREEN == 'ON':
                             logger = logging.getLogger('log_screen')
                             logger.error(msg)
                     C_agent = Config()
                     json_report = {
                         "hostname":
                         C_agent.item(item_name='HOSTNAME',
                                      group_name='ASSET',
                                      default=None),
                         "sn":
                         C_agent.item(item_name='SN',
                                      group_name='ASSET',
                                      default=None),
                         "data": []
                     }
                     json_report['data'].append(work)
                     self.outqueue.put(json_report)
                 elif _configure_manage_work.status == 6:
                     result = _configure_manage_work.result
                     success = False
                     work['result'] = result
                     work['success'] = success
                     if success:
                         msg = u"作业%s已存在并且执行成功" % work['name_cn']
                         logger = logging.getLogger('log_file')
                         logger.info(msg)
                         if C.LOG_SCREEN == 'ON':
                             logger = logging.getLogger('log_screen')
                             logger.info(msg)
                     else:
                         msg = u"作业%s已存在并且执行失败" % work['name_cn']
                         logger = logging.getLogger('log_file')
                         logger.error(msg)
                         if C.LOG_SCREEN == 'ON':
                             logger = logging.getLogger('log_screen')
                             logger.error(msg)
                     C_agent = Config()
                     json_report = {
                         "hostname":
                         C_agent.item(item_name='HOSTNAME',
                                      group_name='ASSET',
                                      default=None),
                         "sn":
                         C_agent.item(item_name='SN',
                                      group_name='ASSET',
                                      default=None),
                         "data": []
                     }
                     json_report['data'].append(work)
                     self.outqueue.put(json_report)
                 else:
                     continue
Example #9
0
def do_work(work):
    result = []
    success = True
    for j in work['jobs']:
        if j['type'] == 'command':
            json_module_args = {'command': j['command']}
            re = remote_control_shell(json_module_args=json_module_args,
                                      int_timeout=work['timeout'] * 60)
            result.append(re)
            if not j['ignore_error'] and not re['success']:
                success = False
                break
        elif j['type'] == 'script':
            json_module_args = {
                "script": j['script'],
                "args": j['args'],
            }
            re = remote_control_script(json_module_args=json_module_args,
                                       int_timeout=work['timeout'] * 60)
            result.append(re)
            if not j['ignore_error'] and not re['success']:
                success = False
                break
        elif j['type'] == 'copy':
            json_module_args = {
                "src": j['src'],
                "dest": j['dest'],
                "mode": j['authority'],
            }
            re = remote_control_copy(json_module_args=json_module_args,
                                     int_timeout=work['timeout'] * 60)
            result.append(re)
            if not j['ignore_error'] and not re['success']:
                success = False
                break
            if re['success'] and j['check_change']:
                if not re['msg']['changed']:
                    success = False
                    break
    work['result'] = result
    work['success'] = success
    if success:
        msg = u"作业%s执行成功" % work['name_cn']
        logger = logging.getLogger('log_file')
        logger.info(msg)
        if C.LOG_SCREEN == 'ON':
            logger = logging.getLogger('log_screen')
            logger.info(msg)
    else:
        msg = u"作业%s执行失败" % work['name_cn']
        logger = logging.getLogger('log_file')
        logger.error(msg)
        if C.LOG_SCREEN == 'ON':
            logger = logging.getLogger('log_screen')
            logger.error(msg)
    C_agent = Config()
    json_report = {
        "hostname":
        C_agent.item(item_name='HOSTNAME', group_name='ASSET', default=None),
        "sn":
        C_agent.item(item_name='SN', group_name='ASSET', default=None),
        "data": []
    }
    json_report['data'].append(work)
    return json_report