Пример #1
0
#раз в сутки проверяет нет ли аккаунтов с неоплаченными проксями
#если такие нашлись - отвязывает от них проксю и оповещает об этом пользователя смской
#также оповещает за неделю до истечения даты проксей

__author__ = "esemi"

import logging

import config
import db_operations
from sender import Sender

if __name__ == "__main__":

    config.initLog('proxy_billing')
    db = db_operations.DB()

    #освобождение проксей
    accounts = db.getAccountsWithExpiredProxy()
    logging.info("found %d account with expired proxy" % len(accounts))

    sender = Sender(db)
    for account in accounts:
        logging.info("process account %s" % account)

        acc = db.getAccount(account['id'])
        if acc is None:
            logging.error('аккаунт не найден')
            continue
Пример #2
0
import sys
import logging
import time
import config
from collections import Counter


#каждую ночь обновляет прокси с сайта поставщика
#пишет ошибки, если удалили проксю, которую ктото использует (подсеть забиндена на аккаунт)


def parseNetwork(proxy):
    return u'.'.join(proxy.split('.')[0:3])

if __name__ == "__main__":
    config.initLog("proxy_update")
    logging.info("Started %s" % time.strftime("%H:%M:%S %d.%m.%Y"))

    try:
        newProxy = set([unicode(i.strip()) for i in urllib2.urlopen("http://www.billingproxy.net/usergui/tmp/%s8080.txt" % config.PROXY_USER, timeout=20)])
    except urllib2.HTTPError:
        logging.error('http error')
        sys.exit()

    logging.info("found %d proxy" % len(newProxy))
    if len(newProxy) < 70 :
        logging.warning('short list?')
        sys.exit()

    db = db_operations.DB()
Пример #3
0
#раз в сутки проверяет нет ли аккаунтов с неоплаченными проксями
#если такие нашлись - отвязывает от них проксю и оповещает об этом пользователя смской
#также оповещает за неделю до истечения даты проксей

__author__ = "esemi"

import logging

import config
import db_operations
from sender import Sender

if __name__ == "__main__":

    config.initLog('proxy_billing')
    db = db_operations.DB()

    #освобождение проксей
    accounts = db.getAccountsWithExpiredProxy()
    logging.info("found %d account with expired proxy" % len(accounts))

    sender = Sender(db)
    for account in accounts:
        logging.info("process account %s" % account)

        acc = db.getAccount(account['id'])
        if acc is None:
            logging.error('аккаунт не найден')
            continue
Пример #4
0
        'urllib',
        'FunWebProducts',
        'SeznamBot',
    )

    for bot in bots:
        if x.find(bot) != -1:
            return False
	
    if len(x) < 20 or len(x) > 250:
        return False

    return True

if __name__ == "__main__":
    config.initLog("agents_update", True)
    logging.info("Started %s" % time.strftime("%H:%M:%S %d.%m.%Y"))

    try:
        f = open(os.path.join(os.path.dirname(__file__), '..', 'docs', 'agents'), 'r')
    except IOError:
        logging.error('file not found')
        sys.exit()

    agents = set([i.strip() for i in f if filter_bot(i.strip())])
    logging.info("found %d unique agents" % len(agents))

    db = db_operations.DB()
    for agent in agents:
        try:
            db.addAgent(agent)
Пример #5
0
#Каждую минуту проверяет наличие заданий на проверку игроков и запускает их при наличии
#TODO переписать на демона (?)

__author__ = "esemi"

import logging
import os
import subprocess

import config
import db_operations

