def main(argv):

    try:
        yaml_path = './config/api_monitor_logger.yaml'
        ct.setup_logging(yaml_path)

        with open('./config/api_monitor_config.json', 'r') as f:
            JsonData = json.load(f)
            logger.debug(JsonData)

        manual_task = ''
        try:
            opts, args = getopt.getopt(argv, "ht:", ["task="])
        except getopt.GetoptError:
            print(
                'sppytraderapi_check.py -t <task> or you can use -h for help')
            sys.exit(2)
        for opt, arg in opts:
            if opt == '-h':
                print('python tradeapi_monitor.py -t <task>\n \
                    parameter -t comment: \n \
                    use -t can input the manul single task.\n \
                    task=["qry_market_data","mem","fpga","db_init","db_trade","errorLog"].  \n \
                    task="qry_market_data" means porcess and port monitor  \n \
                    task="qry_security" means memory monitor  \n \
                    task="db_trade" means db trading data monitor  \n \
                    task="errorLog" means file error log monitor  \n \
                    task="self_monitor" means self check monitor  \n \
                    task="smss" means check the sms send status  \n \
                    task="sms0" means set sms total_count=0  \n \
                    fpga_monitor and db_init_monitor just execute once on beginning '
                      )
                sys.exit()
            elif opt in ("-t", "--task"):
                manual_task = arg

        if manual_task not in ["qry_market_data", "qry_security"]:
            logger.warning("[task] input is wrong, please try again!")
            sys.exit()

        else:
            logger.info('manual_task is:%s' % manual_task)
            logger.info("Start to excute the api monitor")
            TraderApi_CheckData = JsonData['PyTraderApi']
            res_flag = 0
            for CheckData in TraderApi_CheckData:
                check_flag = run_app(manual_task, CheckData)
                res_flag += check_flag
            if res_flag == len(TraderApi_CheckData):
                msg = "Ok,所有服务器 traderapi行情查询 返回结果正确!"
                logger.info(msg)
                ct.send_sms_control("NoLimit", msg)
            else:
                logger.info("Error: 有服务器 traderapi行情查询 返回结果不正确!")

    except Exception:
        logger.error('Faild to run trade api monitor!', exc_info=True)
    finally:
        for handler in logger.handlers:
            logger.removeHandler(handler)
Exemplo n.º 2
0
    def offer_connect_check(self):

        #ndate = self.local_date.replace('-','')
        error_kh_list = []
        tgw_list = self.tgw_names.split("|")
        #connect_ip = "172.27.128*"
        for tgw_name in tgw_list:
            command = "ss -anp | grep " + self.exch_front_ip + " | grep " + tgw_name
            #command = "ss -anp | grep 192.168.238.7 | grep sshd"
            logger.info("command:" + command)
            sshRes = []
            sshRes = self.sshExecCmd(command)
            logger.info(sshRes)

            if sshRes != ['']:
                logger.info("服务器%s: 交易网关:[%s] 连接交易所前置地址正确!" %
                            (self.hostip, tgw_name))
                error_kh_list.append(1)
            else:
                msg = "服务器%s: 交易网关:[%s] 连接交易所前置地址不正确,请检查连接状态!" % (self.hostip,
                                                                  tgw_name)
                logger.error(msg)
                ct.send_sms_control('NoLimit', msg)
                error_kh_list.append(0)
        self.sshClient.close()

        return error_kh_list
Exemplo n.º 3
0
def db_init_monitor_task():

    with open('./config/table_check.json', 'r') as f:
        Jsonlist = json.load(f)
        logger.debug(Jsonlist)

        logger.info("Start to excute the before trade monitor")
        thrlist = range(len(Jsonlist))
        threads = []
        for (i, info) in zip(thrlist, Jsonlist):
            #print("alltask.__name__:", alltask.__name__)
            t = dbm.MyThread(dbm.before_trade_monitor, (info, ),
                             dbm.before_trade_monitor.__name__ + str(i))
            threads.append(t)

        for i in thrlist:
            threads[i].start()
        for i in thrlist:
            threads[i].join()
            threadResult = threads[i].get_result()
            sysstr = platform.system()
            if (not threadResult):
                logger.error("error:奇点服务器盘前数据库初始化数据错误,请检查详细错误信息")
                #                ct.send_sms_control("db_init", "error:奇点服务器盘前数据库初始化数据错误,请检查详细错误信息")
                if (sysstr == "Windows"):
                    ct.readTexts("Database init Worning")
            else:
                logger.info("OK:奇点服务器数据库init检查正常")
                ct.send_sms_control("db_init", "OK:奇点服务器盘前数据库init检查正常")
Exemplo n.º 4
0
def before_cleanup_db_monitor_task():
    
    with open('./config/table_check.json', 'r') as f:
        Jsonlist = json.load(f)
        logger.debug(Jsonlist)
    
        thrlist = range(len(Jsonlist))
        threads=[]
        for (i,info) in zip(thrlist, Jsonlist):
            #print("alltask.__name__:", alltask.__name__)
            t = dbm.MyThread(dbm.before_cleanup_db_monitor,(info,),dbm.before_cleanup_db_monitor.__name__ + str(i))
            threads.append(t)
            
        for i in thrlist:
            threads[i].start()
        for i in thrlist:       
            threads[i].join()
            threadResult = threads[i].get_result()
            sysstr = platform.system()
            if (not threadResult) :
                logger.error("error:数据库盘后清库盘前检查失败,请检查详细错误信息")
                ct.send_sms_control("NoLimit", "error:数据库盘后清库盘前检查失败,请检查详细错误信息")
                if (sysstr == "Windows"):
                    ct.readTexts("Database cleanup Worning") 
            else:
                logger.info("OK:数据库盘后清库盘前检查正常")
