first commit
This commit is contained in:
207
monitor/views.py
Normal file
207
monitor/views.py
Normal file
@@ -0,0 +1,207 @@
|
||||
from django.shortcuts import render
|
||||
from django.http import JsonResponse
|
||||
from .models import BitcoinPrice
|
||||
from datetime import datetime, timezone
|
||||
import requests
|
||||
|
||||
|
||||
|
||||
|
||||
def fetch_bitcoin_price(request):
|
||||
"""Fetch current Bitcoin price from CoinGecko API and save it."""
|
||||
try:
|
||||
# Simple API call to CoinGecko
|
||||
response = requests.get(
|
||||
'https://api.coingecko.com/api/v3/simple/price',
|
||||
params={'ids': 'bitcoin', 'vs_currencies': 'usd'}
|
||||
)
|
||||
data = response.json()
|
||||
|
||||
if 'bitcoin' in data:
|
||||
price = data['bitcoin']['usd']
|
||||
|
||||
# Save to database
|
||||
BitcoinPrice.objects.create(
|
||||
price_usd=price,
|
||||
timestamp=datetime.now(timezone.utc)
|
||||
)
|
||||
analyzer = MarketAnalyzer()
|
||||
analyzer.analyze_market('hourly')
|
||||
return JsonResponse({
|
||||
'success': True,
|
||||
'price': price,
|
||||
'message': f'Price saved: ${price}'
|
||||
})
|
||||
else:
|
||||
return JsonResponse({
|
||||
'success': False,
|
||||
'message': 'Failed to fetch price'
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
return JsonResponse({
|
||||
'success': False,
|
||||
'message': f'Error: {str(e)}'
|
||||
})
|
||||
|
||||
from monitor.services.analyzer import MarketAnalyzer
|
||||
from monitor.models import MarketAnalysis # Add this import
|
||||
|
||||
|
||||
# Add new view functions
|
||||
def run_analysis(request):
|
||||
"""Run market analysis."""
|
||||
analyzer = MarketAnalyzer(threshold_percent=15.0)
|
||||
|
||||
# Run analysis for different periods
|
||||
analyses = []
|
||||
for period in ['hourly', 'daily', 'yearly']:
|
||||
analysis = analyzer.analyze_market(period)
|
||||
if analysis:
|
||||
analyses.append(analysis)
|
||||
|
||||
context = {
|
||||
'analyses': analyses,
|
||||
'message': f'Ran {len(analyses)} analyses successfully',
|
||||
}
|
||||
|
||||
return render(request, 'monitor/analysis_result.html', context)
|
||||
|
||||
|
||||
def view_analysis(request):
|
||||
"""View latest market analysis."""
|
||||
analyzer = MarketAnalyzer(threshold_percent=15.0)
|
||||
|
||||
# Get latest analyses
|
||||
hourly = analyzer.get_latest_analysis('hourly')
|
||||
daily = analyzer.get_latest_analysis('daily')
|
||||
yearly = analyzer.get_latest_analysis('yearly')
|
||||
|
||||
# Get analysis summary
|
||||
summary = analyzer.get_analysis_summary()
|
||||
|
||||
# Get all analyses for the table
|
||||
all_analyses = MarketAnalysis.objects.all().order_by('-timestamp')[:20]
|
||||
|
||||
context = {
|
||||
'hourly_analysis': hourly,
|
||||
'daily_analysis': daily,
|
||||
'yearly_analysis': yearly,
|
||||
'summary': summary,
|
||||
'all_analyses': all_analyses,
|
||||
}
|
||||
|
||||
return render(request, 'monitor/view_analysis.html', context)
|
||||
|
||||
|
||||
# Update bitcoin_data view to include analysis
|
||||
def bitcoin_data(request):
|
||||
"""Display Bitcoin data from database."""
|
||||
# Get latest 10 prices
|
||||
latest_prices = BitcoinPrice.objects.all()[:10]
|
||||
|
||||
# Calculate basic stats if we have data
|
||||
if latest_prices:
|
||||
latest_price = latest_prices[0]
|
||||
stats = {
|
||||
'latest_price': latest_price.price_usd,
|
||||
'latest_time': latest_price.timestamp,
|
||||
'total_records': BitcoinPrice.objects.count(),
|
||||
}
|
||||
|
||||
# Get latest hourly analysis
|
||||
analyzer = MarketAnalyzer()
|
||||
hourly_analysis = analyzer.get_latest_analysis('hourly')
|
||||
else:
|
||||
stats = {
|
||||
'latest_price': 'No data',
|
||||
'latest_time': 'No data',
|
||||
'total_records': 0,
|
||||
}
|
||||
hourly_analysis = None
|
||||
|
||||
return render(request, 'monitor/bitcoin_data.html', {
|
||||
'prices': latest_prices,
|
||||
'stats': stats,
|
||||
'analysis': hourly_analysis, # Add analysis to context
|
||||
})
|
||||
# Add these imports at the top
|
||||
|
||||
|
||||
# Add new view functions
|
||||
def run_analysis(request):
|
||||
"""Run market analysis."""
|
||||
analyzer = MarketAnalyzer(threshold_percent=15.0)
|
||||
|
||||
# Run analysis for different periods
|
||||
analyses = []
|
||||
for period in ['hourly', 'daily', 'yearly']:
|
||||
analysis = analyzer.analyze_market(period)
|
||||
if analysis:
|
||||
analyses.append(analysis)
|
||||
|
||||
context = {
|
||||
'analyses': analyses,
|
||||
'message': f'Ran {len(analyses)} analyses successfully',
|
||||
}
|
||||
|
||||
return render(request, 'monitor/analysis_result.html', context)
|
||||
|
||||
|
||||
def view_analysis(request):
|
||||
"""View latest market analysis."""
|
||||
analyzer = MarketAnalyzer(threshold_percent=15.0)
|
||||
|
||||
# Get latest analyses
|
||||
hourly = analyzer.get_latest_analysis('hourly')
|
||||
daily = analyzer.get_latest_analysis('daily')
|
||||
yearly = analyzer.get_latest_analysis('yearly')
|
||||
|
||||
# Get analysis summary
|
||||
summary = analyzer.get_analysis_summary()
|
||||
|
||||
# Get all analyses for the table
|
||||
all_analyses = MarketAnalysis.objects.all().order_by('-timestamp')[:20]
|
||||
|
||||
context = {
|
||||
'hourly_analysis': hourly,
|
||||
'daily_analysis': daily,
|
||||
'yearly_analysis': yearly,
|
||||
'summary': summary,
|
||||
'all_analyses': all_analyses,
|
||||
}
|
||||
|
||||
return render(request, 'monitor/view_analysis.html', context)
|
||||
|
||||
|
||||
# Update bitcoin_data view to include analysis
|
||||
def bitcoin_data(request):
|
||||
"""Display Bitcoin data from database."""
|
||||
# Get latest 10 prices
|
||||
latest_prices = BitcoinPrice.objects.all()[:10]
|
||||
|
||||
# Calculate basic stats if we have data
|
||||
if latest_prices:
|
||||
latest_price = latest_prices[0]
|
||||
stats = {
|
||||
'latest_price': latest_price.price_usd,
|
||||
'latest_time': latest_price.timestamp,
|
||||
'total_records': BitcoinPrice.objects.count(),
|
||||
}
|
||||
|
||||
# Get latest hourly analysis
|
||||
analyzer = MarketAnalyzer()
|
||||
hourly_analysis = analyzer.get_latest_analysis('hourly')
|
||||
else:
|
||||
stats = {
|
||||
'latest_price': 'No data',
|
||||
'latest_time': 'No data',
|
||||
'total_records': 0,
|
||||
}
|
||||
hourly_analysis = None
|
||||
|
||||
return render(request, 'monitor/bitcoin_data.html', {
|
||||
'prices': latest_prices,
|
||||
'stats': stats,
|
||||
'analysis': hourly_analysis, # Add analysis to context
|
||||
})
|
||||
Reference in New Issue
Block a user