if __name__ == "__main__":

    config.initLog('run_check')

    #получаем таски на эту минуту
    db = db_operations.DB()
    tasks = db.getCurrentTasks()
    logging.info('найдено %d тасков' % len(tasks))

    for task in tasks:
        if task['status'] != 'wait':
            logging.error("задача уже обработана?! Как, кем, билиать!? (%s)" %
                          task)
            continue

        logging.info("запускаем проверку игрока %d (task id %d)" %
                     (task['player_id'], task['id']))
        subprocess.Popen([
Пример #6
0
            return '{"result":"-5"}'
        try:
            url = config.SMS_parameter %(phone,message)
            f = urllib2.urlopen(url)
            xmlstr = str(f.read())
            xmlstr = xmlstr.replace('\r', '')
            xmlstr = xmlstr.replace('\n', '')
            xmlstr = xmlstr.replace('\t', '')
            doc    = minidom.parseString(xmlstr)
            root   = doc.documentElement
            nodes  = root.getElementsByTagName('error')
            value  = nodes[0].childNodes[0].nodeValue
            result = value.encode('utf-8','ignore')
            return '{"result":"%s"}' %result
        except:
            logger.info("send_sms proc exception: %s " % traceback.format_exc())
            return '{"result":"-10"}'


conf = os.path.join(os.path.dirname(__file__), 'http.conf')
if __name__ == '__main__':
    config.initLog()
    cherrypy.tree.mount(mobile_server(), '/')
    cherrypy.quickstart(config=conf)
    if hasattr(cherrypy.engine, 'block'):
        cherrypy.engine.start()
        cherrypy.engine.block()
    else:
        cherrypy.server.quickstart()
        cherrypy.engine.start()
Пример #7
0
        #сменили тип нотификейшенов
        res = db.setAccountNotify(acc['id'], 'email')
        logging.debug("change type result %s" % res)

        message = "%s: balance < 0, notify type change to email" % acc['login']
        res1 = sender.sendNotify(acc, message, 'Notify type change by balance',
                                 'sms')
        res2 = sender.sendNotify(acc, message, 'Notify type change by balance',
                                 'email')
        logging.debug('result sms - %s; email - %s' % (res1, res2))
        if res1 is not True or res2 is not True:
            logging.error(res1)
            logging.error(res2)
            continue

        logging.info('success notification of change notify type')

    return len(accounts)


if __name__ == "__main__":

    config.initLog('notify_billing')
    db = db_operations.DB()

    res = changeNotifyTypeByBalance(db)
    logging.info("обработано %d аккаунтов" % res)

    db.close()
Пример #8
0
    if x < 0: x = 0
    if x > len: x = len

    return x

def exit(try_count=0, task_result='fail'):
    global DB, TASK_ID
    logging.info("End %s" % time.strftime('%H:%M:%S %d.%m.%Y'))
    if DB is not None:
        DB.setTaskCompleted(TASK_ID,task_result,try_count)
        DB.close()
    QApplication.exit()
    sys.exit()

if __name__ == "__main__":
    config.initLog("checker")

    logging.info("Started %s" % time.strftime("%H:%M:%S %d.%m.%Y"))

    parser = OptionParser()
    parser.add_option("-t", '--task', type='int', dest='task_id', help='task id for check red button')
    (options, args) = parser.parse_args()

    if options.task_id is None:
        logging.error("task id not set")
        exit()

    DB = db_operations.DB()
    TASK_ID = options.task_id

    logging.info("task_id is %d" % TASK_ID)
Пример #9
0
    else:
        end = last_check['date'] + maxdelta
    logging.debug("исходное окно %s - %s" % (begin, end))

    segment = end - begin

    factor = random.betavariate(3, 1.2)
    result_data = begin + timedelta(seconds=factor * segment.seconds)
    logging.debug("окно от %s до %s; множитель %s; итоговый отступ %s" %
                  (begin, end, factor, result_data))

    return result_data


if __name__ == "__main__":
    config.initLog('sheduler')
    db = db_operations.DB()

    monitoring_players = db.getMonitoringPlayers()

    for player in monitoring_players:
        logging.info("взяли игрока %s" % player)

        if db.isRequireTaskByPlayer(player['player_id']):
            last_task = db.getLastTaskByPlayer(player['player_id'])
            logging.info("last checked %s, interval %d hours" %
                         (last_task, player['check_interval']))

            check_date = compute_next_check_date(player['check_interval'],
                                                 last_task)
            logging.info("next check date %s" % check_date)
Пример #10
0
            'ids': [a['attack_id'] for a in v],
            'message': createMessage(v)
        })
    return result


def exit():
    global db
    logging.info("End %s" % time.strftime('%H:%M:%S %d.%m.%Y'))
    db.close()
    sys.exit()


if __name__ == "__main__":

    config.initLog('sender')

    db = db_operations.DB()

    #сменили тип оповещений на аккаунтах с отрицательным балансом
    res = changeNotifyTypeByBalance(db)
    logging.info("обработано %d аккаунтов" % res)

    #взяли атаки для оповещения
    attack = db.getAttackForNotification()
    logging.info('Найдено %d атак для уведомления' % len(attack))

    if len(attack) == 0:
        exit()

    #сжали до одного толстого сообщения по каждому игроку
Пример #11
0
    password_mgr.add_password(None, url, user, password)
    proxy_handler = urllib2.ProxyHandler({'http': url})
    proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)
    return urllib2.build_opener(proxy_handler, proxy_auth_handler)

def test_network(urls):
    try:
        for url in urls:
            urllib2.urlopen(url, timeout=10)
    except Exception, err:
        logging.error('network error %s' % str(err))
        return False
    return True

if __name__ == "__main__":
    config.initLog("proxy_check")
    logging.info("Started %s" % time.strftime("%H:%M:%S %d.%m.%Y"))


    db = db_operations.DB()
    proxyList = list(db.getProxy())
    logging.info("found %d proxy" % len(proxyList))

    shuffle(proxyList)

    for num, proxy in enumerate(proxyList):
        urls = ['http://ya.ru/','http://google.de/']
        if not test_network(urls): continue

        logging.info("%d - %s" % (num,proxy['proxy']))
        opener = get_proxy_opener(proxy['proxy'], proxy['user'], proxy['pass'])
Пример #12
0
    return x


def exit(try_count=0, task_result='fail'):
    global DB, TASK_ID
    logging.info("End %s" % time.strftime('%H:%M:%S %d.%m.%Y'))
    if DB is not None:
        DB.setTaskCompleted(TASK_ID, task_result, try_count)
        DB.close()
    QApplication.exit()
    sys.exit()


