GUI troubleshooting: Difference between revisions

From VoIPmonitor.org
(Add /dev/shm filesystem capacity section for session logout issues)
(Add spool directory ownership fix for GUI loading issues)
 
(38 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:GUI manual]]
= GUI Troubleshooting =


This page provides troubleshooting tips and debugging techniques for the VoIPmonitor web GUI.
This guide covers common VoIPmonitor GUI issues organized by symptom category.


== GUI Debug Mode ==
== Quick Navigation ==


The GUI debug mode allows you to see SQL queries and other debugging information directly in your browser's Developer Console.
{| class="wikitable"
! Category !! Common Issues
|-
| [[#Access Issues|Access Issues]] || HTTP 500, blank screen, single user cannot access
|-
| [[#No Data Issues|No Data Issues]] || No CDR for today, empty dashboard, missing calls
|-
| [[#Database Issues|Database Issues]] || Timeouts, corruption, connections, schema errors
|-
| [[#GUI Upgrade Issues|GUI Upgrade Issues]] || Cannot login, blank screen, VM Binary error
|-
| [[#Permission Issues|Permission Issues]] || Ownership errors, NAS access, binary execution
|-
| [[#IonCube and PHP Issues|IonCube/PHP Issues]] || Loader errors, temp directory, PHP version
|-
| [[#Other Issues|Other Issues]] || Timezone, fax, attachments, RRD graphs
|}


=== Enabling Debug Mode ===
== Access Issues ==


To enable debug mode in the VoIPmonitor web GUI, '''add the parameter <code>?debug=31415</code> to the end of any GUI URL'''. For example:
=== HTTP 500 Error ===


<code>http://your-server/voipmon/admin.php?debug=31415</code>
'''Client-side steps (try first):'''
# Different browser or incognito mode
# Clear browser cache (Ctrl+Shift+Delete)
# Disable browser extensions
# Try from a different network


This enables the following features:
'''Server-side diagnosis:'''
* SQL queries executed by the GUI are logged to the browser's Developer Console
* Additional debugging information is displayed for dashboard panels and charts
* Performance timing and query execution details become visible


=== Finding SQL Queries for Dashboard Panels ===
<syntaxhighlight lang="bash">
# Check Apache error log
tail -100 /var/log/apache2/error.log    # Debian/Ubuntu
tail -100 /var/log/httpd/error_log      # RHEL/CentOS


To see the exact SQL query executed by a dashboard panel:
# Check PHP-FPM log
tail -100 /var/log/php-fpm/www-error.log


# Add <code>?debug=31415</code> to your GUI URL and navigate to the dashboard
# Check SELinux
# Open your browser's Developer Tools (press F12 or Ctrl+Shift+I)
getenforce
# Switch to the '''Console''' tab
# If "Enforcing", try temporarily: setenforce 0
# Interact with the dashboard (e.g., refresh, change time range, or hover over panels)
</syntaxhighlight>
# The SQL queries will be printed to the console log


The queries appear in the console in the order the panels are rendered. If you need to isolate a specific panel, hover over it or interact with its filters after loading the page - this often triggers a re-query which will appear as a new entry in the console.
{{Tip|For detailed SQL query debugging, add <code>?debug=31415</code> to any GUI URL and check browser console (F12).}}


=== Disabling Debug Mode ===


Simply remove the <code>?debug=31415</code> parameter from the URL, or navigate to any GUI page without it. Debug mode is not persistent and must be re-enabled each time by adding the URL parameter.


== GUI Upgrade Issues ==
=== Firefox/Waterfox: Blank Page or Hang on Login ===


The following are common issues that may occur during GUI upgrades and their solutions.
'''Firefox/Waterfox: Blank Page or Hang on Login'''


=== VM Binary (binary missing) Error ===
If the Web GUI shows a blank page or hangs during login, but works correctly in Chrome/Edge, the cause is typically a browser extension conflict.


If you encounter an error message indicating "VM Binary (binary missing)" during or after a GUI upgrade, this indicates that the GUI application files were not completely updated. Perform a forced CLI upgrade to resolve this issue:
'''Diagnosis:'''
* Issue occurs in Firefox/Waterfox but not Chrome/Edge
* Works when Developer Tools (F12) is open
* Persists in private mode and through SSH tunnels


<syntaxhighlight lang="bash">
'''Solution:'''
# Log in to the GUI host as root
# In Firefox, navigate to '''about:addons'''
# Navigate to the GUI installation directory (default is /var/www/html)
# Select Extensions tab and '''disable all extensions'''
cd /var/www/html
# Close and reopen Firefox completely
 
# Attempt to log in to the GUI
# Execute the forced upgrade command
# If successful, one extension is the cause. Re-enable extensions one by one (or in pairs) restarting Firefox and testing after each change to identify the specific culprit
php php/run.php upgrade -f
=== Single User Cannot Access ===
</syntaxhighlight>


The <code>-f</code> flag forces a complete upgrade, which updates any missing or corrupt GUI binaries.
If one user cannot access GUI while others can:


=== Blank Screen with JavaScript ReferenceError After Update ===
# '''Check IP whitelist''': User Management > edit user > "Access from IPs" field
# '''Check network path''': Compare user's route vs working users
# '''Capture traffic''': <syntaxhighlight lang="bash" inline>tcpdump -i eth0 host USER_IP -w /tmp/debug.pcap</syntaxhighlight>


If you can log in to the GUI after an update but are presented with a blank screen, and the browser's JavaScript console shows an error like:
=== Blank Screen After Upgrade ===
 
<code>ReferenceError: _AuditActivity_download_wav is not defined</code>
 
This is typically caused by a conflicting PEAR file that was not removed during the upgrade. The fix is simple:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Remove the conflicting old PEAR constants file
# Check for conflicting PEAR file
ls -la /usr/share/pear/constants.php
# If exists, remove it:
rm /usr/share/pear/constants.php
rm /usr/share/pear/constants.php


# Refresh your browser (Ctrl+Shift+R) to reload the GUI
# Check SELinux
</syntaxhighlight>
getenforce
 
# If Enforcing, temporarily disable: setenforce 0
After removing this file and refreshing the browser, the GUI should load correctly. This issue occurs because the old <code>constants.php</code> file from the system's PEAR installation conflicts with VoIPmonitor's internal JavaScript definitions.
 
== MySQL/MariaDB Database Corruption ==
 
If the Web GUI fails to start and logs show MySQL/MariaDB database errors (such as corrupted tables, missing files, or startup failures), this indicates database corruption. This can occur after manual file deletion, disk failures, or improper MySQL shutdown procedures.
 
=== Symptoms ===
 
* Web GUI displays database connection errors or shows a blank page
* MySQL/MariaDB service fails to start or immediately crashes
* Error messages in MySQL logs indicating corrupted tables or missing database files
* CDR queries return empty results or throw SQL errors


=== Diagnosis ===
# Clear browser cache
 
# Press Ctrl+F5 in browser
First, check the MySQL/MariaDB service status:
 
<syntaxhighlight lang="bash">
# Check if MySQL/MariaDB is running
systemctl status mysql
# or
systemctl status mariadb
 
# View MySQL error logs for corruption indicators
tail -100 /var/log/mysql/error.log
# or
tail -100 /var/log/mariadb/mariadb.log
</syntaxhighlight>
</syntaxhighlight>


Look for error messages such as:
== No Data Issues ==
* <code>Table is marked as crashed</code>
* <code>InnoDB: Database page corruption</code>
* <code>Incorrect key file</code>
* <code>Can't open file</code>


=== Solution: Restore from PCAP Files (Recommended) ===
=== No CDR or Dashboard Data for Current Day ===


If the database is corrupted, a complete restore is necessary. The recommended approach is to '''restore CDR data from the pcap files stored in the spool directory''' into a new, clean database. This preserves your call recordings and metadata while fixing the corruption issue.
'''Step 1: Check sensor status'''


'''Warning:''' This procedure requires stopping the VoIPmonitor services and may take significant time depending on the amount of data to restore.
Navigate to '''Settings > Sensors''' in GUI:
* '''Status UP''' - Sensor connected, proceed to Step 2
* '''Status Down''' - Sensor disconnected, see [[#Sensor Down|Sensor Down]] below


The following diagram illustrates the restoration workflow:
'''Step 2: Generate debug log (if sensor UP)'''


<kroki lang="plantuml">
Navigate to '''Tools > Generate Debug Log''' and share the link with VoIPmonitor support.
@startuml
skinparam shadowing false
skinparam defaultFontName Arial
skinparam activityFontSize 12
skinparam arrowFontSize 11


title Database Restore from PCAP Files
'''Step 3: Check common causes'''


start
{| class="wikitable"
! Cause !! Diagnosis !! Solution
|-
| Missing partition || <code>SHOW CREATE TABLE cdr;</code> - check partition for today's date || <code>ALTER TABLE cdr ADD PARTITION (PARTITION pYYYYMMDD VALUES LESS THAN (UNIX_TIMESTAMP('YYYY-MM-DD')));</code>
|-
| Timezone mismatch || GUI shows different time than DB || Settings > System Configuration > National > Timezone
|-
| CDR disabled || Check voipmonitor.conf || Ensure <code>cdr = yes</code>
|-
| Spool directory || Check <code>spooldir</code> path || Verify path exists and has correct permissions
|}


:Stop VoIPmonitor services;
{{Note|If GUI shows yesterday's data but not today's, the most common cause is a missing database partition.}}
note right: voipmonitor, manager, gui


:Backup corrupted database;
==== Sensor Down ====
note right: /var/lib/mysql-backup-corrupted


:Remove corrupted database;
<syntaxhighlight lang="bash">
note right: /var/lib/mysql/voipmonitor
# Check sensor service
systemctl status voipmonitor


:Start MySQL/MariaDB;
# View recent logs
journalctl -u voipmonitor -n 500


:Create fresh database;
# Check database connectivity
note right: CREATE DATABASE voipmonitor
mysql -h DB_HOST -u voipmonitor -p -e "SELECT 1"


:Run sniffer in restore mode;
# Restart if needed
note right: --readpcapdir /var/spool/voipmonitor
systemctl restart voipmonitor
</syntaxhighlight>


while (All PCAP files processed?) is (no)
=== No Audio Playback ===
  :Process next PCAP file;
  :Generate CDR records;
endwhile (yes)


:Stop restore process;
If QoS data is visible but no audio:
 
:Start normal service;
note right: systemctl start voipmonitor
 
:Verify Web GUI access;
 
stop
 
@enduml
</kroki>
 
==== Step 1: Stop VoIPmonitor Services ====
 
Stop all VoIPmonitor services to prevent further database corruption:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Stop the sniffer service
# Check voipmonitor.conf
systemctl stop voipmonitor
grep -E "^savertp|^savegraph" /etc/voipmonitor.conf
 
# Stop sniffer manager (if running)
systemctl stop voipmonitor-manager


# Stop any other VoIPmonitor services
# Should show:
systemctl stop voipmonitor-gui
# savertp = yes
# savegraph = yes (optional)
</syntaxhighlight>
</syntaxhighlight>


==== Step 2: Backup the Corrupted Database ====
See [[Sniffer_configuration#RTP_and_Audio_Recording|RTP and Audio Recording]] for detailed configuration.


Although corrupted, create a backup of the existing database for troubleshooting purposes:
== Database Issues ==


<syntaxhighlight lang="bash">
=== GUI Queries Timeout (40-50 seconds) ===
# Stop MySQL/MariaDB service
systemctl stop mysql


# Create a backup of the MySQL data directory
'''MySQL/MariaDB tuning:'''
sudo cp -a /var/lib/mysql /var/lib/mysql-backup-corrupted
</syntaxhighlight>


==== Step 3: Remove the Corrupted Database ====
<syntaxhighlight lang="ini">
# /etc/mysql/mysql.conf.d/mysqld.cnf or /etc/my.cnf.d/server.cnf


Move or remove the corrupted database files to prepare for a fresh database:
[mysqld]
# Set to 50-70% of available RAM
innodb_buffer_pool_size = 4G


<syntaxhighlight lang="bash">
# Reduce disk I/O (slight durability tradeoff)
# Remove the corrupted VoIPmonitor database directory
innodb_flush_log_at_trx_commit = 2
sudo rm -rf /var/lib/mysql/voipmonitor


# Alternatively, move it instead of deleting:
# Increase connection timeout
sudo mv /var/lib/mysql/voipmonitor /var/lib/mysql/voipmonitor.corrupted
wait_timeout = 28800
interactive_timeout = 28800
</syntaxhighlight>
</syntaxhighlight>


==== Step 4: Start MySQL/MariaDB Service ====
'''Apache mod_fcgid timeout:'''


Restart the MySQL/MariaDB service:
If you see "server side error - check your http server error log. - connection to the web server was lost / interrupted":


<syntaxhighlight lang="bash">
<syntaxhighlight lang="apache">
# Start MySQL/MariaDB
# In httpd.conf or apache2.conf
systemctl start mysql
<IfModule mod_fcgid.c>
 
    FcgidIdleTimeout 900
# Verify the service is running
    FcgidProcessLifeTime 7200
systemctl status mysql
    FcgidConnectTimeout 300
    FcgidIOTimeout 900
</IfModule>
</syntaxhighlight>
</syntaxhighlight>
==== Step 5: Create a Fresh VoIPmonitor Database ====
Create a new empty database for VoIPmonitor:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Log in to MySQL as root
systemctl restart apache2  # or httpd
mysql -u root -p
</syntaxhighlight>
</syntaxhighlight>


Run the following SQL commands:
=== Too Many Connections ===


<syntaxhighlight lang="sql">
<syntaxhighlight lang="sql">
CREATE DATABASE voipmonitor;
-- Check current connections
CREATE USER 'voipmonitor'@'localhost' IDENTIFIED BY 'your_password_here';
SHOW STATUS LIKE 'Threads_connected';
GRANT ALL PRIVILEGES ON voipmonitor.* TO 'voipmonitor'@'localhost';
SHOW VARIABLES LIKE 'max_connections';
FLUSH PRIVILEGES;
EXIT;
</syntaxhighlight>


Replace <code>your_password_here</code> with a strong password.
-- Increase limit (temporary)
SET GLOBAL max_connections = 500;


==== Step 6: Restore CDRs from PCAP Files ====
-- Permanent: add to my.cnf
 
-- max_connections = 500
Instruct the sniffer to reprocess all PCAP files from the spool directory and populate the new database:
 
<syntaxhighlight lang="bash">
# 1. Verify your spool directory path
# Check voipmonitor.conf for the spooldir setting (default: /var/spool/voipmonitor)
grep "^spooldir" /etc/voipmonitor.conf
 
# 2. Clear the sniffer's manager socket for the restore process
# This ensures clean communication with the sniffer
rm -f /tmp/vmsck
 
# 3. Start the sniffer in restore mode
# The sniffer will read all PCAP files from the spool directory
# and regenerate CDR records in the new database
voipmonitor --config-file /etc/voipmonitor.conf --readpcapdir /var/spool/voipmonitor
</syntaxhighlight>
</syntaxhighlight>


'''Note:''' The <code>--readpcapdir</code> parameter instructs the sniffer to process all PCAP files in the specified directory. This may take considerable time depending on the amount of historical data.
=== MySQL Swap Memory Warning ===


==== Step 7: Monitor the Restore Process ====
If you see swap memory warning on GUI login:


Monitor the restore progress:
* '''Less than 50 MB swap''' - Safe to ignore, minor performance impact
* '''Hundreds of MB or GB''' - Investigate memory usage, consider increasing RAM or reducing innodb_buffer_pool_size


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Monitor sniffer output for progress
# Check MySQL memory usage
journalctl -u voipmonitor -f
ps aux | grep mysqld
 
free -h
# Alternatively, check the database for new CDR records
mysql -u root -p voipmonitor -e "SELECT COUNT(*) FROM cdr;"
</syntaxhighlight>
</syntaxhighlight>


==== Step 8: Restart Normal Service ====
=== Unknown Column in Field List ===


Once the restore is complete, restart the sniffer in normal operation mode:
If GUI shows "Unknown column [table].[column] in 'field list'":


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Stop the restore process (Ctrl+C if running manually)
# Method 1: URL parameter (fastest)
# Then start the normal sniffer service
# Add ?check_tables=1 to GUI URL:
systemctl start voipmonitor
# http://your-gui-ip/admin.php?check_tables=1


# Verify the sniffer is running and capturing
# Method 2: Command line
systemctl status voipmonitor
cd /var/www/html
php php/run.php dbcheck


# Test Web GUI access
# Method 3: Restart sensor (if disable_dbupgradecheck=no)
# Navigate to http://your-server/ in your browser
systemctl restart voipmonitor
</syntaxhighlight>
</syntaxhighlight>


=== Prevention: Database Backup Strategies ===
=== Database Corruption ===
 
To avoid future data loss due to database corruption:
 
==== Automatic Filesystem Backup ====


Configure regular backups of the MySQL data directory:
'''Recovery methods (try in order):'''


'''Method 1: Table repair'''
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Example: Daily backup using cron
mysqlcheck -u root -p --auto-repair voipmonitor
0 2 * * * /usr/bin/rsync -av --delete /var/lib/mysql/ /backup/mysql-$(date +\%Y\%m\%d)/
</syntaxhighlight>
</syntaxhighlight>


==== MySQL Replication ====
'''Method 2: Drop and recreate specific table'''
<syntaxhighlight lang="sql">
-- Backup structure first
SHOW CREATE TABLE problematic_table;


Set up MySQL master-slave replication for redundancy:
-- Drop and let sensor recreate
* See the [[Mysql_master-slave_replication_hints]] guide for detailed instructions
DROP TABLE problematic_table;
* This provides a real-time backup database that can be promoted if corruption occurs
-- Restart sensor: systemctl restart voipmonitor
</syntaxhighlight>


==== VoIPmonitor Database Replication ====
'''Method 3: InnoDB force recovery'''
<syntaxhighlight lang="ini">
# Add to my.cnf [mysqld] section:
innodb_force_recovery = 1
# Restart MySQL, export data, remove option, reimport
</syntaxhighlight>


Use VoIPmonitor's built-in database backup mode ([[Redundant_database]]):
{{Warning|After using innodb_force_recovery, remove the option before resuming normal operations. The database is read-only while this option is set.}}
* This replicates CDR data to a secondary database server
* No traditional MySQL replication required
* Useful for GUI migrations and disaster recovery


== RRD Graph Errors After Hardware Upgrades ==
'''Method 4: PCAP restore'''


After a hardware upgrade or system migration, RRD (Round Robin Database) graphs in the VoIPmonitor GUI may display errors indicating that Data Sources (DS) are missing from RRD files. This occurs because RRD files are created with a specific hardware-dependent schema that may become incompatible after system changes.
If PCAPs are preserved, drop database and let sensor reindex:
<syntaxhighlight lang="bash">
# Edit voipmonitor.conf
reindex_all = yes  # (temporary)


=== Symptoms ===
systemctl restart voipmonitor
# Wait for reindexing to complete, then remove reindex_all
</syntaxhighlight>


* RRD graphs in the Web GUI show display errors instead of rendering data
See [[Database_troubleshooting]] for detailed recovery procedures.
* Error message: <code>ERROR: No DS called '...' in '/var/spool/voipmonitor/rrd/..."'</code>
* Example: <code>ERROR: No DS called 'SQLq-SM' in '/var/spool/voipmonitor/rrd/3db-SQL.rrd'</code>
* The error appears after hardware upgrades, CPU changes, or system migrations
* Multiple RRD files may be affected, affecting various graph types


=== RRD File Location ===
=== MySQL 8.0 Issues ===


RRD files are stored in the RRD directory within the VoIPmonitor spool directory:
'''SYSTEM_USER privilege error:'''
<syntaxhighlight lang="sql">
GRANT SYSTEM_USER ON *.* TO 'voipmonitor'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'voipmonitor'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;


<code>/var/spool/voipmonitor/rrd/</code>
-- Also set:
 
SET GLOBAL log_bin_trust_function_creators = 1;
=== Root Cause ===
</syntaxhighlight>
 
RRD (Round Robin Database) files contain time-series data with a schema defined at creation time. Some data sources in RRD files are hardware-specific (e.g., CPU metrics tied to specific CPU identifiers). When hardware changes, the schema information stored in the RRD files may no longer match the current system configuration, resulting in missing Data Source (DS) errors.
 
=== Solution: Delete Corrupted RRD Files ===
 
The VoIPmonitor service will automatically recreate RRD files with the correct schema if they are missing. This is a safe operation because:
 
* New RRD files will be created with the current hardware's correct schema
* Historical RRD data is typically short-term (graph display purposes only)
* CDR data and call recordings are stored separately and are not affected


==== Step 1: Stop the VoIPmonitor Service ====
'''MySQL 8.0.42 crashes:'''


Stop the voipmonitor service to prevent file access conflicts:
{{Warning|MySQL 8.0.42 has known bugs causing VoIPmonitor crashes. Upgrade to 8.0.43 or later.}}


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
systemctl stop voipmonitor
mysql --version
# If 8.0.42:
sudo apt install --only-upgrade mysql-server-8.0  # Debian/Ubuntu
sudo dnf update mysql-server                      # RHEL
</syntaxhighlight>
</syntaxhighlight>


==== Step 2: Remove Corrupted RRD Files ====
=== Managed Database: Primary Key Error ===


Delete the affected RRD files from the RRD directory. You can remove individual problematic files or the entire RRD directory:
For DigitalOcean, AWS RDS, Google Cloud SQL:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="sql">
# Option 1: Remove specific corrupted RRD file (recommended)
-- Disable in managed DB console or parameter group:
rm /var/spool/voipmonitor/rrd/3db-SQL.rrd
sql_require_primary_key = OFF
 
# Option 2: Remove all RRD files if multiple errors exist
rm /var/spool/voipmonitor/rrd/*
</syntaxhighlight>
</syntaxhighlight>


Replace <code>3db-SQL.rrd</code> with the actual filename from the error message.
== GUI Upgrade Issues ==


==== Step 3: Start the VoIPmonitor Service ====
=== Cannot Login After Upgrade ===


Start the voipmonitor service to recreate the RRD files:
'''Reset password via database:'''
<syntaxhighlight lang="sql">
UPDATE users SET password = MD5('newpassword') WHERE username = 'admin';
</syntaxhighlight>


'''Redis session issue (login loop):'''
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
systemctl start voipmonitor
redis-cli FLUSHALL
systemctl restart php-fpm
</syntaxhighlight>
</syntaxhighlight>


The service will automatically detect the missing RRD files and recreate them with the correct schema based on the current hardware configuration. New graph data will begin accumulating immediately.
=== VM Binary Error ===
 
==== Step 4: Verify RRD Graphs ====
 
Check the Web GUI to verify that RRD graphs are now displaying correctly:
 
* Navigate to the VoIPmonitor Web GUI
* Access dashboard or reporting pages with RRD graphs
* Verify that graphs render without errors
* Note: Historical data in the affected RRD files will be lost, but new data will start appearing
 
=== Rerunning with Different Hardware ===
 
If you need to preserve RRD data when moving to different hardware (for example, testing on a different machine), consider these options:
 
* '''Don't copy RRD files''' - Let the new system create fresh RRD files with appropriate schemas
* '''Use rrdtool dump/restore''' - For advanced users, you can modify RRD file contents using rrdtool export/import tools
* '''Accept data loss''' - RRD data is typically short-term monitoring data, not critical call records
 
=== Related Information ===
 
* RRD files are separate from CDR data (cdr table in MySQL) and PCAP recordings
* The VoIPmonitor <code>spooldir</code> location is configurable in /etc/voipmonitor.conf
* RRD files are automatically created by the sniffer service when needed
 
== IonCube Loader Issues ==
 
The VoIPmonitor GUI is protected with IonCube, which requires proper PHP configuration. Common issues include permission errors on temporary directories and security module interference.
 
=== Unable to create lock file / temp directory not writable ===
 
If you see errors like "Unable to create lock file" or "System temp directory check fails... not writable" from IonCube Loader, follow these troubleshooting steps:
 
==== Step 1: Update the system and restart ====
 
First, ensure your system packages are up to date:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Debian/Ubuntu
cd /var/www/html
sudo apt update && sudo apt upgrade -y
php php/run.php upgrade -f
 
# RHEL/CentOS/AlmaLinux
sudo yum update -y
# or
sudo dnf update -y
 
# Then restart the server
sudo reboot
</syntaxhighlight>
</syntaxhighlight>


==== Step 2: Check SELinux or AppArmor ====
=== Invalid Compressed Data ===
 
Security modules like SELinux (default on RHEL/CentOS/Red Hat systems) or AppArmor (default on Ubuntu/Debian) can block IonCube from accessing temporary directories.
 
'''Check if SELinux is enabled:'''


Usually caused by incorrect web root ownership:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Check current status
chown -R www-data:www-data /var/www/html  # Debian/Ubuntu
getenforce
chown -R apache:apache /var/www/html      # RHEL/CentOS
 
# Common values: Enforcing (active), Permissive (logging only), Disabled
 
# To temporarily disable SELinux for testing:
sudo setenforce 0
</syntaxhighlight>
</syntaxhighlight>


If disabling SELinux resolves the issue, you can permanently configure it:
=== Unable to Remove Old Files ===


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Edit the SELinux configuration file
# Fix tshark ownership
sudo nano /etc/selinux/config
chown www-data:www-data /var/www/html/bin/tshark*
 
# Change SELINUX= to either:
# SELINUX=permissive
# or
# SELINUX=disabled


# Then reboot the server
# Retry upgrade from GUI
sudo reboot
</syntaxhighlight>
</syntaxhighlight>


'''Check if AppArmor is enabled:'''
=== Upgrade Not Visible ===


Check internet connectivity from GUI server:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Check AppArmor status
curl -I https://www.voipmonitor.org
sudo aa-status
ping www.voipmonitor.org
 
# If AppArmor is running, temporarily disable individual profiles:
sudo aa-disable /etc/apparmor.d/*php*
 
# Or disable it entirely for testing:
sudo systemctl stop apparmor
sudo systemctl disable apparmor
</syntaxhighlight>
</syntaxhighlight>


==== Step 3: Check systemd PrivateTmp ====
== Permission Issues ==
 
Some systemd service configurations use <code>PrivateTmp=true</code>, which creates a private temporary directory for each service. This can cause issues if the private tmp directory has restrictive permissions.


Check if your web server is using PrivateTmp:
=== Incorrect Ownership Error ===


Often caused by missing execute permissions on binaries:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# For Apache
# Fix bin directory
systemctl show httpd | grep PrivateTmp
chmod +x /var/www/html/bin/*
# or
systemctl show apache2 | grep PrivateTmp


# For PHP-FPM
# Verify
systemctl show php-fpm | grep PrivateTmp
ls -la /var/www/html/bin/
</syntaxhighlight>
</syntaxhighlight>


If PrivateTmp is enabled (value=1), disable it in the service file:
=== NAS Spool Permission Denied ===


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Create override directory if it doesn't exist
# Use ACLs (recommended)
sudo mkdir -p /etc/systemd/system/httpd.service.d
setfacl -R -m u:www-data:rwx /path/to/nas/spool
 
# CRITICAL: Set on ALL parent directories too
setfacl -m u:www-data:rx /NAS
setfacl -m u:www-data:rx /NAS/voipmonitor


# Create override file
# Verify
sudo nano /etc/systemd/system/httpd.service.d/privatetmp.conf
sudo -u www-data ls /path/to/nas/spool
</syntaxhighlight>
</syntaxhighlight>


Add the following content:
=== SELinux Blocking mscgen (SIP Call Flow Diagrams) ===
 
<syntaxhighlight lang="ini">
[Service]
PrivateTmp=false
</syntaxhighlight>


Then reload and restart:
If SIP call flow diagram shows "convert msc to svg (mscgen): unknown error":


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Reload systemd and restart the service
# Check SELinux denials
sudo systemctl daemon-reload
ausearch -m avc -ts recent | grep mscgen
sudo systemctl restart httpd
# or
sudo systemctl restart apache2
</syntaxhighlight>


==== Step 4: Verify PHP Temporary Directory Configuration ====
# Create policy module
 
grep mscgen /var/log/audit/audit.log | audit2allow -M mscgen_local
Check which temporary directory PHP is using:
semodule -i mscgen_local.pp
 
Create a PHP info file:
 
<syntaxhighlight lang="bash">
echo '<?php phpinfo(); ?>' > /var/www/html/info.php
</syntaxhighlight>
</syntaxhighlight>


Visit <code>http://your-server-ip/info.php</code> in your browser and search for:
== IonCube and PHP Issues ==
* <code>upload_tmp_dir</code>
* <code>sys_get_temp_dir</code>
* <code>session.save_path</code>


Ensure these directories are writable by the web server user:
=== Temp Directory Not Writable ===


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Check ownership
# Check and fix /tmp permissions
ls -ld /tmp
ls -ld /tmp
chmod 1777 /tmp


# Fix ownership if needed
# Check SELinux
sudo chown www-data:www-data /tmp  # Debian/Ubuntu
getenforce
# or
# If Enforcing, try: setenforce 0
sudo chown apache:apache /tmp      # CentOS/RHEL


# Fix permissions
# Check systemd PrivateTmp
sudo chmod 1777 /tmp
systemctl show httpd | grep PrivateTmp
# If true, create override:
# /etc/systemd/system/httpd.service.d/privatetmp.conf
# [Service]
# PrivateTmp=false
</syntaxhighlight>
</syntaxhighlight>


'''Important:''' Clean up after troubleshooting:
=== PHP CLI vs Web Server Mismatch ===


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
rm /var/www/html/info.php
# Test as web server user
sudo -u www-data php -r 'echo extension_loaded("ionCube Loader")?"yes":"no";'
 
# Compare configs
php --ini                    # CLI config
# Create phpinfo: echo '<?php phpinfo();' > /var/www/html/info.php
# Check "Loaded Configuration File" in browser
# Remove after: rm /var/www/html/info.php
</syntaxhighlight>
</syntaxhighlight>


==== Step 5: Check open_basedir restrictions ====
=== License Activation: Server Side Error - Forbidden ===
 
This indicates ionCube PHP version incompatibility:


If the above steps don't resolve the issue, check if PHP's <code>open_basedir</code> is restricting access to the temp directory:
{| class="wikitable"
! GUI Version !! PHP Version
|-
| v26.37+ || PHP 8.3 supported
|-
| Older || PHP 8.2 or earlier required
|}


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Check open_basedir in php.ini
# Check Apache error log
grep open_basedir /etc/php/*/apache2/php.ini
tail -50 /var/log/apache2/error.log | grep -i ioncube
# or
 
grep open_basedir /etc/php.ini
# Solution: Either upgrade GUI to v26.37+ or downgrade PHP to 8.2
</syntaxhighlight>
</syntaxhighlight>


Ensure the temp directory is included in the list, e.g.:
== Other Issues ==


<code>open_basedir = /var/www/html:/tmp:/var/tmp</code>
=== Invalid Timezone (GUI Inaccessible) ===


== /dev/shm Filesystem Capacity Issues ==
<syntaxhighlight lang="bash">
# Edit directly
nano /var/www/html/config/configuration.php


After a period of operation, user sessions may start logging out and new logins become impossible. This occurs when the <code>/dev/shm</code> filesystem (tmpfs) reaches its capacity limit. The VoIPmonitor GUI stores PHP session files in <code>/dev/shm</code> by default for performance reasons.
# Find and fix:
define('TIMEZONE', 'UTC');  # Use valid timezone
define('SENSORS_TIMEZONE', 'UTC');


=== Symptoms ===
systemctl restart php-fpm
 
</syntaxhighlight>
* Users are frequently logged out from the GUI
* New logins fail or immediately redirect to login screen
* <code>/dev/shm</code> is reported as full (100% capacity)
* GUI behavior improves temporarily after clearing session files


=== Diagnosis ===
Valid timezones: <code>UTC</code>, <code>Europe/London</code>, <code>America/New_York</code>, <code>Europe/Berlin</code>, etc.


Check the current <code>/dev/shm</code> usage:
=== Faxes Not Displayed ===


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Check /dev/shm usage and available space
# Install libtiff-tools
df -h /dev/shm
apt-get install libtiff-tools    # Debian/Ubuntu
 
yum install libtiff-tools        # RHEL/CentOS
# Check how much space is used by session files
du -sh /dev/shm/php_sessions/*


# Count session files
# Verify
ls /dev/shm/php_sessions/ | wc -l
which tiff2pdf
</syntaxhighlight>
</syntaxhighlight>


=== Solution: Increase /dev/shm Size ===
=== File Attachment Blocked ===


==== Temporary Increase (Until Reboot) ====
Files like .xlsx, .docx are blocked for security. Compress to .zip or .gz:
<syntaxhighlight lang="bash">
zip archive.zip your_file.xlsx
</syntaxhighlight>


To temporarily increase the size of <code>/dev/shm</code> without rebooting:
=== RRD Graph Errors After Hardware Change ===


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Remount /dev/shm with increased size (example: 1GB)
# Delete corrupted RRD files
mount -o remount,size=1G /dev/shm
rm -rf /var/spool/voipmonitor/rrd/*


# Verify the new size
# Sensor will recreate them
df -h /dev/shm
systemctl restart voipmonitor
</syntaxhighlight>
</syntaxhighlight>


Adjust the size parameter (<code>size=1G</code>) based on your server's RAM and expected number of concurrent users.
=== /dev/shm Full (Session Logout Issues) ===


==== Permanent Configuration (Persistent After Reboot) ====
<syntaxhighlight lang="bash">
# Check usage
df -h /dev/shm


To make the size increase permanent, edit the <code>/etc/fstab</code> file:
# Temporary increase
mount -o remount,size=1G /dev/shm


<syntaxhighlight lang="bash">
# Permanent: edit /etc/fstab
# Edit /etc/fstab as root
# tmpfs /dev/shm tmpfs defaults,size=1G 0 0
sudo nano /etc/fstab
</syntaxhighlight>
</syntaxhighlight>


Find the line for <code>/dev/shm</code>. It typically looks like this:
=== Concurrent Calls Stats Error ===
<pre>tmpfs /dev/shm tmpfs defaults 0 0</pre>
 
Modify it to include the size parameter:
<pre>tmpfs /dev/shm tmpfs defaults,size=1G 0 0</pre>
 
Save the file and apply the changes without rebooting:


Usually caused by duplicate cron entries:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Remount all filesystems from /etc/fstab
# Check for duplicates
mount -a
grep "voipmonitor\|run.php" /etc/crontab


# Verify the new size
# Comment out duplicates, keep only one
df -h /dev/shm
</syntaxhighlight>
</syntaxhighlight>


=== Prevention: Session Cleanup Configuration ===
=== TShark CVE Security Updates ===


Ensure that PHP is configured to clean up old session files from <code>/dev/shm</code>. Check the following PHP configuration settings:
The bundled tshark may have known CVEs. To update:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Check session configuration
cd /var/www/html/bin
php -i | grep -i session


# Look for these directives in php.ini:
# Download updated binary from Wireshark
# session.gc_maxlifetime - Session lifetime in seconds (default: 1440 = 24 minutes)
wget https://www.wireshark.org/download/automated/linux64/tshark
# session.gc_probability - Probability of garbage collection (default: 0)
chmod +x tshark
# session.gc_divisor - Garbage collection divisor (default: 1000)
chown www-data:www-data tshark
</syntaxhighlight>
</syntaxhighlight>


For automatic cleanup, ensure <code>session.gc_probability</code> is set to a non-zero value. The probability is calculated as <code>gc_probability / gc_divisor</code>. For example:
=== Dashboard Edit Icon Grayed Out ===


* <code>session.gc_probability = 1</code> and <code>session.gc_divisor = 100</code> = 1% chance each session start
User lacks edit permission. Grant via '''User Management''' > edit user > enable "Edit Dashboard" permission.
* <code>session.gc_probability = 1</code> and <code>session.gc_divisor = 10</code> = 10% chance each session start


=== Related Information ===
== GUI Not Loading (Spool Directory Ownership) ==


* <code>/dev/shm</code> is a tmpfs filesystem backed by RAM
If the GUI is not loading or shows generic error messages, the cause may be incorrect ownership of the spool directory by the web server user.
* Increasing <code>/dev/shm</code> size consumes physical RAM - monitor total memory usage
* The GUI typically stores session files in <code>/dev/shm/php_sessions/</code> when configured for performance
* Alternative session handlers (memcached, redis) can be considered for very high-traffic deployments


== Alternative: MySQL General Log ==
<syntaxhighlight lang="bash">
 
# Fix spool directory ownership
If you need a persistent server-side log of all database queries (not just from the GUI), you can enable the MySQL general log:
chown -R www-data:www-data /var/spool/voipmonitor    # Debian/Ubuntu
 
# OR
<syntaxhighlight lang="sql">
chown -R apache:apache /var/spool/voipmonitor        # RHEL/CentOS
-- Enable general log
</syntaxhighlight>
SET GLOBAL general_log = 'ON';


-- Perform actions in the GUI...
{{Note|The spool directory path is defined by the <code>spooldir</code> parameter in <code>/etc/voipmonitor.conf</code>. Use the correct path for your configuration.}}


-- Disable when done (important for performance)
SET GLOBAL general_log = 'OFF';
</syntaxhighlight>


The log file location is typically <code>/var/lib/mysql/hostname.log</code> or as defined in your MySQL configuration.


'''Warning:''' The general log can grow very quickly on a busy system. Always disable it after debugging.


== AI Summary for RAG ==
== AI Summary for RAG ==


'''Summary:''' This page covers GUI troubleshooting techniques including debug mode activation, MySQL/MariaDB database corruption restoration from PCAP files, RRD graph errors after hardware upgrades (No DS errors in RRD files), upgrade issues (blank screen with JavaScript errors, conflicting constants.php file), IonCube Loader problems with temp directory permissions, SELinux, AppArmor, and systemd PrivateTmp, and /dev/shm filesystem capacity issues causing session logout problems.
'''Summary:''' VoIPmonitor GUI troubleshooting guide covering: (1) HTTP 500 errors - try client-side steps first (different browser, incognito, clear cache), then check Apache/PHP error logs and SELinux; (2) No CDR for current day - check sensor status in Settings > Sensors, generate debug log if UP, check partitions/timezone/cdr config if Down; (3) GUI debug mode - add ?debug=31415 to URL; (4) Database timeouts - tune innodb_buffer_pool_size (50-70% RAM), increase mod_fcgid timeouts; (5) Database corruption - use mysqlcheck, drop/recreate tables, or innodb_force_recovery; (6) GUI upgrade issues - reset password via database, fix ownership, run php php/run.php upgrade -f; (7) Permission errors - chmod +x bin/*, use setfacl for NAS; (8) IonCube errors - check SELinux, PHP version compatibility (GUI v26.37+ for PHP 8.3); (9) Schema errors - use ?check_tables=1 URL parameter.


'''Keywords:''' GUI troubleshooting, debug mode, MySQL corruption, MariaDB corruption, database restore, PCAP restore, CDR restore, RRD graphs, RRD error, Round Robin Database, hardware upgrade, No DS called, delete RRD files, systemctl stop voipmonitor, IonCube, SELinux, AppArmor, PrivateTmp, temporary directory, permissions, open_basedir, upgrade issues, blank screen, JavaScript errors, constants.php, PEAR, ReferenceError, /dev/shm, dev shm, tmpfs, session logout, login failed, mount -o remount, fstab, session gc, session.gc_maxlifetime, session.gc_probability, php_sessions
'''Keywords:''' HTTP 500, no CDR, sensor status, debug mode, ?debug=31415, innodb_buffer_pool_size, MySQL tuning, database corruption, mysqlcheck, innodb_force_recovery, GUI upgrade, password reset, IonCube, SELinux, PHP 8.3, ?check_tables=1, NAS permissions, setfacl, mod_fcgid timeout, FcgidIOTimeout, mscgen, SIP call flow, tshark CVE, MySQL 8.0.42, SYSTEM_USER privilege, /dev/shm, timezone error, libtiff-tools, file attachment blocked


'''Key Questions:'''
'''Key Questions:'''
* How do I enable debug mode in the GUI to see SQL queries?
* HTTP 500 error on GUI - what to try first?
* What should I do if the MySQL/MariaDB database is corrupted?
* No CDR or dashboard data for current day - how to diagnose?
* How do I restore CDR data from PCAP files after database corruption?
* How to enable GUI debug mode?
* RRD graphs show error "No DS called 'SQLq-SM'" after hardware upgrade - how do I fix it?
* GUI queries timeout - how to tune MySQL?
* How do I fix RRD graph errors appearing after system migration or CPU change?
* Database corrupted - which recovery method to use?
* Can I delete RRD files and will voipmonitor recreate them automatically?
* Cannot login after GUI upgrade - how to reset password?
* Where are VoIPmonitor RRD files stored?
* Permission errors with NAS spool - how to fix?
* How do I fix "Unable to create lock file" errors from IonCube Loader?
* IonCube temp directory errors - what causes them?
* How do I check if SELinux or AppArmor is blocking the GUI?
* GUI shows "Unknown column in field list" - how to fix?
* What is systemd PrivateTmp and how does it affect the GUI?
* SIP call flow diagram shows error - how to fix SELinux blocking?
* Why is my GUI showing a blank screen with JavaScript ReferenceError after an update?
* MySQL 8.0.42 causing crashes - what to do?
* How do I fix ReferenceError: _AuditActivity_download_wav is not defined?
* License activation fails with Forbidden error - what causes it?
* Users are being logged out and cannot login - /dev/shm is full - what do I do?
* How do I increase /dev/shm size?
* How do I permanently change /dev/shm size in /etc/fstab?
* How do I configure PHP to clean up old session files from /dev/shm?

Latest revision as of 01:37, 10 January 2026

GUI Troubleshooting

This guide covers common VoIPmonitor GUI issues organized by symptom category.

Quick Navigation

Category Common Issues
Access Issues HTTP 500, blank screen, single user cannot access
No Data Issues No CDR for today, empty dashboard, missing calls
Database Issues Timeouts, corruption, connections, schema errors
GUI Upgrade Issues Cannot login, blank screen, VM Binary error
Permission Issues Ownership errors, NAS access, binary execution
IonCube/PHP Issues Loader errors, temp directory, PHP version
Other Issues Timezone, fax, attachments, RRD graphs

Access Issues

HTTP 500 Error

Client-side steps (try first):

  1. Different browser or incognito mode
  2. Clear browser cache (Ctrl+Shift+Delete)
  3. Disable browser extensions
  4. Try from a different network

Server-side diagnosis:

# Check Apache error log
tail -100 /var/log/apache2/error.log    # Debian/Ubuntu
tail -100 /var/log/httpd/error_log      # RHEL/CentOS

# Check PHP-FPM log
tail -100 /var/log/php-fpm/www-error.log

# Check SELinux
getenforce
# If "Enforcing", try temporarily: setenforce 0

💡 Tip:


Firefox/Waterfox: Blank Page or Hang on Login

Firefox/Waterfox: Blank Page or Hang on Login

If the Web GUI shows a blank page or hangs during login, but works correctly in Chrome/Edge, the cause is typically a browser extension conflict.

Diagnosis:

  • Issue occurs in Firefox/Waterfox but not Chrome/Edge
  • Works when Developer Tools (F12) is open
  • Persists in private mode and through SSH tunnels

Solution:

  1. In Firefox, navigate to about:addons
  2. Select Extensions tab and disable all extensions
  3. Close and reopen Firefox completely
  4. Attempt to log in to the GUI
  5. If successful, one extension is the cause. Re-enable extensions one by one (or in pairs) restarting Firefox and testing after each change to identify the specific culprit

Single User Cannot Access

If one user cannot access GUI while others can:

  1. Check IP whitelist: User Management > edit user > "Access from IPs" field
  2. Check network path: Compare user's route vs working users
  3. Capture traffic: tcpdump -i eth0 host USER_IP -w /tmp/debug.pcap

Blank Screen After Upgrade

# Check for conflicting PEAR file
ls -la /usr/share/pear/constants.php
# If exists, remove it:
rm /usr/share/pear/constants.php

# Check SELinux
getenforce
# If Enforcing, temporarily disable: setenforce 0

# Clear browser cache
# Press Ctrl+F5 in browser

No Data Issues

No CDR or Dashboard Data for Current Day

Step 1: Check sensor status

Navigate to Settings > Sensors in GUI:

  • Status UP - Sensor connected, proceed to Step 2
  • Status Down - Sensor disconnected, see Sensor Down below

Step 2: Generate debug log (if sensor UP)

Navigate to Tools > Generate Debug Log and share the link with VoIPmonitor support.

Step 3: Check common causes

Cause Diagnosis Solution
Missing partition SHOW CREATE TABLE cdr; - check partition for today's date ALTER TABLE cdr ADD PARTITION (PARTITION pYYYYMMDD VALUES LESS THAN (UNIX_TIMESTAMP('YYYY-MM-DD')));
Timezone mismatch GUI shows different time than DB Settings > System Configuration > National > Timezone
CDR disabled Check voipmonitor.conf Ensure cdr = yes
Spool directory Check spooldir path Verify path exists and has correct permissions

ℹ️ Note: If GUI shows yesterday's data but not today's, the most common cause is a missing database partition.

Sensor Down

# Check sensor service
systemctl status voipmonitor

# View recent logs
journalctl -u voipmonitor -n 500

# Check database connectivity
mysql -h DB_HOST -u voipmonitor -p -e "SELECT 1"

# Restart if needed
systemctl restart voipmonitor

No Audio Playback

If QoS data is visible but no audio:

# Check voipmonitor.conf
grep -E "^savertp|^savegraph" /etc/voipmonitor.conf

# Should show:
# savertp = yes
# savegraph = yes (optional)

See RTP and Audio Recording for detailed configuration.

Database Issues

GUI Queries Timeout (40-50 seconds)

MySQL/MariaDB tuning:

# /etc/mysql/mysql.conf.d/mysqld.cnf or /etc/my.cnf.d/server.cnf

[mysqld]
# Set to 50-70% of available RAM
innodb_buffer_pool_size = 4G

# Reduce disk I/O (slight durability tradeoff)
innodb_flush_log_at_trx_commit = 2

# Increase connection timeout
wait_timeout = 28800
interactive_timeout = 28800

Apache mod_fcgid timeout:

If you see "server side error - check your http server error log. - connection to the web server was lost / interrupted":

# In httpd.conf or apache2.conf
<IfModule mod_fcgid.c>
    FcgidIdleTimeout 900
    FcgidProcessLifeTime 7200
    FcgidConnectTimeout 300
    FcgidIOTimeout 900
</IfModule>
systemctl restart apache2  # or httpd

Too Many Connections

-- Check current connections
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';

-- Increase limit (temporary)
SET GLOBAL max_connections = 500;

-- Permanent: add to my.cnf
-- max_connections = 500

MySQL Swap Memory Warning

If you see swap memory warning on GUI login:

  • Less than 50 MB swap - Safe to ignore, minor performance impact
  • Hundreds of MB or GB - Investigate memory usage, consider increasing RAM or reducing innodb_buffer_pool_size
# Check MySQL memory usage
ps aux | grep mysqld
free -h

Unknown Column in Field List

If GUI shows "Unknown column [table].[column] in 'field list'":

# Method 1: URL parameter (fastest)
# Add ?check_tables=1 to GUI URL:
# http://your-gui-ip/admin.php?check_tables=1

# Method 2: Command line
cd /var/www/html
php php/run.php dbcheck

# Method 3: Restart sensor (if disable_dbupgradecheck=no)
systemctl restart voipmonitor

Database Corruption

Recovery methods (try in order):

Method 1: Table repair

mysqlcheck -u root -p --auto-repair voipmonitor

Method 2: Drop and recreate specific table

-- Backup structure first
SHOW CREATE TABLE problematic_table;

-- Drop and let sensor recreate
DROP TABLE problematic_table;
-- Restart sensor: systemctl restart voipmonitor

Method 3: InnoDB force recovery

# Add to my.cnf [mysqld] section:
innodb_force_recovery = 1
# Restart MySQL, export data, remove option, reimport

⚠️ Warning: After using innodb_force_recovery, remove the option before resuming normal operations. The database is read-only while this option is set.

Method 4: PCAP restore

If PCAPs are preserved, drop database and let sensor reindex:

# Edit voipmonitor.conf
reindex_all = yes  # (temporary)

systemctl restart voipmonitor
# Wait for reindexing to complete, then remove reindex_all

See Database_troubleshooting for detailed recovery procedures.

MySQL 8.0 Issues

SYSTEM_USER privilege error:

GRANT SYSTEM_USER ON *.* TO 'voipmonitor'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'voipmonitor'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- Also set:
SET GLOBAL log_bin_trust_function_creators = 1;

MySQL 8.0.42 crashes:

⚠️ Warning: MySQL 8.0.42 has known bugs causing VoIPmonitor crashes. Upgrade to 8.0.43 or later.

mysql --version
# If 8.0.42:
sudo apt install --only-upgrade mysql-server-8.0  # Debian/Ubuntu
sudo dnf update mysql-server                       # RHEL

Managed Database: Primary Key Error

For DigitalOcean, AWS RDS, Google Cloud SQL:

-- Disable in managed DB console or parameter group:
sql_require_primary_key = OFF

GUI Upgrade Issues

Cannot Login After Upgrade

Reset password via database:

UPDATE users SET password = MD5('newpassword') WHERE username = 'admin';

Redis session issue (login loop):

redis-cli FLUSHALL
systemctl restart php-fpm

VM Binary Error

cd /var/www/html
php php/run.php upgrade -f

Invalid Compressed Data

Usually caused by incorrect web root ownership:

chown -R www-data:www-data /var/www/html  # Debian/Ubuntu
chown -R apache:apache /var/www/html       # RHEL/CentOS

Unable to Remove Old Files

# Fix tshark ownership
chown www-data:www-data /var/www/html/bin/tshark*

# Retry upgrade from GUI

Upgrade Not Visible

Check internet connectivity from GUI server:

curl -I https://www.voipmonitor.org
ping www.voipmonitor.org

Permission Issues

Incorrect Ownership Error

Often caused by missing execute permissions on binaries:

# Fix bin directory
chmod +x /var/www/html/bin/*

# Verify
ls -la /var/www/html/bin/

NAS Spool Permission Denied

# Use ACLs (recommended)
setfacl -R -m u:www-data:rwx /path/to/nas/spool

# CRITICAL: Set on ALL parent directories too
setfacl -m u:www-data:rx /NAS
setfacl -m u:www-data:rx /NAS/voipmonitor

# Verify
sudo -u www-data ls /path/to/nas/spool

SELinux Blocking mscgen (SIP Call Flow Diagrams)

If SIP call flow diagram shows "convert msc to svg (mscgen): unknown error":

# Check SELinux denials
ausearch -m avc -ts recent | grep mscgen

# Create policy module
grep mscgen /var/log/audit/audit.log | audit2allow -M mscgen_local
semodule -i mscgen_local.pp

IonCube and PHP Issues

Temp Directory Not Writable

# Check and fix /tmp permissions
ls -ld /tmp
chmod 1777 /tmp

# Check SELinux
getenforce
# If Enforcing, try: setenforce 0

# Check systemd PrivateTmp
systemctl show httpd | grep PrivateTmp
# If true, create override:
# /etc/systemd/system/httpd.service.d/privatetmp.conf
# [Service]
# PrivateTmp=false

PHP CLI vs Web Server Mismatch

# Test as web server user
sudo -u www-data php -r 'echo extension_loaded("ionCube Loader")?"yes":"no";'

# Compare configs
php --ini                    # CLI config
# Create phpinfo: echo '<?php phpinfo();' > /var/www/html/info.php
# Check "Loaded Configuration File" in browser
# Remove after: rm /var/www/html/info.php

License Activation: Server Side Error - Forbidden

This indicates ionCube PHP version incompatibility:

GUI Version PHP Version
v26.37+ PHP 8.3 supported
Older PHP 8.2 or earlier required
# Check Apache error log
tail -50 /var/log/apache2/error.log | grep -i ioncube

# Solution: Either upgrade GUI to v26.37+ or downgrade PHP to 8.2

Other Issues

Invalid Timezone (GUI Inaccessible)

# Edit directly
nano /var/www/html/config/configuration.php

# Find and fix:
define('TIMEZONE', 'UTC');  # Use valid timezone
define('SENSORS_TIMEZONE', 'UTC');

systemctl restart php-fpm

Valid timezones: UTC, Europe/London, America/New_York, Europe/Berlin, etc.

Faxes Not Displayed

# Install libtiff-tools
apt-get install libtiff-tools    # Debian/Ubuntu
yum install libtiff-tools        # RHEL/CentOS

# Verify
which tiff2pdf

File Attachment Blocked

Files like .xlsx, .docx are blocked for security. Compress to .zip or .gz:

zip archive.zip your_file.xlsx

RRD Graph Errors After Hardware Change

# Delete corrupted RRD files
rm -rf /var/spool/voipmonitor/rrd/*

# Sensor will recreate them
systemctl restart voipmonitor

/dev/shm Full (Session Logout Issues)

# Check usage
df -h /dev/shm

# Temporary increase
mount -o remount,size=1G /dev/shm

# Permanent: edit /etc/fstab
# tmpfs /dev/shm tmpfs defaults,size=1G 0 0

Concurrent Calls Stats Error

Usually caused by duplicate cron entries:

# Check for duplicates
grep "voipmonitor\|run.php" /etc/crontab

# Comment out duplicates, keep only one

TShark CVE Security Updates

The bundled tshark may have known CVEs. To update:

cd /var/www/html/bin

# Download updated binary from Wireshark
wget https://www.wireshark.org/download/automated/linux64/tshark
chmod +x tshark
chown www-data:www-data tshark

Dashboard Edit Icon Grayed Out

User lacks edit permission. Grant via User Management > edit user > enable "Edit Dashboard" permission.

GUI Not Loading (Spool Directory Ownership)

If the GUI is not loading or shows generic error messages, the cause may be incorrect ownership of the spool directory by the web server user.

# Fix spool directory ownership
chown -R www-data:www-data /var/spool/voipmonitor    # Debian/Ubuntu
# OR
chown -R apache:apache /var/spool/voipmonitor        # RHEL/CentOS

ℹ️ Note: The spool directory path is defined by the spooldir parameter in /etc/voipmonitor.conf. Use the correct path for your configuration.



AI Summary for RAG

Summary: VoIPmonitor GUI troubleshooting guide covering: (1) HTTP 500 errors - try client-side steps first (different browser, incognito, clear cache), then check Apache/PHP error logs and SELinux; (2) No CDR for current day - check sensor status in Settings > Sensors, generate debug log if UP, check partitions/timezone/cdr config if Down; (3) GUI debug mode - add ?debug=31415 to URL; (4) Database timeouts - tune innodb_buffer_pool_size (50-70% RAM), increase mod_fcgid timeouts; (5) Database corruption - use mysqlcheck, drop/recreate tables, or innodb_force_recovery; (6) GUI upgrade issues - reset password via database, fix ownership, run php php/run.php upgrade -f; (7) Permission errors - chmod +x bin/*, use setfacl for NAS; (8) IonCube errors - check SELinux, PHP version compatibility (GUI v26.37+ for PHP 8.3); (9) Schema errors - use ?check_tables=1 URL parameter.

Keywords: HTTP 500, no CDR, sensor status, debug mode, ?debug=31415, innodb_buffer_pool_size, MySQL tuning, database corruption, mysqlcheck, innodb_force_recovery, GUI upgrade, password reset, IonCube, SELinux, PHP 8.3, ?check_tables=1, NAS permissions, setfacl, mod_fcgid timeout, FcgidIOTimeout, mscgen, SIP call flow, tshark CVE, MySQL 8.0.42, SYSTEM_USER privilege, /dev/shm, timezone error, libtiff-tools, file attachment blocked

Key Questions:

  • HTTP 500 error on GUI - what to try first?
  • No CDR or dashboard data for current day - how to diagnose?
  • How to enable GUI debug mode?
  • GUI queries timeout - how to tune MySQL?
  • Database corrupted - which recovery method to use?
  • Cannot login after GUI upgrade - how to reset password?
  • Permission errors with NAS spool - how to fix?
  • IonCube temp directory errors - what causes them?
  • GUI shows "Unknown column in field list" - how to fix?
  • SIP call flow diagram shows error - how to fix SELinux blocking?
  • MySQL 8.0.42 causing crashes - what to do?
  • License activation fails with Forbidden error - what causes it?