Exemplo n.º 5
0
def main(argv):
    
    #默认是check_sjdr的监控检查
    try:
        yaml_path = './config/check_sjdr_logger.yaml'
        ct.setup_logging(yaml_path)
        linuxInfo = ct.get_server_config('./config/check_sjdr_config.txt')
        
        check_flag = 0
        for info in linuxInfo: 
            hostip = info[0]
            rfc = remote_file_check(info)
            error_list = rfc.check_sdjr()
            if len(error_list) == 0:
                msg = "ok:系统 %s 盘后当天的节点委托回传数据检查成功" % hostip
                logger.info(msg)
                check_flag += 1
            else:
                msg = "系统 %s 盘后当天的节点委托回传数据检查失败 失败的文件列表:%s " % (hostip, ';'.join(error_list))
                logger.error(msg)
                ct.send_sms_control('NoLimit', msg)
                
        if check_flag == len(linuxInfo):
            logger.info(u"OK:检查盘后当天的节点委托回传数据成功!")
        else:
            logger.error(u"Error:检查盘后当天的节点委托回传数据失败!")
    except Exception:
        logger.error("盘后当天的节点委托回传数据出现异常,请参看错误日志!", exc_info=True)
    finally:
        for handler in logger.handlers:
            logger.removeHandler(handler)        
Exemplo n.º 6
0
    def OnRspQrySecurity(self, pSecurity, pRspInfo, nRequestID, bIsLast):
        msg = "OnRspQrySecurity: ErrorID[%d] ErrorMsg[%s] RequestID[%d] IsLast[%d]" % (
            pRspInfo['ErrorID'], pRspInfo['ErrorMsg'], nRequestID, bIsLast)
        print(msg)

        if bIsLast != 1:
            print("cur_data:", self.__app.cur_data)
            self.__res_list.append(pSecurity)
            print(
                "SecurityID[%s] SecurityName[%s] ProductID[%s] OpenDate[%s]" %
                (pSecurity['SecurityID'], pSecurity['SecurityName'],
                 pSecurity['ProductID'], pSecurity['OpenDate']))
            if pSecurity['SecurityID'] == self.__app.cur_data['SecurityID'] \
                and pSecurity['SecurityName'] != '' :
                msg = "OK,查询证券信息SecurityID为[%s],SecurityName为[%s], OpenDate为[%s]" \
                % (pSecurity['SecurityID'],pSecurity['SecurityName'],pSecurity['OpenDate'])
                logger.info(msg)
            else:
                msg = "Error,查询证券信息SecurityID为[%s],SecurityName为[%s], OpenDate为[%s]" \
                % (pSecurity['SecurityID'],pSecurity['SecurityName'],pSecurity['OpenDate'])
                logger.warning(msg)
        else:
            if len(self.__res_list) == 0:
                msg = "Error:查询无结果"
                logger.error(msg)
                ct.send_sms_control('NoLimit', msg)
            self.__app.wake_up()
Exemplo n.º 7
0
def main():

    try:
        yaml_path = './config/orderstatus_check_logger.yaml'
        ct.setup_logging(yaml_path)

        with open('./config/table_check.json', 'r') as f:
            Jsonlist = json.load(f)
            logger.debug(Jsonlist)

        #init interval
        thrlist = range(len(Jsonlist))
        threads = []
        for (i, info) in zip(thrlist, Jsonlist):
            #print("alltask.__name__:", alltask.__name__)
            t = MyThread(order_status_monitor, (info, ),
                         order_status_monitor.__name__ + str(i))
            threads.append(t)

        for i in thrlist:
            threads[i].start()
        for i in thrlist:
            threads[i].join()
            #threadResult = threads[i].get_result()


#            print "thrcount:", threading.active_count()

    except Exception:
        logger.error('Faild to run monitor db!', exc_info=True)
        ct.send_sms_control("NoLimt", "检查Order表 orderstatus失败!")
    finally:
        for handler in logger.handlers:
            logger.removeHandler(handler)
Exemplo n.º 8
0
def follow_monitor_task():
    
        linuxInfo = ct.get_server_config('./config/check_follow_config.txt')
        
        check_flag = 0
        for info in linuxInfo: 
            hostip = info[0]
            try:
                file_checker = rfc.remote_file_check(info)
                res_file = file_checker.check_follow()
                if res_file[:5] != 'Error':
                    msg = "ok:系统 %s 跟投费率优惠文件检查成功,文件名[%s]" % (hostip,res_file)
                    logger.info(msg)
                    check_flag += 1
                    #20200526正常状态不再发短信
                    #ct.send_sms_control('NoLimit', msg)
                else:
                    msg = "Error:系统 %s 跟投费率优惠文件检查失败 失败的原因:%s" % (hostip, res_file[6:])
                    logger.error(msg)
                    ct.send_sms_control('NoLimit', msg)
                    
            except Exception:
                msg = "Error:系统 %s 跟投费率优惠文件检查失败,出现异常,请查看服务器日志信息!" % hostip
                logger.error(msg, exc_info=True)
                ct.send_sms_control('NoLimit', msg)
        if check_flag != 0 and check_flag == len(linuxInfo):
            logger.info(u"OK:跟投费率优惠文件数据成功!")
        else:
            logger.warning(u"Error:跟投费率优惠文件检查数据失败!")
Exemplo n.º 9
0
def fpga_task():

    linuxInfo = ct.get_server_config('./config/fpga_config.txt')
    #    linuxInfo = [['192.168.238.7', 22, 'trade', 'trade', 'tradeserver',/home/trade/FPGA']]
    try:
        ms = MonitorServer(linuxInfo)
        ms.fpga_monitor_run()
        check_result_list = ms.fpga_Check_flag_list
        logger.debug("check_result_list:")
        logger.debug(check_result_list)
        if len(check_result_list) == 0:
            check_result = False
        else:
            check_result = (sum(check_result_list) == len(check_result_list))
    except Exception:
        check_result = False
        logger.error('Faild to check fpga!', exc_info=True)

    logger.info(
        "************************The FPGA File Monitor Result: ************************"
    )
    if check_result:
        logger.info("OK,FPGA Server is OK")
        ct.send_sms_control("fpga", "OK:盘前FPGA文件检查正常")
    else:
        msg = "error:FPGA文件检查异常,请查看详细日志"
        logger.error(msg)
        #        send_sms_control("fpga", "error:奇点服务器FPGA文件检查异常,请查看详细日志")
        sysstr = platform.system()
        if sysstr == "Windows":
            ct.readTexts("VIP Server is Worning")
Exemplo n.º 10
0
def main():
    yaml_path = './config/gen_InvestorExchFee_logger.yaml'
    ct.setup_logging(yaml_path)
    #检查当天是否是交易日
    is_tradedate = ct.get_isTradeDate(ndates)
    if not is_tradedate:
        logger.info("当日是非交易日,程序退出")
        return 0
    #检查文件是否存在
    if not os.path.isfile(abcsj_dbf):  
        msg = "没有找到上海红利征税明细文件 %s" % abcsj_dbf         
        logger.error(msg)
        #ct.send_sms_control('NoLimit',msg)
    if not os.path.isfile(zsmx_dbf):  
        msg = "没有找到深圳红利征税明细文件 %s" % zsmx_dbf         
        logger.error(msg)
        #ct.send_sms_control('NoLimit',msg)

    if (os.path.isfile(abcsj_dbf) or os.path.isfile(zsmx_dbf)):
        gen_ExchFee_csv()
        res = insert_mysql(csv_file_name,'t_InvestorExchFee')
        if res :
            logger.info("插入mysql成功")
            ct.send_sms_control('NoLimit',"OK,导入红利征税表t_InvestorExchFee成功")
        else:
            logger.error("Error,插入mysql失败")
        logger.info("len(null_investorID):" + str(len(null_investorID)))
        if len(null_investorID) !=0:
            msg = "有没有匹配到对应的investorID的shareholderID数量为:%s" % str(len(null_investorID))
            logger.info(msg)
        else:
            logger.info('shareholderID全匹配成功')
    else:
        logger.error("当天红利征税明细dbf文件没有找到")
Exemplo n.º 11
0
def sjdr_monitor_task():

        linuxInfo = ct.get_server_config('./config/check_sjdr_config.txt')
        
        check_flag = 0
        for info in linuxInfo: 
            try:
                hostip = info[0]
                file_checker = rfc.remote_file_check(info)
                error_list = file_checker.check_sdjr()
                if len(error_list) == 0:
                    msg = "ok:系统 %s 盘后当天的节点委托回传数据检查成功" % hostip
                    logger.info(msg)
                    check_flag += 1
                else:
                    msg = "系统 %s 盘后当天的节点委托回传数据检查失败 失败的文件列表:%s " % (hostip, ';'.join(error_list))
                    logger.error(msg)
                    ct.send_sms_control('NoLimit', msg)
                    
            except Exception:
                logger.error("查询席位代码失败,出现异常,请查看服务器日志信息!", exc_info=True)
                ct.send_sms_control('xwdm', "查询席位代码失败,出现异常,请查看服务器日志信息!")
        if check_flag != 0 and check_flag == len(linuxInfo):
            logger.info(u"OK:检查盘后当天的节点委托回传数据成功!")
        else:
            logger.warning(u"Error:检查盘后当天的节点委托回传数据失败!")
Exemplo n.º 12
0
def traderapi_login_front_monitor_task():

    with open('./config/api_monitor_config.json', 'r') as f:
        JsonData = json.load(f)

    try:
        TraderApi_CheckData = JsonData['PyTraderApi']
        check_result_list = []
        for CheckData in TraderApi_CheckData:
            front_addresses = CheckData['front_addresses']
            CheckData.pop('front_addresses')
            for address in front_addresses:
                CheckData['address'] = address
                check_flag = tdm.run_app("login_front", CheckData)
                check_result_list.append(check_flag)
        check_result = (sum(check_result_list) == len(check_result_list))
        if check_result:
            msg = "Ok,所有服务器 traderapi登陆front成功!"
            logger.info(msg)
            ct.send_sms_control("NoLimit", msg)
        else:
            logger.info("Error: 有服务器 traderapi登陆front失败!")
    except Exception as e:
        msg = str(e)
        logger.error("tradeapi loggin monitor 异常:" + msg)
Exemplo n.º 13
0
def traderapi_QMD_monitor_task():

    with open('./config/api_monitor_config.json', 'r') as f:
        JsonData = json.load(f)

    try:
        #20200810修改json文件格式
        # TraderApi_CheckData = JsonData['PyTraderApi']
        # res_flag = 0
        # for CheckData in TraderApi_CheckData:
        #     check_flag = tdm.run_app("qry_market_data", CheckData)
        #     res_flag += check_flag

        TraderApi_CheckData = JsonData['PyTraderApi']
        check_result_list = []
        for CheckData in TraderApi_CheckData:
            front_addresses = CheckData['front_addresses']
            CheckData.pop('front_addresses')
            for address in front_addresses:
                CheckData['address'] = address
                check_flag = tdm.run_app("qry_market_data", CheckData)
                check_result_list.append(check_flag)
        check_result = (sum(check_result_list) == len(check_result_list))
        if check_result:
            msg = "Ok,所有服务器 traderapi行情查询 返回结果正确!"
            logger.info(msg)
            ct.send_sms_control("NoLimit", msg)
        else:
            logger.info("Error: 有服务器 traderapi行情查询 返回结果不正确!")
    except Exception as e:
        msg = str(e)
        logger.error("tradeapi monitor 异常:" + msg)
Exemplo n.º 14
0
    def core_file_info(self, info):
        command = 'find /home/trade -name core.*'
        hostip = info[0]
        #        servername = info[4]
        logger.info("command: " + command)
        sshRes = self.sshExecCmd(command)
        #        print("sshRes:", sshRes)
        if sshRes == []:
            self.single_info_verify = True
            msg = "OK: Server %s The count of core file is 0 " % str(hostip)
            logger.info(msg)
        else:
            self.single_info_verify = False
            sshResStr = ''.join(sshRes)
            sshResList = sshResStr.strip().split('\n')
            print("sshResList: ", sshResList)
            #            ps_list = []
            for datalist in sshResList:

                msg = "error: " + hostip + " Have core file:" + datalist
                ct.write_log(error_log_file, msg)
                logger.warning(msg)

            sms_msg = "error: " + hostip + " 有core文件,请检查服务器文件"
            logger.error(sms_msg)
            ct.send_sms_control("core", sms_msg)

        msg = "core file Check Result: " + str(self.single_info_verify)
        logger.info(msg)
Exemplo n.º 15
0
    def check_xwdm(self):
        
        ndate = self.local_date.replace('-','')
        vip_interface_filepath = self.remote_dir + '/' + ndate +'/VIP_INTERFACE_OK' + ndate + '.csv'
        vip_ok_filepath = self.remote_dir + '/' + ndate +'/4/VIP_OK' + ndate + '.csv'
        error_kh_list=[]

        for filepath in [vip_interface_filepath, vip_ok_filepath]:
            command = "ls " + filepath
            logger.info("command:" + command)
            sshRes = []
            sshRes = self.sshExecCmd(command)
            # print("sshRes:", sshRes)
            # print(sshRes[0] == filepath)
            # print(sshRes == [''])
            if sshRes !=['']:
                logger.info("服务器%s: 文件:%s存在" % (self.hostip, filepath)) 
                error_kh_list.append(1)  
            else:
                msg = "服务器%s: 文件:%s不存在!" % (self.hostip, filepath)
                logger.error(msg) 
                ct.send_sms_control('xwdm', msg)
                error_kh_list.append(0) 
        self.sshClient.close()
        
        return error_kh_list
Exemplo n.º 16
0
def shrink_dblog_monitor_task():
    
    with open('./config/table_check.json', 'r') as f:
        Jsonlist = json.load(f)
        logger.debug(Jsonlist)
    
        thrlist = range(len(Jsonlist))
        threads=[]
        for (i,info) in zip(thrlist, Jsonlist):
            #print("alltask.__name__:", alltask.__name__)
            t = dbm.MyThread(dbm.shrink_dblog_monitor,(info,),dbm.shrink_dblog_monitor.__name__ + str(i))
            threads.append(t)
            
        for i in thrlist:
            threads[i].start()
        check_list = []
        for i in thrlist:       
            threads[i].join()
            threadResult = threads[i].get_result()
            if (not threadResult) :
                check_list.append(0)
            else:
                check_list.append(1)
        check_flag = (sum(check_list)==len(check_list))
        if (not check_flag) :
            logger.error("error:有数据库日志压缩检查处理失败,请检查详细错误信息")
            logger.error(check_list)
            ct.send_sms_control("NoLimit", "error:有数据库日志压缩检查失败,请检查详细错误信息")
        else:
            logger.info("OK:所有数据库日志压缩检查正常")
Exemplo n.º 17
0
    def monitor_market_data(self):
        #先进行查询操作
        self.__spi.test_req_qry_market_data()
        time.sleep(2)
        market_df = pd.read_csv(self.QryMarketDataResFile, dtype=object)
        #        print(market_df)
        #        print(market_df.columns.size) #列数
        #        print(market_df.iloc[:,0].size)#行数
        TrD_error_list = []
        error_list = []
        if market_df.iloc[:, 0].size != 0:
            #            #判断TradingDay字段是否是当天日期
            #            ndates = dt.datetime.now().strftime("%Y%m%d")
            #            nt_df = market_df[market_df['TradingDay'] != ndates]
            #            if len(nt_df) == 0:
            #                logger.info("[TradingDay]的值%s和当天日期一致" % ndates)
            #            else:
            #                #print(nt_df)
            #                for row in nt_df.itertuples():
            #                    TrD_error_list.append(str(getattr(row, 'TradingDay')) + "::" + str(getattr(row, 'SecurityID')))
            #                msg = "Error: 服务器[%s]有证券行情TradingDay字段不是当天日期:[%s]" % (self.__address, ','.join(TrD_error_list))
            #                logger.info(msg)
            #                ct.send_sms_control("NoLimit",msg)
            #判断查询的合约行情是否都返回了结果
            #print("length:", len(self.QuriyList), market_df.iloc[:,0].size)
            if len(self.QuriyList) == market_df.iloc[:, 0].size:
                logger.info("OK:行情查询返回记录条数和查询列表条数一致")
            else:
                for dict_item in self.QuriyList:
                    security_list = list(market_df['SecurityID'])
                    if dict_item['SecurityID'] in security_list:
                        logger.info("SecurityID [%s]查询行情成功" %
                                    dict_item['SecurityID'])
                    else:
                        logger.info("SecurityID [%s]查询行情没有返回" %
                                    dict_item['SecurityID'])
                        error_list.append(dict_item['SecurityID'])
                msg = "Error: 服务器[%s] traderapi行情查询 没有返回结果的SecurityID列表为:[%s]" % (
                    self.__address, ",".join(error_list))
                logger.error(msg)
                ct.send_sms_control("NoLimit", msg)
        else:
            error_list = self.QuriyList
            msg = "Error:服务器[%s] traderapi行情查询 接口返回为空" % self.__address
            logger.error(msg)
            ct.send_sms_control("NoLimit", msg)

        if TrD_error_list == [] and error_list == []:
            msg = "Ok,服务器[%s] traderapi行情查询 返回结果正确" % self.__address
            logger.info(msg)
            return 1
        else:
            msg = "Error,服务器[%s] traderapi行情查询 返回结果不正确 %s" % (
                self.__address, str(TrD_error_list) + str(error_list))
            logger.error(msg)
            #ct.send_sms_control("NoLimit",msg)
            return 0
Exemplo n.º 18
0
    def run(self):

        #        while True:
        #print("self.__api", self.__api)
        #            if self.__api is None:
        print(traderapi.CTORATstpTraderApi_GetApiVersion())
        self.__api = traderapi.CTORATstpTraderApi.CreateTstpTraderApi()
        self.__spi = TraderSpi(self.__api, self)
        self.__api.RegisterSpi(self.__spi)
        self.__api.RegisterFront(self.__address)
        #订阅私有流
        #self.__api.SubscribePrivateTopic(traderapi.TORA_TERT_RESTART)
        #订阅公有流
        #self.__api.SubscribePublicTopic(traderapi.TORA_TERT_RESTART)
        #启动接口对象
        self.__api.Init()

        #            else:
        #        eventlet.monkey_patch()
        #        with eventlet.Timeout(3,False):   #设置超时时间为2秒
        #            print('这条语句正常执行')
        #            #self.__lock.acquire()
        #            time.sleep(5)
        #            print('没有跳过这条输出')
        #self.__lock.acquire()
        #        print("test5")
        self.__spi.test_req_user_login()
        time.sleep(2)

        #            self.__spi.test_req_qry_security()
        #            self.__spi.test_req_qry_trading_account()
        if self.__spi.login_flag == 1:
            if self.__task == "qry_market_data":
                #            for dict_data in self.testData["QryMarketData"]:
                logger.info("excuting qry_market_data...")
                self.__lock.acquire()
                #            self.cur_data = dict_data
                self.check_flag = self.monitor_market_data()
            elif self.__task == "login_front":
                logger.info("excuting login_front_monitor...")
                self.__lock.acquire()
                self.check_flag = self.monitor_login_front()
            elif self.__task == "qry_security":
                for dict_data in self.testData["QrySecurity"]:
                    logger.info("excuting qry_security...")
                    pass
                    #self.__lock.acquire()
                    #self.cur_data = dict_data
                    #self.__spi.test_req_qry_security()
            else:
                logger.warning("输入的任务名称无法识别!")
        else:
            msg = "Error:user_login登录前置 %s 失败,程序退出." % self.__address
            logger.error(msg)
            ct.send_sms_control('NoLimit', msg)
            sys.exit(1)
Exemplo n.º 19
0
    def OnRspQryMarketData(self, pMarketData, pRspInfo, nRequestID, bIsLast):
        msg = "OnRspQryMarketData: ErrorID[%d] ErrorMsg[%s] RequestID[%d] IsLast[%d]" % (
            pRspInfo['ErrorID'], pRspInfo['ErrorMsg'], nRequestID, bIsLast)
        logger.info(msg)
        print("pMarketData:", pMarketData)

        if pRspInfo['ErrorID'] != 0:
            msg = "返回错误:错误信息为:%s" % pRspInfo['ErrorMsg']
            logger.warning(msg)
            ct.send_sms_control('NoLimit', msg)

        if bIsLast != 1:
            #            print("cur_data:",self.__app.cur_data)
            #            self.__res_list.append(pMarketData)
            #            logger.info("SecurityID[%s] SecurityName[%s] TradingDay[%s] PreClosePrice[%s] OpenPrice[%s] LastPrice[%s] HighestPrice[%s] LowestPrice[%s] UpdateTime[%s]" % (
            #                                                            pMarketData['SecurityID'],
            #                                                            pMarketData['SecurityName'],
            #                                                            pMarketData['TradingDay'],
            #                                                            pMarketData['PreClosePrice'],
            #                                                            pMarketData['OpenPrice'],
            #                                                            pMarketData['LastPrice'],
            #                                                            pMarketData['HighestPrice'],
            #                                                            pMarketData['LowestPrice'],
            #                                                            pMarketData['UpdateTime']))
            #
            #            if pMarketData['SecurityID'] == self.__app.cur_data['SecurityID'] and pMarketData['TradingDay'] == self.ndates \
            #                and pMarketData['PreClosePrice'] != 0.0 and pMarketData['UpperLimitPrice'] != 0.0 and pMarketData['LowerLimitPrice'] != 0.0 :
            #                msg = "OK,查询行情SecurityID[%s],昨结算价为[%s], 涨停价为[%s], 跌停价为[%s],更新时间为:%s" \
            #                % (pMarketData['SecurityID'],pMarketData['PreClosePrice'],pMarketData['UpperLimitPrice'],pMarketData['LowerLimitPrice'],pMarketData['UpdateTime'])
            #                logger.info(msg)
            #            else:
            #                msg = "Error,查询行情SecurityID[%s],昨结算价为[%s], 涨停价为[%s], 跌停价为[%s],更新时间为:%s" \
            #                % (pMarketData['SecurityID'],pMarketData['PreClosePrice'],pMarketData['UpperLimitPrice'],pMarketData['LowerLimitPrice'],pMarketData['UpdateTime'])
            #                logger.error(msg)
            #                ct.send_sms_control('NoLimit',msg)
            if (pMarketData != None):
                data_list = list(pMarketData.values())
                ttl = []
                for item in data_list:
                    if (type(item) == bytes):
                        ttl.append(item.decode('utf-8'))
                    else:
                        ttl.append(item)
                with open(self.__app.QryMarketDataResFile,
                          'a+',
                          encoding='utf-8',
                          newline='') as csvfile:
                    writer = csv.writer(csvfile)
                    writer.writerow(ttl)
            else:
                logger.warning("pMarketData数据为None")
Exemplo n.º 20
0
def insert_mysql(csv_file_name,template_name):
    logger.info("导入mysql....")
    mysql_obj = myc.mysql_tools(mysqldb_info)
    local_infile_value = mysql_obj.get_local_infile_value()
    #判断mysql参数是否打开允许导入文件
    if (local_infile_value == 'ON' and os.path.isfile(csv_file_name)):
        file_sql = mysql_obj.load_table_commend_gen(csv_file_name, template_name)
        logger.info(file_sql)
        res = mysql_obj.execute_sql(file_sql)
    else:
        local_file_msg = "Error,mysql导入csv失败,local_infile 的值为: %s" % local_infile_value
        ct.send_sms_control('NoLimit', local_file_msg, '13681919346')
        res = 0
    return res
Exemplo n.º 21
0
    def check_xwdm_old(self):
        
        xwdm_file='./config/xwdm_check_list.csv'
#        self.xwdm_check_col='XWDM_sz'
        with open(xwdm_file,'r') as csvFile:
            reader = csv.DictReader(csvFile)   
            check_column = [row[self.xwdm_check_col] for row in reader]
        logger.info(u"奇点系统 %s 席位号列表为:" % self.hostip)
        logger.info(check_column)
        ndate = self.local_date.replace('-','')
        if self.xwdm_check_col == 'hx_szt':
            filedot='/2'
        elif self.xwdm_check_col == 'hx_shangzt':
            filedot='/3'
        elif self.xwdm_check_col == 'hx_wanping':
            filedot='/4'
        filepath = self.remote_dir + '/' + ndate + filedot + '/VIP_GDH' + ndate + '.csv'
#        filepath = '/home/trade/temp/20190617/VIP_GDH20190403.csv'
        
        #command = 'cat /home/trade/temp/20190617/VIP_GDH20190403.csv | awk -F"' + ',"' + " '{OFS=\",\";print $1,$5}'"
        #cat /home/trade/temp/20190617/VIP_GDH20190403.csv | awk -F"," '{OFS=",";print $1,$5}'
        command = "cat " + filepath + " | awk -F\",\" \'{OFS=\",\";print $1,$5}\'"
        logger.debug("command:" + command)
       
        sshRes = []
        sshRes = self.sshExecCmd(command)
        self.sshClient.close()
#        print "sshRes:", sshRes
        xwdm_list=[]
        for ssr in sshRes[1:]:
            lists = ssr.split(',')
            xwdm_list.append(lists)
            
        error_kh_list = []
        if len(xwdm_list) != 0:
            logger.info(u"客户席位代码列表为:")
            logger.info(xwdm_list)      
            #20191226:修改临时检查,只检查文件存在即可。 
            # for xwdm_item in xwdm_list:
            #     if (xwdm_item[1] not in check_column):
            #         error_kh_list.append(xwdm_item)
        else:
            msg = "error: 没有取到服务器 %s GDH文件 %s,请检查文件路径是否正确!" % (self.hostip, filepath)
            logger.error(msg)
            ct.send_sms_control('xwdm', msg)
            error_kh_list=[['999','999']]
        
        return error_kh_list
Exemplo n.º 22
0
 def sshConnect(self):
     paramiko.util.log_to_file('./mylog/paramiko.log')
     try:
         #创建一个SSH客户端client对象
         sshClient = paramiko.SSHClient()
         # 获取客户端host_keys,默认~/.ssh/known_hosts,非默认路径需指定
         sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
         #创建SSH连接
         sshClient.connect(self.hostip, self.port, self.username,
                           self.password)
         logger.debug("SSH connect success!")
     except Exception as e:
         msg = "SSH connect failed: [hostip:%s];[username:%s];[error:%s]" % (
             self.hostip, self.username, str(e))
         logger.error(msg)
         ct.send_sms_control('NoLimit', msg)
     return sshClient
Exemplo n.º 23
0
    def non_trade_ps_info(self, info):

        hostip = info[0]
        username = info[2]
        #        servername = info[4]
        processes = info[5]
        #        process_count = len(str(processes).split('|'))
        command = 'ps -u ' + username + ' -elf | grep -E "' + processes + '" | grep -v grep'
        #        command = 'ps -u trade -elf |grep -E "dbsync 1|dbsync 2" | grep -v grep'
        logger.info("command: " + command)
        sshRes = self.sshExecCmd(command)
        #        print "sshRes:", sshRes
        if sshRes == []:
            self.ps_info_verify = True
            msg = "OK: Server %s The count of the processes is 0 " % str(
                hostip)
            logger.info(msg)
        else:
            self.ps_info_verify = False
            sshResStr = ''.join(sshRes)
            sshResList = sshResStr.strip().split('\n')
            #        print "sshResList: ", sshResList
            sshResLists = []
            for sshCom in sshResList:
                sshResLists.append(sshCom.strip().split())
#    #        print "sshResLists:\n", sshResLists
#            titlename="F,S,UID,PID,PPID,C,PRI,NI,ADDR,SZ,WCHAN,TTY,TIME,CMD"

            ps_list = []
            for datalist in sshResLists:
                #                psstr=','.join(datalist)
                psstr = ' '.join(datalist[14:])
                logger.info("ps:" + psstr)
                #                chg_psstr = psstr.encode('utf-8')
                ct.write_log(error_log_file, psstr)
                msg = "error:" + hostip + " ::The process is " + psstr + ":: Time: " + str(
                    datalist[13]) + " is still working!"
                ct.write_log(error_log_file, msg)
                logger.warning(msg)
                ps_list.append(psstr)
            ps_cmd = ';'.join(ps_list)
            sms_msg = "error:" + hostip + " ::Processes : " + ps_cmd + " is still working!"
            ct.send_sms_control("ps_port", sms_msg)

        msg = "ps Processes Check Result: " + str(self.ps_info_verify)
        logger.info(msg)
Exemplo n.º 24
0
def xwdm_monitor_task():

        linuxInfo = ct.get_server_config('./config/check_xwdm_config.txt')
        
        for info in linuxInfo: 
            try:
                check_flag = 0
                hostip = info[0]
                c_x = cx.check_csv_file(info)
                error_list = c_x.check_xwdm()
                check_flag = (sum(error_list)==len(error_list))
                if check_flag:
                    logger.info(u"ok:系统 %s 席位代码文件检查成功!" % hostip)
                else:
                    logger.error(u"系统 %s 检查席位代码文件失败!" % hostip)
            except Exception:
                logger.error("查询席位代码失败,出现异常,请查看服务器日志信息!", exc_info=True)
                ct.send_sms_control('xwdm', "Error:查询席位代码失败,出现异常,请查看服务器日志信息!")
Exemplo n.º 25
0
def self_log_monitor_task(log_file):
    logger.info("self_log_monitor_check msg")
#    log_file = './mylog/non_trade_monitor_run.log'
    with open(log_file, "r") as f:
        lines = f.readlines()
        last_line = lines[-1]
    last_time_str = last_line.split(',')[0]
    #暂停1秒防止一分钟运行2次
    time.sleep(1)
    last_time = dt.datetime.strptime(last_time_str,"%Y-%m-%d %H:%M:%S")
    ntime = dt.datetime.now()
    delta_time = ntime - last_time
    logger.info("delta time is : %d " % delta_time.seconds)
    if delta_time.seconds < 10 and delta_time.seconds >=0 :
        logger.info("ok:I am alive!")
        ct.send_sms_control("NoLimit", "奇点监控服务器自检正常,报警时间点:'18:59','19:59','20:59','21:59',07:59'")
    else:
        logger.error("error:self check failed")
Exemplo n.º 26
0
def ssh_remote_command_task():
    
    error_list = []
    linuxInfo = ct.get_server_config('./config/ssh_remote_command_config.txt')
    for info in linuxInfo:
        hostip = info[0]
        port = int(info[1])
        username = info[2]
        password = info[3]
        command = info[5]

        sshClient = ct.sshConnect(hostip, port, username, password)
        if sshClient == 999:
            msg = "Failed:服务器[%s],连接失败,请检查密码是否正确" % hostip
            logger.error(msg)
            #ct.send_sms_control("NoLimit", msg)
            error_list.append(msg)
        else:
            logger.info("Ok: 服务器[%s]连接正常" % hostip)
            logger.info(hostip + "::" + command)
            #sshRes = ct.sshExecCmd(sshClient, command)
            stdin, stdout, stderr = sshClient.exec_command(command)
            stdoutstr = stdout.read().decode('utf-8')
            ssherr = stderr.read().decode('utf-8')
            if ssherr:
                msg = "服务器[%s]ssh执行命令返回错误:[%s]" % (hostip, ssherr)
                logger.warning(msg)
                error_list.append(msg)
            sshRes = []
            sshRes = stdoutstr.strip().split('\n')
            if sshRes == ['']:
                sshRes = []
            logger.info("sshRes:")
            logger.info(sshRes)
        
            sshClient.close()
                
    if len(error_list) != 0:
        temstr = ';'.join(error_list)
        msg = "Failed:服务器ssh执行命令失败列表:[%s]" % temstr
        logger.error(msg)
        ct.send_sms_control("NoLimit", msg)
    else:
        logger.info("所有服务器ssh执行命令正常!")
Exemplo n.º 27
0
    def socket_info(self, info):

        hostip = info[0]
        #        servername = info[4]
        ports_i = info[6]
        ports = ports_i.split(';')
        #        print "port:", ports
        cur_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        logger.info(
            "******************************Ports Monitor: [server:%s]*********************************"
            % hostip)
        ct.write_file(result_file,
                      cur_time + "::" + hostip + "_socket_port_info_result:")
        flag_list = []
        for port in ports:
            sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sk.settimeout(3)
            try:
                sk.connect((hostip, int(port)))
                msg = "ok:" + str(hostip) + ":" + str(port) + " is ok"
                ct.write_file(result_file, msg)
                logger.info(msg)
                list_flag = 1
                flag_list.append(list_flag)
            except Exception:
                #        print "\033[1;31;mServer port 18000 is close\033[0m"
                msg = "error: " + str(hostip) + ":" + str(port) + " is closed"
                logger.error(msg)
                ct.send_sms_control("ps_port", msg)
                ct.write_file(error_log_file, msg)
                ct.write_file(result_file, msg)
                list_flag = 0
                flag_list.append(list_flag)
            sk.close()
#        print "flag_list: ", flag_list
        if len(flag_list) == 0:
            self.socket_info_verify = False
        else:
            self.socket_info_verify = (sum(flag_list) == len(flag_list))
        msg = "socket Ports Check Result: " + hostip + "::" + str(
            self.socket_info_verify)
        logger.info(msg)
Exemplo n.º 28
0
def mdapi_monitor_qry_task():

    with open('./config/api_monitor_config.json', 'r') as f:
        JsonData = json.load(f)

    try:
        res_flag = 0
        for PyMdApi_CheckData in JsonData['PyMdApi']:
            #        PyMdApi_CheckData = JsonData['PyMdApi']
            md_test = mdt.mdapi_monitor(PyMdApi_CheckData)
            res = md_test.monitor_market_data()
            res_flag += res
        if res_flag == len(JsonData['PyMdApi']):
            msg = "Ok,所有服务器mdapi行情查询返回结果正确!"
            logger.info(msg)
            ct.send_sms_control("NoLimit", msg)
        else:
            logger.info("Error: 有服务器mdapi行情查询返回结果不正确!")
    except Exception as e:
        msg = str(e)
        logger.error("mdapi monitor 异常:" + msg)
Exemplo n.º 29
0
def exchange_file_monitor_task():
    
        linuxInfo = ct.get_server_config('./config/exchange_file_config.txt')
        
        check_flag = 0
        for info in linuxInfo: 
            hostip = info[0]
            try:
                file_checker = rfc.remote_file_check(info)
                error_file_list = file_checker.check_exchange_file()
                if len(error_file_list) == 0:
                    msg = "ok:所有系统交易所基础文件检查成功"
                    logger.info(msg)
                    check_flag += 1
                    ct.send_sms_control('NoLimit', msg)
                else:
                    list_str = ';'.join(error_file_list)
                    msg = "Error:有系统交易所基础文件检查失败,失败的文件:%s" % list_str
                    logger.error(msg)
                    ct.send_sms_control('NoLimit', msg)
                    
            except Exception:
                msg = "Error:系统交易所基础文件检查失败,出现异常,请查看服务器日志信息!"
                logger.error(msg, exc_info=True)
                ct.send_sms_control('NoLimit', msg)
Exemplo n.º 30
0
def main(argv):

    yaml_path = './config/non_trade_monitor_logger.yaml'
    ct.setup_logging(yaml_path)
    linuxInfo = ct.get_server_config('./config/offer_connect_config.txt')

    check_result = []
    for info in linuxInfo:
        try:
            check_flag = 0
            hostip = info[0]
            tgw_names = info[5]
            scc = ssh_command_check(info)
            error_list = scc.offer_connect_check()
            check_flag = (sum(error_list) == len(error_list))
            if check_flag:
                logger.info(u"ok:系统 %s 交易前置 %s 连接检查成功!" % (hostip, tgw_names))
                check_result.append(1)
            else:
                logger.error(u"系统 %s 交易前置 %s 连接检查失败:" % (hostip, tgw_names))
                check_result.append(0)

        except Exception:
            logger.error('Faild to check offer_connect.', exc_info=True)
            check_result.append(0)
        # finally:
        #     for handler in logger.handlers:
        #         logger.removeHandler(handler)
    final_check_flag = (sum(check_result) == len(check_result))
    logger.info(check_result)
    if final_check_flag:
        msg = "所有报盘前置连接地址检查成功"
        ct.send_sms_control("NoLimit", msg)
        logger.info(msg)
    else:
        logger.error("报盘连接前置检查有错误!")

    for handler in logger.handlers:
        logger.removeHandler(handler)