if __name__ == "__main__":
    config.initLog("checker")

    logging.info("Started %s" % time.strftime("%H:%M:%S %d.%m.%Y"))

    parser = OptionParser()
    parser.add_option("-t",
                      '--task',
                      type='int',
                      dest='task_id',
                      help='task id for check red button')
    (options, args) = parser.parse_args()

    if options.task_id is None:
        logging.error("task id not set")
        exit()
Пример #13
0
    if last_check is None or (datetime.now()-last_check['date']) > maxdelta :
        end = datetime.now() + timedelta(hours=config.SHEDULER_MIN_HOURS_CHECK)
    else:
        end = last_check['date'] + maxdelta
    logging.debug("исходное окно %s - %s" % (begin, end))

    segment = end - begin

    factor = random.betavariate(3, 1.2)
    result_data = begin + timedelta( seconds = factor * segment.seconds )
    logging.debug("окно от %s до %s; множитель %s; итоговый отступ %s" % (begin, end, factor, result_data) )
    
    return result_data

if __name__ == "__main__":
    config.initLog('sheduler')
    db = db_operations.DB()

    monitoring_players = db.getMonitoringPlayers()

    for player in monitoring_players:
        logging.info("взяли игрока %s" % player)

        if db.isRequireTaskByPlayer(player['player_id']):
            last_task = db.getLastTaskByPlayer(player['player_id'])
            logging.info("last checked %s, interval %d hours" % (last_task, player['check_interval']))

            check_date = compute_next_check_date(player['check_interval'], last_task)
            logging.info("next check date %s" % check_date)

            db.addNewTask(player['player_id'], check_date)
Пример #14
0
        'FunWebProducts',
        'SeznamBot',
    )

    for bot in bots:
        if x.find(bot) != -1:
            return False

    if len(x) < 20 or len(x) > 250:
        return False

    return True


if __name__ == "__main__":
    config.initLog("agents_update", True)
    logging.info("Started %s" % time.strftime("%H:%M:%S %d.%m.%Y"))

    try:
        f = open(
            os.path.join(os.path.dirname(__file__), '..', 'docs', 'agents'),
            'r')
    except IOError:
        logging.error('file not found')
        sys.exit()

    agents = set([i.strip() for i in f if filter_bot(i.strip())])
    logging.info("found %d unique agents" % len(agents))

    db = db_operations.DB()
    for agent in agents:
Пример #15
0
        if acc is None:
            logging.error('аккаунт не найден')
            continue

        #сменили тип нотификейшенов
        res = db.setAccountNotify(acc['id'], 'email')
        logging.debug("change type result %s" % res)

        message = "%s: balance < 0, notify type change to email" % acc['login']
        res1 = sender.sendNotify(acc, message, 'Notify type change by balance', 'sms')
        res2 = sender.sendNotify(acc, message, 'Notify type change by balance', 'email')
        logging.debug('result sms - %s; email - %s' % (res1, res2))
        if res1 is not True or res2 is not True:
            logging.error(res1)
            logging.error(res2)
            continue

        logging.info('success notification of change notify type')

    return len(accounts)

if __name__ == "__main__":

    config.initLog('notify_billing')
    db = db_operations.DB()

    res = changeNotifyTypeByBalance(db)
    logging.info("обработано %d аккаунтов" % res)

    db.close()
Пример #16
0
    
    result = []
    for k, v in groupby(attack, lambda x: x['player_id']):
        v = list(v)
        result.append({ 'acc':v[0]['acc_id'], 'ids':[a['attack_id'] for a in v], 'message':createMessage(v)})
    return result

def exit():
    global db
    logging.info("End %s" % time.strftime('%H:%M:%S %d.%m.%Y'))
    db.close()
    sys.exit()

if __name__ == "__main__":

    config.initLog('sender')

    db = db_operations.DB()

    #сменили тип оповещений на аккаунтах с отрицательным балансом
    res = changeNotifyTypeByBalance(db)
    logging.info("обработано %d аккаунтов" % res)

    #взяли атаки для оповещения
    attack = db.getAttackForNotification()
    logging.info('Найдено %d атак для уведомления' % len(attack))

    if len(attack) == 0:
        exit()

    #сжали до одного толстого сообщения по каждому игроку
Пример #17
0
#Каждую минуту проверяет наличие заданий на проверку игроков и запускает их при наличии
#TODO переписать на демона (?)

__author__ = "esemi"

import logging
import os
import subprocess

import config
import db_operations

if __name__ == "__main__":

    config.initLog('run_check')

    #получаем таски на эту минуту
    db = db_operations.DB()
    tasks = db.getCurrentTasks()
    logging.info('найдено %d тасков' % len(tasks))
    
    for task in tasks:
        if task['status'] != 'wait':
            logging.error("задача уже обработана?! Как, кем, билиать!? (%s)" % task)
            continue

        logging.info("запускаем проверку игрока %d (task id %d)" % (task['player_id'], task['id']) )
        subprocess.Popen(['python', os.path.join(os.path.dirname(__file__), 'checker.py'), '--task', str(task['id'])])

    db.close()