Repository files navigation

Community Activity Alerts

Overview

This project tracks and analyzes edit activity across Wikimedia projects. It consists of scripts for fetching, storing, and analyzing edit data, as well as a web interface for visualization.

Script Descriptions

fetch_and_store_cron.py

  • Purpose: Fetches monthly edit counts for all Wikimedia projects from the Wikimedia API and stores them in the edit_counts table in the database.
  • How it works:
    • Downloads edit count data for each project.
    • Ensures the edit_counts table exists.
    • Inserts or updates edit counts for each project and month.
  • Intended use: Run regularly (e.g., as a cron job) to keep the edit counts up to date.

fetch_and_store_script.py

  • Purpose: Similar to fetch_and_store_cron.py; may be used for manual runs or testing.
  • How it works:
    • Fetches edit counts from the Wikimedia API.
    • Stores results in the edit_counts table.
  • Intended use: Manual or ad-hoc data fetching.

Community alerts .py

  • Purpose: Detects peaks (unusual spikes) in edit activity for each project and stores these as alerts in the community_alerts table.
  • How it works:
    • Reads all edit data from edit_counts.
    • Runs a peak detection algorithm for each project.
    • Stores detected peaks in the community_alerts table.
  • Intended use: Run after edit data is up to date, to analyze and record significant activity spikes.

Database Tables

  • edit_counts: Stores raw monthly edit counts for each project.
  • community_alerts: Stores detected peaks/alerts for each project.

Local Setup

Prerequisites

  • Python 3.7+
  • MySQL server
  • Virtual environment (recommended)

MySQL Installation

Ubuntu/Debian:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

macOS:

# Using Homebrew
brew install mysql
brew services start mysql

Windows:

  • Download MySQL installer from mysql.com
  • Run installer and follow setup wizard
  • Start MySQL service

Note: For production setups, consider running mysql_secure_installation to enhance security. For local development, this is optional.

Installation

  1. Clone and set up environment:

    git clone <repository-url>cd community-activity-alerts
    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
    pip install -r requirements.txt
  2. Set up MySQL database:

    Connect to MySQL:

    # Connect as root (default) or your MySQL user
    mysql -u root -p

    Create database and user:

    -- Create the databaseCREATEDATABASEcommunity_alerts;
    -- Create a user for the applicationCREATEUSER 'wikim'@'localhost' IDENTIFIED BY 'wikimedia';
    -- Grant privileges to the userGRANT ALL PRIVILEGES ON community_alerts.* TO 'wikim'@'localhost';
    -- Apply changes
    FLUSH PRIVILEGES;
    -- Exit MySQL
    EXIT;
  3. Configure database connection:

    Edit the database connection settings in your Python files:

    • In app.py: Update the get_db_connection() function
    • In other scripts: Update the database configuration variables
    # Example configuration (adjust as needed)conn=pymysql.connect(
    host="localhost", # Your MySQL hostuser='wikim', # Your MySQL usernamepassword='wikimedia', # Your MySQL passworddatabase="community_alerts", # Your database namecharset="utf8mb4",
    )
  4. Create database tables:

    The tables will be created automatically when you run the scripts for the first time. The application creates:

    • edit_counts: Stores raw monthly edit counts
    • community_alerts: Stores detected activity peaks
  5. Collect data:

    python fetch_and_store_cron.py

    This fetches 3 years of edit data for all Wikimedia projects (may take 30+ minutes).

  6. Generate alerts:

    python "Community alerts .py"

    This analyzes the data and detects activity peaks.

  7. Start the web interface:

    python app.py

    Visit http://localhost:5000 to explore the data.

Troubleshooting

  • MySQL connection issues: Verify MySQL is running and credentials are correct
  • Permission errors: Ensure the MySQL user has proper privileges on the database
  • Port conflicts: Default MySQL port is 3306, Flask runs on port 5000
  • OS-specific MySQL setup: Refer to official MySQL documentation for your operating system

Usage

The web interface allows you to:

  • Select different Wikimedia language communities and projects
  • Set custom date ranges with an interactive slider
  • View detected activity peaks in both table and chart format
  • Click on chart peaks to add labels and annotations

About

Dashboard to show any unusual activity surges in Wikimedia communities.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Community Activity Alerts

Overview

This project tracks and analyzes edit activity across Wikimedia projects. It consists of scripts for fetching, storing, and analyzing edit data, as well as a web interface for visualization.

Script Descriptions

fetch_and_store_cron.py

  • Purpose: Fetches monthly edit counts for all Wikimedia projects from the Wikimedia API and stores them in the edit_counts table in the database.
  • How it works:
    • Downloads edit count data for each project.
    • Ensures the edit_counts table exists.
    • Inserts or updates edit counts for each project and month.
  • Intended use: Run regularly (e.g., as a cron job) to keep the edit counts up to date.

fetch_and_store_script.py

  • Purpose: Similar to fetch_and_store_cron.py; may be used for manual runs or testing.
  • How it works:
    • Fetches edit counts from the Wikimedia API.
    • Stores results in the edit_counts table.
  • Intended use: Manual or ad-hoc data fetching.

Community alerts .py

  • Purpose: Detects peaks (unusual spikes) in edit activity for each project and stores these as alerts in the community_alerts table.
  • How it works:
    • Reads all edit data from edit_counts.
    • Runs a peak detection algorithm for each project.
    • Stores detected peaks in the community_alerts table.
  • Intended use: Run after edit data is up to date, to analyze and record significant activity spikes.

Database Tables

  • edit_counts: Stores raw monthly edit counts for each project.
  • community_alerts: Stores detected peaks/alerts for each project.

Local Setup

Prerequisites

  • Python 3.7+
  • MySQL server
  • Virtual environment (recommended)

MySQL Installation

Ubuntu/Debian:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

macOS:

# Using Homebrew
brew install mysql
brew services start mysql

Windows:

  • Download MySQL installer from mysql.com
  • Run installer and follow setup wizard
  • Start MySQL service

Note: For production setups, consider running mysql_secure_installation to enhance security. For local development, this is optional.

Installation

  1. Clone and set up environment:

    git clone <repository-url>cd community-activity-alerts
    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
    pip install -r requirements.txt
  2. Set up MySQL database:

    Connect to MySQL:

    # Connect as root (default) or your MySQL user
    mysql -u root -p

    Create database and user:

    -- Create the databaseCREATEDATABASEcommunity_alerts;
    -- Create a user for the applicationCREATEUSER 'wikim'@'localhost' IDENTIFIED BY 'wikimedia';
    -- Grant privileges to the userGRANT ALL PRIVILEGES ON community_alerts.* TO 'wikim'@'localhost';
    -- Apply changes
    FLUSH PRIVILEGES;
    -- Exit MySQL
    EXIT;
  3. Configure database connection:

    Edit the database connection settings in your Python files:

    • In app.py: Update the get_db_connection() function
    • In other scripts: Update the database configuration variables
    # Example configuration (adjust as needed)conn=pymysql.connect(
    host="localhost", # Your MySQL hostuser='wikim', # Your MySQL usernamepassword='wikimedia', # Your MySQL passworddatabase="community_alerts", # Your database namecharset="utf8mb4",
    )
  4. Create database tables:

    The tables will be created automatically when you run the scripts for the first time. The application creates:

    • edit_counts: Stores raw monthly edit counts
    • community_alerts: Stores detected activity peaks
  5. Collect data:

    python fetch_and_store_cron.py

    This fetches 3 years of edit data for all Wikimedia projects (may take 30+ minutes).

  6. Generate alerts:

    python "Community alerts .py"

    This analyzes the data and detects activity peaks.

  7. Start the web interface:

    python app.py

    Visit http://localhost:5000 to explore the data.

Troubleshooting

  • MySQL connection issues: Verify MySQL is running and credentials are correct
  • Permission errors: Ensure the MySQL user has proper privileges on the database
  • Port conflicts: Default MySQL port is 3306, Flask runs on port 5000
  • OS-specific MySQL setup: Refer to official MySQL documentation for your operating system

Usage

The web interface allows you to:

  • Select different Wikimedia language communities and projects
  • Set custom date ranges with an interactive slider
  • View detected activity peaks in both table and chart format
  • Click on chart peaks to add labels and annotations

About

Dashboard to show any unusual activity surges in Wikimedia communities.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Community Activity Alerts

