Summary:
- Minor fixes on service initialisation
Summary:
- Split jwt token authorisation for NEF and CAPIF. If NEF is deployed as a standalone component then only nef token authorisation is required. If capif is integrated with nef, jwt token acquired from CAPIF is required commit
- Create initial data for the simulation scenario based on the default scenario (on build)
Summary:
- Revert to previous service description files for CAPIF Core Function (commit: b1e3cea)
- Fix port number in service description files
Summary:
- Add functionality to support CAPIF Core Function's logging service
- Avoid db connections within the threads (optimisation)
- Fix token causing 403 error in mapbox front-end
Summary:
- Addition of nginx reverse proxy. Default ports are 8090 for http and 4443 for https
- Support of server side authentication based on self signed certificates using openssl
- Support TLS encryption
- Two step authorisation using OAuth2.0 (jwt tokens) both generated from CAPIF and NEF
- Migration to python 3.10
- Compatible with Docker Compose v2.0.0
- new class
OAuth2TwoTokensBearer
that overridesOAuth2
class based on FastAPI's OAuth2PasswordBearer to support two tokens bearer to authorise either NEF or CAPIF jtw tokens (commiteaccf0f) - ⛔ breaking change: the exposed port 8888 is deprecated. All traffic is routed through the reverse proxy via dynamically defined ports. The default ports are 8090 for http and 4443 for https
- ⛔ breaking change: Compatible with Docker Compose V2. CLI commands are now used by replacing the hyphen (-) with a space, using
docker compose
, instead ofdocker-compose
. The changes are applied in the Makefile to help developers. - Create env variables for nginx ports 👉
NGINX_HTTP
NGINX_HTTPS
- Create env variable for nginx hostname 👉
NEF_HOST
- Create env variable to enable token verification generated by CAPIF, if CAPIF is used. 👉
USE_PUBLIC_KEY_VERIFICATION
- Migrate to python 3.10 (from
^3.9.7
👉~3.10
) - Downgrade pyOpenSSL (from
23.0.0
👉22.1.0
) to be compatible with evolved5g SDK - Upgrade emails (from
^0.5.15
👉^0.6
) to be compatible with python 3.10
- ✔ Add option
--pull
tobuild-no-cache
this forces docker to check and pull newer versions of the images during build
- Add publish service from evolved5g library to publish the service APIs into CAPIF
- Add service description
json
files to support the publish service - Fix LOCATION_REPORTING one time requests bug (commit e27c82470a51faa4e0ebebf7dd28207993779e02)
- Change mongo service in docker-compose 👉mongo_nef
- Create env variables for CAPIF hostname 👉
CAPIF_HOST
- Create env variables for CAPIF ports 👉
CAPIF_HTTP_PORT
CAPIF_HTTP_PORT
- 🪛 Fix python version incompatibility between docker-image and poetry (from
3.9.7
👉^3.9.7
)
- ✔ Add /app/app/core/certificates folder to save certificates from CAPIF locally
- ✔ Creation of Test descriptions for UE_REACHABILITY and LOSS_OF_CONNECTIVITY events on Monitoring Event API /docs/test_plan
- 🪛 Fix python
make db-reset
command
- Upgrade coreui bootstrat admin template to v.4.2.1
- Change status code from
403
to401
for invalid credentials - Create environment variable for MongoClient host 👉
MONGO_CLIENT
- Addition of
services_default
network in docker-compose. Individual services are now connected to services_default network. Environmental variableEXTERNAL_NET
defines if this network is external or not (true
orfalse
)
- 🪛 Fix poetry installer - deprecated (different URL for poetry installation)
- Import
evolved5g ^0.8.3
library - Change
requests
from^2.27.0
👉^2.26.0
- Change
pytest
from^5.4.1
👉>6
Summary:
- This version focuses on specific enchancements for both AsSessionWithQoS and Monitoring Event APIs
- AsSessionWithQoS API:
- Provision of periodic reports, (NetApp indicates the reporting period in sec)
- MonitoringEvent API:
- Addition of LOSS_OF_CONNECTIVITY event, Network detects that the UE is no longer reachable for either signalling or user plane communication. The NetApp may provide a Maximum Detection Time, which indicates the maximum period of time without any communication with the UE (after the UE is considered to be unreachable by the network)
- Addition of UE_REACHABILITY event, which indicates when the UE becomes reachable (for sending downlink data to the UE)
- 👉 replace common html blocks with reusable Jinja2 templates (header, sidebar, footer)
- ➕ Addition of two events on
MonitoringEvent API
➡/api/v1/3gpp-monitoring-event/v1/{scsAsId}/subscriptions
👇LOSS_OF_CONNECTIVITY
eventUE_REACHABILITY
event
- ➕ Addition of periodic reports for
AsSessionWithQoS API
➡/api/v1/3gpp-as-session-with-qos/v1/{scsAsId}/subscriptions
- Optimization on MongoDB 👇
- MongoClient instance from pymongo module is created once in
backend/app/app/db/session.py
- MongoClient instance from pymongo module is created once in
- ✔
make logs-backend
: display the logs only in the backend service - ✔
make logs-mongo
: display the logs only for mongo service
Summary:
- changes and optimizations for making NEF_emulator capable of running bigger scenarios
- UE movement approach change:
- old: iterate over all path-points and simulate speed by using sleep() (LOW=1sec HIGH=0.1sec)
- new: constantly use sleep(1sec) and simulate speed by skipping (or not) path-points
- more on the pros/cons of this approach can be found at the relative source code section, the old one is commented out
- update of
leaflet.js
to version1.8.0
(we've indetified a bug when closing mark tooltips, it's supposed to be fixed by the maintainers of the project at the upcoming release)
dashboard-cells.js
minor fix to display error details correctly in the toast message- 🪛 fix
/map
js console errors caused by the UEs layer-checkbox (access tonull
marker) - 🪛 fix
/map
UEs buttons: handle case of UEs with no paths assigned /dashboard
page change: instead of 2 consecutive API requests on UESave
👇:- 1 API request to assign path everytime the user selects something different
- 1 API request on
Save
button
/map
page: add type-of-service column to datatable (cells now displayMonitoring Event API
orAsSession With QoS API
)/login
: add "hit enter --> submit form" functionality/register
: add "hit enter --> submit form" functionality- add
NEF
logo - move part of
login.js
code toapp.js
(more clean approach + addedapp.default_redirect
variable) maps.js
: increase timeouts to 60 sec (edge case with >200 UEs, start/stop takes time)maps.js
: addapi_get_moving_UEs()
to only retrieve moving UEs ➡ move part ofui_map_paint_UEs()
toui_map_paint_moving_UEs()
app.js
: moveapi_test_token()
outside document.ready() for quicker user auth checks401
page redirect: when the token can't be validated the user is redirected to a 401 Unauthorized page and after a few seconds is redirected to/login
. Previously, the user was redirected to login without being notified.map.js
: optimizehelper_check_path_is_already_painted( path_id )
by replacing the simple array of painted paths with a key-value object
- ⛔ for optimization purposes, the UEs movement is handled in memory (no more intensive read/writes to Postgres) 👇
- ➕
api/v1/ue_movement/state-ues
now returns moving UEs information only. It helps with the edge cases of having many UEs and only a few of them actually moving around - create new module/file for threads
utils.py
➡ue_movement.py
- ⛔
/utils/state-loop/{{supi}}
➡/ue_movement/state-loop/{{supi}}
- ⛔
/utils/start-loop
➡/ue_movement/start-loop
- ⛔
/utils/stop-loop
➡/ue_movement/stop-loop
- ⛔
utils.py
: add a 2nd approach for making the UEs move within their path and control their speed (see #2eb19f8)SQLAlchemy
: addpool_size=150, max_overflow=20
tocreate_engine( ... )
- fix
NoneType
exception on MonitoringEvent one time request when cell is None - Add middleware to return custom response header
X-Process-Time
that counts request-response proccesing time - Split callbacks in two files 👉 From
send_callback.py
➡monitoring_callbacks.py
+qos_callback.py
- fix callback notification for QoS after the transition from db to memory
- postgreSQL add
command: -c shared_buffers=256MB -c max_connections=200
todocker-compose
- MonitoringEvent: migration from postgreSQL to MongoDB 👇
- fix
check_numberOfReports
function accordingly
- fix
- upgrade
leaflet.js
(1.7.1
to1.8.0
)
(see commit: 2ef55ed)
- updated
tiangolo/uvicorn -gunicorn -fastapi:python3.9 (from 3.7)
- updated
python = "3.9.7" (from 3.7)
- updated
uvicorn = "^0.17.6" (from 0.15.0)
- updated
fastapi = "^0.78.0" (from 0.54.1)
- updated
pymongo = "^4.1.0" (from 3.12.1)
- updated
requests = "^2.27.0" (from 2.23.0)
- updated
gunicorn = "^20.1.0" (from 20.0.4)
- removed
celery = "^4.4.2"
- removed
alembic = "^1.4.2"
- removed
GeoAlchemy2 = "^0.9.4"
- add documentation for the UI (historical context, naming conventions, front-end libraries & approaches used etc...)
- 🚫🤚 Forbid user to update cells while UEs are moving
- Add timeout values in
requests.request
👇- Timeout values according to https://docs.pythonrequests.org/en/master/user/advanced/#timeouts
- Fixes "hanging" UEs problem: when subscribing to NEF APIs, specific IPs included in the
notificationDestination
URL caused timeouts. Since the default for Python Requests isNone
(wait until the connection is closed) the UE "freezes" until the request times out and the exception is finally caught.
- ⛔ breaking change:
json
data of exported scenarios fromv1.3.x
will not able to be imported tov1.4.0
. Users will have to recreate them manually.
/dashboard
js split (see issue: #35):dashboard.js
keeps only thedocument.ready
function + some helper onesdashboard-gnbs.js
has the gNBs partdashboard-cells.js
has the Cells partdashboard-ues.js
has the UEs partdashboard-paths.js
has the Paths part
/dashboard
split goals:- ✅ use
beforeSend
,complete
and spinners for making visible that reload takes place in the background. Locally this happens so fast that the user doesn't notice. - ✅ change
api_get/put/delete/post()
functions to return to callbacks for UI actions - ✅ introduce
ui_fetch_and_update()
functions that use the above API calls and after they fetch data, they update the UI. This helped us prevent some states with "stale" data - ✅ add layers to maps to let the users choose what they want to see or not (Cells, UEs, Paths) when adding / editing
- ✅ use
/dashboard
fixes & improvements- increase map 🗺️ height inside every modal from 300 to 600px
add_cell
modal: fixNaN
errors when the user doesn't click on the map to generate X,Y for the new cellui_map_paint_path()
function can now takeopacity
argument- 🪛 handle
cell_id_hex == null
: display-
in Datatable cells
/map
:- 🪛
map.js
minor fix: add a list of painted paths to first check and -if not already added on the map- continue painting it. (The problem appeared visually when multiple UEs had the same path assigned) - ✅ handle
cell_id_hex == null
and display grey ⚪ UE-icon when not connected to any cell (this also applies to every UE just after animport
)
- 🪛
- Fix problem with
path_id
on import/export scenario. (e.g., if we export a scenario with UEs with path_ids 1,2,4, when the scenario is imported, the path with id 4 is added as path with 3. The UE is successfully correlated with the new path id 3) - 🙅♂️Forbid user to update (gnb/cell)'s
hex ids
, if they already exist - Add disconnected state functionality. 👉 When there is no radio coverage 📵 the UE disconnects from the cell that it's currently connected.
- 🔥 hotfix
make build
/make build-no-cache
: add--profile
option todocker-compose
- 🪛 Fix build error caused by
jinja2
newer version (lock tov.3.0.3
)
- ✔
make db-reset
: except for reseting the postgresql db, add functionality to also reset mongo db
- Fix UE-association-path selection with
path_id
0 (no path selected) - both dashboard and backend - Fix bug in check_expiration_time function
- The Monitoring Event subscription by external id is retrieved by additional filter
owner_id
- Fix endpoints on MonitoringEvent API {apiroot}/nef/api/v1/3gpp-monitoring-event/v1/{scsAsId}/subscriptions
- added Apache-2.0 License
-
⛔ breaking change, 🔃 upgrade
docker-compose
to version1.29.2
, build5becea4c
-
Guidelines: head over to docs.docker.com/compose/install/ and choose your OS. For Linux you can use the following 👇:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
Reason: our
docker-compose.yml
now usesprofiles
(docs.docker.com/compose/profiles/). This gives us the option of adding some kind of labeling to every container, for example["dev", "debug", "frontend"]
that can later be passed todocker-compose up
. Practically this means that you spin up the containers selectively depending on what you need. With the relative changes to theMakefile
:-
ℹ️
make up
now runs only the 3 containers needed for the NEF_emulator -
✔
make debug-up
: new command, runs the full composition: 5 containers, 3 needed for NEF + 2 for Database management (Postgres & MongoDB)make up: docker-compose --profile dev up make debug-up: docker-compose --profile debug up
-
-
split documentation in two parts:
- NEF_emulator (Swagger -
/docs
| Redoc/redoc
) - Northbound APIs (Swagger -
/nef/docs
| Redoc/nef/redoc
)
- NEF_emulator (Swagger -
-
⛔ breaking change, split endpoints in two parts:
- NEF emulator {apiroot}/api/v1/{NEF_emulator endpoints}
- Northbound APIs {apiroot}/nef/api/v1/{Northbound endpoints}
-
✔ added functionality to export/import the scenario (gNBs, Cells , UEs, paths) (see UI changes)
- /api/v1/utils/export/scenario
- /api/v1/utils/import/scenario
- 🔃 upgrade
coreui
tov4.1.0
which fixes a persistent browser console error - ✔
/export
page to generatejson
with the scenario (gNBs, Cells, UEs, paths) - ✔
/import
page to uploadjson
and create a previously exported scenario - 📄
/docs
: added sidebar links to the new API Swagger/ReDoc pages (after the UI / North Bound split) - minor changes to the UE datatable to show more handy attributes (e.g.
external_identifier
,path
...) - ✔ added 2 Javascript libraries:
codemirror
&highlight
forjson
highlighting inside textareas /dashboard
: added some callback functions needed atapi_put_UE_callback(...)
&api_post_UE_callback(...)
/dashboard
: added handling for UEs without selected path
- Initial definition of functional tests for
MonitoringEvent API
andAsSessionWithQoS API
under docs/test_plan
-
⚠ new containers added to the composition
mongo:4.4.10
mongo-express:1.0.0-alpha.4
-
this practically means that you will have to: 👇👇👇
make down-v #remove the old containers & volumes make build #build the new backend (pymongo was added) make dev-prepare-env #use the new .env file make up #start the services make db-init #add data (optional)
- new "Session With QoS"
endpoints
- GET
/api/v1/3gpp-as-session-with-qos/v1/{scsAsId}/subscriptions
✔ added - POST
/api/v1/3gpp-as-session-with-qos/v1/{scsAsId}/subscriptions
✔ added - GET
/api/v1/3gpp-as-session-with-qos/v1/{scsAsId}/subscriptions/{subscriptionId}
✔ added - PUT
/api/v1/3gpp-as-session-with-qos/v1/{scsAsId}/subscriptions/{subscriptionId}
✔ added - DELETE
/api/v1/3gpp-as-session-with-qos/v1/{scsAsId}/subscriptions/{subscriptionId}
✔ added
- GET
- Callback notification functionality for "Session With QoS"
- The event that triggers the notification is based on handover
- new "QoS Information"
endpoints
- GET
/api/v1/qosInfo/qosCharacteristics
✔ added This endpoint returns some standardized 5QIs that are loaded from the app/core/config/qosCharacteristics.json file - GET
/api/v1/qosInfo/qosProfiles/{gNB_id}
✔ added This endpoint returns the QoS Profiles that have been created and sent to the gNB when a user makes a subscription with QoS for a UE.
- GET
- Monitoring Event API
- Addition of ipv4 both in callback notification and in 201 Created Response
- Fix swagger documentation after ipv4 change in callbacks
- Forbid duplicate subscriptions for the same external id
- UEs
- Fix schemas
- Change ipv6 address format. Now the ipv6 is stored in exploded mode (e.g.,
0000:0000:0000:0000:0000:0000:0000:0001
) - Forbid user to delete UE, while it's moving
- Forbid user to change UE's path (while UE is moving)
- Validate UE's ids on create/update. (i.e., supi, ipv4, ipv6, mac address, external id)
- Initiate UE's movement from a random point
- backend server port (
:8888
) is now configurable via the.env
file host.docker.internal
now reachable from inside the container, to allow callbacks to services running directly on the host- Fix cell/gNB ids at the following endpoints (i.e., from database ids to actual cell/gNB ids)
- /api/v1/Cells/by_gNB/{gNB_id}
- /api/v1/UEs/by_gNB/{gNB_id}
- /api/v1/UEs/by_Cells/{cell_id}
- /frontend/location/ ⛔ deprecated and replaced by /path
- ⚠ endpoint trailing slashes
/
trigger a307
redirect (prefer/path
not/path/
)
/map
add search/filter option to datatables- the users can now generate their own scenarios on the map 🗺 more easily:
/dashboard
addCRUD
operation buttons for gNBs, Cells, UEs, Paths/dashboard
addCRUD
operation modal windows for gNBs, Cells, UEs, Pathscolor
attribute is now used when paths are displayed on the map/dashboard
add toastr js to display messages
- ⛔
make db-init-simple
is deprecated and replaced bymake db-init
- ✔
make db-reinit
can now be used as a shortcut of:make db-reset
->make db-init
- 📄 docs: guidelines added on how to
git switch
to specifictag
- 📄 docs: different network architectures added for NEF <--> NetApp communication options
- code cleanup + comments
- added
pymongo = "^3.12.1"
- endpoints summary:
- GET
/api/v1/utils/monitoring/notifications
✔ added - GET
/api/v1/utils/monitoring/last_notifications
✔ added - POST
/api/v1/3gpp-monitoring-event/v1/{scsAsId}/subscriptions
⛔ breaking change
- GET
- ⛔ The subscription for the Monitoring Event API is now achieved through the external Id (e.g., [email protected]). The ipv4, ipv6, msisdn ids have been removed from the Monitoring Event API. Moreover, external id and the reference resource subscription are included in callback requests.
- ✔ the 2 newly added endpoints are to be used by the UI for fetching and displaying subsctription events. How they work:
- Every event has a unique number / ID
- The backend keeps on-the-fly a dictionary with the 100 latest events. This way the UI is always able (after a page reload) to show the latest 100 events if they exist
- On "page load/reload" the UI asks the above list of events
- On "polling for new events" the UI provides the number / ID of the latest event that has already received and the backend sends back the new events that may have been occurred. For example, the UI provides that it has received up to event
154
and the backend sends back events155
,156
and157
which have taken place in the meanwhile (time between two polling requests)
/map
: minor changes to markers (UE tooltips, Cell details, more info etc...)/map
: add "fitbounds functionality" to configure the center of the map depending on the cells loaded for the scenario/map
: adddatatables
to show subscription events (fetched from the newly added endpoints)/map
: add select buttons with different interval options, to let the user choose how frequently the data are updated (UEs position & subscription events)/map
: add modal that shows more details from a subscription event (request body, response body etc...)
Makefile
: addlogs-location
command to filter logs- add comments to js source code
- override
./start-reload.sh
to preventuvicorn
reloads being triggered from changes tohtml
,css
andjs
files: this affects@tiangolo
's docker image default behavior. For more details check the backendDockerfile
- upgrade
uvicorn
to version0.15.0