|
@@ -2,16 +2,11 @@
|
|
|
|
|
|
from datetime import datetime, timedelta, timezone
|
|
from datetime import datetime, timedelta, timezone
|
|
|
|
|
|
-from sqlalchemy import or_, and_
|
|
|
|
from sqlalchemy.orm import joinedload
|
|
from sqlalchemy.orm import joinedload
|
|
|
|
|
|
from app import SESSION
|
|
from app import SESSION
|
|
from app.models import ResourceTrack, ResourceStat, Region
|
|
from app.models import ResourceTrack, ResourceStat, Region
|
|
|
|
|
|
-import pprint
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-print = pprint.PrettyPrinter().pprint
|
|
|
|
|
|
|
|
def save_resources(state_id, regions, resource_id):
|
|
def save_resources(state_id, regions, resource_id):
|
|
"""Save resources to database"""
|
|
"""Save resources to database"""
|
|
@@ -73,18 +68,6 @@ def get_resources(region_id, date, resource_type):
|
|
return new_resource
|
|
return new_resource
|
|
|
|
|
|
|
|
|
|
-def get_state_regions(state_id):
|
|
|
|
- """Get regions from state"""
|
|
|
|
- session = SESSION()
|
|
|
|
- state_regions = session.query(StateRegion) \
|
|
|
|
- .filter(and_(StateRegion.state_id == state_id, StateRegion.until_date_time == None)) \
|
|
|
|
- .all()
|
|
|
|
- regions = []
|
|
|
|
- for state_region in state_regions:
|
|
|
|
- regions.append(state_region.region)
|
|
|
|
- session.close()
|
|
|
|
- return regions
|
|
|
|
-
|
|
|
|
def _get_state_stat(session, state_id, resource_type, date_time):
|
|
def _get_state_stat(session, state_id, resource_type, date_time):
|
|
"""Get state stats from date"""
|
|
"""Get state stats from date"""
|
|
ten_minutes = timedelta(minutes=10)
|
|
ten_minutes = timedelta(minutes=10)
|
|
@@ -104,11 +87,6 @@ def _get_state_stat(session, state_id, resource_type, date_time):
|
|
def get_work_percentage(state_id, resource_type, end_date_time, hours, times):
|
|
def get_work_percentage(state_id, resource_type, end_date_time, hours, times):
|
|
"""Get work percentage for state in last x hours"""
|
|
"""Get work percentage for state in last x hours"""
|
|
end_date_time = end_date_time.replace(minute=0, second=0, microsecond=0)
|
|
end_date_time = end_date_time.replace(minute=0, second=0, microsecond=0)
|
|
- reset_date_time = end_date_time
|
|
|
|
- if reset_date_time.hour >= 18:
|
|
|
|
- reset_date_time = reset_date_time.replace(hour=18) + timedelta(1)
|
|
|
|
- else:
|
|
|
|
- reset_date_time = reset_date_time.replace(hour=18)
|
|
|
|
|
|
|
|
session = SESSION()
|
|
session = SESSION()
|
|
data = {
|
|
data = {
|
|
@@ -125,44 +103,46 @@ def get_work_percentage(state_id, resource_type, end_date_time, hours, times):
|
|
}
|
|
}
|
|
session.close()
|
|
session.close()
|
|
|
|
|
|
- print(data)
|
|
|
|
|
|
+ regions = {}
|
|
|
|
+ for region_id, stat in data[0]['stats'].items():
|
|
|
|
+ regions[region_id] = stat.region.name
|
|
|
|
|
|
for i in range(0, times):
|
|
for i in range(0, times):
|
|
data[i]['progress'] = {}
|
|
data[i]['progress'] = {}
|
|
- time_left = reset_date_time - data[i+1]['date']
|
|
|
|
- print('{} time left: {} uur'.format(data[i]['date'], time_left.seconds // 3600))
|
|
|
|
|
|
+ reset_date_time = data[i+1]['date']
|
|
|
|
+ if reset_date_time.hour >= 18:
|
|
|
|
+ reset_date_time = reset_date_time.replace(hour=18) + timedelta(1)
|
|
|
|
+ else:
|
|
|
|
+ reset_date_time = reset_date_time.replace(hour=18)
|
|
|
|
+ time_left = reset_date_time - data[i]['date']
|
|
|
|
+ if time_left.seconds != 0:
|
|
|
|
+ seconds_left = time_left.seconds
|
|
|
|
+ else:
|
|
|
|
+ seconds_left = 86400
|
|
|
|
+ # print('{} time left: {} uur'.format(data[i]['date'], seconds_left // 60))
|
|
for region_id, stat in data[i]['stats'].items():
|
|
for region_id, stat in data[i]['stats'].items():
|
|
- mined = data[i+1]['stats'][stat.region_id].total() - stat.total()
|
|
|
|
- required = stat.total() / (time_left.seconds / (hours * 3600))
|
|
|
|
- percentage = mined / required * 100 - 100
|
|
|
|
- print('{:4} left: {:3} mined: {:3} required: {:6.2f} percentage: {:6.2f}'.format(
|
|
|
|
- stat.region_id, stat.total(), mined, required, percentage
|
|
|
|
- ))
|
|
|
|
|
|
+ next_stat = data[i+1]['stats'][stat.region_id]
|
|
|
|
+ if seconds_left != 86400:
|
|
|
|
+ mined = next_stat.total() - stat.total()
|
|
|
|
+ required = next_stat.total() / (seconds_left / (hours * 3600))
|
|
|
|
+ else:
|
|
|
|
+ mined = 2500 + next_stat.explored - stat.total()
|
|
|
|
+ required = next_stat.total()
|
|
|
|
+ if required != 0:
|
|
|
|
+ percentage = (mined / required - 1) * 0.04 * next_stat.total()
|
|
|
|
+ else:
|
|
|
|
+ percentage = 0
|
|
|
|
+ # print('{:4} left: {:3} mined: {:3} required: {:6.2f} percentage: {:6.2f}'.format(
|
|
|
|
+ # stat.region_id, next_stat.total(), mined, required, percentage
|
|
|
|
+ # ))
|
|
data[i]['progress'][stat.region_id] = percentage
|
|
data[i]['progress'][stat.region_id] = percentage
|
|
- print('test')
|
|
|
|
|
|
|
|
|
|
+ message_text = ''
|
|
for date in data.values():
|
|
for date in data.values():
|
|
- # print(date)
|
|
|
|
- print(' ')
|
|
|
|
if 'progress' in date:
|
|
if 'progress' in date:
|
|
- for region_id, progress in date['progress'].items():
|
|
|
|
- print('{}: {:6.2f}'.format(
|
|
|
|
- region_id,
|
|
|
|
|
|
+ for region_id, progress in sorted(date['progress'].items(), key=lambda x: x[1]):
|
|
|
|
+ message_text += '{:21}: {:6.2f}\n'.format(
|
|
|
|
+ regions[region_id],
|
|
progress
|
|
progress
|
|
- ))
|
|
|
|
-
|
|
|
|
- exit()
|
|
|
|
-
|
|
|
|
- for i, stats in data:
|
|
|
|
- data[stat.region_id] = {
|
|
|
|
- 'name': stat.region.name,
|
|
|
|
- 'start_resource_left': stat.limit_left + stat.explored
|
|
|
|
- }
|
|
|
|
- for stat in end_resource_stats:
|
|
|
|
- data[stat.region_id]['end_resources_left'] = stat.limit_left + stat.explored
|
|
|
|
-
|
|
|
|
- for region_id, region in data.items():
|
|
|
|
- print(region_id)
|
|
|
|
- print(region)
|
|
|
|
-
|
|
|
|
- return data
|
|
|
|
|
|
+ )
|
|
|
|
+ return message_text
|