DotaNoobs main site.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

113 lines
3.3 KiB

#!venv/bin/python
from flask import Flask
from flask.ext.script import Manager, Server
from flask.ext.migrate import Migrate, MigrateCommand
from app import app, db, models
#SQLALCHEMY_DATABASE_URI = 'mysql://root:$perwePP@localhost/dotanoobs'
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
def createTeamspeakInstance():
import ts3
s = ts3.TS3Server(app.config['TS3_HOST'], app.config['TS3_PORT'])
s.login(app.config['TS3_USERNAME'], app.config['TS3_PASSWORD'])
s.use(1)
return s
@manager.command
def install_cronjobs():
from os import path
from crontab import CronTab
cron = CronTab(user=True)
# Clear out existing jobs
cron.remove_all(comment='DOOBSAUTO')
def make_job(job):
p = path.realpath(__file__)
c = cron.new(command='{}/venv/bin/python {} {}'.format(path.split(p)[0],\
p, job), comment='DOOBSAUTO')
return c
# Create the jobs
winrate = make_job('calc_winrates')
ts3_move_afk = make_job('ts3_move_afk')
ts3_snapshot = make_job('ts3_snapshot')
ts3_award_points = make_job('ts3_award_points')
ts3_process_events = make_job('ts3_process_events')
# Set their frequency to run
winrate.every(1).day()
ts3_move_afk.every(app.config['MOVE_AFK_FREQUENCY']).minute()
ts3_snapshot.every(app.config['SNAPSHOT_FREQUENCY']).hour()
ts3_award_points.every(app.config['AWARD_POINTS_FREQUENCY']).minute()
ts3_process_events.every(app.config['PROCESS_EVENTS_FREQUENCY']).hour()
try:
assert True == winrate.is_valid()
assert True == ts3_move_afk.is_valid()
assert True == ts3_snapshot.is_valid()
assert True == ts3_award_points.is_valid()
assert True == ts3_process_events.is_valid()
except AssertionError as e:
print "Problem installing cronjobs: {}".format(e)
else:
cron.write()
print "Cron jobs written successfully"
@manager.command
def delete_cronjobs():
from os import path
from crontab import CronTab
cron = CronTab(user=True)
cron.remove_all(comment='DOOBSAUTO')
print "Existing cronjobs deleted successfully"
@manager.command
def admin(name):
u = models.User.query.filter_by(nickname=name).first()
if u and not u.admin:
u.admin = True
db.session.commit()
print "User {} has been granted admin access.".format(name)
@manager.command
def calc_winrates():
from app.analytics import calculate_winrates
calculate_winrates()
@manager.command
def ts3_move_afk():
from app.teamspeak import idle_mover
tsServer = createTeamspeakInstance()
idle_mover(tsServer)
@manager.command
def ts3_snapshot():
from app.teamspeak import store_active_data
tsServer = createTeamspeakInstance()
store_active_data(tsServer)
@manager.command
def ts3_award_points():
from app.teamspeak import award_idle_ts3_points
tsServer = createTeamspeakInstance()
award_idle_ts3_points(tsServer)
@manager.command
def ts3_process_events():
from app.teamspeak import process_ts3_events
tsServer = createTeamspeakInstance()
process_ts3_events(tsServer)
@manager.command
def forum_award_points():
for user in models.User.query.filter(models.User.forum_id != None).all():
user.update_forum_posts()
if __name__ == '__main__':
manager.run()