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)
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)
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')
def send_messages(messages, slack_chat_id): for message in messages: send_slack_message( message, slack_chat_id, username='******', icon_emoji=':gooddogie:', )
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])
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)
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)
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)
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)
def send_slack_message(msg): if SEND_SLACK: slack.send_slack_message(msg)
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: