Files
skywatch/README.md
T

348 lines
7.7 KiB
Markdown

# Resource Monitor
A comprehensive monitoring system for tracking the uptime and performance of your ZimaOS server and other online resources.
## Features
- 📊 **Real-time Dashboard** - Monitor all your resources at a glance
- 📈 **Performance Graphs** - Visualize response times and uptime statistics
- 🔔 **Alert Notifications** - Email and webhook alerts when resources go offline
- 📝 **Incident Tracking** - Track when resources go down and recover
- ⚙️ **Configurable Checks** - Set custom check intervals and timeouts
- 🗄️ **Historical Data** - 7 days of check history with detailed statistics
## Installation
### Quick Install on Ubuntu (One Command)
```bash
curl -fsSL https://raw.githubusercontent.com/nmemmert/monitor/main/install-ubuntu.sh | bash
```
The script will:
- ✅ Install Node.js 20.x
- ✅ Install PM2 process manager
- ✅ Clone and set up the application
- ✅ Configure firewall
- ✅ Set up auto-start on boot
- ✅ Guide you through email/webhook setup
### Manual Installation
#### Prerequisites
- Node.js (v14 or higher)
- npm or yarn
#### Setup
1. Install dependencies for both server and client:
```bash
npm run install-all
```
2. Create a `.env` file in the root directory (copy from `.env.example`):
```bash
cp .env.example .env
```
3. Configure your `.env` file:
```env
PORT=3001
# Email Notifications (optional)
EMAIL_ENABLED=true
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password
EMAIL_FROM=your-email@gmail.com
EMAIL_TO=your-email@gmail.com
# Webhook Notifications (optional)
WEBHOOK_ENABLED=false
WEBHOOK_URL=https://your-webhook-url.com
```
## Usage
### Development Mode
Run both server and client in development mode:
```bash
npm run dev
```
- Server runs on http://localhost:3001
- Client runs on http://localhost:3000
### Production Mode
Build and run in production:
```bash
npm run build
npm start
```
Server will serve the built React app on http://localhost:3001
## Deploying to a Remote Computer
### Option 1: Direct Copy (Simplest)
1. **On your local machine:**
```bash
# Build the React app
cd client
npm run build
cd ..
# Create a deployment package
# Copy these folders/files to remote:
# - server/
# - client/build/
# - data/ (optional, will be created if missing)
# - package.json
# - .env.example
```
2. **On the remote computer:**
```bash
# Install Node.js if not already installed
# Copy the files to a directory (e.g., /opt/resource-monitor or C:\monitor)
# Install dependencies
npm install
# Copy .env.example to .env and configure
cp .env.example .env
nano .env # or use notepad on Windows
# Set NODE_ENV to production
# Add to .env: NODE_ENV=production
# Start the server
npm start
```
3. **Access the dashboard:**
- Visit `http://your-remote-ip:3001`
### Option 2: Git Repository (Best Practice)
1. **Initialize git and push to repository:**
```bash
git init
git add .
git commit -m "Initial commit"
git remote add origin your-git-repo-url
git push -u origin main
```
2. **On remote computer:**
```bash
git clone your-git-repo-url
cd resource-monitor
npm run install-all
cd client && npm run build && cd ..
cp .env.example .env
nano .env # Configure your settings
npm start
```
### Option 3: Docker Deployment (Advanced)
Create `Dockerfile` in project root:
```dockerfile
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
WORKDIR /app/client
RUN npm install && npm run build
WORKDIR /app
EXPOSE 3001
CMD ["node", "server/index.js"]
```
Then deploy:
```bash
docker build -t resource-monitor .
docker run -d -p 3001:3001 -v ./data:/app/data --name monitor resource-monitor
```
### Running as a Service (Keep it Running)
**Linux (systemd):**
Create `/etc/systemd/system/resource-monitor.service`:
```ini
[Unit]
Description=Resource Monitor
After=network.target
[Service]
Type=simple
User=youruser
WorkingDirectory=/opt/resource-monitor
ExecStart=/usr/bin/node server/index.js
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
```
Enable and start:
```bash
sudo systemctl enable resource-monitor
sudo systemctl start resource-monitor
```
**Windows (NSSM - Non-Sucking Service Manager):**
```powershell
# Download NSSM from nssm.cc
nssm install ResourceMonitor "C:\Program Files\nodejs\node.exe"
nssm set ResourceMonitor AppDirectory "C:\monitor"
nssm set ResourceMonitor AppParameters "server\index.js"
nssm start ResourceMonitor
```
**Using PM2 (Cross-platform):**
```bash
# Install PM2 globally
npm install -g pm2
# Start the application
pm2 start server/index.js --name resource-monitor
# Save the process list
pm2 save
# Set PM2 to start on boot
pm2 startup
```
### Firewall Configuration
Make sure port 3001 is accessible:
**Linux (UFW):**
```bash
sudo ufw allow 3001/tcp
```
**Windows:**
```powershell
New-NetFirewallRule -DisplayName "Resource Monitor" -Direction Inbound -LocalPort 3001 -Protocol TCP -Action Allow
```
### Reverse Proxy (Optional but Recommended)
Use Nginx to serve on port 80/443:
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
```
### Configuring Notifications (Setup Wizard)
1. Navigate to **Settings** in the top navigation
2. Configure email notifications:
- Toggle "Email Notifications" on
- Select your email provider (Gmail, Outlook, Yahoo, or Custom)
- Enter your email credentials
- **For Gmail**: Use an App Password (see instructions in the UI)
- Click "Send Test Email" to verify
3. Configure webhook notifications (optional):
- Toggle "Webhook Notifications" on
- Enter your webhook URL (Slack, Discord, etc.)
- Click "Send Test Webhook" to verify
4. Click "Save Settings"
### Adding Resources
1. Click "Add Resource" on the dashboard
2. Enter resource details:
- **Name**: Friendly name (e.g., "ZimaOS Home Server")
- **URL**: Full URL to monitor (e.g., "https://your-zima.example.com")
- **Check Interval**: How often to check (in milliseconds)
- **Timeout**: Maximum time to wait for response
## API Endpoints
- `GET /api/resources` - List all resources
- `POST /api/resources` - Create new resource
- `GET /api/resources/:id` - Get resource details
- `PUT /api/resources/:id` - Update resource
- `DELETE /api/resources/:id` - Delete resource
- `GET /api/dashboard` - Dashboard overview
- `GET /api/incidents` - Recent incidents
## Project Structure
```
mon/
├── server/ # Backend Node.js/Express
│ ├── index.js # Main server file
│ ├── database.js # SQLite database setup
│ ├── monitorService.js
│ ├── notificationService.js
│ └── scheduler.js
├── client/ # React frontend
│ └── src/
│ ├── App.js # Main React component
│ └── App.css # Styles
├── data/ # SQLite database (auto-created)
├── .env # Environment configuration
└── package.json
```
## Configuration
### Check Intervals
The monitoring system checks all enabled resources every minute. You can customize individual resource check intervals through the UI.
### Data Retention
- Check history: 7 days
- Incidents: Indefinitely (manual cleanup)
## Troubleshooting
### Port Already in Use
If port 3001 is already in use, change it in `.env`:
```env
PORT=3002
```
### Email Not Sending
- Verify SMTP credentials
- Check that 2FA is enabled and app password is used
- Test with a simple SMTP client first
### Resource Not Being Checked
- Verify resource is enabled
- Check server logs for errors
- Ensure URL is accessible from server
## License
MIT