Overview

This project tracks and analyzes edit activity across Wikimedia projects. It consists of scripts for fetching, storing, and analyzing edit data, as well as a web interface for visualization.

Script Descriptions

fetch_and_store_cron.py

  • Purpose: Fetches monthly edit counts for all Wikimedia projects from the Wikimedia API and stores them in the edit_counts table in the database.
  • How it works:
    • Downloads edit count data for each project.
    • Ensures the edit_counts table exists.
    • Inserts or updates edit counts for each project and month.
  • Intended use: Run regularly (e.g., as a cron job) to keep the edit counts up to date.

fetch_and_store_script.py

  • Purpose: Similar to fetch_and_store_cron.py; may be used for manual runs or testing.
  • How it works:
    • Fetches edit counts from the Wikimedia API.
    • Stores results in the edit_counts table.
  • Intended use: Manual or ad-hoc data fetching.

Community alerts .py

  • Purpose: Detects peaks (unusual spikes) in edit activity for each project and stores these as alerts in the community_alerts table.
  • How it works:
    • Reads all edit data from edit_counts.
    • Runs a peak detection algorithm for each project.
    • Stores detected peaks in the community_alerts table.
  • Intended use: Run after edit data is up to date, to analyze and record significant activity spikes.

Database Tables

  • edit_counts: Stores raw monthly edit counts for each project.
  • community_alerts: Stores detected peaks/alerts for each project.

Local Setup

Prerequisites

  • Python 3.7+
  • MySQL server
  • Virtual environment (recommended)

MySQL Installation

Ubuntu/Debian:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

macOS:

# Using Homebrew
brew install mysql
brew services start mysql

Windows:

  • Download MySQL installer from mysql.com
  • Run installer and follow setup wizard
  • Start MySQL service

Note: For production setups, consider running mysql_secure_installation to enhance security. For local development, this is optional.

Installation

  1. Clone and set up environment:

    git clone <repository-url>cd community-activity-alerts
    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
    pip install -r requirements.txt
  2. Set up MySQL database:

    Connect to MySQL:

    # Connect as root (default) or your MySQL user
    mysql -u root -p

    Create database and user:

    -- Create the databaseCREATEDATABASEcommunity_alerts;
    -- Create a user for the applicationCREATEUSER 'wikim'@'localhost' IDENTIFIED BY 'wikimedia';
    -- Grant privileges to the userGRANT ALL PRIVILEGES ON community_alerts.* TO 'wikim'@'localhost';
    -- Apply changes
    FLUSH PRIVILEGES;
    -- Exit MySQL
    EXIT;
  3. Configure database connection:

    Edit the database connection settings in your Python files:

    • In app.py: Update the get_db_connection() function
    • In other scripts: Update the database configuration variables
    # Example configuration (adjust as needed)conn=pymysql.connect(
    host="localhost", # Your MySQL hostuser='wikim', # Your MySQL usernamepassword='wikimedia', # Your MySQL passworddatabase="community_alerts", # Your database namecharset="utf8mb4",
    )
  4. Create database tables:

    The tables will be created automatically when you run the scripts for the first time. The application creates:

    • edit_counts: Stores raw monthly edit counts
    • community_alerts: Stores detected activity peaks
  5. Collect data:

    python fetch_and_store_cron.py

    This fetches 3 years of edit data for all Wikimedia projects (may take 30+ minutes).

  6. Generate alerts:

    python "Community alerts .py"

    This analyzes the data and detects activity peaks.

  7. Start the web interface:

    python app.py

    Visit http://localhost:5000 to explore the data.

Troubleshooting

  • MySQL connection issues: Verify MySQL is running and credentials are correct
  • Permission errors: Ensure the MySQL user has proper privileges on the database
  • Port conflicts: Default MySQL port is 3306, Flask runs on port 5000
  • OS-specific MySQL setup: Refer to official MySQL documentation for your operating system

Usage

The web interface allows you to:

  • Select different Wikimedia language communities and projects
  • Set custom date ranges with an interactive slider
  • View detected activity peaks in both table and chart format
  • Click on chart peaks to add labels and annotations

About

Dashboard to show any unusual activity surges in Wikimedia communities.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Community Activity Alerts

Overview

This project tracks and analyzes edit activity across Wikimedia projects. It consists of scripts for fetching, storing, and analyzing edit data, as well as a web interface for visualization.

Script Descriptions

fetch_and_store_cron.py

  • Purpose: Fetches monthly edit counts for all Wikimedia projects from the Wikimedia API and stores them in the edit_counts table in the database.
  • How it works:
    • Downloads edit count data for each project.
    • Ensures the edit_counts table exists.
    • Inserts or updates edit counts for each project and month.
  • Intended use: Run regularly (e.g., as a cron job) to keep the edit counts up to date.

fetch_and_store_script.py

  • Purpose: Similar to fetch_and_store_cron.py; may be used for manual runs or testing.
  • How it works:
    • Fetches edit counts from the Wikimedia API.
    • Stores results in the edit_counts table.
  • Intended use: Manual or ad-hoc data fetching.

Community alerts .py

  • Purpose: Detects peaks (unusual spikes) in edit activity for each project and stores these as alerts in the community_alerts table.
  • How it works:
    • Reads all edit data from edit_counts.
    • Runs a peak detection algorithm for each project.
    • Stores detected peaks in the community_alerts table.
  • Intended use: Run after edit data is up to date, to analyze and record significant activity spikes.

Database Tables

  • edit_counts: Stores raw monthly edit counts for each project.
  • community_alerts: Stores detected peaks/alerts for each project.

Local Setup

Prerequisites

  • Python 3.7+
  • MySQL server
  • Virtual environment (recommended)

MySQL Installation

Ubuntu/Debian:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

macOS:

# Using Homebrew
brew install mysql
brew services start mysql

Windows:

  • Download MySQL installer from mysql.com
  • Run installer and follow setup wizard
  • Start MySQL service

Note: For production setups, consider running mysql_secure_installation to enhance security. For local development, this is optional.

Installation

  1. Clone and set up environment:

    git clone <repository-url>cd community-activity-alerts
    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
    pip install -r requirements.txt
  2. Set up MySQL database:

    Connect to MySQL:

    # Connect as root (default) or your MySQL user
    mysql -u root -p

    Create database and user:

    -- Create the databaseCREATEDATABASEcommunity_alerts;
    -- Create a user for the applicationCREATEUSER 'wikim'@'localhost' IDENTIFIED BY 'wikimedia';
    -- Grant privileges to the userGRANT ALL PRIVILEGES ON community_alerts.* TO 'wikim'@'localhost';
    -- Apply changes
    FLUSH PRIVILEGES;
    -- Exit MySQL
    EXIT;
  3. Configure database connection:

    Edit the database connection settings in your Python files:

    • In app.py: Update the get_db_connection() function
    • In other scripts: Update the database configuration variables
    # Example configuration (adjust as needed)conn=pymysql.connect(
    host="localhost", # Your MySQL hostuser='wikim', # Your MySQL usernamepassword='wikimedia', # Your MySQL passworddatabase="community_alerts", # Your database namecharset="utf8mb4",
    )
  4. Create database tables:

    The tables will be created automatically when you run the scripts for the first time. The application creates:

    • edit_counts: Stores raw monthly edit counts
    • community_alerts: Stores detected activity peaks
  5. Collect data:

    python fetch_and_store_cron.py

    This fetches 3 years of edit data for all Wikimedia projects (may take 30+ minutes).

  6. Generate alerts:

    python "Community alerts .py"

    This analyzes the data and detects activity peaks.

  7. Start the web interface:

    python app.py

    Visit http://localhost:5000 to explore the data.

Troubleshooting

  • MySQL connection issues: Verify MySQL is running and credentials are correct
  • Permission errors: Ensure the MySQL user has proper privileges on the database
  • Port conflicts: Default MySQL port is 3306, Flask runs on port 5000
  • OS-specific MySQL setup: Refer to official MySQL documentation for your operating system

Usage

The web interface allows you to:

  • Select different Wikimedia language communities and projects
  • Set custom date ranges with an interactive slider
  • View detected activity peaks in both table and chart format
  • Click on chart peaks to add labels and annotations

About

Dashboard to show any unusual activity surges in Wikimedia communities.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Community Activity Alerts

Overview

