Esempio n. 1
0
 def query_stock_basic_data_dict(self):
     stock_basic_data_mm = ObjectMmap(-1,
                                      1024 * 1024 * 5,
                                      access=mmap.ACCESS_READ,
                                      tagname='stock_basic_data_mm')
     return stock_basic_data_mm.jsonread_follower()
Esempio n. 2
0
 def query_server_pf_account_dict(self):
     server_pf_account_mm = ObjectMmap(-1,
                                       1024 * 1024,
                                       access=mmap.ACCESS_READ,
                                       tagname='server_pf_account_mm')
     return server_pf_account_mm.jsonread_follower()
Esempio n. 3
0
 def __init__(self):
     self.eod_config_mm = ObjectMmap(-1,
                                     1024 * 1024,
                                     access=mmap.ACCESS_WRITE,
                                     tagname='eod_config_mm')
     self.email_mm = ObjectMmap(-1,
                                1024 * 1024,
                                access=mmap.ACCESS_WRITE,
                                tagname='email_mm')
     self.server_mm = ObjectMmap(-1,
                                 1024 * 1024,
                                 access=mmap.ACCESS_WRITE,
                                 tagname='server_mm')
     self.server_group_mm = ObjectMmap(-1,
                                       1024 * 1024,
                                       access=mmap.ACCESS_WRITE,
                                       tagname='server_group_mm')
     self.server_account_mm = ObjectMmap(-1,
                                         1024 * 1024,
                                         access=mmap.ACCESS_WRITE,
                                         tagname='server_account_mm')
     self.server_pf_account_mm = ObjectMmap(-1,
                                            1024 * 1024,
                                            access=mmap.ACCESS_WRITE,
                                            tagname='server_pf_account_mm')
     self.stock_basic_data_mm = ObjectMmap(-1,
                                           1024 * 1024 * 5,
                                           access=mmap.ACCESS_WRITE,
                                           tagname='stock_basic_data_mm')
Esempio n. 4
0
 def query_email_dict(self):
     email_mm = ObjectMmap(-1,
                           1024 * 1024,
                           access=mmap.ACCESS_READ,
                           tagname='email_mm')
     return email_mm.jsonread_follower()
