Friendly Tech. FCC Service
Introduction
ft-fcc-service runs FCC/USAC broadband-compliance speed and latency diagnostic campaigns over a CPE fleet.
A campaign (a test) describes a fleet of devices, a schedule, and success thresholds; each concrete execution of a test is a activation.
A test with reactivation configured produces one activation per day for the configured number of days, each carrying its own snapshot of the settings that were in force when it ran — see The fcc_activation Settings Snapshot.
The service computes and stores the pass/fail verdict for every measurement; the ACS only ever reports raw numbers. See The Pass/Fail Formula for the one formula both sides use, and for what "both sides" actually means.
Its Place Among Three Repositories
FCC diagnostics is split across three independently deployed repositories, connected by two narrow contracts and nothing else:
| Repository | Role | Talks to ft-fcc-service via |
|---|---|---|
|
Runs the actual diagnostic against the CPE fleet (TR-181 |
Hazelcast queues only — see The Governing Decision. |
|
Owns the campaign lifecycle, the pass/fail verdict, the |
— |
|
Authenticates the portal user and proxies |
Inbound REST, described in REST API. |
The ACS and ft-fcc-service do not know each other: no SOAP client, no REST call, no address of one in the configuration of the other, in either direction.
See The Governing Decision for why, and what it costs.
External Dependencies — Exactly Five
ft-fcc-service has exactly five external dependencies. There is no sixth.
| Dependency | Role |
|---|---|
Hazelcast (client) |
The only channel to the ACS: five queues carry commands, acks, results, device states and activation events. See Hazelcast Queues. |
|
Own schema, read-write, owned and migrated by this service (Liquibase). See ftfcc Schema. |
ClickHouse |
Shared with QoE monitoring ( |
|
Read-only DataSource, dedicated database account with |
|
Read-only DataSource over two tables of |
Inbound REST from |
No other caller is trusted; there is no authentication of its own. See No Authentication by Design. |
Milestone Status
| Milestone | Status | Scope |
|---|---|---|
M0 |
Implemented |
Project skeleton: two DataSources, Liquibase on |
M1 |
Implemented |
|
M2 |
Implemented |
The two lifecycle state machines ( |
M3 |
Implemented |
The three wizard reads against the read-only ACS schema — |
M4 |
Implemented |
Two halves. Reporting: |
M5 |
Implemented |
XML configuration import/export ( |
|
Every package of this service is implemented and code-read as of this pass:
Nothing in this documentation is marked |
Who Should Read What
| Role | Start here |
|---|---|
Operator standing up or troubleshooting the service |
Operations — configuration, health semantics, startup checks, troubleshooting table. |
Backend developer changing the REST surface or validators |
REST API — identity contract, endpoint reference, validation rules. |
Backend developer changing the ACS integration |
Messaging — queue contract, outbox, DTO rules, the pass/fail formula. |
Anyone touching the schema |
Database — table-by-table reference, the settings resolution chain, and the design rules behind both. |
Backend developer changing how a fleet is selected |
Device Resolution — the ACS columns this service reads, the closed condition set, the SQL rules, and how a selection is frozen. |
Anyone importing, or reading a report over, pre-existing FCC measurements |
Legacy FCC Import — what the ETL reconstructs, what it deliberately does not recompute, and why an imported row can look different from a live one. The operator’s sequence is The Legacy Import Runbook. |
Anyone moving a campaign’s configuration between installations |
Configuration Import and Export — the XML element vocabulary, what it deliberately does not carry, and the domain and legacy-anchor rules an implementer would otherwise have to guess. |
Anyone wiring a Prometheus scrape or an alert rule against this service |
Metrics — the complete rendered meter table, where |
Anyone deploying or operating the Kubernetes chart |
Deployment — the image, the Helm chart’s load-bearing defaults, and why liveness and readiness are split. The chart’s own |
Frontend developer |
|
Anyone new to the system |
Architecture — the governing decision and what it costs. |