def __init__(self, from_address, to_address, subject_prefix): self.factory = Sendmail(from_address) self.from_address = from_address self.to_address = to_address self.subject_prefix = subject_prefix self.alert_cache = collections.defaultdict(list) self.looping_call = LoopingCall(self.send_cached_alerts)
class Alerts(): def __init__(self, from_address, to_address, subject_prefix): self.factory = Sendmail(from_address) self.from_address = from_address self.to_address = to_address self.subject_prefix = subject_prefix self.alert_cache = collections.defaultdict(list) self.looping_call = LoopingCall(self.send_cached_alerts) def send_alert(self, message, subject, cache=True): if cache: self.alert_cache[subject].append(message) else: log.msg("Sending alert: %s/%s" % (subject, message)) self.factory.send_mail(message, subject=self.subject_prefix + " " + subject, to_address=self.to_address) def send_cached_alerts(self): for subject, messages in self.alert_cache.items(): self.send_alert('\n---\n'.join(messages), subject, cache=False) del self.alert_cache[subject] def start(self, time=60): self.looping_call.start(time, now=False)
def main(): log.startLogging(sys.stdout) session = database.make_session() safe_price_subscriber = connect_subscriber( config.get("safe_price_forwarder", "zmq_backend_address")) safe_price_subscriber.subscribe('') sendmail = Sendmail(config.get("riskmanager", "from_email")) accountant = AccountantProxy( "dealer", config.get("accountant", "riskmanager_export"), config.getint("accountant", "riskmanager_export_base_port")) riskmanager = RiskManager(session, sendmail, safe_price_subscriber, accountant) reactor.run()
def main(): log.startLogging(sys.stdout) accountant = AccountantProxy( "dealer", config.get("accountant", "cashier_export"), config.getint("accountant", "cashier_export_base_port")) session = db.make_session() bitcoin_conf = config.get("cashier", "bitcoin_conf") log.msg('connecting to bitcoin client') bitcoinrpc = {'BTC': BitcoinRpc(bitcoin_conf, 1)} compropago = Compropago(config.get("cashier", "compropago_key")) cold_wallet_period = config.getint("cashier", "cold_wallet_period") sendmail = Sendmail(config.get("administrator", "email")) minimum_confirmations = config.getint("cashier", "minimum_confirmations") alerts_proxy = AlertsProxy(config.get("alerts", "export")) bitgo_config = { 'use_production': not config.getboolean("cashier", "testnet"), 'client_id': config.get("bitgo", "client_id"), 'client_secret': config.get("bitgo", "client_secret") } bitgo = BitGo(**bitgo_config) bitgo_private_key_file = config.get("cashier", "bitgo_private_key_file") cashier = Cashier( session, accountant, bitcoinrpc, compropago, cold_wallet_period=cold_wallet_period, sendmail=sendmail, minimum_confirmations=minimum_confirmations, alerts=alerts_proxy, bitgo=bitgo, bitgo_private_key_file=bitgo_private_key_file, testnet=config.getboolean("cashier", "testnet"), ) administrator_export = AdministratorExport(cashier) accountant_export = AccountantExport(cashier) webserver_export = WebserverExport(cashier) watchdog(config.get("watchdog", "cashier")) router_share_async(administrator_export, config.get("cashier", "administrator_export")) pull_share_async(accountant_export, config.get("cashier", "accountant_export")) router_share_async(webserver_export, config.get("cashier", "webserver_export")) public_server = Resource() public_server.putChild('compropago', CompropagoHook(cashier)) private_server = Resource() private_server.putChild('bitcoin', BitcoinNotify(cashier)) if config.getboolean("webserver", "ssl"): key = config.get("webserver", "ssl_key") cert = config.get("webserver", "ssl_cert") cert_chain = config.get("webserver", "ssl_cert_chain") contextFactory = ssl.ChainedOpenSSLContextFactory(key, cert_chain) reactor.listenSSL(config.getint("cashier", "public_port"), Site(public_server), contextFactory, interface=config.get("cashier", "public_interface")) else: reactor.listenTCP(config.getint("cashier", "public_port"), Site(public_server), interface=config.get("cashier", "public_interface")) reactor.listenTCP(config.getint("cashier", "private_port"), Site(private_server), interface=config.get("cashier", "private_interface")) reactor.run()