Qpackt's features
Collecting basic stats from HTTP requests
Qpackt collects simple stats from HTTP requests. Each request is matched to a visitor using their ip and
user-agent fingerprinting.
You can see bounce rate, average requests per visit, session duration, etc. This is done without tracking
cookies.
Collecting custom events from browsers
To better monitor visitors you can send events from JavaScript. Events can have custom payload and represent
any action you can think of: scrolling to the bottom, staying on the page longer than X, clicking a button, etc.
This is also done without tracking cookies or local storage.
You can see summary of collected events (and download full list) in admin's console.
More about events
A/B testing with multiple site versions
You can deploy multiple versions of your website and then compare engagement between them.
More about serving multiple versions
Rolling a new version of your website
To prevent missing links (or missing parts of an SPA website), you can gradually roll new sessions to
the new version and keep existing sessions on the old one. After a day/week, you can safely remove the old
version.
More about serving multiple versions
Splitting traffic based on a URL param
When you control the link to your website (like paid ads) you can add a special url parameter to each link.
Then you can compare engagement based on the source link.
More about serving multiple versions
Reverse proxy for backend application
HTTP server wouldn't be fully functional without a reverse proxy. Qpackt allows you to proxy traffic to another
app.
Automatically fetching SSL certificate from Let's Encrypt
Qpackt can automatically fetch an SSL certificate from letsencrypt.org. All you need to do is to enable SSL
proxy in the config file.
GUI configuration
Most of the stuff above is configured via GUI. Only the initial setup/installation is via a console.
Planned futures
Below are some ideas that we think would be cool. Keep in mind that the list below is really haphazard and
some duplicates may happen. If you think anything below is worth implementing, let me know by creating an issue
(and giving a star) on GitHub
- Remove visits without JS installed
Create special function (served by Qpackt) that is called to "validate" a visit. Visits that
are not validated within a few seconds would be removed. This prevents counting visits from bots and such.
- Conversion endpoint
Define a special endpoint to track conversion. Add some stats to it, allow for numeric payload, then show
some analytics per version (like average and such).
- Measure time on url
This could in two variants: including search params and just the url. Define a function that will be used to
measure time spent
on a given page. Then show stats how many percent of visits got there and show histogram of visits' duration.
- Define and endpoint to remove some other event
This could be used to track that something didn't happen (like visitor dropped at checkout).
- Collect referrer headers
Simply collect referrer headers and show stats per referrer.
- Build docker image
Place docker image in docker hub for easier deployment.
- Initial config via GUI
Instead of running as command line, use web for initial config.
- Refresh certificate on demand
Allow for a button (in admin's console) to refresh certificate.
- Handle not found
Serve either 404.html or index.html when requested file isn't found. This would also fix problems with
refresh on SPA.
- Transfer limits
Limit transferred bytes per IP address per month. This is to prevent racking up a large bill on some providers.
- Request per second limits
Again, a little thing that can be done to prevent simple DOS attacks.
- Collect browser errors
Especially for SPA. Possibly with some alerts for the admin.
- Support websockets
Current implementation is mainly for single request/response scenario. Websockets require different approach.
- Split traffic by platform
For example, send mobile users to different version than desktop.
- Split traffic by location
For example, users from one country will get a different version.
- Implement health check endpoints
Passive endpoints reporting server's health to a third party.
- Active health checks
Monitoring health of backend applications and reporting everything in one place.
- Response monitoring
Monitor 5xx and 4xx responses from reverse proxy.
- Docker / Podman support
Allow running an image as backend application (and do reverse proxy there).
- Monitor backend app response times
Monitor usual response times (per endpoint) and alert when becoming unusually high.
- Monitor resources
Monitor stuff like cpu/memory/disk with some alerts.
- Deploy web from git
Observe some defined branch, deploy automatically that branch, redirect traffic to new version.
- Version notes
Allow attaching textual notes to versions to help manage their meaning.
- Record and replay backend app request
Mainly for debugging.
- View own logs and change log level
For convenience mainly.
- Scan website for broken links
Scan for broken links at upload.
- Read-only access to stats/analytics
Some kind of permission levels where viewing stats doesn't require admin's password.
- Admin's console for mobile
More responsive design to view admin's console on mobiles.
- APT/YUM package
Build and distribute apt/yum package for ease of installation/update.
- Get into distributions
Get apt/yum into distributions (Mint, Ubuntu, Fedora, Redhat, etc...)
- Use client/server database
For performance mainly.
- Handle restarts
Implement nginx style to handle restarts without dropping connections.
- Display some friendly info if reverse proxy doesn't work
Mainly for visitors so they know to try again soon. Possibly with alerting for admins.
- Switch for SPA analysis
Some kind of switch to stop analysing single requests and analyse calls to special endpoint with posted data
about router route, visitor and such.
- Kubernetes friendly
Share all state between pods (probably via database) so that kubernetes can do a rolling update.
- Http calls filter
Remove certain calls (with regex) from analysis (for example favicon.ico).
- Alert when too many 404
Count and alert when too many file requests returns with 'NOT FOUND'.
- Refresh SSL cert during normal operations
At the moment a cert is only checked for expiration at startup. Do this all the time.
- Allow changing versions' names
To make it a bit more descriptive.
- Limit response speed per version
Could be used for testing.
- Recognize mobile / wide screen visits
And shows stats per platform per version. This could be useful to recognise problems when visits from one
platform are always shorter than others.
- Most common exit page
Collect stats about most common exit pages.
- Collect resolution stats
To better optimize the website.
- Allow WebAsm apps
Allow to upload compiled application in the form of webassembly file and direct requests there (kind of like
reverse proxy).
App would be executed in the qpackt context.
- Easier integration with Fail2Ban
For safety / dos protection etc...
- Delete stats older than X
To save space as old stats may not be relevant anymore.
- Allow version override
New version but keep old stats. Can be useful for fixing typos and small errors. While uploading pick which
versions should be overridden with the new one.
- Collect search engines phrases
Collect phrases from various search engines to know how the site was found.
- One panel for multiple websites
To ease administration.