UNPKG

@oriolrius/grafana-business-text

Version:

Data-driven text with Markdown and Handlebars support for Grafana

200 lines (143 loc) 6.03 kB
# SQLite Demo Setup for Business Text Panel This setup provides a SQLite datasource with a pre-populated `devices` table for testing the Business Text panel's data-driven features, specifically the learning panel edit functionality. ## Files Created 1. **`provisioning/datasources/sqlite.yml`** - SQLite datasource configuration for Grafana 2. **`scripts/create-sqlite-db.sh`** - Script to create the SQLite database with sample data 3. **`provisioning/dashboards/sqlite-demo.json`** - Demo dashboard using SQLite data 4. **`examples/learning-panel-edit-sqlite.js`** - Modified version of learning-panel-edit.js for SQLite ## Database Structure The SQLite database contains a `devices` table with the following structure: ```sql CREATE TABLE devices ( id INTEGER PRIMARY KEY AUTOINCREMENT, hostname TEXT NOT NULL, ip_address TEXT NOT NULL, mac_address TEXT, os TEXT, status TEXT, last_seen_at INTEGER, -- Unix timestamp created_at INTEGER, -- Unix timestamp password TEXT, username TEXT ); ``` ### Sample Data The database is pre-populated with 10 realistic IoT device records matching your original PostgreSQL data, including: - Gateway devices with various statuses (online, offline, maintenance) - Different IP ranges and MAC addresses - Unix timestamps for temporal fields - Mixed username/password combinations ## Setup Instructions ### 1. Create the SQLite Database ```bash # Run the database creation script ./scripts/create-sqlite-db.sh ``` This creates `/tmp/devices.db` with the devices table and sample data. ### 2. Start Grafana with SQLite Support The docker-compose.yml has been updated to include the SQLite plugin and mount the database: ```bash # Start Grafana with SQLite support docker compose --profile dev up ``` ### 3. Configure the Datasource The SQLite datasource will be automatically provisioned as "SQLite Demo" when Grafana starts. **Manual Configuration (if needed):** 1. Go to Configuration → Data Sources 2. Add SQLite datasource 3. Set path to: `/var/lib/grafana/data/devices.db` 4. Test connection ### 4. Use the Demo Dashboard A demo dashboard (`sqlite-demo.json`) is automatically provisioned with: - Pie chart showing device status distribution - Business Text panel with the interactive devices table ## Testing the Learning Panel Edit Script ### Using the SQLite Version 1. Create a new Business Text panel 2. Set datasource to "SQLite Demo" 3. Add query: `SELECT * FROM devices ORDER BY id` 4. In the "After Content Ready" section, paste the content from: ``` examples/learning-panel-edit-sqlite.js ``` ### Key Differences from PostgreSQL Version The SQLite version includes: 1. **SQLite-specific SQL syntax** - Uses SQLite boolean handling (1/0 instead of true/false) - Proper timestamp handling for SQLite INTEGER timestamps 2. **Updated error messages** - References "SQLite" in error messages for clarity - Specific SQLite debugging information 3. **Datasource configuration** - Uses `sqlite-demo` as the default datasource UID - Can be changed by modifying `currentDataSourceUid` variable ## Features Supported All features from the original PostgreSQL version work with SQLite: ✅ **Inline Editing** - Click any cell (except ID) to edit ✅ **Keyboard Navigation** - Tab/Shift+Tab to move between cells ✅ **Data Validation** - Timestamp format validation with visual feedback ✅ **Save/Cancel** - Individual row save/cancel operations ✅ **Delete Operations** - Row deletion with confirmation ✅ **Real-time Updates** - Changes reflected immediately in UI ✅ **Error Handling** - Comprehensive error reporting ✅ **Theme Integration** - Full Grafana theme support ## Verification Commands ```bash # Check database contents sqlite3 /tmp/devices.db "SELECT COUNT(*) FROM devices;" # View sample data sqlite3 /tmp/devices.db "SELECT hostname, ip_address, status FROM devices LIMIT 5;" # Check table structure sqlite3 /tmp/devices.db ".schema devices" ``` ## Troubleshooting ### Common Issues 1. **"No Data" Error** - Verify SQLite database exists: `ls -la /tmp/devices.db` - Check Grafana logs for SQLite plugin installation - Ensure datasource UID matches in your panel configuration 2. **SQLite Plugin Not Found** - Restart Grafana to install plugins - Check docker-compose.yml includes `frser-sqlite-datasource` 3. **Database Not Found** - Run `./scripts/create-sqlite-db.sh` to create the database - Verify database is mounted in docker-compose.yml 4. **Permission Issues** - Check `/tmp/devices.db` file permissions - Ensure Grafana container can read the database file ### Debug Steps 1. **Check Plugin Installation** ```bash docker-compose exec grafana grafana-cli plugins ls ``` 2. **Verify Database** ```bash docker-compose exec grafana ls -la /var/lib/grafana/data/devices.db ``` 3. **Test Datasource** - Go to Grafana → Configuration → Data Sources - Click "SQLite Demo" → Test ## Extending the Demo ### Adding More Data ```sql -- Connect to database sqlite3 /tmp/devices.db -- Add more devices INSERT INTO devices (hostname, ip_address, mac_address, os, status, last_seen_at, created_at, username) VALUES ('new-device', '192.168.1.100', '00:1b:44:11:3a:ff', 'Linux', 'online', 1748928000000, 1748928000000, 'admin'); ``` ### Modifying Table Structure ```sql -- Add new column ALTER TABLE devices ADD COLUMN location TEXT; -- Update existing records UPDATE devices SET location = 'Building A' WHERE hostname LIKE '%floor%'; ``` ## Production Considerations For production use: 1. **Move database to persistent storage** (not `/tmp`) 2. **Use proper SQLite file permissions** 3. **Implement database backups** 4. **Consider SQLite WAL mode** for better concurrency 5. **Add database indices** for better performance This SQLite setup provides an identical testing environment to your PostgreSQL setup while being completely self-contained and easy to distribute for demo purposes.