This project tracks and analyzes edit activity across Wikimedia projects. It consists of scripts for fetching, storing, and analyzing edit data, as well as a web interface for visualization.

Script Descriptions

fetch_and_store_cron.py

  • Purpose: Fetches monthly edit counts for all Wikimedia projects from the Wikimedia API and stores them in the edit_counts table in the database.
  • How it works:
    • Downloads edit count data for each project.
    • Ensures the edit_counts table exists.
    • Inserts or updates edit counts for each project and month.
  • Intended use: Run regularly (e.g., as a cron job) to keep the edit counts up to date.

fetch_and_store_script.py

  • Purpose: Similar to fetch_and_store_cron.py; may be used for manual runs or testing.
  • How it works:
    • Fetches edit counts from the Wikimedia API.
    • Stores results in the edit_counts table.
  • Intended use: Manual or ad-hoc data fetching.

Community alerts .py

  • Purpose: Detects peaks (unusual spikes) in edit activity for each project and stores these as alerts in the community_alerts table.
  • How it works:
    • Reads all edit data from edit_counts.
    • Runs a peak detection algorithm for each project.
    • Stores detected peaks in the community_alerts table.
  • Intended use: Run after edit data is up to date, to analyze and record significant activity spikes.

Database Tables

  • edit_counts: Stores raw monthly edit counts for each project.
  • community_alerts: Stores detected peaks/alerts for each project.

Local Setup

Prerequisites

  • Python 3.7+
  • MySQL server
  • Virtual environment (recommended)

MySQL Installation

Ubuntu/Debian:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

macOS:

# Using Homebrew
brew install mysql
brew services start mysql

Windows:

  • Download MySQL installer from mysql.com
  • Run installer and follow setup wizard
  • Start MySQL service

Note: For production setups, consider running mysql_secure_installation to enhance security. For local development, this is optional.

Installation

  1. Clone and set up environment:

    git clone <repository-url>cd community-activity-alerts
    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
    pip install -r requirements.txt
  2. Set up MySQL database:

    Connect to MySQL:

    # Connect as root (default) or your MySQL user
    mysql -u root -p

    Create database and user:

    -- Create the databaseCREATEDATABASEcommunity_alerts;
    -- Create a user for the applicationCREATEUSER 'wikim'@'localhost' IDENTIFIED BY 'wikimedia';
    -- Grant privileges to the userGRANT ALL PRIVILEGES ON community_alerts.* TO 'wikim'@'localhost';
    -- Apply changes
    FLUSH PRIVILEGES;
    -- Exit MySQL
    EXIT;
  3. Configure database connection:

    Edit the database connection settings in your Python files:

    • In app.py: Update the get_db_connection() function
    • In other scripts: Update the database configuration variables
    # Example configuration (adjust as needed)conn=pymysql.connect(
    host="localhost", # Your MySQL hostuser='wikim', # Your MySQL usernamepassword='wikimedia', # Your MySQL passworddatabase="community_alerts", # Your database namecharset="utf8mb4",
    )
  4. Create database tables:

    The tables will be created automatically when you run the scripts for the first time. The application creates:

    • edit_counts: Stores raw monthly edit counts
    • community_alerts: Stores detected activity peaks
  5. Collect data:

    python fetch_and_store_cron.py

    This fetches 3 years of edit data for all Wikimedia projects (may take 30+ minutes).

  6. Generate alerts:

    python "Community alerts .py"

    This analyzes the data and detects activity peaks.

  7. Start the web interface:

    python app.py

    Visit http://localhost:5000 to explore the data.

Troubleshooting

  • MySQL connection issues: Verify MySQL is running and credentials are correct
  • Permission errors: Ensure the MySQL user has proper privileges on the database
  • Port conflicts: Default MySQL port is 3306, Flask runs on port 5000
  • OS-specific MySQL setup: Refer to official MySQL documentation for your operating system

Usage

The web interface allows you to:

  • Select different Wikimedia language communities and projects
  • Set custom date ranges with an interactive slider
  • View detected activity peaks in both table and chart format
  • Click on chart peaks to add labels and annotations

About

Dashboard to show any unusual activity surges in Wikimedia communities.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Community Activity Alerts

Overview

This project tracks and analyzes edit activity across Wikimedia projects. It consists of scripts for fetching, storing, and analyzing edit data, as well as a web interface for visualization.

Script Descriptions

fetch_and_store_cron.py

  • Purpose: Fetches monthly edit counts for all Wikimedia projects from the Wikimedia API and stores them in the edit_counts table in the database.
  • How it works:
    • Downloads edit count data for each project.
    • Ensures the edit_counts table exists.
    • Inserts or updates edit counts for each project and month.
  • Intended use: Run regularly (e.g., as a cron job) to keep the edit counts up to date.

fetch_and_store_script.py

  • Purpose: Similar to fetch_and_store_cron.py; may be used for manual runs or testing.
  • How it works:
    • Fetches edit counts from the Wikimedia API.
    • Stores results in the edit_counts table.
  • Intended use: Manual or ad-hoc data fetching.

Community alerts .py

  • Purpose: Detects peaks (unusual spikes) in edit activity for each project and stores these as alerts in the community_alerts table.
  • How it works:
    • Reads all edit data from edit_counts.
    • Runs a peak detection algorithm for each project.
    • Stores detected peaks in the community_alerts table.
  • Intended use: Run after edit data is up to date, to analyze and record significant activity spikes.

Database Tables

  • edit_counts: Stores raw monthly edit counts for each project.
  • community_alerts: Stores detected peaks/alerts for each project.

Local Setup

Prerequisites

  • Python 3.7+
  • MySQL server
  • Virtual environment (recommended)

MySQL Installation

Ubuntu/Debian:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

macOS:

# Using Homebrew
brew install mysql
brew services start mysql

Windows:

  • Download MySQL installer from mysql.com
  • Run installer and follow setup wizard
  • Start MySQL service

Note: For production setups, consider running mysql_secure_installation to enhance security. For local development, this is optional.

Installation

  1. Clone and set up environment:

    git clone <repository-url>cd community-activity-alerts
    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
    pip install -r requirements.txt
  2. Set up MySQL database:

    Connect to MySQL:

    # Connect as root (default) or your MySQL user
    mysql -u root -p

    Create database and user:

    -- Create the databaseCREATEDATABASEcommunity_alerts;
    -- Create a user for the applicationCREATEUSER 'wikim'@'localhost' IDENTIFIED BY 'wikimedia';
    -- Grant privileges to the userGRANT ALL PRIVILEGES ON community_alerts.* TO 'wikim'@'localhost';
    -- Apply changes
    FLUSH PRIVILEGES;
    -- Exit MySQL
    EXIT;
  3. Configure database connection:

    Edit the database connection settings in your Python files:

    • In app.py: Update the get_db_connection() function
    • In other scripts: Update the database configuration variables
    # Example configuration (adjust as needed)conn=pymysql.connect(
    host="localhost", # Your MySQL hostuser='wikim', # Your MySQL usernamepassword='wikimedia', # Your MySQL passworddatabase="community_alerts", # Your database namecharset="utf8mb4",
    )
  4. Create database tables:

    The tables will be created automatically when you run the scripts for the first time. The application creates:

    • edit_counts: Stores raw monthly edit counts
    • community_alerts: Stores detected activity peaks
  5. Collect data:

    python fetch_and_store_cron.py

    This fetches 3 years of edit data for all Wikimedia projects (may take 30+ minutes).

  6. Generate alerts:

    python "Community alerts .py"

    This analyzes the data and detects activity peaks.

  7. Start the web interface:

    python app.py

    Visit http://localhost:5000 to explore the data.

Troubleshooting

  • MySQL connection issues: Verify MySQL is running and credentials are correct
  • Permission errors: Ensure the MySQL user has proper privileges on the database
  • Port conflicts: Default MySQL port is 3306, Flask runs on port 5000
  • OS-specific MySQL setup: Refer to official MySQL documentation for your operating system

Usage

The web interface allows you to:

  • Select different Wikimedia language communities and projects
  • Set custom date ranges with an interactive slider
  • View detected activity peaks in both table and chart format
  • Click on chart peaks to add labels and annotations

About

Dashboard to show any unusual activity surges in Wikimedia communities.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Community Activity Alerts

Overview

This project tracks and analyzes edit activity across Wikimedia projects. It consists of scripts for fetching, storing, and analyzing edit data, as well as a web interface for visualization.

Script Descriptions

fetch_and_store_cron.py

  • Purpose: Fetches monthly edit counts for all Wikimedia projects from the Wikimedia API and stores them in the edit_counts table in the database.
  • How it works:
    • Downloads edit count data for each project.
    • Ensures the edit_counts table exists.
    • Inserts or updates edit counts for each project and month.
  • Intended use: Run regularly (e.g., as a cron job) to keep the edit counts up to date.

fetch_and_store_script.py

  • Purpose: Similar to fetch_and_store_cron.py; may be used for manual runs or testing.
  • How it works:
    • Fetches edit counts from the Wikimedia API.
    • Stores results in the edit_counts table.
  • Intended use: Manual or ad-hoc data fetching.

Community alerts .py

  • Purpose: Detects peaks (unusual spikes) in edit activity for each project and stores these as alerts in the community_alerts table.
  • How it works:
    • Reads all edit data from edit_counts.
    • Runs a peak detection algorithm for each project.
    • Stores detected peaks in the community_alerts table.
  • Intended use: Run after edit data is up to date, to analyze and record significant activity spikes.

Database Tables

  • edit_counts: Stores raw monthly edit counts for each project.
  • community_alerts: Stores detected peaks/alerts for each project.

Local Setup

Prerequisites

  • Python 3.7+
  • MySQL server
  • Virtual environment (recommended)

MySQL Installation

Ubuntu/Debian:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

macOS:

# Using Homebrew
brew install mysql
brew services start mysql

Windows:

  • Download MySQL installer from mysql.com
  • Run installer and follow setup wizard
  • Start MySQL service

Note: For production setups, consider running mysql_secure_installation to enhance security. For local development, this is optional.

Installation

  1. Clone and set up environment:

    git clone <repository-url>cd community-activity-alerts
    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
    pip install -r requirements.txt
  2. Set up MySQL database:

    Connect to MySQL:

    # Connect as root (default) or your MySQL user
    mysql -u root -p

    Create database and user:

    -- Create the databaseCREATEDATABASEcommunity_alerts;
    -- Create a user for the applicationCREATEUSER 'wikim'@'localhost' IDENTIFIED BY 'wikimedia';
    -- Grant privileges to the userGRANT ALL PRIVILEGES ON community_alerts.* TO 'wikim'@'localhost';
    -- Apply changes
    FLUSH PRIVILEGES;
    -- Exit MySQL
    EXIT;
  3. Configure database connection:

    Edit the database connection settings in your Python files:

    • In app.py: Update the get_db_connection() function
    • In other scripts: Update the database configuration variables
    # Example configuration (adjust as needed)conn=pymysql.connect(
    host="localhost", # Your MySQL hostuser='wikim', # Your MySQL usernamepassword='wikimedia', # Your MySQL passworddatabase="community_alerts", # Your database namecharset="utf8mb4",
    )
  4. Create database tables:

    The tables will be created automatically when you run the scripts for the first time. The application creates:

    • edit_counts: Stores raw monthly edit counts
    • community_alerts: Stores detected activity peaks
  5. Collect data:

    python fetch_and_store_cron.py

    This fetches 3 years of edit data for all Wikimedia projects (may take 30+ minutes).

  6. Generate alerts:

    python "Community alerts .py"

    This analyzes the data and detects activity peaks.

  7. Start the web interface:

    python app.py

    Visit http://localhost:5000 to explore the data.

Troubleshooting

  • MySQL connection issues: Verify MySQL is running and credentials are correct
  • Permission errors: Ensure the MySQL user has proper privileges on the database
  • Port conflicts: Default MySQL port is 3306, Flask runs on port 5000
  • OS-specific MySQL setup: Refer to official MySQL documentation for your operating system

Usage

The web interface allows you to:

  • Select different Wikimedia language communities and projects
  • Set custom date ranges with an interactive slider
  • View detected activity peaks in both table and chart format
  • Click on chart peaks to add labels and annotations

About

Dashboard to show any unusual activity surges in Wikimedia communities.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Community Activity Alerts

Overview

