diff --git a/core/tasks.py b/core/tasks.py index 58bc15a..e66540b 100644 --- a/core/tasks.py +++ b/core/tasks.py @@ -1,3 +1,4 @@ +from requests import get as r_get from logging import getLogger from huey import crontab from huey.contrib.djhuey import periodic_task @@ -8,10 +9,37 @@ from core.monero import AuctionDaemon, AuctionWallet logger = getLogger('django.server') -@periodic_task(crontab(minute='*')) +@periodic_task(crontab(minute='*/8')) def retrieve_daemon_stats(): logger.info('[INFO] Retrieving daemon statistics') ad = AuctionDaemon() if ad.connected: daemon_info = ad.daemon.info() cache.set('daemon_info', daemon_info, settings.CACHE_TTL) + +@periodic_task(crontab(minute='*/20')) +def retrieve_monero_stats(): + logger.info('[INFO] Retrieve Monero market statistics from Coin Gecko') + data = { + 'localization': False, + 'tickers': False, + 'market_data': True, + 'community_data': False, + 'developer_data': False, + 'sparkline': False + } + headers = { + 'accept': 'application/json' + } + r = r_get('https://api.coingecko.com/api/v3/coins/monero', headers=headers, data=data) + monero_info = { + 'genesis_date': r.json()['genesis_date'], + 'market_cap_rank': r.json()['market_cap_rank'], + 'current_price': r.json()['market_data']['current_price']['usd'], + 'market_cap': r.json()['market_data']['market_cap']['usd'], + 'market_cap_rank': r.json()['market_data']['market_cap_rank'], + 'total_volume': r.json()['market_data']['total_volume']['usd'], + 'last_updated': r.json()['last_updated'] + } + logger.info(monero_info) + cache.set('monero_info', monero_info, settings.CACHE_TTL) diff --git a/core/views.py b/core/views.py index ecfca8b..979d2c3 100644 --- a/core/views.py +++ b/core/views.py @@ -10,15 +10,19 @@ from core.monero import AuctionDaemon, AuctionWallet def home(request): daemon_info = cache.get('daemon_info', None) + monero_info = cache.get('monero_info', None) if daemon_info is None: d = AuctionDaemon() if d.connected: - daemon_info = AuctionDaemon().daemon.info() - else: - daemon_info = False + daemon_info = d.daemon.info() + + context = { + 'daemon_info': daemon_info, + 'monero_info': monero_info + } - return render(request, 'home.html', {'daemon_info': daemon_info}) + return render(request, 'home.html', context) def health(request): daemon = AuctionDaemon() diff --git a/web/templates/home.html b/web/templates/home.html index ae21a13..2373039 100644 --- a/web/templates/home.html +++ b/web/templates/home.html @@ -46,6 +46,28 @@

Difficulty:
{{ daemon_info.difficulty }}

+ {% if monero_info %} +
+
+

Genesis Date:
{{ monero_info.genesis_date }}

+
+
+

Market Cap Rank:
{{ monero_info.market_cap_rank }}

+
+
+

Current Price (USD):
$ {{ monero_info.current_price }}

+
+
+

Market Cap (USD):
{{ monero_info.market_cap }}

+
+
+

Total Volume (USD):
$ {{ monero_info.total_volume }}

+
+
+

Last Updated:
{{ monero_info.last_updated }}

+
+
+ {% endif %} {% else %}

Daemon is not connected; statistics unavailable.

{% endif %}