Beispiel #1
0
def generate_data():
    print("Starting blocks per wiki...")

    # get db names
    db_names = utils.get_db_names()
    conn = conn_manager.get_conn()
    data = []

    #get data for each wiki
    for dbname in db_names:
        try:
            conn.select_db(dbname)

            wiki = dbname
            avg_blocks_per_hour = get_avg_blocks_per_hour()
            total_active_autoblocks = get_total_active_blocks(True)
            total_active_blocks = get_total_active_blocks()
            block_length_distribution = get_block_length_distribution()
            block_reasons = get_common_block_reasons()
            perc_blocks_prevent_talk_page = get_blocks_prevent_talk_page()

            data.append(
                (wiki, avg_blocks_per_hour, total_active_blocks,
                 total_active_autoblocks, perc_blocks_prevent_talk_page,
                 block_length_distribution, block_reasons))
        except Exception as err:
            print('Something wrong with %s, %s' % (dbname, err))

    # create csv
    headers = ('Wiki', 'Avg blocks per hour', 'Total active blocks',
               'Total active autoblocks', '% blocks prevent edit talk page',
               'Block length distribution'
               'Common unblock reasons')
    utils.write_to_csv('blocks_per_wiki', headers, data)
Beispiel #2
0
def get_common_block_reasons():
    sql = """
    SELECT
        log_comment,
        COUNT(*) as total
    FROM logging_logindex
    WHERE log_action = 'block' AND log_type = 'block'
    %s
    GROUP BY log_comment
    ORDER BY total DESC
    """ % get_sql_time_frame('log_timestamp')

    conn = conn_manager.get_conn()
    with conn.cursor() as cursor:
        cursor.execute(sql)
        results = cursor.fetchall()

    reasons = None
    if results:
        # TODO: remove comment id <!-- 1234 -->
        reasons = ' | '.join([
            "({0}) {1}".format(val[1], str(val[0], 'utf-8'))
            if val[0] is not None else '' for val in results[:100]
        ])

    return reasons
Beispiel #3
0
def generate_data():
    print("Starting partial blocks...")
    data = []

    # get db names
    db_names = ['itwiki_p']
    conn = conn_manager.get_conn()

    #get data for each wiki
    for dbname in db_names:
        try:
            conn.select_db(dbname)

            wiki = dbname
            blocks = get_partial_blocks()

            data.extend(blocks)
        except Exception as err:
            print('Something wrong with %s, %s' % (dbname, err))

    # create csv
    headers = ('blocker', 'blockee', 'date', 'reason', 'params')
    utils.write_to_csv('partial_blocks', headers, data)

    print('Fin...')
def generate_data():
    print("Starting block edits...")
    data = []

    # get db names
    db_names = utils.get_db_names()
    conn = conn_manager.get_conn()

    #get data for each wiki
    for dbname in db_names:
        try:
            conn.select_db(dbname)

            wiki = dbname
            total_reblocks = get_total_reblocks()
            perc_reblock_author = get_perc_reblock_author()

            data.append((wiki, total_reblocks, perc_reblock_author))
        except Exception as err:
            print('Something wrong with %s, %s' % (dbname, err))

    # create csv
    headers = ('Wiki', 'Total reblocks', 'Same author reblock %')
    utils.write_to_csv('block_modifications', headers, data)

    print('Fin...')
Beispiel #5
0
def fetch_all(sql, params=None, cursor=None):
    results = []
    conn = conn_manager.get_conn()
    with conn.cursor(cursor) as cursor:
        cursor.execute(sql, params)
        results = cursor.fetchall()

    return results
Beispiel #6
0
def generate_data():
    print("Starting top admins...")

    db_names = [
        'plwiki_p', 'svwiki_p', 'jawiki_p', 'nlwiki_p', 'zhwiki_p', 'ptwiki_p',
        'nnwiki_p', 'ukwiki_p', 'hewiki_p', 'cswiki_p', 'tawiki_p', 'itwiki_p',
        'enwiki_p', 'dewiki_p', 'frwiki_p', 'eswiki_p', 'ruwiki_p', 'ptwiki_p',
        'kowiki_p', 'arwiki_p', 'fawiki_p', 'commonswiki_p', 'wikidatawiki_p',
        'metawiki_p'
    ]

    conn = conn_manager.get_conn()
    data = []

    # get data for each wiki
    for dbname in db_names:
        try:
            conn.select_db(dbname)

            sql = """
                SELECT
                    '%s' AS wiki,
                    CAST(log_user_text as CHAR) as user,
                    log_user,
                    (
                        SELECT IF (COUNT(*) > 0, 'No', 'Yes')
                        FROM user_properties
                        WHERE up_property = 'disablemail'
                        AND up_value = 1 AND up_user = log_user
                    ) AS disablemail,
                    COUNT(*) AS total_blocks
                FROM logging
                LEFT JOIN user_groups ON ug_user = log_user
                    AND ug_group IN ('bot', 'flow-bot')
                WHERE log_action = 'block' AND log_type = 'block'
                AND log_timestamp >= 20180801000000 AND log_timestamp <= 20181031235959
                AND ug_group IS NULL
                GROUP BY log_user ORDER BY total_blocks DESC LIMIT 30
            """ % dbname[:-2]

            results = fetch_all(sql)

            data.extend(results)

        except Exception as err:
            print('Something wrong with %s, %s' % (dbname, err))

    # create csv
    headers = ('wiki', 'username', 'user id', 'allow email',
               '# blocks performed')
    utils.write_to_csv('top_admins', headers, data)
Beispiel #7
0
def generate_data():
    print("Starting all wikis ...")

    # get db names
    db_names = utils.get_db_names()
    conn = conn_manager.get_conn()

    #get data for each wiki
    total_blocks = 0
    for dbname in db_names:
        try:
            conn.select_db(dbname)
            total_blocks += get_total_active_blocks()
        except Exception as err:
            print('Something wrong with %s, %s' % (dbname, err))

    utils.write_to_csv('all_wiki', ('Total active blocks', ),
                       [(total_blocks, )])