A macOS menu bar app for monitoring AWS RDS instances with real-time health metrics and alerts.
- π Real-time Monitoring: Track CPU, connections, storage, and activity for all RDS instances
- β‘ Auto-refresh: Updates every 15 minutes automatically
- π Smart Alerts: macOS notifications when metrics exceed 50% (with deduplication)
- π¨ Color-coded Status: Green (<50%), Yellow (50-75%), Red (>75%)
- π AWS Integration: Uses your existing
~/.aws/credentialsand~/.aws/config - π Multi-region/Profile: Switch between AWS profiles and regions easily
For each RDS instance:
| Metric | Source | Description |
|---|---|---|
| CPU Utilization | CloudWatch CPUUtilization |
Current CPU usage percentage |
| Connections Used | DatabaseConnections / max_connections Γ 100 |
Percentage of connection pool used |
| Storage Used | (AllocatedStorage - FreeStorageSpace) / AllocatedStorage Γ 100 |
Percentage of disk space used |
| Activity | CloudWatch DatabaseConnections |
Current number of database connections |
- macOS 13.0 or later
- Swift 5.9+
- AWS credentials configured at
~/.aws/credentials - IAM permissions:
rds:DescribeDBInstancescloudwatch:GetMetricData
- Go to the Releases page
- Download the latest
PulseBar-vX.X.X-macOS.zip - Unzip and move to Applications:
unzip PulseBar-vX.X.X-macOS.zip mv PulseBar.app /Applications/
- First launch (app is unsigned, so macOS will block it):
- Right-click
PulseBar.appβ Open β Click Open in the dialog - Or run:
xattr -cr /Applications/PulseBar.app
- Right-click
# Clone the repository
git clone <repository-url>
cd PulseBar
# Build and install to /Applications
make install# Run in debug mode
make run
# Or build release binary
make buildNote: When running via
make run(without app bundle), macOS notifications are disabled. Usemake installfor full functionality.
Ensure you have AWS credentials configured:
# ~/.aws/credentials
[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY
[production]
aws_access_key_id = PROD_ACCESS_KEY
aws_secret_access_key = PROD_SECRET_KEY# ~/.aws/config
[default]
region = us-west-2
[profile production]
region = us-east-1{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"rds:DescribeDBInstances",
"cloudwatch:GetMetricData"
],
"Resource": "*"
}]
}- Launch PulseBar from Applications or run
make run - Click the π icon in your menu bar
- Select your AWS profile and region
- View real-time metrics for all RDS instances
- Click on any instance to see detailed metrics
- Profile Selector: Switch between AWS profiles
- Region Selector: Change AWS region (us-east-1, us-west-2, eu-west-1, etc.)
- Refresh Now: Manual refresh (βR)
- Instance List: Click any instance for details
- Quit: Exit the application (βQ)
π’ my-database-prod # Green = all metrics healthy (<50%)
postgres - db.r5.large # Engine and instance class
π’ CPU: 12.5% # CPU utilization
π’ Connections: 23.1% # Connection pool usage
π΄ Storage: 78.2% # Storage used (red = >75%)
Activity: 14 connections # Raw connection count
Color Coding:
- π’ Green: < 50% (healthy)
- π‘ Yellow: 50-75% (warning)
- π΄ Red: > 75% (critical)
- βͺ Gray: N/A (data unavailable)
Status Messages:
- β³ Loading... - Fetching data from AWS
β οΈ AWS credentials not found - Missing~/.aws/credentialsfile- π Invalid credentials - Credentials expired or invalid
- π No RDS instances found - No databases in the selected region
Notifications are sent when any metric exceeds 50%:
- Alerts are deduplicated (won't spam for the same condition)
- New notifications sent if:
- Different metrics breach thresholds
- Instance recovers and breaches again
- 15+ minutes since last alert for same condition
Example notification:
β οΈ RDS Alert: production-db
CPU: 72%
Connections: 61%
Note: Notifications only work when running as an installed app bundle (
make install), not viaswift run.
Timer (15 min)
β
Load AWS Profile/Credentials
β
DescribeDBInstances (RDS API)
β
GetMetricData (CloudWatch API) - 1 hour window
β
Metric Calculations
β
UI Update + Alert Engine
β
macOS Notification Center
PulseBar/
βββ Sources/
β βββ main.swift # App entry point
β βββ AppDelegate.swift # Menu bar UI & coordination
β βββ AWSCredentialsReader.swift # Reads ~/.aws files
β βββ RDSMonitoringService.swift # AWS SDK integration
β βββ AlertManager.swift # Notification logic
β βββ Models.swift # Data structures
βββ Assets/
β βββ screenshot.png # App screenshot
βββ icons/
β βββ *.png # App icons (16-1024px)
βββ .github/
β βββ PULL_REQUEST_TEMPLATE.md # PR template
β βββ workflows/
β βββ pr-validation.yml # PR build checks
β βββ release.yml # Auto-build on release
βββ Package.swift # Swift Package Manager config
βββ Info.plist # App metadata
βββ Makefile # Build commands
βββ README.md # This file
βββ CONTRIBUTING.md # Contribution guidelines
βββ CODE_OF_CONDUCT.md # Community standards
βββ SECURITY.md # Security policy
βββ LICENSE # MIT License
βββ agents.md # Developer/AI agent guide
make run # Debug build and run
make build # Release build (.build/release/PulseBar)
make clean # Clean build artifacts
make install # Install to /Applications
make help # Show all commandsaws-sdk-swiftv0.40.0+ (AWSRDS, AWSCloudWatch)
Dependencies are managed via Swift Package Manager and will be automatically resolved on build.
This project uses GitHub Actions for:
- PR Validation: Builds and validates code on every pull request
- Release Build: Automatically builds and attaches binaries when a GitHub release is published
See .github/workflows/ for details.
- No historical graphs or trends
- Basic max_connections estimation (not querying parameter groups)
- No Performance Insights integration
- Single account only (no multi-account aggregation)
- Read-only monitoring (cannot modify RDS instances)
- Notifications require app bundle (not available via
swift run)
The app is unsigned, so macOS Gatekeeper blocks it. Fix with one of these:
Option 1: Right-click the app β Open β Click Open in the dialog
Option 2: Run in terminal:
xattr -cr /Applications/PulseBar.appThe app can't find ~/.aws/credentials. Set up AWS credentials:
# Option 1: Use AWS CLI
aws configure
# Option 2: Create manually
mkdir -p ~/.aws
cat > ~/.aws/credentials << EOF
[default]
aws_access_key_id = YOUR_KEY
aws_secret_access_key = YOUR_SECRET
EOF- Verify the selected profile exists in
~/.aws/credentials - If using temporary credentials (SSO, assumed role), refresh them
- Check credentials haven't expired
Verify your IAM user/role has these permissions:
rds:DescribeDBInstancescloudwatch:GetMetricData
CloudWatch may not have recent data. The app queries a 1-hour window; if no data exists, it shows N/A.
- Ensure you're running the installed app (
/Applications/PulseBar.app), notswift run - Check System Settings β Notifications β PulseBar
- Ensure notifications are enabled
- Restart the app if needed
The first build downloads and compiles AWS SDK dependencies (~200 MB). Subsequent runs will be fast.
MIT License - See LICENSE file for details
Contributions welcome! Please read our Contributing Guidelines before getting started.
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
For architecture and technical details, see agents.md.
- Parameter group querying for accurate max_connections
- Historical metric graphs
- Performance Insights integration
- Multi-account support
- Custom alert thresholds
- Export metrics to CSV/JSON
- Sparkline trends in menu
