Skip to content
phpMyAdmin server side component for the error reporting system
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin Update link to MIT license Aug 3, 2016
plugins Addes cakephp to the repo Jun 29, 2013
webroot Run Github issue state synchronization through CakePHP shell interface Jun 29, 2017
.gitignore Remove composer.phar from Git May 15, 2017
.travis.yml Add more PHP versions to travis ci Dec 5, 2018
LICENSE Added license file and added copyright info to AppController Jul 30, 2013 Fix up Markdown syntax. Mar 3, 2018

phpMyAdmin's Error Reporting Server

Build Status codecov Scrutinizer Code Quality

phpMyAdmin server side component for the error reporting system. It uses CakePHP v2.3 with some extra plugins like migrations, debugkit and OAuth component.

How To deploy

In order to deploy the app in this repo you need to follow these steps:

  • Clone this repo or extract the zip file
  • Add a virtual hosts entry pointing at the directory where you extracted the files in the previous step. Make sure that the installation is in the document root.
  • Run composer install to download and configure dependencies and library files
  • Configure the web server (see below)
  • Create the database for the server
  • install mbstring (required for cake 3.0)
  • install intl extension; on Debian use: sudo apt-get install php-intl //(required for cake 3.0)
  • cd application_root_dir (directory under which subdirectory src resides)
  • mkdir tmp;
  • mkdir logs;
  • set permissions for tmp and logs directory
    • HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
    • setfacl -R -m u:${HTTPDUSER}:rwx tmp
    • setfacl -R -d -m u:${HTTPDUSER}:rwx tmp
    • setfacl -R -m u:${HTTPDUSER}:rwx logs
    • setfacl -R -d -m u:${HTTPDUSER}:rwx logs
  • Rename the example files config/app_example.php to config/app.php and fill out the required info. Make sure to change the salts, debug level and the database credentials in the app.php file.
  • Rename the oauth_example.php to oauth.php and follow the instructions below to set the appropriate variables in the file.
  • Run the migrations that have been created so far to setup the database
    • For existing systems: update and run migrations sudo bin/cake migrations mark_migrated 20150607191654 sudo bin/cake migrations migrate
    • For new system: just run migration sudo bin/cake migrations migrate


  • php >= 5.4
  • MySQL

Web server setup

  • Configuration for Apache (this will run the server on port 80, if you already have services on port 80 you may wish to use a different port or configuration method):
<VirtualHost *:80>
			ServerAdmin webmaster@localhost

			<Directory /path/to/repo/dir/webroot/>
				AddType application/x-httpd-php .html
				Options Indexes MultiViews
				Require all granted

			ErrorLog "/var/log/httpd/"
			CustomLog "/var/log/httpd/" common
  • Configuration for lighttpd:
$HTTP["host"] =~ "^$" {
			server.document-root = "/srv/http/"
			url.rewrite-if-not-file =(
				"^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3"
  • Configuration for nginx:
server {
        listen [::]:80;
        listen [::]:443 ssl;

        root /home/reports/error-reporting-server/webroot/;
        index index.html index.htm index.php;


        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$args;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm-reports.sock;
                fastcgi_index index.php;
                include fastcgi_params;

Oath configuration setup

Creating the GitHub app

The application relies on authentication using GitHub. To obtain the client ID and key, visit application settings in your Github profile and register an application there.

The callback for the github app should be /developers/callback.

The obtained cliend ID and secret should be stored in the config/oauth.php.

Github Events

  • Add a webhook at your target repository with payload URL as https://<host>:<port>/events

    • Select content-type as application/json
    • Select Issues events from available events
    • Set the secret token value
  • Set the appropriate value of secret token in app.php (same as what you set while setting up the webhook)

Sync Github Issue state

  • Get a Github Personal Access token as explained here
  • Set value of obtained GithubAccessToken in config/oauth.php
  • After setting value of GithubAccessToken in config/oauth.php as explained above, you can run the synchronization action as
./bin/cake sync_github_issue_states
  • This can be scheduled as a cron job too.

How to run the test suite

If you are on a development machine you can use the webrunner at /test.php However if you need a command line runner. You can use:

sudo vendor/bin/phpunit -c phpunit.xml.dist

Running the stackhash update shell

There is a new way of finding unique stacktraces that uses hashes that did not exist previously. I created a shell to calculate those hashes for old records so that they can work with the new code. To use the shell you can just type:

Console/cake custom addHashesToOldRecords

Cron Jobs

To Schedule & run cron jobs cakephp provides a console tool. We need to create shell for use in console. We can run the created shell as cron job.

Execute an Action as Cron Job

For example, following is the command to execute the shell src/Shell/StatsShell.php which cache the error reporting statistics for later use.

bin/cake stats

stats cache will expire in one day so we need to schedule this command to run everyday as cron job.

We need to create new shells to schedule and run different tasks.

Cron Job Logging

A separate log file named cron_jobs is maintained for all the cron jobs. All the logging is done via CakeLog interface. All the failures and other activity relating to cron jobs should be reported there only. That would make debugging easier in case of failure.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.