University Finance System (UFS)¶
[Team : Holberton Team] [Tech Lead : wm383] [Service Owner : ar972] [Service Manager : ajc322] [Product Manager : TBC]
This page gives an overview of the University Finance System (UFS) API, describing its current status, where and how it's developed and deployed, and who is responsible for maintaining it.
Service Description¶
The UFS API is a wrapper around the University Finance System Oracle database. It returns a limited set of data about the University's financial records, so that downstream systems can validate identifiers such as cost codes before submitting requests for processing.
The API currently has one endpoint, /cost-code. A POST with an XML body containing a cost code
returns whether the UFS database accepts it, along with any error message from the database. The
OpenAPI specification
describes the request and response formats.
All environments read from the UFSLIVE database at ocm.admin.cam.ac.uk.
Service Status¶
The UFS API is currently live. The API itself is versioned as v1alpha1.
Contact¶
Technical queries and support should be directed to servicedesk@uis.cam.ac.uk and will be picked up by a member of the team working on the service. To ensure that you receive a response, always direct requests to servicedesk@uis.cam.ac.uk rather than reaching out to team members directly.
Issues discovered in the service or new feature requests should be opened as GitLab issues within the UFS project.
Environments¶
The UFS API is currently deployed to the following environments:
| Name | GCP Project ID | URLs |
|---|---|---|
| Production | ufs-prod-3fab5cc1 | https://webapp.prod.ufs.gcp.uis.cam.ac.uk/ |
| Staging | ufs-test-8aafbb64 | https://webapp.test.ufs.gcp.uis.cam.ac.uk/ |
| Development | ufs-devel-17ed9a5c | https://webapp.devel.ufs.gcp.uis.cam.ac.uk/ |
Inbound traffic is restricted to the CUDN at the UIS Traffic Manager for all environments.
Source code¶
The source code for the UFS API is spread over the following repositories:
| Repository | Description |
|---|---|
| Application Server | The source code for the UFS API |
| Infrastructure Deployment | The Terraform infrastructure code for deploying the UFS API to GCP |
Technologies used¶
The following gives an overview of the technologies the UFS API is built on.
| Category | Language | Framework(s) |
|---|---|---|
| Server | Python 3.9 | FastAPI, Uvicorn |
| Database client | Oracle Instant Client 23 | cx_Oracle |
Operational documentation¶
The following gives an overview of how the UFS API is deployed and maintained.
How and where the UFS API is deployed¶
The API runs as a Cloud Run service behind a GCP Cloud Load Balancer, deployed via our standard terraform deployment CI pipeline. There is no Cloud SQL database; the API connects to the on-premises Oracle database.
Database credentials are held in 1Password and copied into each environment's Secret Manager when Terraform is applied. The infrastructure README describes how to bootstrap the secrets and workspaces.
Deploying a new release¶
Making a new release of the application is done via release automation. Renovate then opens a merge request in the infrastructure repository to bump the deployed release.
When that merge request is merged, the CI pipeline deploys to staging. Use the "play" buttons in the pipeline to deploy to production.
Monitoring¶
Monitoring is configured as per our standard Google Cloud Run application module. In production, an alert is sent to the Holberton team when the load balancer returns more than one 5xx response in a minute.
Debugging¶
The README.md files in each of the source code repositories describe how to run the API locally,
which needs a connection to vpn.admin.cam.ac.uk to reach the database.
Service Management¶
The Team responsible for this service is Holberton Team.
The Tech Lead for this service is wm383.
The Service Owner for this service is ar972.
The Service Manager for this service is ajc322.
The Product Manager for this service is TBC.
The following engineers have operational experience with this service and are able to respond to support requests or incidents: