Queues
Every place work can pile up between one part of this system and the next. All of these should sit at or near zero on a working day; a number that climbs and does not come back down is a drain that has stopped running, not a busy afternoon. Each count is only this business's.
What strangers asked for
Public quote requests over the last 30 days, by what happened. A refused row is somebody who wanted to send a parcel and got no price, because the address meant nothing to the gazetteer — the one number here that is about the moat rather than about traffic. No addresses and no phone numbers are kept: db/082 is a tally, and a row per request would be a log of who wanted to send what, where.
| Service | Outcome | Speed | Requests |
|---|
Cash going missing, by rider
The cash variances count above, with a name against it. One under-collection is a customer arguing about a dented crate; ten is something else, and the number that tells them apart is the rate rather than the total. This is a conversation to have, not a verdict — a rider covering the hardest corridor will sit at the top of this table honestly.
| Rider | Deliveries | Short | Rate | Cash short |
|---|---|---|---|---|
| Loading… | ||||
One pair of hands, two halves of a payment
These accounts can both set where a rider's money goes and send it. Migration 056 was written about that pair: the classic move in any payroll system is changing the number the night before payday. The record is defended — payee rows are append-only, the name is checked against the verified Ghana Card, the old number is warned — but nothing stops one person doing both halves.
This is not an error. On day one it is the owner, which is correct: there is one, and they are the business. It is here so that the day a second name appears beside theirs, somebody notices.
| Account | Roles |
|---|
Morning digest
What /today would say, sent to a phone once a day at the hour each person chose (Accra time). Every day, all clear included — a digest that goes quiet on quiet days teaches you that silence means broken.
Loading…
| Phone | Who | At | Last sent | |
|---|---|---|---|---|
| Loading… | ||||
Recent errors
The last fifty failed requests this process has seen, kept in memory and lost on restart. Not an error tracker — the answer to "what went wrong in the last hour" before anybody has finished wiring one.
| When | Request | Path | What happened |
|---|---|---|---|
| Loading… | |||
This process
One container. If uptime keeps resetting, something is killing it and the interesting evidence is in the container log rather than here.
Rate-limit buckets are a single process-global map keyed by address, session, rider or merchant — never by tenant, because a limit on an address has to work before anyone knows whose address it is. That is why seeing and clearing them is an operator action.
Every time this process started
Newest first. Ran for is start to last heartbeat; down for is the gap before the next boot. A row marked dead is a process that stopped answering and has not been replaced — if you are reading this page, that is not the one serving it.
| Started | Ran for | Ended | Down for | Commit | Node |
|---|
Memory over the last day
Resident set size, sampled every five minutes since this process started, oldest on the left. Climbing steadily across a day is a leak; a sawtooth is the garbage collector doing its job.
| Sampled | RSS | Heap in use |
|---|
What is being throttled
One row per class of limit, not per caller. A key is an
address or a session, and putting those on a screen would be a list of who
has been using the system — kept for no reason, on a page about a process.
Blocked is the column worth reading: four thousand buckets is a busy
afternoon, and one blocked login is somebody standing at a
screen unable to get in.
Clearing a class does not raise a limit or excuse anything — it hands back the tokens, so a dispatcher who mistyped their password six times can try again now instead of in a minute.
| Class | Buckets | Blocked | Oldest |
|---|