From: vlad shkapenyuk Date: Mon, 11 Nov 2019 20:29:31 +0000 (-0500) Subject: Adding additional KPIs, adding required documentation X-Git-Tag: 1.0.1~13 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F78%2F1478%2F1;p=ric-app%2Fmc.git Adding additional KPIs, adding required documentation Signed-off-by: vlad shkapenyuk Change-Id: If4cc7a0bd64a4509ab70908f1094bdee77c1f57d --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..71d7636 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.tox +docs/_build/* diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..959edc2 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,36 @@ +#================================================================================== +## Copyright (c) 2018-2019 AT&T Intellectual Property. +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +##================================================================================== + +--- +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details +# Required +version: 2 + +formats: + - htmlzip + +build: + image: latest + +python: + version: 3.7 + install: + - requirements: docs/requirements-docs.txt + +sphinx: + configuration: docs/conf.py diff --git a/docs/_static/logo.png b/docs/_static/logo.png new file mode 100644 index 0000000..b6a016d Binary files /dev/null and b/docs/_static/logo.png differ diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..aa2cfa2 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,10 @@ +from docs_conf.conf import * + +branch = 'latest' + +linkcheck_ignore = [ + 'http://localhost', +] + +intersphinx_mapping = {} +intersphinx_mapping['portal-ric-dashboard'] = ('https://docs.o-ran-sc.org/projects/o-ran-sc-portal-ric-dashboard/en/%s' % branch, None) diff --git a/docs/conf.yaml b/docs/conf.yaml new file mode 100644 index 0000000..c46cce4 --- /dev/null +++ b/docs/conf.yaml @@ -0,0 +1,3 @@ +--- +project_cfg: oran +project: oran diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000..00b0fd0 Binary files /dev/null and b/docs/favicon.ico differ diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..80e0ce5 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,16 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. SPDX-License-Identifier: CC-BY-4.0 + + +RIC Measurement Campaign (MC) xApp +================================== + + +.. toctree:: + :maxdepth: 1 + :caption: Documents: + + readme.rst + + +* :ref:`search` diff --git a/docs/readme.rst b/docs/readme.rst new file mode 100644 index 0000000..3b84a97 --- /dev/null +++ b/docs/readme.rst @@ -0,0 +1,469 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. SPDX-License-Identifier: CC-BY-4.0 + + +RIC Measurement Campaign (MC) supported KPIs +============================================ + +name: throughput_ue +description: throughput experienced by UE over a measurement interval. "Active" throughput is throughput while actively downloading, "average" averages bytes transfered over the measurement interval +- ULLONG TS +- LLONG e_RAB_ID +- LLONG UE_ID +- V_STR GNB_ID +- FLOAT measurementInterval +- LLONG active_throughput +- LLONG average_throughput +- LLONG min_throughput +- LLONG max_throughput + + +name: addreq_success_stats +description: statistics on the time to successfully make a DC connection + +- V_STR GNB_ID +- ULLONG TS +- FLOAT measurementInterval +- FLOAT min_success_time +- FLOAT max_success_time +- FLOAT avg_success_time +- FLOAT pctl_05_success_time +- FLOAT pctl_95_success_time +- FLOAT stddev_success_time + + +name: addreq_pdf_nr_cell +description : histogram of neighboring cell RSRP, aggregated by cell id + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: addreq_pdf_nr_gnb +description : histogram of neighboring cell RSRP, aggregated by GNB, as computed from addition request events. + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: addreq_stats_nr_cell +description : statistics about neighboring cell RSRP aggregated by cell id + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- INT min_rsrp +- INT pctl_05_rsrp +- INT median_rsrp +- INT pctl_95_rsrp +- FLOAT stddev_rsrp +- INT max_rsrp + + +name: addreq_stats_nr_gnb +description : statistics about neighboring cell RSRP aggregated by GNB, as computed from addition request events. + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- INT min_rsrp +- INT pctl_05_rsrp +- INT median_rsrp +- INT pctl_95_rsrp +- FLOAT stddev_rsrp +- INT max_rsrp + + +name: erab_stats +description: number of admitted bearers and the distribution of their qCI + +- ULLONG TS +- FLOAT measurementInterval +- INT total_erabs +- UINT qCI_1 +- UINT qCI_2 +- UINT qCI_3 +- UINT qCI_4 +- UINT qCI_5 +- UINT qCI_6 +- UINT qCI_7 +- UINT qCI_8 +- UINT qCI_9 +- UINT qCI_other + + +name: mc_connected_cnt +description: Number of dual connected users + +- ULLONG TS +- FLOAT measurementInterval +- INT count_connected_ue + + +name: mc_connection_stats +description : statistics about the length of dual connected sessions + +- ULLONG TS +- FLOAT measurementInterval +- FLOAT min_connected_time +- FLOAT max_connected_time +- FLOAT avg_connected_time +- FLOAT pctl_05_connected_time +- FLOAT pctl_95_connected_time +- FLOAT stddev_connected_time + + +name: mc_connects_cnt +description: number of DC connection requests + +- ULLONG TS +- FLOAT measurementInterval +- INT count_ue_connects + + +name: mc_disconnects_cnt +description: number of DC connection releases + +- ULLONG TS +- FLOAT measurementInterval +- INT count_ue_disconnects + + +name: mc_unique_ue_cnt +description: Number of distinct UEs making a DC request or release + +- ULLONG TS +- FLOAT measurementInterval +- INT count_unique_ue + + +name: mod_req_failure_distribution +description: distribution of causes of a modification requet failure + +- ULLONG TS +- FLOAT measurementInterval +- INT cnt +- UINT count_protobuf_unspecified +- UINT count_t310_Expiry +- UINT count_randomAccessProblem +- UINT count_rlc_MaxNumRetx +- UINT count_synchReconfigFailure_SCG +- UINT count_scg_reconfigFailure +- UINT count_srb3_IntegrityFailure + + +name: reconfig_status_success_rate +description: fraction of DC connect requests which are successful + +- V_STR GNB_ID +- ULLONG TS +- FLOAT measurementInterval +- INT total_reconfiguration_requests +- UINT successful_reconfiguration_requests +- FLOAT success_rate + + +name: reconfig_status_reject_cause +description: distribution of causes for DC rejection + +- V_STR gnb_id +- ULLONG TB +- INT total_reconfig_reject +- UINT count_radio_network +- UINT count_transport +- UINT count_protocol +- UINT count_misc + + +name: mod_status_refuse_cause +description: distribution of causes for a sgnb modification refusal + +- V_STR GNB_ID +- ULLONG TS +- FLOAT measurementInterval +- INT total_reconfig_refuse +- UINT count_radio_network +- UINT count_transport +- UINT count_protocol +- UINT count_misc + + +name: release_cause +description: distribution of the causes of a DC release + +- V_STR GNB_ID +- ULLONG TS +- FLOAT measurementInterval +- INT total_reconfig_refuse +- UINT count_radio_network +- UINT count_transport +- UINT count_protocol +- UINT count_misc + + +name: release_req_success_stats +description: statistics on the time to delease a DC connection + +- V_STR GNB_ID +- ULLONG TS +- FLOAT measurementInterval +- FLOAT min_success_time +- FLOAT max_success_time +- FLOAT avg_success_time +- FLOAT pctl_05_success_time +- FLOAT pctl_95_success_time +- FLOAT stddev_success_time + + +name: rrcx_pdf_neigh_cell_csi +description: distribution of the beam csi rsrp of neighboring cells, aggregated by cell id, computed from rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: rrcx_pdf_neigh_gnb_csi +description: distribution of the beam csi rsrp of neighboring cells, aggregated by gNB, computed from rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: rrcx_pdf_neigh_cell_ssb +description: distribution of the beam ssb rsrp of neighboring cells, aggregated by cell id, computed from rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: rrcx_pdf_neigh_gnb_ssb +description: distribution of the beam ssb rsrp of neighboring cells, aggregated by gNB, computed from rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: rrcx_pdf_serv_cell +description: distribution of the ssb rsrp of serving cell aggregated by cell id, computed from rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: rrcx_pdf_neighbor_cell +description: distribution of the ssb rsrp of neighbor cells aggregated by cell id, computed from rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: rrcx_pdf_serv_gnb +description: distribution of the ssb rsrp of serving cell aggregated by gnb, computed from rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: rrcx_pdf_neighbor_gnb +description: distribution of the ssb rsrp of serving cell aggregated by cell id, computed from rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- UINT rsrp_vbad +- UINT rsrp_bad +- UINT rsrp_medium +- UINT rsrp_good +- UINT rsrp_vgood + + +name: rrcx_stats_neigh_cell +description: statistics on ssb RSRP on the beams of nrighboring cells, aggregated by cell ID, computed using rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- INT min_rsrp +- INT pctl_05_rsrp +- INT median_rsrp +- INT pctl_95_rsrp +- FLOAT stddev_rsrp +- INT max_rsrp + + +name: rrcx_stats_neigh_gnb +description: statistics on ssb RSRP on the beams of nrighboring cells, aggregated by gNB, computed using rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- INT min_rsrp +- INT pctl_05_rsrp +- INT median_rsrp +- INT pctl_95_rsrp +- FLOAT stddev_rsrp +- INT max_rsrp + + +name: rrcx_stats_serv_cell +description: statistics on the ssb rsrp of the serving cell, aggregated by cell id, computed using rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- INT min_rsrp +- INT pctl_05_rsrp +- INT median_rsrp +- INT pctl_95_rsrp +- FLOAT stddev_rsrp +- INT max_rsrp + + +name: rrcx_stats_neighbor_cell +description: statistics on the ssb rsrp of the neighbor cells, aggregated by cell id, computed using rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- UINT CELL_ID +- INT cnt +- INT min_rsrp +- INT pctl_05_rsrp +- INT median_rsrp +- INT pctl_95_rsrp +- FLOAT stddev_rsrp +- INT max_rsrp + + +name: rrcx_stats_serv_gnb +description: statistics on the ssb srp of the serving cell, aggregated by gNB, computed using rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- INT min_rsrp +- INT pctl_05_rsrp +- INT median_rsrp +- INT pctl_95_rsrp +- FLOAT stddev_rsrp +- INT max_rsrp + + +name: rrcx_stats_neighbor_gnb +description: statistics on the ssb rsrp of the neighbor cells, aggregated by gNB, computed using rrc transfer + +- ULLONG TS +- FLOAT measurementInterval +- V_STR GNB_ID +- INT cnt +- INT min_rsrp +- INT pctl_05_rsrp +- INT median_rsrp +- INT pctl_95_rsrp +- FLOAT stddev_rsrp +- INT max_rsrp + + +name: throughput_rollup +description: statistics on the per-UE throughput + +- ULLONG TS +- LLONG e_RAB_ID +- V_STR GNB_ID +- FLOAT measurementInterval +- INT count_ues +- UINT average_throughput_percentile_05 +- UINT average_throughput_percentile_50 +- FLOAT average_average_throughput +- UINT average_throughput_percentile_95 +- UINT active_throughput_percentile_05 +- UINT active_throughput_percentile_50 +- FLOAT average_active_throughput +- UINT active_throughput_percentile_95 + + +name: throughput_gnb +description: throughput experienced by a GNB over a measurement interval. "Active" throughput is throughput while actively downloading, "average" averages bytes transfered over the measurement interval + +- ULLONG TS +- LLONG e_RAB_ID +- V_STR GNB_ID +- FLOAT measurementInterval +- LLONG active_throughput +- LLONG average_throughput +- LLONG min_throughput +- LLONG max_throughput +- UINT extr_quant_hfta0_fcn_quant_udaf_hfta0 +- UINT extr_quant_hfta0_fcn_quant_udaf_hfta01 + + + diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt new file mode 100644 index 0000000..09a0c1c --- /dev/null +++ b/docs/requirements-docs.txt @@ -0,0 +1,5 @@ +sphinx +sphinx-rtd-theme +sphinxcontrib-httpdomain +recommonmark +lfdocs-conf diff --git a/mc-core/Dockerfile b/mc-core/Dockerfile index 8cf8916..0c5c14a 100644 --- a/mc-core/Dockerfile +++ b/mc-core/Dockerfile @@ -46,7 +46,7 @@ RUN make install RUN ldconfig RUN pip install protobuf WORKDIR ${STAGE_DIR} -RUN git clone https://gerrit.o-ran-sc.org/r/com/gs-lite +RUN git clone -b release/0.1.0 https://gerrit.o-ran-sc.org/r/com/gs-lite WORKDIR ${STAGE_DIR}/gs-lite COPY mc/cfg ${STAGE_DIR}/gs-lite/cfg COPY mc/local_datasource ${STAGE_DIR}/gs-lite/src/lib/gscprts/local_datasource diff --git a/mc-core/mc/cfg/packet_schema.txt b/mc-core/mc/cfg/packet_schema.txt index 36ddd71..f3cde05 100644 --- a/mc-core/mc/cfg/packet_schema.txt +++ b/mc-core/mc/cfg/packet_schema.txt @@ -246,7 +246,7 @@ PROTOCOL serv_nr_cell (base){ uint sinr get_serv_nr_cell__sinr; } -// Cell-wide CSI-RS measurement tuple and SSB measurement (from neighbor cells) +// Cell-wide SSB measurement (from neighbor cells) // Defined in rrc_metrics.json on rrctransfer.proto // schemaId = 4, interface RRCXFER PROTOCOL nr_neighbor (base){ @@ -857,6 +857,8 @@ PROTOCOL sgnb_mod_req (base){ llong id_MeNB_UE_X2AP_ID get_sgnb_mod_req__id_MeNB_UE_X2AP_ID (required); // default=-1 llong cause_transport get_sgnb_mod_req__cause_transport (required); +// default=-1 + llong failureType get_sgnb_mod_req__failureType (required); // default=-1 llong cause_radio_network get_sgnb_mod_req__cause_radio_network (required); // UE_ID assigned by gNB for the UE over the X2. Is mandatory @@ -865,6 +867,64 @@ PROTOCOL sgnb_mod_req (base){ llong cause_misc get_sgnb_mod_req__cause_misc (required); } +// ??? +// Defined in sgnb_mod_req_ack.json on sgnb_modification_request_acknowledge.proto +// schemaId = 1701, interface SGNBMODREQACK +PROTOCOL sgnb_mod_req_ack (base){ +// timestamp in milliseconds + ullong timestamp_ms get_sgnb_mod_req_ack__timestamp_ms (required,increasing); +// gNB ID + string gnb_id get_sgnb_mod_req_ack__gnb_id (required); +// UE_ID assigned by eNB for the UE over an X2. Is mandatory + llong id_MeNB_UE_X2AP_ID get_sgnb_mod_req_ack__id_MeNB_UE_X2AP_ID (required); +// UE_ID assigned by gNB for the UE over the X2. Is mandatory + llong id_SgNB_UE_X2AP_ID get_sgnb_mod_req_ack__id_SgNB_UE_X2AP_ID (required); +} + +// ??? +// Defined in sgnb_mod_req_reject.json on sgnb_modification_request_reject.proto +// schemaId = 1801, interface SGNBMODREQREJECT +PROTOCOL sgnb_mod_req_reject (base){ +// timestamp in milliseconds + ullong timestamp_ms get_sgnb_mod_req_reject__timestamp_ms (required,increasing); +// gNB ID + string gnb_id get_sgnb_mod_req_reject__gnb_id (required); +// default=-1 + llong cause_protocol get_sgnb_mod_req_reject__cause_protocol (required); +// UE_ID assigned by eNB for the UE over an X2. Is mandatory + llong id_MeNB_UE_X2AP_ID get_sgnb_mod_req_reject__id_MeNB_UE_X2AP_ID (required); +// default=-1 + llong cause_transport get_sgnb_mod_req_reject__cause_transport (required); +// default=-1 + llong cause_radio_network get_sgnb_mod_req_reject__cause_radio_network (required); +// UE_ID assigned by gNB for the UE over the X2. Is mandatory + llong id_SgNB_UE_X2AP_ID get_sgnb_mod_req_reject__id_SgNB_UE_X2AP_ID (required); +// default=-1 + llong cause_misc get_sgnb_mod_req_reject__cause_misc (required); +} + +// ??? +// Defined in sgnb_mod_rqd.json on sgnb_modification_required.proto +// schemaId = 1901, interface SGNBMODREQUIRED +PROTOCOL sgnb_mod_required (base){ +// timestamp in milliseconds + ullong timestamp_ms get_sgnb_mod_required__timestamp_ms (required,increasing); +// gNB ID + string gnb_id get_sgnb_mod_required__gnb_id (required); +// default=-1 + llong cause_protocol get_sgnb_mod_required__cause_protocol (required); +// UE_ID assigned by eNB for the UE over an X2. Is mandatory + llong id_MeNB_UE_X2AP_ID get_sgnb_mod_required__id_MeNB_UE_X2AP_ID (required); +// default=-1 + llong cause_transport get_sgnb_mod_required__cause_transport (required); +// default=-1 + llong cause_radio_network get_sgnb_mod_required__cause_radio_network (required); +// UE_ID assigned by gNB for the UE over the X2. Is mandatory + llong id_SgNB_UE_X2AP_ID get_sgnb_mod_required__id_SgNB_UE_X2AP_ID (required); +// default=-1 + llong cause_misc get_sgnb_mod_required__cause_misc (required); +} + // ??? // Defined in sgnb_modification_refuse.json on sgnb_modification_refuse.proto // schemaId = 1401, interface SGNBMODREFUSE diff --git a/mc-core/mc/cfg/packet_schema.txt.fragment b/mc-core/mc/cfg/packet_schema.txt.fragment index 21eb397..c89f40a 100644 --- a/mc-core/mc/cfg/packet_schema.txt.fragment +++ b/mc-core/mc/cfg/packet_schema.txt.fragment @@ -240,7 +240,7 @@ PROTOCOL serv_nr_cell (base){ uint sinr get_serv_nr_cell__sinr; } -// Cell-wide CSI-RS measurement tuple and SSB measurement (from neighbor cells) +// Cell-wide SSB measurement (from neighbor cells) // Defined in rrc_metrics.json on rrctransfer.proto // schemaId = 4, interface RRCXFER PROTOCOL nr_neighbor (base){ @@ -851,6 +851,8 @@ PROTOCOL sgnb_mod_req (base){ llong id_MeNB_UE_X2AP_ID get_sgnb_mod_req__id_MeNB_UE_X2AP_ID (required); // default=-1 llong cause_transport get_sgnb_mod_req__cause_transport (required); +// default=-1 + llong failureType get_sgnb_mod_req__failureType (required); // default=-1 llong cause_radio_network get_sgnb_mod_req__cause_radio_network (required); // UE_ID assigned by gNB for the UE over the X2. Is mandatory @@ -859,6 +861,64 @@ PROTOCOL sgnb_mod_req (base){ llong cause_misc get_sgnb_mod_req__cause_misc (required); } +// ??? +// Defined in sgnb_mod_req_ack.json on sgnb_modification_request_acknowledge.proto +// schemaId = 1701, interface SGNBMODREQACK +PROTOCOL sgnb_mod_req_ack (base){ +// timestamp in milliseconds + ullong timestamp_ms get_sgnb_mod_req_ack__timestamp_ms (required,increasing); +// gNB ID + string gnb_id get_sgnb_mod_req_ack__gnb_id (required); +// UE_ID assigned by eNB for the UE over an X2. Is mandatory + llong id_MeNB_UE_X2AP_ID get_sgnb_mod_req_ack__id_MeNB_UE_X2AP_ID (required); +// UE_ID assigned by gNB for the UE over the X2. Is mandatory + llong id_SgNB_UE_X2AP_ID get_sgnb_mod_req_ack__id_SgNB_UE_X2AP_ID (required); +} + +// ??? +// Defined in sgnb_mod_req_reject.json on sgnb_modification_request_reject.proto +// schemaId = 1801, interface SGNBMODREQREJECT +PROTOCOL sgnb_mod_req_reject (base){ +// timestamp in milliseconds + ullong timestamp_ms get_sgnb_mod_req_reject__timestamp_ms (required,increasing); +// gNB ID + string gnb_id get_sgnb_mod_req_reject__gnb_id (required); +// default=-1 + llong cause_protocol get_sgnb_mod_req_reject__cause_protocol (required); +// UE_ID assigned by eNB for the UE over an X2. Is mandatory + llong id_MeNB_UE_X2AP_ID get_sgnb_mod_req_reject__id_MeNB_UE_X2AP_ID (required); +// default=-1 + llong cause_transport get_sgnb_mod_req_reject__cause_transport (required); +// default=-1 + llong cause_radio_network get_sgnb_mod_req_reject__cause_radio_network (required); +// UE_ID assigned by gNB for the UE over the X2. Is mandatory + llong id_SgNB_UE_X2AP_ID get_sgnb_mod_req_reject__id_SgNB_UE_X2AP_ID (required); +// default=-1 + llong cause_misc get_sgnb_mod_req_reject__cause_misc (required); +} + +// ??? +// Defined in sgnb_mod_rqd.json on sgnb_modification_required.proto +// schemaId = 1901, interface SGNBMODREQUIRED +PROTOCOL sgnb_mod_required (base){ +// timestamp in milliseconds + ullong timestamp_ms get_sgnb_mod_required__timestamp_ms (required,increasing); +// gNB ID + string gnb_id get_sgnb_mod_required__gnb_id (required); +// default=-1 + llong cause_protocol get_sgnb_mod_required__cause_protocol (required); +// UE_ID assigned by eNB for the UE over an X2. Is mandatory + llong id_MeNB_UE_X2AP_ID get_sgnb_mod_required__id_MeNB_UE_X2AP_ID (required); +// default=-1 + llong cause_transport get_sgnb_mod_required__cause_transport (required); +// default=-1 + llong cause_radio_network get_sgnb_mod_required__cause_radio_network (required); +// UE_ID assigned by gNB for the UE over the X2. Is mandatory + llong id_SgNB_UE_X2AP_ID get_sgnb_mod_required__id_SgNB_UE_X2AP_ID (required); +// default=-1 + llong cause_misc get_sgnb_mod_required__cause_misc (required); +} + // ??? // Defined in sgnb_modification_refuse.json on sgnb_modification_refuse.proto // schemaId = 1401, interface SGNBMODREFUSE diff --git a/mc-core/mc/local_datasource/rts_proto.c b/mc-core/mc/local_datasource/rts_proto.c index e39381a..7f763b7 100644 --- a/mc-core/mc/local_datasource/rts_proto.c +++ b/mc-core/mc/local_datasource/rts_proto.c @@ -875,8 +875,8 @@ gs_uint32_t process_buffer_RRCXFER(gs_uint8_t * buffer, gs_uint32_t buflen){ if(node_0_10->measresult){ node_0_12 = node_0_11->cellresults; if(node_0_11->cellresults){ - node_0_13 = node_0_12->resultscsi_rs_cell; - if(node_0_12->resultscsi_rs_cell){ + node_0_13 = node_0_12->resultsssb_cell; + if(node_0_12->resultsssb_cell){ if(node_0_13->rsrq){ serv_nr_cell->rsrq = node_0_13->rsrq->value; serv_nr_cell->rsrq_exists = 1; @@ -951,8 +951,8 @@ gs_uint32_t process_buffer_RRCXFER(gs_uint8_t * buffer, gs_uint32_t buflen){ if(node_1_9->measresult){ node_1_11 = node_1_10->cellresults; if(node_1_10->cellresults){ - node_1_12 = node_1_11->resultscsi_rs_cell; - if(node_1_11->resultscsi_rs_cell){ + node_1_12 = node_1_11->resultsssb_cell; + if(node_1_11->resultsssb_cell){ if(node_1_12->rsrq){ nr_neighbor->rsrq = node_1_12->rsrq->value; nr_neighbor->rsrq_exists = 1; diff --git a/mc-core/mc/queries/addn_req_time.gsql b/mc-core/mc/queries/addn_req_time.gsql index a36420d..764642d 100644 --- a/mc-core/mc/queries/addn_req_time.gsql +++ b/mc-core/mc/queries/addn_req_time.gsql @@ -29,7 +29,9 @@ from add_req_start p1, add_req_success p2 ; -DEFINE{query_name 'addreq_success_time';} +DEFINE{query_name 'addreq_success_time'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select eUE_ID, gnb_id, TB, UINT(max(end_time)-max(start_time)) as success_time @@ -38,7 +40,9 @@ group by eUE_ID, gnb_id, timestamp / $window as TB having max(end_time)>0 and max(start_time)>0 and max(end_time)>max(start_time) ; -DEFINE{query_name 'addreq_success_stats';} +DEFINE{query_name 'addreq_success_stats'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, diff --git a/mc-core/mc/queries/addreq_pdf.gsql b/mc-core/mc/queries/addreq_pdf.gsql index b976656..a06d137 100644 --- a/mc-core/mc/queries/addreq_pdf.gsql +++ b/mc-core/mc/queries/addreq_pdf.gsql @@ -1,4 +1,6 @@ -DEFINE{ query_name 'addreq_pdf_nr_cell'; } +DEFINE{ query_name 'addreq_pdf_nr_cell'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // for now divide into 5 bins. @@ -16,7 +18,9 @@ where schemaId = 410 group by timestamp_ms/$window as tb, physCellId ; -DEFINE{ query_name 'addreq_pdf_nr_gnb'; } +DEFINE{ query_name 'addreq_pdf_nr_gnb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // for now divide into 5 bins. diff --git a/mc-core/mc/queries/addreq_stats.gsql b/mc-core/mc/queries/addreq_stats.gsql index 966cdb3..84bfd8e 100644 --- a/mc-core/mc/queries/addreq_stats.gsql +++ b/mc-core/mc/queries/addreq_stats.gsql @@ -1,4 +1,6 @@ -DEFINE{ query_name 'addreq_stats_nr_cell'; } +DEFINE{ query_name 'addreq_stats_nr_cell'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // to convert rsrp to dbm, subtract 157 @@ -20,7 +22,9 @@ where schemaId = 410 group by timestamp_ms/$window as tb, physCellId ; -DEFINE{ query_name 'addreq_stats_nr_gnb'; } +DEFINE{ query_name 'addreq_stats_nr_gnb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // to convert rsrp to dbm, subtract 157 diff --git a/mc-core/mc/queries/admitted_erabs.gsql b/mc-core/mc/queries/admitted_erabs.gsql index 4ce30f2..1e15232 100644 --- a/mc-core/mc/queries/admitted_erabs.gsql +++ b/mc-core/mc/queries/admitted_erabs.gsql @@ -3,7 +3,9 @@ // Compromise between ensuring that most add_req_ack-recon_complete pairs // are caught while avoiding duplicates due to short sessions // NB: $window should be a multiple of 10. -DEFINE{query_name 'erab_stats_join';} +DEFINE{query_name 'erab_stats_join'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select e.timestamp_ms/10000 as TB10, e.id_SgNB_UE_X2AP_ID, e.e_RAB_ID, e.qCI INNER_JOIN from SGNB_ADDITION_REQ_ACK.eRABs_acked_for_admit_for_ue e, @@ -13,7 +15,9 @@ and r.id_SgNB_UE_X2AP_ID = e.id_SgNB_UE_X2AP_ID and r.timestamp_ms/10000 = e.timestamp_ms/10000 ; -DEFINE{query_name 'erab_stats';} +DEFINE{query_name 'erab_stats'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } Select (TB*$window)/1000 as TS, $window/1000.0 as measurementInterval, diff --git a/mc-core/mc/queries/dc_conn_stats.gsql b/mc-core/mc/queries/dc_conn_stats.gsql index 3090fb5..1551869 100644 --- a/mc-core/mc/queries/dc_conn_stats.gsql +++ b/mc-core/mc/queries/dc_conn_stats.gsql @@ -1,4 +1,6 @@ -DEFINE{query_name 'dc_connect';} +DEFINE{query_name 'dc_connect'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select timestamp_ms as timestamp, UINT(id_MeNB_UE_X2AP_ID) as eUE_ID, @@ -8,7 +10,9 @@ from RECONCOMPLETE.reconfig_success where schemaId=101 ; -DEFINE{query_name 'dc_terminate';} +DEFINE{query_name 'dc_terminate'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select timestamp_ms as timestamp, UINT(id_Old_eNB_UE_X2AP_ID) as eUE_ID, @@ -25,7 +29,9 @@ from dc_connect p1, dc_terminate p2 ; -DEFINE{ query_name 'mc_connected_ues'; } +DEFINE{ query_name 'mc_connected_ues'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } SELECT TB, UE_ID, ((TB+1)*$window-LAST(timestamp))/1000.0 as connected_time @@ -35,7 +41,9 @@ HAVING LAST(event_type) = 1 CLOSING_WHEN LAST(event_type) = 0 ; -DEFINE{ query_name 'mc_connected_cnt'; } +DEFINE{ query_name 'mc_connected_cnt'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval, // standard_name @@ -44,7 +52,9 @@ FROM mc_connected_ues GROUP BY TB ; -DEFINE{ query_name 'mc_disconnected_ues'; } +DEFINE{ query_name 'mc_disconnected_ues'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } SELECT TB_1000, UE_ID, UINT((LAST(timestamp) - FIRST(timestamp))) as connected_time @@ -55,7 +65,9 @@ CLOSING_WHEN LAST(event_type) = 0 ; -DEFINE{ query_name 'mc_connection_stats'; } +DEFINE{ query_name 'mc_connection_stats'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval, // standard_name @@ -72,7 +84,9 @@ GROUP BY (TB_1000 * 1000) / $window as TB ; -DEFINE{ query_name 'mc_connects_cnt'; } +DEFINE{ query_name 'mc_connects_cnt'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval, // standard_name @@ -82,7 +96,9 @@ WHERE event_type = 1 GROUP BY timestamp / $window as TB ; -DEFINE{ query_name 'mc_disconnects_cnt'; } +DEFINE{ query_name 'mc_disconnects_cnt'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval, // standard_name @@ -92,14 +108,18 @@ WHERE event_type = 0 GROUP BY timestamp / $window as TB ; -DEFINE{ query_name 'mc_unique_ues'; } +DEFINE{ query_name 'mc_unique_ues'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } SELECT TB, UE_ID FROM dc_events GROUP BY timestamp / $window as TB, gUE_ID as UE_ID ; -DEFINE{ query_name 'mc_unique_ue_cnt'; } +DEFINE{ query_name 'mc_unique_ue_cnt'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } SELECT ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval, // standard_name diff --git a/mc-core/mc/queries/debug.gsql b/mc-core/mc/queries/debug.gsql index 5d92fb1..69661b6 100644 --- a/mc-core/mc/queries/debug.gsql +++ b/mc-core/mc/queries/debug.gsql @@ -1,4 +1,6 @@ -DEFINE{ query_name 'reconfig_all_debug'; } +DEFINE{ query_name 'reconfig_all_debug'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select 'reconfig_all_debug' as name, count(*) as cnt, ($window*(TB+1))/1000 as TS, @@ -8,7 +10,9 @@ where schemaId=103 group by timestamp_ms / $window as TB ; -DEFINE{ query_name 'reconfig_success_debug'; } +DEFINE{ query_name 'reconfig_success_debug'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select 'reconfig_success_debug' as name, count(*) as cnt, ($window*(TB+1))/1000 as TS, @@ -18,7 +22,9 @@ where schemaId=101 group by timestamp_ms / $window as TB ; -DEFINE{ query_name 'reconfig_reject_debug'; } +DEFINE{ query_name 'reconfig_reject_debug'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select 'reconfig_reject_debug' as name, count(*) as cnt, ($window*(TB+1))/1000 as TS, @@ -28,7 +34,9 @@ where schemaId=102 group by timestamp_ms / $window as TB ; -DEFINE{ query_name 'dc_release_debug'; } +DEFINE{ query_name 'dc_release_debug'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select 'dc_release_debug' as name, count(*) as cnt, ($window*(TB+1))/1000 as TS, diff --git a/mc-core/mc/queries/mod_req_failure.gsql b/mc-core/mc/queries/mod_req_failure.gsql new file mode 100644 index 0000000..96a274e --- /dev/null +++ b/mc-core/mc/queries/mod_req_failure.gsql @@ -0,0 +1,19 @@ +DEFINE{ query_name 'mod_req_failure_distribution'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} +PARAM{ window uint;} + +select ($window*(tb+1))/1000 as TS, + $window/1000.0 as measurementInterval, + count(*) as cnt, + sum(EQ(UINT(failureType),0)) as count_protobuf_unspecified, + sum(EQ(UINT(failureType),1)) as count_t310_Expiry, + sum(EQ(UINT(failureType),2)) as count_randomAccessProblem, + sum(EQ(UINT(failureType),3)) as count_rlc_MaxNumRetx, + sum(EQ(UINT(failureType),4)) as count_synchReconfigFailure_SCG, + sum(EQ(UINT(failureType),5)) as count_scg_reconfigFailure, + sum(EQ(UINT(failureType),6)) as count_srb3_IntegrityFailure +From SGNBMODREQ.sgnb_mod_req +where schemaId=1201 +group by timestamp_ms/$window as tb + diff --git a/mc-core/mc/queries/output_spec.cfg b/mc-core/mc/queries/output_spec.cfg index 6a2e303..b28ade5 100644 --- a/mc-core/mc/queries/output_spec.cfg +++ b/mc-core/mc/queries/output_spec.cfg @@ -8,10 +8,14 @@ rrcx_pdf_neigh_cell_ssb,stream,,,,, rrcx_pdf_neigh_gnb_ssb,stream,,,,, rrcx_pdf_serv_cell,stream,,,,, rrcx_pdf_serv_gnb,stream,,,,, +rrcx_pdf_neighbor_cell,stream,,,,, +rrcx_pdf_neighbor_gnb,stream,,,,, rrcx_stats_neigh_cell,stream,,,,, rrcx_stats_neigh_gnb,stream,,,,, rrcx_stats_serv_cell,stream,,,,, rrcx_stats_serv_gnb,stream,,,,, +rrcx_stats_neighbor_cell,stream,,,,, +rrcx_stats_neighbor_gnb,stream,,,,, mc_connected_cnt,stream,,,,, mc_connection_stats,stream,,,,, mc_connects_cnt,stream,,,,, @@ -31,3 +35,4 @@ dc_release_debug,stream,,,,, throughput_ue,stream,,,,, throughput_rollup,stream,,,,, throughput_gnb,stream,,,,, +mod_req_failure_distribution,stream,,,,, diff --git a/mc-core/mc/queries/reconfig_status.gsql b/mc-core/mc/queries/reconfig_status.gsql index 99cfd78..d7ff5c1 100644 --- a/mc-core/mc/queries/reconfig_status.gsql +++ b/mc-core/mc/queries/reconfig_status.gsql @@ -29,7 +29,9 @@ from reconfig_status_start p1, reconfig_status_success p2 ; -DEFINE{query_name 'reconfig_status_merge';} +DEFINE{query_name 'reconfig_status_merge'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select eUE_ID, gnb_id, TB, max(start_time) as max_start_time, @@ -38,7 +40,9 @@ from reconfig_status_events group by eUE_ID, gnb_id, timestamp / $window as TB ; -DEFINE{query_name 'reconfig_status_success_rate';} +DEFINE{query_name 'reconfig_status_success_rate'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, @@ -52,7 +56,9 @@ group by gnb_id, TB // ---------------------------------------------- // Merge in reconfig_reject causes and aggregate with this. -DEFINE{query_name 'reconfig_status_reject_cause';} +DEFINE{query_name 'reconfig_status_reject_cause'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } Select gnb_id, TB, count(*) as total_reconfig_reject, @@ -65,7 +71,9 @@ where schemaId=701 group by gnb_id, timestamp_ms / $window as TB ; -DEFINE{query_name 'reconfig_complete_reject_cause';} +DEFINE{query_name 'reconfig_complete_reject_cause'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } Select gnb_id, TB, count(*) as total_reconfig_reject, @@ -84,7 +92,9 @@ merge p1.TB : p2.TB from reconfig_status_reject_cause p1, reconfig_complete_reject_cause p2 ; -DEFINE{query_name 'reconfig_reject_cause';} +DEFINE{query_name 'reconfig_reject_cause'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } Select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval, @@ -99,7 +109,9 @@ group by gnb_id, TB // ---------------------------------------------- -DEFINE{query_name 'mod_status_refuse_cause';} +DEFINE{query_name 'mod_status_refuse_cause'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } Select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval, @@ -114,7 +126,9 @@ group by gnb_id, timestamp_ms / $window as TB ; // ---------------------------------------------- -DEFINE{query_name 'release_rqd_cause';} +DEFINE{query_name 'release_rqd_cause'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } Select gnb_id, TB, count(*) as total_reconfig_refuse, @@ -127,7 +141,9 @@ where schemaId=1001 group by gnb_id, timestamp_ms / $window as TB ; -DEFINE{query_name 'release_request_cause';} +DEFINE{query_name 'release_request_cause'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } Select gnb_id, TB, count(*) as total_reconfig_refuse, @@ -146,7 +162,9 @@ merge p1.TB : p2.TB from release_rqd_cause p1, release_request_cause p2 ; -DEFINE{query_name 'release_cause';} +DEFINE{query_name 'release_cause'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } Select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, $window/1000.0 as measurementInterval, diff --git a/mc-core/mc/queries/release_req_time.gsql b/mc-core/mc/queries/release_req_time.gsql index 91e4b53..9b4c64d 100644 --- a/mc-core/mc/queries/release_req_time.gsql +++ b/mc-core/mc/queries/release_req_time.gsql @@ -1,4 +1,6 @@ -DEFINE{query_name 'release_req_start';} +DEFINE{query_name 'release_req_start'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select timestamp_ms as timestamp, non_temporal(timestamp_ms) as start_time, @@ -11,7 +13,9 @@ from RELREQ.release_req where schemaId=801 ; -DEFINE{query_name 'release_req_success';} +DEFINE{query_name 'release_req_success'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select timestamp_ms as timestamp, 0ULL as start_time, @@ -24,14 +28,18 @@ from CONRELEASE.dc_release where schemaId=201 ; -DEFINE{query_name 'release_req_events';} +DEFINE{query_name 'release_req_events'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } merge p1.timestamp : p2.timestamp from release_req_start p1, release_req_success p2 ; -DEFINE{query_name 'release_req_success_time';} +DEFINE{query_name 'release_req_success_time'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select gUE_ID, gnb_id, TB, UINT(max(end_time)-max(start_time)) as success_time @@ -40,7 +48,9 @@ group by gUE_ID, gnb_id, timestamp / $window as TB having max(end_time)>0 and max(start_time)>0 and max(end_time)>max(start_time) ; -DEFINE{query_name 'release_req_success_stats';} +DEFINE{query_name 'release_req_success_stats'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select gnb_id as GNB_ID, ($window*(TB+1))/1000 as TS, diff --git a/mc-core/mc/queries/rrcx_pdf_cell.gsql b/mc-core/mc/queries/rrcx_pdf_cell.gsql index 68171f7..4ecb20b 100644 --- a/mc-core/mc/queries/rrcx_pdf_cell.gsql +++ b/mc-core/mc/queries/rrcx_pdf_cell.gsql @@ -1,5 +1,7 @@ -DEFINE{ query_name 'rrcx_pdf_neigh_cell_csi'; } +DEFINE{ query_name 'rrcx_pdf_neigh_cell_csi'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // for now divide into 5 bins. @@ -17,7 +19,9 @@ where schemaId = 5 group by timestamp_ms/$window as tb, physCellId ; -DEFINE{ query_name 'rrcx_pdf_neigh_gnb_csi'; } +DEFINE{ query_name 'rrcx_pdf_neigh_gnb_csi'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // for now divide into 5 bins. @@ -36,7 +40,9 @@ group by timestamp_ms/$window as tb, gnb_id ; -DEFINE{ query_name 'rrcx_pdf_neigh_cell_ssb'; } +DEFINE{ query_name 'rrcx_pdf_neigh_cell_ssb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // for now divide into 5 bins. @@ -54,7 +60,9 @@ where schemaId = 5 group by timestamp_ms/$window as tb, physCellId ; -DEFINE{ query_name 'rrcx_pdf_neigh_gnb_ssb'; } +DEFINE{ query_name 'rrcx_pdf_neigh_gnb_ssb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // for now divide into 5 bins. @@ -74,7 +82,9 @@ group by timestamp_ms/$window as tb, gnb_id -DEFINE{ query_name 'rrcx_pdf_serv_cell'; } +DEFINE{ query_name 'rrcx_pdf_serv_cell'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // for now divide into 5 bins. @@ -92,7 +102,30 @@ where schemaId = 1 group by timestamp_ms/$window as tb, physCellId ; -DEFINE{ query_name 'rrcx_pdf_serv_gnb'; } +DEFINE{ query_name 'rrcx_pdf_neighbor_cell'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} +PARAM{ window uint;} +// rsrp, rsrq, sinr ranges are 0 .. 127 +// for now divide into 5 bins. + +select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, + physCellId as CELL_ID, + count(*) as cnt, + sum(GEQ(rsrp, 0)*LEQ(rsrp,21)) as rsrp_vbad, + sum(GEQ(rsrp,22)*LEQ(rsrp,36)) as rsrp_bad, + sum(GEQ(rsrp,37)*LEQ(rsrp,51)) as rsrp_medium, + sum(GEQ(rsrp,52)*LEQ(rsrp,66)) as rsrp_good, + sum(GEQ(rsrp,67)*LEQ(rsrp,127)) as rsrp_vgood +from RRCXFER.nr_neighbor +where schemaId = 4 +group by timestamp_ms/$window as tb, physCellId +; + + +DEFINE{ query_name 'rrcx_pdf_serv_gnb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // for now divide into 5 bins. @@ -108,4 +141,25 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, from RRCXFER.serv_nr_cell where schemaId = 1 group by timestamp_ms/$window as tb, gnb_id +; + +DEFINE{ query_name 'rrcx_pdf_neighbor_gnb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} +PARAM{ window uint;} +// rsrp, rsrq, sinr ranges are 0 .. 127 +// for now divide into 5 bins. + +select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, + gnb_id as GNB_ID, + count(*) as cnt, + sum(GEQ(rsrp, 0)*LEQ(rsrp,21)) as rsrp_vbad, + sum(GEQ(rsrp,22)*LEQ(rsrp,36)) as rsrp_bad, + sum(GEQ(rsrp,37)*LEQ(rsrp,51)) as rsrp_medium, + sum(GEQ(rsrp,52)*LEQ(rsrp,66)) as rsrp_good, + sum(GEQ(rsrp,67)*LEQ(rsrp,127)) as rsrp_vgood +from RRCXFER.nr_neighbor +where schemaId = 4 +group by timestamp_ms/$window as tb, gnb_id + diff --git a/mc-core/mc/queries/rrcx_stats.gsql b/mc-core/mc/queries/rrcx_stats.gsql index 5629680..edb7215 100644 --- a/mc-core/mc/queries/rrcx_stats.gsql +++ b/mc-core/mc/queries/rrcx_stats.gsql @@ -1,4 +1,6 @@ -DEFINE{ query_name 'rrcx_stats_neigh_cell'; } +DEFINE{ query_name 'rrcx_stats_neigh_cell'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // to convert rsrp to dbm, subtract 157 @@ -15,12 +17,14 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum( (FLOAT(rsrp)-157) )*sum( (FLOAT(rsrp)-157) )/count(*) ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp -from RRCXFER.neighbor_beam_csi -where schemaId = 5 and rsrp<128 +from RRCXFER.neighbor_beam_ssb +where schemaId = 6 and rsrp<128 group by timestamp_ms/$window as tb, physCellId ; -DEFINE{ query_name 'rrcx_stats_neigh_gnb'; } +DEFINE{ query_name 'rrcx_stats_neigh_gnb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // to convert rsrp to dbm, subtract 157 @@ -37,13 +41,15 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, sum( (FLOAT(rsrp)-157) )*sum( (FLOAT(rsrp)-157) )/count(*) ) / count(*) as stddev_rsrp, INT(max(rsrp))-INT(157) as max_rsrp -from RRCXFER.neighbor_beam_csi -where schemaId = 5 and rsrp<128 +from RRCXFER.neighbor_beam_ssb +where schemaId = 6 and rsrp<128 group by timestamp_ms/$window as tb, gnb_id ; -DEFINE{ query_name 'rrcx_stats_serv_cell'; } +DEFINE{ query_name 'rrcx_stats_serv_cell'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // to convert rsrp to dbm, subtract 157 @@ -65,7 +71,34 @@ where schemaId = 1 and rsrp<128 group by timestamp_ms/$window as tb, physCellId ; -DEFINE{ query_name 'rrcx_stats_serv_gnb'; } +DEFINE{ query_name 'rrcx_stats_neighbor_cell'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} +PARAM{ window uint;} +// rsrp, rsrq, sinr ranges are 0 .. 127 +// to convert rsrp to dbm, subtract 157 + +select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, + physCellId as CELL_ID, + count(*) as cnt, + INT(min(rsrp))-INT(157) as min_rsrp, + INT(quantile_of(rsrp, .05)) - INT(157) as pctl_05_rsrp, + INT(median_of(rsrp)) - INT(157) as median_rsrp, + INT(quantile_of(rsrp, .95)) - INT(157) as pctl_95_rsrp, + sqrt( + sum( (FLOAT(rsrp)-157)*(FLOAT(rsrp)-157)) - + sum( (FLOAT(rsrp)-157) )*sum( (FLOAT(rsrp)-157) )/count(*) + ) / count(*) as stddev_rsrp, + INT(max(rsrp))-INT(157) as max_rsrp +from RRCXFER.nr_neighbor +where schemaId = 4 and rsrp<128 +group by timestamp_ms/$window as tb, physCellId +; + + +DEFINE{ query_name 'rrcx_stats_serv_gnb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint;} // rsrp, rsrq, sinr ranges are 0 .. 127 // to convert rsrp to dbm, subtract 157 @@ -85,4 +118,28 @@ select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, from RRCXFER.serv_nr_cell where schemaId = 1 and rsrp<128 group by timestamp_ms/$window as tb, gnb_id +; + +DEFINE{ query_name 'rrcx_stats_neighbor_gnb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} +PARAM{ window uint;} +// rsrp, rsrq, sinr ranges are 0 .. 127 +// to convert rsrp to dbm, subtract 157 + +select ($window*(tb+1))/1000 as TS, $window/1000.0 as measurementInterval, + gnb_id as GNB_ID, + count(*) as cnt, + INT(min(rsrp))-INT(157) as min_rsrp, + INT(quantile_of(rsrp, .05)) - INT(157) as pctl_05_rsrp, + INT(median_of(rsrp)) - INT(157) as median_rsrp, + INT(quantile_of(rsrp, .95)) - INT(157) as pctl_95_rsrp, + sqrt( + sum( (FLOAT(rsrp)-157)*(FLOAT(rsrp)-157)) - + sum( (FLOAT(rsrp)-157) )*sum( (FLOAT(rsrp)-157) )/count(*) + ) / count(*) as stddev_rsrp, + INT(max(rsrp))-INT(157) as max_rsrp +from RRCXFER.nr_neighbor +where schemaId = 4 and rsrp<128 +group by timestamp_ms/$window as tb, gnb_id diff --git a/mc-core/mc/queries/runall b/mc-core/mc/queries/runall index c7a5f95..fa2207e 100755 --- a/mc-core/mc/queries/runall +++ b/mc-core/mc/queries/runall @@ -77,10 +77,14 @@ else /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_pdf_neigh_gnb_ssb window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_pdf_serv_cell window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_pdf_serv_gnb window=$WINDOW & + /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_pdf_neighbor_cell window=$WINDOW & + /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_pdf_neighbor_gnb window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_stats_neigh_cell window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_stats_neigh_gnb window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_stats_serv_cell window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_stats_serv_gnb window=$WINDOW & + /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_stats_neighbor_cell window=$WINDOW & + /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default rrcx_stats_neighbor_gnb window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default mc_connected_cnt window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default mc_connection_stats window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default mc_connects_cnt window=$WINDOW & @@ -96,6 +100,7 @@ else /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default throughput_ue window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default throughput_rollup window=$WINDOW & /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default throughput_gnb window=$WINDOW & + /mc/gs-lite/bin/gsprintconsole_ves -C $VES_IP:$VES_PORT -U /vescollector/eventListener/v7 -V 7 `cat gshub.log` default mod_req_failure_distribution window=$WINDOW & fi sleep 1 diff --git a/mc-core/mc/queries/throughput.gsql b/mc-core/mc/queries/throughput.gsql index 246d3ca..0e5c9eb 100644 --- a/mc-core/mc/queries/throughput.gsql +++ b/mc-core/mc/queries/throughput.gsql @@ -1,4 +1,6 @@ -DEFINE{query_name 'throughput_ue';} +DEFINE{query_name 'throughput_ue'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select ($window*(TB+1))/1000 as TS, e_RAB_ID, UE_ID, GNB_ID, $window/1000.0 as measurementInterval, @@ -33,7 +35,9 @@ group by e_RAB_ID, id_SgNB_UE_X2AP_ID as UE_ID, gnb_id as GNB_ID, timestamp_ms/$ // (((startTimeStamp & HEX'FF000000') >> 24) | ((startTimeStamp & HEX'00FF0000') >> 8) | ((startTimeStamp & HEX'0000FF00') << 8) | ((startTimeStamp & HEX'000000FF') << 24)) -DEFINE{query_name 'throughput_rollup';} +DEFINE{query_name 'throughput_rollup'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select TS, e_RAB_ID, GNB_ID, $window/1000.0 as measurementInterval, @@ -50,7 +54,9 @@ from throughput_ue group by TS, e_RAB_ID, GNB_ID ; -DEFINE{query_name 'throughput_gnb';} +DEFINE{query_name 'throughput_gnb'; + max_lfta_disorder '1'; max_hfta_disorder '1'; +} PARAM{ window uint; } select ($window*(TB+1))/1000 as TS, e_RAB_ID, GNB_ID, $window/1000.0 as measurementInterval, diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..1eb2928 --- /dev/null +++ b/tox.ini @@ -0,0 +1,48 @@ +#================================================================================== +# Copyright (c) 2018-2019 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#================================================================================== + +[tox] +minversion = 2.0 +envlist = + docs, + docs-linkcheck, + +skipsdist = true + +[testenv:docs] +basepython = python3 +deps = + sphinx + sphinx-rtd-theme + sphinxcontrib-httpdomain + recommonmark + lfdocs-conf + +commands = + sphinx-build -W -b html -n -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/html + + echo "Generated docs available in {toxinidir}/docs/_build/html" + +whitelist_externals = echo + +[testenv:docs-linkcheck] +basepython = python3 +deps = sphinx + sphinx-rtd-theme + sphinxcontrib-httpdomain + recommonmark + lfdocs-conf +commands = sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees ./docs/ {toxinidir}/docs/_build/linkcheck