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)
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:
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'] = []
# (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')
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)
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
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)
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
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