class IndexViewController(object): """Basic index view""" def __init__(self): self.log = Log(file_handler, self.__class__.__name__) def call(self): self.get_socket() return render_template("index.html", channel_href=config.channel_href) def get_socket(self): client = Client(config.api_key, config.api_secret) bm = BinanceSocketManager(client) bm.start_trade_socket("BTCUSDT", self.process_message) return bm.start() def process_message(self, msg): utime = str(msg.get("T"))[:10] ms = str(msg.get("T"))[-3:] dt = datetime.fromtimestamp(int(utime)).replace(microsecond=int(ms) * 1000) symbol = msg.get("s") price = "%.2f" % float(msg.get("p")) buffer_dict.update({dt: {"symbol": symbol, "price": price}}) delete_keys = [] for k in buffer_dict.keys(): if (dt - k).seconds > config.timeframe or (datetime.now() - k).seconds > config.timeframe: delete_keys.append(k) if delete_keys: for k in delete_keys: del buffer_dict[k] self.log.info("Deleted keys: %s" % delete_keys) prices = [p.get("price") for p in buffer_dict.values()] if prices: max_price = max(prices) min_price = min(prices[prices.index(max_price):]) drop_percent = (float(max_price) - float(min_price)) / float(max_price) if (drop_percent > config.percent_threshhold and drop_percent not in registered_drops.get("drops", []) and datetime.now() - dt).seconds < 5): self.send_notification(symbol, max_price, min_price, "{:.2%}".format(drop_percent)) PriceLog.create(symbol=symbol, max_price=max_price, min_price=min_price, drop_percent=round(drop_percent * 100, 2)) registered_drops.get("drops", []).append(drop_percent)
class ClearRegisteredDropsController(object): """Clears registered drops list""" def __init__(self): self.log = Log(file_handler, self.__class__.__name__) def call(self): now = datetime.now() delete_keys = [] for k in buffer_dict.keys(): if (now - k).seconds > config.timeframe: delete_keys.append(k) if delete_keys: for k in delete_keys: del buffer_dict[k] self.log.info("Deleted keys: %s" % delete_keys) if (now - registered_drops.get("last_clear_time")).seconds > config.timeframe + 2: self.log.info("Clearing registered drops %s" % registered_drops) registered_drops.get("drops", []).clear() registered_drops["last_clear_time"] = now return "Drops cleared." return "Drops clearing skipped."
# -*- coding:utf-8 -*- import os import logging import config from flask import Flask from misc import Log app = Flask(__name__) if not os.path.exists("logs"): os.mkdir("logs") file_handler = logging.FileHandler(config.log_config.get("filename")) file_handler.setLevel(config.log_config.get("level")) file_handler.setFormatter(config.log_config.get("format")) log = Log(file_handler, "Binance") log.info("Binance service started.") import views