from flask import request, Response, render_template, session, url_for, redirect
from crysadm import app, r_session
from auth import requires_admin, requires_auth
from datetime import datetime, timedelta
import json
import socket
import struct
# 获取前一日收益
def __get_yesterday_pdc(username):
today = datetime.now()
month_start_date = datetime(
year=today.year, month=today.month, day=1).date()
week_start_date = (today + timedelta(days=-today.weekday())).date()
begin_date = month_start_date if month_start_date < week_start_date else week_start_date
begin_date = begin_date + timedelta(days=-1)
yesterday_m_pdc = 0
yesterday_w_pdc = 0
yesterday_m_award_income = 0
yesterday_w_award_income = 0
while begin_date < today.date():
begin_date = begin_date + timedelta(days=1)
key = 'user_data:%s:%s' % (username, begin_date.strftime('%Y-%m-%d'))
b_data = r_session.get(key)
if b_data is None:
continue
history_data = json.loads(b_data.decode('utf-8'))
if begin_date >= month_start_date and begin_date < today.date():
yesterday_m_pdc += history_data.get('pdc')
if 'award_income' in history_data.keys():
yesterday_m_award_income += history_data.get('award_income')
if begin_date >= week_start_date and begin_date < today.date():
yesterday_w_pdc += history_data.get('pdc')
if 'award_income' in history_data.keys():
yesterday_w_award_income += history_data.get('award_income')
return yesterday_m_pdc, yesterday_w_pdc, yesterday_m_award_income, yesterday_w_award_income
# 显示控制面板
@app.route('/dashboard')
@requires_auth
def dashboard():
user = session.get('user_info')
username = user.get('username')
user_key = 'user:%s' % username
user_info = json.loads(r_session.get(user_key).decode('utf-8'))
return render_template('dashboard.html', user_info=user_info)
# 刷新控制面板数据
@app.route('/dashboard_data')
@requires_auth
def dashboard_data():
user = session.get('user_info')
username = user.get('username')
str_today = datetime.now().strftime('%Y-%m-%d')
key = 'user_data:%s:%s' % (username, str_today)
b_data = r_session.get(key)
user_key = '%s:%s' % ('user', user.get('username'))
user_info = json.loads(r_session.get(user_key).decode('utf-8'))
if b_data is None:
empty_data = {
'updated_time': '2015-01-01 00:00:00',
'm_pdc': 0,
'last_speed': 0,
'deploy_speed' : 0,
'w_pdc': 0,
'yesterday_m_pdc': 0,
'speed_stat': [],
'yesterday_w_pdc': 0,
'pdc': 0,
'balance': 0,
'w_award_income': 0
}
return Response(json.dumps(dict(today_data=empty_data)), mimetype='application/json')
today_data = json.loads(b_data.decode('utf-8'))
need_save = False
if today_data.get('yesterday_m_pdc') is None or today_data.get('yesterday_w_pdc') is None or today_data.get('yesterday_w_award_income') is None or today_data.get('yesterday_m_award_income') is None:
yesterday_m_pdc, yesterday_w_pdc, yesterday_m_award_income, yesterday_w_award_income = __get_yesterday_pdc(
username)
today_data['yesterday_m_pdc'] = yesterday_m_pdc
today_data['yesterday_w_pdc'] = yesterday_w_pdc
today_data['yesterday_m_award_income'] = yesterday_m_award_income
today_data['yesterday_w_award_income'] = yesterday_w_award_income
need_save = True
today_data['m_pdc'] = today_data.get(
'yesterday_m_pdc') + today_data.get('pdc')
today_data['w_pdc'] = today_data.get(
'yesterday_w_pdc') + today_data.get('pdc')
today_data['m_award_income'] = today_data.get(
'yesterday_m_award_income') + today_data.get('award_income')
today_data['w_award_income'] = today_data.get(
'yesterday_w_award_income') + today_data.get('award_income')
if need_save:
r_session.set(key, json.dumps(today_data))
today_data['pdc'] -= today_data.get('award_income')
if user_info.get('is_show_wpdc') is None or user_info.get('is_show_wpdc') == 0:
today_data['w_award_income'] = today_data.get('award_income')
elif user_info.get('is_show_wpdc') == 2:
today_data['w_award_income'] = today_data.get('m_award_income')
return Response(json.dumps(dict(today_data=today_data)), mimetype='application/json')
# 刷新控制面板图表速度数据
@app.route('/dashboard/speed_share')
@requires_auth
def dashboard_speed_share():
user = session.get('user_info')
username = user.get('username')
accounts_key = 'accounts:%s' % username
account_key = ['account:%s:%s:data' % (username, name.decode(
'utf-8')) for name in sorted(r_session.smembers(accounts_key))]
if len(account_key) == 0:
return Response(json.dumps(dict(data=[])), mimetype='application/json')
drilldown_data = []
for b_acct in r_session.mget(*['account:%s:%s:data' % (username, name.decode('utf-8'))
for name in sorted(r_session.smembers(accounts_key))]):
account_info = json.loads(b_acct.decode("utf-8"))
mid = str(account_info.get('privilege').get('mid'))
total_speed = 0
device_speed = []
for device_info in account_info.get('device_info'):
if device_info.get('status') != 'online':
continue
uploadspeed = int(int(device_info.get('dcdn_upload_speed')) / 1024)
#downloadspeed = int(int(device_info.get('dcdn_deploy_speed')) / 1024)
# total_speed += downloadspeed
total_speed += uploadspeed
device_speed.append(
dict(name=device_info.get('device_name'), value=uploadspeed))
# device_speed.append(dict(name=device_info.get('device_name'), value=total_speed))
# 显示在速度分析器圆形图表上的设备ID
drilldown_data.append(
dict(name='矿主ID:' + mid, value=total_speed, drilldown_data=device_speed))
#drilldown_data.append(dict(name='设备名:' + device_info.get('device_name'), value=total_speed, drilldown_data=device_speed))
return Response(json.dumps(dict(data=drilldown_data)), mimetype='application/json')
# 显示控制面板速度详情
@app.route('/dashboard/speed_detail')
@requires_auth
def dashboard_speed_detail():
user = session.get('user_info')
username = user.get('username')
accounts_key = 'accounts:%s' % username
account_key = ['account:%s:%s:data' % (username, name.decode(
'utf-8')) for name in sorted(r_session.smembers(accounts_key))]
if len(account_key) == 0:
return Response(json.dumps(dict(data=[])), mimetype='application/json')
device_speed = []
for b_acct in r_session.mget(*['account:%s:%s:data' % (username, name.decode('utf-8'))
for name in sorted(r_session.smembers(accounts_key))]):
account_info = json.loads(b_acct.decode("utf-8"))
for device_info in account_info.get('device_info'):
if device_info.get('status') != 'online':
continue
upload_speed = int(
int(device_info.get('dcdn_upload_speed')) / 1024)
deploy_speed = int(device_info.get('dcdn_download_speed') / 1024)
device_speed.append(dict(name=device_info.get(
'device_name'), upload_speed=upload_speed, deploy_speed=deploy_speed))
device_speed = sorted(device_speed, key=lambda k: k.get('name'))
categories = []
upload_series = dict(name='上传速度', data=[],
pointPadding=0.3, pointPlacement=-0.2)
deploy_series = dict(name='下载速度', data=[],
pointPadding=0.4, pointPlacement=-0.2)
for d_s in device_speed:
categories.append(d