Esempio n. 5
0
class JsonMmapServer():
    def __init__(self):
        self.eod_config_mm = ObjectMmap(-1,
                                        1024 * 1024,
                                        access=mmap.ACCESS_WRITE,
                                        tagname='eod_config_mm')
        self.email_mm = ObjectMmap(-1,
                                   1024 * 1024,
                                   access=mmap.ACCESS_WRITE,
                                   tagname='email_mm')
        self.server_mm = ObjectMmap(-1,
                                    1024 * 1024,
                                    access=mmap.ACCESS_WRITE,
                                    tagname='server_mm')
        self.server_group_mm = ObjectMmap(-1,
                                          1024 * 1024,
                                          access=mmap.ACCESS_WRITE,
                                          tagname='server_group_mm')
        self.server_account_mm = ObjectMmap(-1,
                                            1024 * 1024,
                                            access=mmap.ACCESS_WRITE,
                                            tagname='server_account_mm')
        self.server_pf_account_mm = ObjectMmap(-1,
                                               1024 * 1024,
                                               access=mmap.ACCESS_WRITE,
                                               tagname='server_pf_account_mm')
        self.stock_basic_data_mm = ObjectMmap(-1,
                                              1024 * 1024 * 5,
                                              access=mmap.ACCESS_WRITE,
                                              tagname='stock_basic_data_mm')

    def load_eod_data(self):
        threads = []
        t = threading.Thread(target=self.load_eod_data_thread, args=())
        threads.append(t)

        for t in threads:
            t.start()
        return 1

    def reload_eod_data(self):
        eod_config_dict, email_dict, server_dict, server_group_dict, server_account_dict, server_pf_account_dict, \
        stock_basic_data_dict = self.__load_from_db()

        self.eod_config_mm.jsonwrite(eod_config_dict)
        self.email_mm.jsonwrite(email_dict)
        self.server_mm.jsonwrite(server_dict)
        self.server_group_mm.jsonwrite(server_group_dict)
        self.server_account_mm.jsonwrite(server_account_dict)
        self.server_pf_account_mm.jsonwrite(server_pf_account_dict)
        self.stock_basic_data_mm.jsonwrite(stock_basic_data_dict)
        print 'DaTa ReLoad Over!'
        return 1

    def load_eod_data_thread(self):
        while True:
            eod_config_dict, email_dict, server_dict, server_group_dict, server_account_dict, server_pf_account_dict, \
            stock_basic_data_dict = self.__load_from_db()

            self.eod_config_mm.jsonwrite(eod_config_dict)
            self.email_mm.jsonwrite(email_dict)
            self.server_mm.jsonwrite(server_dict)
            self.server_group_mm.jsonwrite(server_group_dict)
            self.server_account_mm.jsonwrite(server_account_dict)
            self.server_pf_account_mm.jsonwrite(server_pf_account_dict)
            self.stock_basic_data_mm.jsonwrite(stock_basic_data_dict)
            print 'DaTa Load Over!'
            time.sleep(60 * 60)

    def __load_from_db(self):
        cp = ConfigParser.SafeConfigParser()
        path = os.path.dirname(__file__)
        cp.read(path + '/../cfg/config.txt')

        db_ip = cp.get('host', 'db_ip')
        db_port = cp.get('host', 'db_port')
        db_user = cp.get('host', 'db_user')
        db_password = cp.get('host', 'db_password')
        db_name = 'jobs'
        Session = sessionmaker()
        db_connect_string = 'mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8;compress=true' % (
            db_user, db_password, db_ip, db_port, db_name)
        engine = create_engine(db_connect_string,
                               echo=False,
                               poolclass=NullPool)
        Session.configure(bind=engine)
        session_job = Session()

        # 定义数据缓存容器
        eod_config_dict = dict()
        email_dict = dict()
        server_dict = dict()
        server_group_dict = dict()

        # ----------------------加载本地运维机器相关信息------------------------
        # 邮件相关配置
        local_parameters = session_job.query(LocalParameters).first()
        eod_config_dict['smtp_from'] = local_parameters.smtp_from
        eod_config_dict['smtp_server'] = local_parameters.smtp_server
        eod_config_dict['smtp_port'] = local_parameters.smtp_port
        eod_config_dict['smtp_username'] = local_parameters.smtp_username
        eod_config_dict['smtp_password'] = local_parameters.smtp_password
        eod_config_dict['local_server_ips'] = local_parameters.local_server_ips

        # 相关字典数据
        project_dict = session_job.query(ProjectDict)
        for project_item in project_dict:
            if project_item.dict_type == 'Email_dict':
                email_dict[project_item.
                           dict_name] = project_item.dict_value.split(',')
            else:
                eod_config_dict[
                    project_item.dict_name] = project_item.dict_value

        host_name = 'host'
        host_server = HostModel(host_name)
        host_server.load_parameter(local_parameters)
        server_dict['server_host'] = [
            local_parameters,
        ]

        # ----------------------加载本地服务器相关信息------------------------
        server_dict['local_server'] = []
        for local_server_item in session_job.query(LocalServerList):
            server_dict['local_server'].append(local_server_item)

        server_model_dict = dict()
        # ----------------------加载托管服务器(直控或者托管)相关信息------------------------
        server_dict['trade_server'] = []
        for trade_server_item in session_job.query(TradeServerList).order_by(
                TradeServerList.id):
            server_dict['trade_server'].append(trade_server_item)
            trade_server_model = TradeServerModel(trade_server_item.name)
            trade_server_model.load_parameter(trade_server_item)
            server_model_dict[trade_server_model.name] = trade_server_model

        server_dict['deposit_server'] = []
        for deposit_server_item in session_job.query(DepositServerList):
            server_dict['deposit_server'].append(deposit_server_item)
            deposit_server_model = DepositServerModel(deposit_server_item.name)
            deposit_server_model.load_parameter(deposit_server_item)
            server_model_dict[deposit_server_model.name] = deposit_server_model
        session_job.close()

        session_common = host_server.get_db_session('common')
        services_list = []
        for service_name_item in session_common.query(
                AppInfo.app_name).group_by(AppInfo.app_name):
            services_list.append(service_name_item[0])
        eod_config_dict['service_list'] = services_list
        session_common.close()

        # 加载策略分组数据
        strategy_grouping_dict = dict()
        session_strategy = host_server.get_db_session('strategy')
        for strategy_grouping_db in session_strategy.query(StrategyGrouping):
            if strategy_grouping_db.group_name in strategy_grouping_dict:
                sub_group_dict = strategy_grouping_dict[
                    strategy_grouping_db.group_name]
            else:
                sub_group_dict = dict()

            if strategy_grouping_db.sub_name in sub_group_dict:
                sub_group_dict[strategy_grouping_db.sub_name].append(
                    strategy_grouping_db.strategy_name)
            else:
                sub_group_dict[strategy_grouping_db.sub_name] = [
                    strategy_grouping_db.strategy_name,
                ]
            strategy_grouping_dict[
                strategy_grouping_db.group_name] = sub_group_dict
        eod_config_dict['strategy_grouping_dict'] = strategy_grouping_dict
        session_strategy.close()

        # instrument_dict = dict()
        # session_common = host_server.get_db_session('common')
        # for instrument_db in session_strategy.query(Instrument):
        #     instrument_dict[instrument_db.ticker] = instrument_db
        # session_common.close()

        holiday_list = []
        session_history = host_server.get_db_session('history')
        for holiday_info_db in session_history.query(HolidayInfo):
            holiday_list.append(holiday_info_db.holiday.strftime('%Y-%m-%d'))
        session_history.close()
        eod_config_dict['holiday_list'] = holiday_list
        # ----------------------托管服务器分组------------------------
        server_group_dict['trade_server_list'] = []
        server_group_dict['deposit_server_list'] = []
        server_group_dict['night_session_server_list'] = []
        server_group_dict['cta_server_list'] = []
        server_group_dict['stock_server_list'] = []
        server_group_dict['calendar_server_list'] = []
        server_group_dict['tdf_server_list'] = []
        server_group_dict['oma_server_list'] = []
        server_group_dict['commodity_future_server_list'] = []
        server_group_dict['mktcenter_server_list'] = []
        server_group_dict['market_server_list'] = []
        server_group_dict['fix_server_list'] = []
        server_group_dict['ts_server_list'] = []
        server_group_dict['future_market_server'] = ''
        server_group_dict['etf_base_server'] = ''

        for (server_name, server_model) in server_model_dict.items():
            if server_model.type == 'trade_server':
                server_group_dict['trade_server_list'].append(server_name)
                if server_model.is_night_session:
                    server_group_dict['night_session_server_list'].append(
                        server_name)
                if server_model.is_cta_server:
                    server_group_dict['cta_server_list'].append(server_name)
                if server_model.is_calendar_server:
                    server_group_dict['calendar_server_list'].append(
                        server_name)
                if server_model.is_oma_server:
                    server_group_dict['oma_server_list'].append(server_name)
                if server_model.is_trade_future:
                    server_group_dict['commodity_future_server_list'].append(
                        server_name)

                if 'TDF' in server_model.market_source_type:
                    server_group_dict['tdf_server_list'].append(server_name)
                if server_model.market_file_template is not None and server_model.market_file_template != '':
                    server_group_dict['mktcenter_server_list'].append(
                        server_name)
                if server_model.data_source_type != '':
                    server_group_dict['market_server_list'].append(server_name)

                if server_model.data_source_type == 'CTP':
                    server_group_dict['future_market_server'] = server_name
                if server_model.etf_base_folder is not None and server_model.etf_base_folder != '':
                    server_group_dict['etf_base_server'] = server_name

            if server_model.type == 'deposit_server':
                server_group_dict['deposit_server_list'].append(server_name)

            if server_model.type in ('trade_server', 'deposit_server'
                                     ) and server_model.is_trade_stock:
                server_group_dict['stock_server_list'].append(server_name)

        # 缓存账户和策略账户的数据
        server_account_dict = dict()
        server_pf_account_dict = dict()
        for (server_name, server_model) in server_model_dict.items():
            if server_model.type in ('trade_server', 'deposit_server'):
                server_account_dict[server_name] = []
                server_pf_account_dict[server_name] = []
                session_portfolio = server_model.get_db_session('portfolio')
                for real_account_db in session_portfolio.query(RealAccount):
                    server_account_dict[server_name].append(real_account_db)

                for pf_account_db in session_portfolio.query(PfAccount):
                    server_pf_account_dict[server_name].append(pf_account_db)
                session_portfolio.close()

        last_day = datetime.datetime.now() + datetime.timedelta(days=-1)
        while last_day.strftime('%Y-%m-%d') in holiday_list:
            last_day = last_day + datetime.timedelta(days=-1)
        filter_day_str = last_day.strftime('%Y%m%d')
        stock_market_data_dict = get_daily_data(
            filter_day_str, ["est_pe_fy1", "market_value"]).to_dict('index')
        stock_basic_data_dict = get_basic_info_data().to_dict('index')
        for (symbol, stock_info_dict) in stock_basic_data_dict.items():
            if symbol in stock_market_data_dict:
                stock_info_dict['est_pe_fy1'] = stock_market_data_dict[symbol][
                    'est_pe_fy1']
                stock_info_dict['market_value'] = stock_market_data_dict[
                    symbol]['market_value']
            stock_basic_data_dict[symbol] = stock_info_dict

        return eod_config_dict, email_dict, server_dict, server_group_dict, server_account_dict, server_pf_account_dict,\
    stock_basic_data_dict