first commit

This commit is contained in:
2026-01-16 22:20:18 +03:00
commit 5d437e5e28
56 changed files with 4463 additions and 0 deletions

207
monitor/views.py Normal file
View 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
})