Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wendelin-telecom
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Paul Graydon
wendelin-telecom
Commits
c8178be7
Commit
c8178be7
authored
Mar 03, 2025
by
Paul Graydon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wendelin_telecom_base: Fix KPI graphing memory usage and delay
Use ZBigArray viewing as ndarray instead of copying
parent
82ed0709
Pipeline
#40107
passed with stage
in 0 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
21 deletions
+25
-21
bt5/wendelin_telecom_base/ExtensionTemplateItem/portal_components/extension.erp5.WendelinTelecomGetOrsKpi.py
...tal_components/extension.erp5.WendelinTelecomGetOrsKpi.py
+25
-21
No files found.
bt5/wendelin_telecom_base/ExtensionTemplateItem/portal_components/extension.erp5.WendelinTelecomGetOrsKpi.py
View file @
c8178be7
...
...
@@ -17,21 +17,21 @@ NA_VALUES_REPLACEMENTS = {
'ul_hi'
:
0.
}
def
resample_data_array
(
np_data_array
,
time_field
,
def
resample_data_
z
array
(
np_data_
z
array
,
time_field
,
time_start
,
time_end
,
resample_size
):
'''
Resample the provided numpy data array to the provided new size
by averaging values in regular time intervals, if it is l
ong
enough to be downsized.
by averaging values in regular time intervals, if it is l
arge
enough to be downsized.
Return a dictionary with the data arrays keyed to their respective data fields.
'''
data_frame
=
pd
.
DataFrame
.
from_records
(
np_data_array
)
data_frame
=
pd
.
DataFrame
.
from_records
(
np_data_
z
array
)
data_frame
[
time_field
]
=
pd
.
to_datetime
(
data_frame
[
time_field
],
unit
=
's'
)
data_frame
=
data_frame
.
sort_values
(
by
=
time_field
)
# Resample data
if
len
(
np_data_array
)
>
resample_size
:
# Resample data
if array is too large
if
len
(
np_data_
z
array
)
>
resample_size
:
resample_period
=
'%ss'
%
int
((
time_end
-
time_start
)
/
resample_size
)
data_frame
=
data_frame
.
resample
(
resample_period
,
on
=
time_field
).
mean
()
data_frame
=
data_frame
.
fillna
(
value
=
NA_VALUES_REPLACEMENTS
)
...
...
@@ -56,36 +56,40 @@ def getOrsEnbKpi(
try
:
data_array
=
portal
.
restrictedTraverse
(
data_array_url
)
data_array
=
np
.
array
(
data_array
.
getArray
())
except
KeyError
:
# Data Array does not exist
RESPONSE
.
setStatus
(
404
)
return
# Data Array is empty
if
data_array
.
shape
in
[(),
(
0
,)]:
data_array_shape
=
data_array
.
getArrayShape
()
data_array_dtype
=
data_array
.
getArrayDtypeNames
()
if
data_array_shape
is
None
\
or
data_array_dtype
is
None
\
or
data_array_shape
in
[(),
(
0
,)]:
RESPONSE
.
write
(
json
.
dumps
(
dict
()))
return
RESPONSE
.
setHeader
(
"Content-Type"
,
"application/json"
)
time_field
=
data_array
.
dtype
.
names
[
0
]
data_zarray
=
data_array
.
getArray
()[:]
time_field
=
data_array_dtype
[
0
]
if
time_start
is
None
or
time_start
==
'NaN'
:
time_start
=
data_array
[
time_field
][
0
]
time_start
=
data_
z
array
[
time_field
][
0
]
else
:
time_start
=
float
(
time_start
)
if
time_end
is
None
or
time_end
==
'NaN'
:
time_end
=
data_array
[
time_field
][
-
1
]
time_end
=
data_
z
array
[
time_field
][
-
1
]
else
:
time_end
=
float
(
time_end
)
time_mask
=
(
data_array
[
time_field
]
>=
time_start
)
\
&
(
data_array
[
time_field
]
<=
time_end
)
time_mask
=
(
data_
z
array
[
time_field
]
>=
time_start
)
\
&
(
data_
z
array
[
time_field
]
<=
time_end
)
if
isinstance
(
time_mask
,
np
.
ndarray
):
data_
array
=
data_
array
[
time_mask
]
data_
zarray
=
data_z
array
[
time_mask
]
if
kpi_type
==
'e_rab_accessibility'
:
resampled_data_dict
=
resample_data_array
(
data_array
,
resampled_data_dict
=
resample_data_
z
array
(
data_
z
array
,
time_field
,
time_start
,
time_end
,
...
...
@@ -109,16 +113,16 @@ def getOrsEnbKpi(
ul_hi
=
[]
for
qci
in
range
(
QCI_COUNT
):
qci_data_
array
=
data_
array
[
qci
::
QCI_COUNT
]
qci_dl_hi
=
qci_data_array
[
'dl_hi'
]
qci_ul_hi
=
qci_data_array
[
'ul_hi'
]
qci_data_
zarray
=
data_z
array
[
qci
::
QCI_COUNT
]
qci_dl_hi
=
qci_data_
z
array
[
'dl_hi'
]
qci_ul_hi
=
qci_data_
z
array
[
'ul_hi'
]
# QCI is silent: skip it
if
(
qci_dl_hi
==
0.
).
all
()
and
(
qci_ul_hi
==
0.
).
all
():
continue
resampled_qci_data_dict
=
resample_data_array
(
qci_data_array
,
resampled_qci_data_dict
=
resample_data_
z
array
(
qci_data_
z
array
,
time_field
,
time_start
,
time_end
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment