This commit is contained in:
creslin 2018-06-13 07:43:42 +00:00 committed by GitHub
commit 9be5f7157d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 94 additions and 0 deletions

View File

@ -0,0 +1,83 @@
import threading
import time
import zerorpc
import logging
import json
from freqtrade.rpc.rpc import RPC
logger = logging.getLogger(__name__)
class LocalRPCControls(object):
"""
zeroRPC - allows local cmdline calls to super class in rpc.py
as used by Telegram.py
"""
def __init__(self, freqtrade) -> None:
"""
Initializes all enabled rpc modules
:param freqtrade: Instance of a freqtrade bot
:return: None
"""
self.freqtrade = freqtrade
self._config = freqtrade.config
# # Example of calling none serialed call
# # without decorator - left if as template while in dev for me
# def add_42(self, n):
# """ Add 42 to an integer argument to make it cooler, and return the
# result. """
# n = int(n)
# r = n + 42
# s = str(r)
# return s
@zerorpc.stream
def daily(self, timescale):
logger.info("LocalRPC - Daily Command Called")
timescale = int(timescale)
(error, stats) = RPC.rpc_daily_profit(self, timescale,
self._config['stake_currency'],
self._config['fiat_display_currency']
)
#Everything in stats to a string, serialised, then back to client.
stats = json.dumps(stats, indent=4, sort_keys=True, default=str)
return(error, stats)
class LocalRPCSuperWrap(RPC):
"""
Class to start thread with ZeroRPC running
"""
def __init__(self, freqtrade) -> None:
"""
Init the LocalRPCServer call, and init the super class RPC
:param freqtrade: Instance of a freqtrade bot
:return: None
"""
super().__init__(freqtrade)
""" Constructor
:type interval: int
:param interval: Check interval, in seconds
"""
self.interval = int(1)
thread = threading.Thread(target=self.run, args=(freqtrade,)) # extra comma as ref ! Tuple
thread.daemon = True # Daemonize thread
thread.start() # Start the execution
def run(self, freqtrade):
""" Method that runs forever """
self._config = freqtrade.config
# TODO add IP address / port to bind to in config.json and use in below.
while True:
# Do something
logger.info('Starting Local RPC Listener')
s = zerorpc.Server(LocalRPCControls(freqtrade))
s.bind("tcp://0.0.0.0:4242")
s.run()
time.sleep(self.interval)

View File

@ -3,8 +3,10 @@ This module contains class to manage RPC communications (Telegram, Slack, ...)
""" """
from typing import Any, List from typing import Any, List
import logging import logging
import time
from freqtrade.rpc.telegram import Telegram from freqtrade.rpc.telegram import Telegram
from freqtrade.rpc.local_rpc_server import LocalRPCSuperWrap
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -36,6 +38,12 @@ class RPCManager(object):
self.registered_modules.append('telegram') self.registered_modules.append('telegram')
self.telegram = Telegram(self.freqtrade) self.telegram = Telegram(self.freqtrade)
# Added another RPC client - for cmdline local client.
# Uses existing superclass RPC build for Telegram
if self.freqtrade.config['localrpc'].get('enabled', False):
self.localRPC = LocalRPCSuperWrap(self.freqtrade)
time.sleep(1)
def cleanup(self) -> None: def cleanup(self) -> None:
""" """
Stops all enabled rpc modules Stops all enabled rpc modules

View File

@ -23,3 +23,6 @@ coinmarketcap==5.0.3
# Required for plotting data # Required for plotting data
#plotly==2.3.0 #plotly==2.3.0
#Added for localRCP
zerorpc==0.6.1