Esempio n. 1
0
def handle_collector(sock, header, body):
    logger.info('HANDLE COLLECTOR %s\n%s', header, body)

    if 'name' in body:
        slack.send_slack_message('Collector connected ' + body['name'])
    else:
        slack.send_slack_message('Unknown Collector connected ')

    client_manager.add_client(sock, header, body)
    if body['capability'] == message.CAPABILITY_TRADE or body[
            'capability'] == message.CAPABILITY_REQUEST_RESPONSE:
        gevent.sleep(1)
        logger.info('SEND TEST PACKET to %s', body['name'])
        test_header = stream_readwriter.create_header(message.REQUEST,
                                                      message.MARKET_STOCK,
                                                      message.DAY_DATA)
        test_header['code'] = 'A005930'
        test_header['from'] = date(2020, 6, 1)
        test_header['until'] = date(2020, 6, 4)
        test_body = []
        stream_write(sock, test_header, body)
    elif body['capability'] == message.CAPABILITY_COLLECT_SUBSCRIBE or body[
            'capability'] == message.CAPABILITY_TRADE_SUBSCRIBE:
        gevent.sleep(1)
        logger.info('SEND TEST PACKET to %s', body['name'])
        test_header = stream_readwriter.create_header(message.SUBSCRIBE,
                                                      message.MARKET_STOCK,
                                                      message.STOCK_DATA)
        test_header['code'] = 'ZZ12345'
        test_body = []
        stream_write(sock, test_header, body)
Esempio n. 2
0
def check_time():
    while True:
        now = datetime.now()
        if now.hour >= 18 and now.minute >= 35:
            slack.send_slack_message('VI FOLLOWER DONE')
            sys.exit(0)
        gevent.sleep(60)
Esempio n. 3
0
def today_bull_record():
    while True:
        now = datetime.now()
        start_time = now.replace(hour=18, minute=5)
        if now > start_time:
            result = morning_client.get_past_day_data(
                'A005930', date(now.year, now.month, now.day),
                date(now.year, now.month, now.day))
            print('today result len', len(result))
            if len(result) == 1:
                break

        gevent.sleep(60)

    slack.send_slack_message('VI FOLLOWER COLLECT TODAY BULL START')
    now = datetime.now()
    now_date = now.year * 10000 + now.month * 100 + now.day
    db_collection = MongoClient(db.HOME_MONGO_ADDRESS).trade_alarm
    tdata = list(db_collection['yamount'].find({'date': now_date}))
    if len(tdata) == 0:
        market_code = morning_client.get_all_market_code()
        today_list = get_day_data(now, market_code)
        today_list = sorted(today_list,
                            key=lambda x: x['amount'],
                            reverse=True)
        today_list = today_list[:1000]
        codes = [c['code'] for c in today_list]
        db_collection['yamount'].insert_one({'date': now_date, 'codes': codes})

    record_uni_data()
    slack.send_slack_message('VI FOLLOWER COLLECT TODAY BULL DONE')
Esempio n. 4
0
 def send_messages(messages, slack_chat_id):
     for message in messages:
         send_slack_message(
             message,
             slack_chat_id,
             username='******',
             icon_emoji=':gooddogie:',
         )
Esempio n. 5
0
def start_vi_follower():
    global db_collection

    slack.send_slack_message('START VI FOLLOWER')
    db_collection = MongoClient(db.HOME_MONGO_ADDRESS).trade_alarm

    market_code = morning_client.get_all_market_code()
    for m in market_code:  # for caching company name in server
        morning_client.code_to_name(m)

    yesterday = holidays.get_yesterday(datetime.now())
    yesterday_date = yesterday.year * 10000 + yesterday.month * 100 + yesterday.day
    ydata = list(db_collection['yamount'].find({'date': yesterday_date}))

    if len(ydata) == 0:
        yesterday_list = get_day_data(yesterday, market_code)
        yesterday_list = sorted(yesterday_list,
                                key=lambda x: x['amount'],
                                reverse=True)
        yesterday_list = yesterday_list[:1000]
        codes = [c['code'] for c in yesterday_list]
        db_collection['yamount'].insert_one({
            'date': yesterday_list[0]['0'],
            'codes': codes
        })
    else:
        codes = ydata[0]['codes']

    if len(codes) == 0:
        print('Critical Error, No CODES')
        sys.exit(0)

    followers = []
    for code in codes:
        sf = stock_follower.StockFollower(morning_client.get_reader(),
                                          db_collection, code)
        sf.subscribe_at_startup()
        followers.append(sf)

    kosdaq_index = stock_follower.StockFollower(morning_client.get_reader(),
                                                db_collection, 'U201')
    kosdaq_index.subscribe_at_startup()
    followers.append(kosdaq_index)

    kospi_index = stock_follower.StockFollower(morning_client.get_reader(),
                                               db_collection, 'U001')
    kospi_index.subscribe_at_startup()
    followers.append(kospi_index)

    print('Start Listening...')
    slack.send_slack_message('START LISTENING')
    stock_api.subscribe_alarm(morning_client.get_reader(), vi_handler)

    time_check_thread = gevent.spawn(check_time)
    today_bull_record_thread = gevent.spawn(today_bull_record)
    gevent.joinall([time_check_thread, today_bull_record_thread])