This project tracks and analyzes edit activity across Wikimedia projects. It consists of scripts for fetching, storing, and analyzing edit data, as well as a web interface for visualization.

Script Descriptions

fetch_and_store_cron.py

  • Purpose: Fetches monthly edit counts for all Wikimedia projects from the Wikimedia API and stores them in the edit_counts table in the database.
  • How it works:
    • Downloads edit count data for each project.
    • Ensures the edit_counts table exists.
    • Inserts or updates edit counts for each project and month.
  • Intended use: Run regularly (e.g., as a cron job) to keep the edit counts up to date.

fetch_and_store_script.py

  • Purpose: Similar to fetch_and_store_cron.py; may be used for manual runs or testing.
  • How it works:
    • Fetches edit counts from the Wikimedia API.
    • Stores results in the edit_counts table.
  • Intended use: Manual or ad-hoc data fetching.

Community alerts .py

  • Purpose: Detects peaks (unusual spikes) in edit activity for each project and stores these as alerts in the community_alerts table.
  • How it works:
    • Reads all edit data from edit_counts.
    • Runs a peak detection algorithm for each project.
    • Stores detected peaks in the community_alerts table.
  • Intended use: Run after edit data is up to date, to analyze and record significant activity spikes.

Database Tables

  • edit_counts: Stores raw monthly edit counts for each project.
  • community_alerts: Stores detected peaks/alerts for each project.

Local Setup

Prerequisites

  • Python 3.7+
  • MySQL server
  • Virtual environment (recommended)

MySQL Installation

Ubuntu/Debian:

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

macOS:

# Using Homebrew
brew install mysql
brew services start mysql

Windows:

  • Download MySQL installer from mysql.com
  • Run installer and follow setup wizard
  • Start MySQL service

Note: For production setups, consider running mysql_secure_installation to enhance security. For local development, this is optional.

Installation

  1. Clone and set up environment:

    git clone <repository-url>cd community-activity-alerts
    python -m venv venv
    source venv/bin/activate # On Windows: venv\Scripts\activate
    pip install -r requirements.txt
  2. Set up MySQL database:

    Connect to MySQL:

    # Connect as root (default) or your MySQL user
    mysql -u root -p

    Create database and user:

    -- Create the databaseCREATEDATABASEcommunity_alerts;
    -- Create a user for the applicationCREATEUSER 'wikim'@'localhost' IDENTIFIED BY 'wikimedia';
    -- Grant privileges to the userGRANT ALL PRIVILEGES ON community_alerts.* TO 'wikim'@'localhost';
    -- Apply changes
    FLUSH PRIVILEGES;
    -- Exit MySQL
    EXIT;
  3. Configure database connection:

    Edit the database connection settings in your Python files:

    • In app.py: Update the get_db_connection() function
    • In other scripts: Update the database configuration variables
    # Example configuration (adjust as needed)conn=pymysql.connect(
    host="localhost", # Your MySQL hostuser='wikim', # Your MySQL usernamepassword='wikimedia', # Your MySQL passworddatabase="community_alerts", # Your database namecharset="utf8mb4",
    )
  4. Create database tables:

    The tables will be created automatically when you run the scripts for the first time. The application creates:

    • edit_counts: Stores raw monthly edit counts
    • community_alerts: Stores detected activity peaks
  5. Collect data:

    python fetch_and_store_cron.py

    This fetches 3 years of edit data for all Wikimedia projects (may take 30+ minutes).

  6. Generate alerts:

    python "Community alerts .py"

    This analyzes the data and detects activity peaks.

  7. Start the web interface:

    python app.py

    Visit http://localhost:5000 to explore the data.

Troubleshooting

  • MySQL connection issues: Verify MySQL is running and credentials are correct
  • Permission errors: Ensure the MySQL user has proper privileges on the database
  • Port conflicts: Default MySQL port is 3306, Flask runs on port 5000
  • OS-specific MySQL setup: Refer to official MySQL documentation for your operating system

Usage

The web interface allows you to:

  • Select different Wikimedia language communities and projects
  • Set custom date ranges with an interactive slider
  • View detected activity peaks in both table and chart format
  • Click on chart peaks to add labels and annotations

About

Dashboard to show any unusual activity surges in Wikimedia communities.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Contributors

Languages