Flow map
history: …Haveloc, at a glance
Business outcomes, platform health and money — one page, read top to bottom.
Placement pipeline
Eligible → applied → offered on the jobs posted in the window; conversion at every step.
Needs attention
Everything on the platform that wants a decision today — services, alerts, findings, idle accounts, money in transit, queues. Each line opens the page that explains it.
✓
Nothing needs attention
Services healthy, no alerts, no idle accounts, no backlog.
Jobs posted & offers per period
Demand from companies and outcomes for students, bucket by bucket.
Collections & platform revenue
College payments collected and Haveloc's share of the vendor charge, per period.
Payments analytics is not available on this backend.
Top tenants by jobs posted
Where the hiring activity is. A row opens the tenant.
Top tenants by platform revenue
Who pays for the platform. A row opens the tenant.
Top companies by offers
The employers converting most applications into offers.
Who is online
Distinct signed-in users with an authenticated call, sampled by the console.
Engagement — chat & surveys
How much the platform is used beyond placements, in the same window.
Chat and survey analytics are not reachable from this console.
Payments
College payments taken on this tenant's placement cycles in the window, and what they earned the platform.
No payments in this window.
Users & engagement
Sessions, sign-ins, chat and survey activity for this tenant.
All tenants
Ranked for the window — a row opens that tenant's 360 view.
Trace a request
Paste the X-HLC-Request-Id from a user's error screen or a response header — every service's record of it, with call graph and logs.
Find a user
What this user did, on which app, and what failed — the activity stream filtered to them.
Open a tenant
The tenant's 360 view: placements, users online, payments, chat and surveys.
What is failing right now
Active alerts across services and infrastructure — click one to open it.
✓
Nothing is firing
Recent exceptions — all services (15m)
Deduplicated by exception and failing frame; a row opens the service dashboard.
| Exception | Service | Count | Last |
|---|
No exceptions in the last 15 minutes.
Runbook shortcuts
The questions support asks most, each one a saved view.
hHaveloc operations
Services
Requests per second — last 30 minutes
Alerts
✓
Nothing is firing
Infrastructure & people
Daily error rate — 30 days
5xx share per day per service; the dashed rule is the success-rate target's allowance.
Daily p95 latency — 30 days
p95 per day per service against the latency target.
SLO summary
Budget consumed is how much of the allowed failure this month is already spent; burn rate above 1× means the budget will run out before the window ends.
| Service | Availability 30d | Budget used | Success 30d | Budget used | Burn 24h | p95 24h | Requests 30d | Status |
|---|
No traffic history yet — SLOs need the history store (Elasticsearch) or at least a few hours of live data.
Live topology — ring colour is health (alerts + error rate), edge
weight is throughput. Click a service to open its dashboard.
Active alerts
Drag across any chart to zoom into that window · markers show
restarts, alerts and notes · click a legend entry to hide a line.
Load — calls per minute
Response time
Errors (5xx)
Latency heatmap
request density per latency band over time
Call graphs — where the time goes
Sampled, slow-endpoint and failing-endpoint transaction
traces: controller → service → repository, method by method. Click a row to expand.
| Time | Endpoint | Duration | Kind | Status | Request |
|---|
No traces captured in this window —
tracing samples ~10% of requests plus endpoints that recently ran slow.
Background work — scheduled jobs & queue consumers
Timings of @Scheduled methods and RabbitMQ listeners in this window —
the traffic the HTTP charts never see.
| Kind | Name | Runs | Runs/min | Avg | Max | Errors |
|---|
No background work recorded in this window.
Recent exceptions
Deduplicated by exception + failing frame; click a row for the stack and request ids.
| Exception | Endpoint | Status | Count | Last seen |
|---|
No exceptions captured in this window.
Top endpoints
| Endpoint | Calls | Avg | p95 | 5xx |
|---|
Slowest calls
| Time | Endpoint | Duration | Status | Request |
|---|
Who is online
Distinct signed-in users with an authenticated API call in the last few minutes, across
every Haveloc app (portal, mobile app, Haveloc Messages) — read from the session table, sampled by
this console every 30 seconds. Open the
Users report →
Requests per second — all services, last 30 minutes
5xx responses count as errors; hover for exact values.
Alerts
Threshold breaches across all services; recently resolved shown muted.
Availability
Share of expected 15-second heartbeats each service actually delivered —
the console's own uptime measurement.
| Service | Now | 3h | 24h | 7d | 30d |
|---|
Uptime unavailable.
Most-called endpoints — all services (15m)
| Endpoint | Service | Calls | Avg | p95 | 5xx |
|---|
Slowest endpoints — all services (15m)
| Endpoint | Service | p95 | p99 | Calls |
|---|
Recent exceptions — all services (15m)
| Exception | Service | Count | Last |
|---|
Slowest individual calls — all services (15m)
| Endpoint | Service | Duration | When | Request |
|---|
Event timeline
Restarts, alert transitions and first-seen exceptions — what changed, in order.
No events in the last 24 hours.
Console self-health
The monitor, monitored — ingest pipeline, history writer, state
persistence and the collector fleet.
| Service | Instance | Collector | Shipped | Failed | Last seen |
|---|
No snapshots received yet. Start a service with hlc.monitoring.enabled=true
pointing at this console.
✓
All quiet
Every service is inside its normal envelope — error rates, latency, heap, disk and threads all look healthy over the last hour.
Jobs posted & colleges posting
Distinct jobs by posted date (published, else created) and
how many tenants posted.
Placement pipeline per period
Stacked: eligible → applied → offered for the jobs posted in each bucket.
Jobs by status
Where the posted jobs stand today.
Jobs by type
Full-time, internship and the rest.
Offers by CTC band
Offers with a recorded CTC on jobs posted in the window.
Funnel
Eligible → applied → offered, whole window.
Tenant growth & student loads
New tenants (first activity) and students loaded per period.
Top tenants by jobs posted
Click a bar to open the tenant.
Top companies by offers
Click a bar to open the company.
Who posted when — tenants × weeks
Jobs posted per week for the most active tenants over the last 13 weeks; click a
cell to zoom into that week for that tenant.
Posting calendar
Jobs per day over the last 13 weeks — darker is busier; click a day to zoom into
it.
Students by batch
Loaded vs registered per passed-out year, with the batch's placement funnel.
Communication & surveys
Chat messages and survey completions per period — usage beyond placements.
Trend
Each bucket against the same bucket a year
earlier — the dashed ghost. Drag across the chart to zoom the whole page into
that span.
Growth
Change against the previous bucket (bars) and against the
same bucket a year earlier (line). Zero is the flat line.
Seasonality
Financial years down, months across —
which months carry the year, and whether this one is on pace.
Year on year
Every financial year drawn over the same April–March axis,
so this year's shape sits on last year's.
Cumulative
Running total within each financial year — the gap at
today's date is the year-to-date lead or shortfall.
Newest first. Δ prev is against the bucket before it, YoY
against the same bucket a year earlier; share is of that bucket's financial
year.
Tenant comparison
Side by side for the same window — bars are relative to the best value in each
row.
Tenants end to end
Every tenant with its jobs, students, funnel, placements, chat and survey usage for
the window — ☐ selects for comparison, a row opens the tenant.
Recent jobs
Companies hiring here
Colleges
Batches
Trend
Jobs, applications and offers for this tenant across the window.
Job mix
Status and type of the jobs this tenant received.
Branches
Students, registration and placement by branch.
Branch placement
Companies
Jobs posted in the window, colleges reached, the funnel, placements and CTC from
offers — a row opens the company.
Hiring activity
Colleges reached
Where this company's jobs went and how each college converted.
Jobs
Jobs
Every job posted in the window that matches the filters, with its owner tenant,
company, status and funnel.
Batch funnel
Per passed-out year: students, registered, eligible, applied, offered.
Registration
Registered vs not yet registered, all matching students.
Students by passed-out year
The money — every rupee a student paid to a college
Volume & rate
Collections & revenue over time
Collected from college payments, what the platform
keeps and what settles to the college.
Where the money goes
Of every rupee collected: the college's settlement,
the gateway's cut and the platform's share.
By financial quarter
April–March financial year. QoQ compares the previous quarter, YoY the
same quarter a year earlier.
Two kinds of payment
College payments carry the fee and are the revenue source; student links
record no fee and are reported on their own view.
Run rate & where the year lands
This financial year, projected
Months already collected as
bars, the rest projected from the trend with a range around it.
Financial year on financial year
Each FY's collections drawn over the same April–March
axis. The current year stops at the last month with money in it.
Momentum
Collections per month with the
same month a year earlier as the ghost, and the three-month average
as the solid line.
Unusual months
Months more than two standard deviations from the
trailing mean — a spike worth explaining or a gap worth chasing.
Concentration
Tenants ranked by revenue with the
running share — how much of the money rides on how few colleges.
Who started, who stopped
Against the same length of time
before this window.
Colleges that paid in the comparison period and have not
paid in this one, largest first — the revenue at risk. Click a row to
open the tenant.
What each tenant was actually charged
against the configured vendor rate. A gap means the gateway recorded a
different fee from the one this console models revenue on.
Settlement health
Collected money still sitting unsettled, by tenant.
Anything old here is a college waiting to be paid.
Typical payment size
Colleges grouped by their average
college payment — collections ÷ payments for each tenant. Per-payment
amounts are not read, so this is the college's typical ticket, not a
histogram of individual payments.
Month by month
Collections, platform revenue and settlement per month with
MoM and YoY against the same month a year earlier.
Platform fee — what Haveloc earns on every college payment
Platform fee per period
Haveloc's share of the vendor charge, bucket by bucket, with the vendor charge and the gateway's cut behind it.
Recorded vs modelled
The fee the gateway actually recorded on the payments against what the configured rates say it should have been.
Fee rate by tenant
Effective vendor charge (fee ÷ collected) per tenant — the pricing exceptions, highest first. Click a bar to open the tenant.
Fee earned per payment
Tenants by platform fee per successful payment — where a single payment is worth most to Haveloc.
Top tenants by platform revenue
Click a bar to open the tenant.
By batch (passed-out year)
What each batch collected, and the platform's share of it.
Revenue by tenant
Collections, the vendor charge actually recorded, the platform's share and
what settled to the college. Click a row to open the tenant.
Haveloc's revenue from both payment kinds in one number: student payments (paid links,
collected by Haveloc in full) plus the platform fee on college payments (Haveloc's share of the
vendor charge; the rest settles to the college and the gateway). Financial years run April to March;
"last year" is the same bucket one financial year earlier.
Revenue per period — against the same period last year
Financial year on financial year
Student payments and platform fee per financial year; the line is the total.
Cumulative within each financial year
Running total month by month, one line per financial year — the gap at the current
month is the year-to-date lead or shortfall.
Seasonality — financial year × month
Total revenue per month of each financial year; the bright months are the season.
Revenue mix
Student payments against platform fee over the selected span.
Period by period
Every bucket: student revenue, platform fee, total, the fee's share, change on the previous
bucket and on the same bucket last year, and the running total within its financial year.
Top tenants by consolidated revenue — this financial year
Student payments plus platform fee per tenant, financial year to date. Click a bar to open the tenant.
Paid student links, counted by the date the link
was generated.
Who contributes
Year on year, by financial quarter
Student collections per April–March quarter (bars) against the same
quarter a year earlier (dashed). Always dated by link generation, whatever the mode.
Quarter by quarter
QoQ compares the previous quarter, YoY the same quarter a year earlier —
on student collections.
Student collections over time
What students paid in each bucket of the selected range.
By tenant
Share is of the collections in scope. Click a
row to open the tenant.
By batch
Passed-out year on the payment row; links with no year group under —.
The newest paid links in scope. No student names, roll numbers or contact
details are read — the console shows the institution's fields, the amount and the link's
dates.
Placement cycles & college-payment configuration
Which cycles have vendor payment enabled, on what terms, which batches paid,
and what each collected. A cycle appears once money moved on it in the range, with its
configuration as it stands now.
Online right now ↗ activity
Distinct users with an authenticated API call in the last few minutes, on any
Haveloc app — from the session table, refreshed every 15 seconds regardless of the range
above.
Who is online
Active users by app, by role and by device in the live window, and the busiest
tenants right now — click a tenant to open it.
Tenants online now
Load history
Concurrent users across the window above, from the console's stored samples
(survives
restarts) — whole platform, not filtered by tenant.
No samples yet — the console records one every
30 seconds while the platform module is up.
Sign-ins per period
Sessions created (every successful sign-in on any
app),
the distinct users behind them, and users last seen, per bucket of the window.
Sign-ins by app and role
How the window's sign-ins split across the portal, the mobile app and Haveloc
Messages, and who signed in.
Tenants — who is online and who signed in
Every tenant with a session in scope: users online now (5m / 15m / 1h / 24h), users
signed in right now, sign-ins and distinct users in the window, last activity — a row opens the
tenant.
Live message flow
Messages per minute right now — direct vs group — refreshed every 15 seconds
regardless of the range above.
Who is chatting right now
Messages by tenant and by message type in the live window.
Messages & conversations per period
For the selected range: messages (direct vs in groups), senders and
conversations created.
Most active tenants
Messages in the selected range — click to open the tenant.
Every chat or group opened in the window with its tenant, creator, size and
activity.
Top creators
Who opened the most groups and chats in the range.
Creators
Chat by tenant
Surveys, invites & completions per period
Completion by tenant
Completed responses in the window.
Surveys by tenant
Asks, people & failures per period
What people ask about
Asks by area, from the lookups each one ran.
Asks by hour of day
Who asks, how it ends, what is used
By role
Outcome
Assist features
Assist lookups: volume, failures and latency
Every tool the assistant called in the window. A failure is a refusal, a wrong argument or a service that did not answer.
Assist by tenant
Who uses it, by tokens
Every person who asked or rated in the window, heaviest first. Tokens are prompt +
completion as the model provider reported them.
Recent activity
The latest 200 asks and approval decisions, newest first. No message text: what it
was about, how it ended, what it cost.
Feedback
The latest 100 ratings, newest first. A comment has already been through the
agent's privacy layer, so it names no student.
Active alerts
Everything firing right now. Click a row to open what is alerting; 🔕 silences it
for an hour.
✓
Nothing is firing
Every built-in and custom rule is inside its threshold.
Silences
Muted alert types — suppressed fires are counted, resolves always pass through.
No silences active.
Custom rules
Thresholds you defined on top of the built-in rules.
Every fire and resolve, newest first — how long each lasted and who was noisiest.
| Fired | Service | Alert | Severity | Value | Duration | State |
|---|
No alerts in this window.
Requests and latency over time for this endpoint.
Where the time goes
Self-time per internal method, aggregated over this endpoint's
captured call graphs — the reason for the slowness, method by method.
No call graphs captured for this
endpoint in this window — tracing samples ~10% of requests plus every slow or
failing endpoint, so a busy endpoint fills this in within minutes.
Endpoints
Click a column to sort, a row to see its trend. Most-accessed first by default.
| Endpoint | Calls | Calls/min | 5xx | 4xx | Avg | Min | Max | p50 | p90 | p95 | p99 |
|---|
No traffic in this window.
Slowest individual calls
Captured requests ≥ the collector's slow threshold — exact call, exact time.
| Time | Endpoint | Duration | Status |
|---|
No slow calls in this window.
Calls per second
Trailing request rate over every window at once — live 15s tick
through the last 7 days.
Live tape — request rate & network volume
1-minute candles of requests/sec (open · high · low · close) with
transferred bytes as volume; last 30 minutes, ticking every 5s.
Request volume
Errors (5xx)
Latency p95 (ms)
CPU
process vs system, share of all cores
Heap memory
Threads & in-flight requests
GC time per interval (ms)
delta of cumulative collection time
Connection pool, HTTP threads & executors
Where requests queue before they run: Hikari connections waiting,
Tomcat
threads busy, task-executor backlog and GC pauses.
Database connection pool
HTTP threads & executor backlog
This collector build does not ship pool/thread/GC-pause
signals yet — rebuild the service with the latest models jar.
Memory footprint
The whole process, not just heap — off-heap leaks live in
metaspace, direct buffers and native memory that heap charts never show.
Thread hotspots
Captured automatically when process CPU exceeds 80% —
what the busiest threads were doing at that moment.
No high-CPU capture for this service —
that's a good sign.
RabbitMQ …
Broker totals and per-queue backlog from the management API —
backlogged or consumer-less queues are the pipeline's earliest warning.
Queue backlog (ready + unacked)
Message rates
| Queue | Ready | Unacked | Consumers | Publish/s | Deliver/s | Actions |
|---|
RabbitMQ unreachable or disabled.
Redis …
Live server stats over the wire protocol.
Memory
Operations / second
Redis unreachable or disabled.
PostgreSQL …
Connection slots, throughput, blocking and disk growth —
one cheap read-only poll every 15s, ported from db-console.
Connections
Transactions / second
Database size
disk utilization over time
Blocked sessions
sessions waiting on a lock — sustained blocking fires the pgBlocked alert
| PID | State | User | Duration | Wait | Query | Actions |
|---|
No running queries right now.
Largest tables
total relation size with tuple health — dead tuples that
never fall are an autovacuum problem.
| Table | Size | Live | Dead | Last autovacuum |
|---|
Collected within a minute of the first poll.
Maintenance & WAL backups
WAL archiving is the backup heartbeat — a stale
"last archived" means backups are not flowing.
PostgreSQL unreachable or disabled.
External dependencies …
Reachability of every third party Haveloc talks to — mail, push, chat, AI.
Any HTTP answer counts as up; only network failures mark a dependency down.
Round-trip latency
No dependency checks configured.
Runtime log levels
Change a service's log level live — delivered with its next snapshot
(≤15s), applied in-process, and auto-reverted when the duration expires.
Application logs
Captured in-process (WARN/ERROR/INFO) and shipped with the metric
snapshots — request ids link into the end-to-end waterfall; lines with a stack
expand on click.
No log lines match this filter.
Who is working right now
Every signed-in user with an authenticated API call in the window — which app they are
on, which services they touched and what they did last. A row opens the user.
Usage patterns
How the platform is being used by everyone who matches the filter: volume, distinct
users and sessions, failures and speed per bucket — the shape of a normal day, and the day that
is not normal.
When people work — weekday × hour
Requests by weekday and hour of day in your timezone; the brighter the cell, the
busier the hour.
Response time everyone experienced
Average and p95 of the captured calls per bucket.
By app
Web portal, mobile app, Haveloc Messages.
By role
Who is generating the traffic.
Outcome mix
Status classes of the captured calls.
By service
Where the calls land, with distinct users and 5xx per service.
Busiest endpoints
What users actually do: the most-called endpoints with users, errors and average
time.
Most active users
By calls in the window — a row opens the user.
Most active tenants
By calls in the window, with distinct users — a row opens the tenant.
User
Requests per bucket
By service
By app
Top endpoints
Live tail — everyone
Newest first. Request ids open the end-to-end waterfall; a username opens that
user.
Email notifications
Alert emails ride the platform mail queue. Changes apply
immediately — no restart.
Custom alert rules
Your own thresholds on any metric, evaluated every 15 seconds —
the built-in error-rate, latency, heap, disk, down, traffic-drop and
infrastructure alerts stay active either way.
| Rule | Condition | Scope | Severity | Emails | Status | Actions |
|---|
No custom rules yet — compose one above.
Operators
Role-based access: SUPERADMIN manages operators, ADMIN runs the
console, VIEWER sees dashboards only. Every operator enrols their own
authenticator at first sign-in.
| Username | Role | Authenticator | Status | Created | Actions |
|---|
Add operator
Monitored services
Every service that has ever shipped a snapshot. Forget a decommissioned one to
drop its buffers and stop its permanent "down" alert.
| Service | Status | Last seen | Actions |
|---|
Audit trail
Every sign-in and administrative action — who, when, from where.
| When | Operator | Action | Detail | IP |
|---|
No audit entries yet.
Matches over time — drag on the chart to zoom into a range
Results
Nothing matched this query in this window.
Build a chart
Compose any metric into a saved, live-updating chart — your own dashboard below.
No charts yet — compose one above.
Request
Everything every service recorded about this request id — the end-to-end path.