Esempio n. 6
0
def start_server(run_vbox):
    global server
    logger.info('Start stream server')
    slack.send_slack_message('Start API Server')
    server = StreamServer((message.SERVER_IP, message.CLIENT_SOCKET_PORT),
                          handle)

    if run_vbox:
        gevent.spawn(vbox_control)

    server.serve_forever()
    logger.info('Start stream server DONE')
    slack.send_slack_message('API Server Finished')
    sys.exit(0)
Esempio n. 7
0
    def handle_disconnect(self, sock):
        logger.warning('HANDLE DISCONNECT: CollectorList')
        collector = None
        for c in self.collectors:
            if c.sock == sock:
                logger.warning('Collector Removed')
                collector = c
                slack.send_slack_message('Collector REMOVED:' +
                                         c.get_collector_name())
                break

        if collector is not None:
            # TODO: Notify collector disconnected events to clients
            # Remove subscribes in SubsbscribeClient
            self.collectors.remove(collector)
Esempio n. 8
0
    def doing(cls, start_time, end_time):
        # 累计昨天成交
        status = Order.Status.PAID.value
        today_sum = Order.objects.filter(
            status=status, updated_at__gt=end_time,
            updated_at__lt=start_time).aggregate(sum=Sum('total_fee'))['sum']
        if not today_sum:
            today_sum = 0

        # 累计所有成交
        total_sum = Order.objects.filter(status=status).aggregate(
            sum=Sum('total_fee'))['sum']
        if not total_sum:
            total_sum = 0

        # 发送slack统计消息
        text = f'昨天充值金额: {today_sum/100} 元, 历史累计充值金额: {total_sum/100} 元'
        send_slack_message(text=text)
Esempio n. 9
0
    def handle_disconnect(self, sock):
        logger.warning('ClientManager handle disconnect')
        cybos_collectors = self.get_vendor_collector(message.CYBOS)
        kiwoom_collectors = self.get_vendor_collector(message.KIWOOM)
        for c in cybos_collectors:
            if c.sock == sock:
                self._handle_collector_disconnection(sock)
                logger.warning('Remove collector: ' + c.get_name())
                slack.send_slack_message('Collector removed:' + c.get_name())

        for c in kiwoom_collectors:
            if c.sock == sock:
                self._handle_collector_disconnection(sock)
                logger.warning('Remove collector: ' + c.get_name())
                slack.send_slack_message('Collector removed:' + c.get_name())

        self._handle_code_subscribe_info_disconnection(sock)
        self._handle_trade_subscribe_disconnection(sock)
Esempio n. 10
0
def send_slack_message(msg):
    if SEND_SLACK:
        slack.send_slack_message(msg)
Esempio n. 11
0
    stories = pivotal.get_stories(project_id, update_since)
    if len(stories) == 0:
        project_no_stories.append(project_id)
        continue
    # get printable strings
    printable_stories = get_printable_stories(
        stories, pivotal.get_project_membership(project_id))
    slack_message = "*<https://www.pivotaltracker.com/n/projects/%d|%s>*\n" % (
        project['id'], project['name'])
    # compose slack message
    for ps in printable_stories:
        slack_message += "%s\n\n" % ps
    slack_message += "\n\n"
    # send message to Slack channel if specified; print to stdout otherwise
    if len(slack_channel) > 0:
        send_slack_message(slack_token, slack_channel, slack_message)
        send_slack_message(slack_token, slack_channel, "#" * 25)
    else:
        print(slack_message)
        print("#" * 25)

for project_id in project_no_stories:
    project = pivotal.get_project(project_id)
    slack_message = "*<https://www.pivotaltracker.com/n/projects/%d|%s>*\n" % (
        project['id'], project['name'])

    if len(slack_channel) > 0:
        send_slack_message(slack_token, slack_channel, slack_message)
        send_slack_message(slack_token, slack_channel, "*no stories*")
        send_slack_message(slack_token, slack_channel, "#" * 25)
    else: