Skip to content

Latest commit

 

History

History
530 lines (323 loc) · 22.7 KB

CHANGELOG.md

File metadata and controls

530 lines (323 loc) · 22.7 KB

Changelog

v2.2.3

Summary:

  • Minor fixes on service initialisation

v2.2.2

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)

v2.1.1

Summary:

  • Revert to previous service description files for CAPIF Core Function (commit: b1e3cea)
  • Fix port number in service description files

v2.1.0

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

v2.0.0

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

NEF APIs / backend

  • new class OAuth2TwoTokensBearer that overrides OAuth2 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

Docker 🐳

  • ⛔ breaking change: Compatible with Docker Compose V2. CLI commands are now used by replacing the hyphen (-) with a space, using docker compose, instead of docker-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

Libraries

  • 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

Other

  • ✔ Add option --pull to build-no-cache this forces docker to check and pull newer versions of the images during build



v1.6.2

NEF APIs / backend

  • 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)

Docker 🐳

  • 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

Libraries

  • 🪛 Fix python version incompatibility between docker-image and poetry (from 3.9.7 👉 ^3.9.7)

Other

  • ✔ 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

v1.6.1

UI changes

  • Upgrade coreui bootstrat admin template to v.4.2.1

NEF APIs / backend

  • Change status code from 403 to 401 for invalid credentials
  • Create environment variable for MongoClient host 👉 MONGO_CLIENT

Docker 🐳

  • Addition of services_default network in docker-compose. Individual services are now connected to services_default network. Environmental variable EXTERNAL_NET defines if this network is external or not (true or false)

Libraries

  • 🪛 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



v1.6.0

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)

UI changes

  • 👉 replace common html blocks with reusable Jinja2 templates (header, sidebar, footer)

Backend

  • ➕ Addition of two events on MonitoringEvent API/api/v1/3gpp-monitoring-event/v1/{scsAsId}/subscriptions 👇
    • LOSS_OF_CONNECTIVITY event
    • UE_REACHABILITY event
  • ➕ Addition of periodic reports for AsSessionWithQoS API/api/v1/3gpp-as-session-with-qos/v1/{scsAsId}/subscriptions

Database

  • Optimization on MongoDB 👇
    • MongoClient instance from pymongo module is created once in backend/app/app/db/session.py

Other

  • make logs-backend : display the logs only in the backend service
  • make logs-mongo : display the logs only for mongo service



v1.5.0

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 version 1.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)

UI changes

  • 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 to null marker)
  • 🪛 fix /map UEs buttons: handle case of UEs with no paths assigned
  • /dashboard page change: instead of 2 consecutive API requests on UE Save 👇:
    • 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 display Monitoring Event API or AsSession 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 to app.js (more clean approach + added app.default_redirect variable)
  • maps.js: increase timeouts to 60 sec (edge case with >200 UEs, start/stop takes time)
  • maps.js: add api_get_moving_UEs() to only retrieve moving UEs ➡ move part of ui_map_paint_UEs() to ui_map_paint_moving_UEs()
  • app.js: move api_test_token() outside document.ready() for quicker user auth checks
  • 401 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: optimize helper_check_path_is_already_painted( path_id ) by replacing the simple array of painted paths with a key-value object

Backend

  • ⛔ 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.pyue_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: add pool_size=150, max_overflow=20 to create_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.pymonitoring_callbacks.py + qos_callback.py
  • fix callback notification for QoS after the transition from db to memory

Database

  • postgreSQL add command: -c shared_buffers=256MB -c max_connections=200 to docker-compose
  • MonitoringEvent: migration from postgreSQL to MongoDB 👇
    • fix check_numberOfReports function accordingly

Libraries

  • upgrade leaflet.js (1.7.1 to 1.8.0)



v1.4.1

Migration to Python 3.9

(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"

📄 docs

  • add documentation for the UI (historical context, naming conventions, front-end libraries & approaches used etc...)

Backend

  • 🚫🤚 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 is None (wait until the connection is closed) the UE "freezes" until the request times out and the exception is finally caught.



v1.4.0

Scenario import / export

  • ⛔ breaking change: json data of exported scenarios from v1.3.x will not able to be imported to v1.4.0. Users will have to recreate them manually.

UI changes

  • /dashboard js split (see issue: #35):
    • dashboard.js keeps only the document.ready function + some helper ones
    • dashboard-gnbs.js has the gNBs part
    • dashboard-cells.js has the Cells part
    • dashboard-ues.js has the UEs part
    • dashboard-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
  • /dashboard fixes & improvements
    • increase map 🗺️ height inside every modal from 300 to 600px
    • add_cell modal: fix NaN errors when the user doesn't click on the map to generate X,Y for the new cell
    • ui_map_paint_path() function can now take opacity 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 an import)

NEF APIs / backend

  • 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.

Docker 🐳

  • 🔥 hotfix make build / make build-no-cache: add --profile option to docker-compose

Libraries

  • 🪛 Fix build error caused by jinja2 newer version (lock to v.3.0.3)

Other

  • make db-reset : except for reseting the postgresql db, add functionality to also reset mongo db



v1.3.2

  • 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



v1.3.1

  • Fix endpoints on MonitoringEvent API {apiroot}/nef/api/v1/3gpp-monitoring-event/v1/{scsAsId}/subscriptions



v1.3.0

License ⚖️

  • added Apache-2.0 License

Docker 🐳

  • ⛔ breaking change, 🔃 upgrade docker-compose to version 1.29.2, build 5becea4c

  • 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 uses profiles (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 to docker-compose up. Practically this means that you spin up the containers selectively depending on what you need. With the relative changes to the Makefile:

    • ℹ️ 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
      

NEF APIs / backend

  • split documentation in two parts:

    • NEF_emulator (Swagger - /docs | Redoc /redoc)
    • Northbound APIs (Swagger - /nef/docs | Redoc /nef/redoc)
  • ⛔ 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

UI changes

  • 🔃 upgrade coreui to v4.1.0 which fixes a persistent browser console error
  • /export page to generate json with the scenario (gNBs, Cells, UEs, paths)
  • /import page to upload json 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 for json highlighting inside textareas
  • /dashboard: added some callback functions needed at api_put_UE_callback(...) & api_post_UE_callback(...)
  • /dashboard: added handling for UEs without selected path

Testing

  • Initial definition of functional tests for MonitoringEvent API and AsSessionWithQoS API under docs/test_plan



v.1.2.0

Docker 🐳

  • ⚠ 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)
    

NEF APIs / backend

  • 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
  • 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.
  • 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 a 307 redirect (prefer /path not /path/)

UI changes

  • /map add search/filter option to datatables
  • the users can now generate their own scenarios on the map 🗺 more easily:
    • /dashboard add CRUD operation buttons for gNBs, Cells, UEs, Paths
    • /dashboard add CRUD operation modal windows for gNBs, Cells, UEs, Paths
    • color attribute is now used when paths are displayed on the map
    • /dashboard add toastr js to display messages

Other

  • make db-init-simple is deprecated and replaced by make 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 specific tag
  • 📄 docs: different network architectures added for NEF <--> NetApp communication options
  • code cleanup + comments

Libraries

  • added pymongo = "^3.12.1"



v.1.1.0

NEF APIs / backend

  • 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
  • ⛔ The subscription for the Monitoring Event API is now achieved through the external Id (e.g., 10001@domain.com). 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 events 155, 156 and 157 which have taken place in the meanwhile (time between two polling requests)

UI changes

  • /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: add datatables 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...)

Other

  • Makefile: add logs-location command to filter logs
  • add comments to js source code
  • override ./start-reload.sh to prevent uvicorn reloads being triggered from changes to html, css and js files: this affects @tiangolo's docker image default behavior. For more details check the backend Dockerfile

Libraries

  • upgrade uvicorn to version 0.15.0