slapos.toolbox:master commitshttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commits/master2024-02-15T15:20:07+01:00https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/8e269cd3388aecdf3a8ca132afb577ed717b0ae2Release 0.1422024-02-15T15:20:07+01:00Łukasz Nowakluke@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/cbecd39f15e7e3e60499cd23698ccb5f70a04ba2check_surykatka_json: Fix support for missing expiration_date2024-02-15T15:19:04+01:00Łukasz Nowakluke@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/35f71746e87aa114df94df21f4d73a9fc964bb13check_surykatka_json: Cleanup tests2024-02-15T15:18:48+01:00Łukasz Nowakluke@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/112bd00eda5ca687d0eff5707c0d67a6331d2728Release 0.1412024-02-15T09:47:32+01:00Łukasz Nowakluke@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/4b864b82957e8f8e4f196c223f823d811e9c2ea2check_surykatka_json: Implement whois checks2024-02-14T13:53:20+01:00Łukasz Nowakluke@nexedi.com
Also improve tests to minimize assertions and make them more readable,
including separating specific tests from global ones, which will make
it much easier to improve the coverage.https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/48726608803b92033f486e1bad2c1bb5e7707ab2promise/plugin/check_lopcomm_*: Skip all promises when testing=True2024-01-18T13:24:31+03:00Kirill Smelkovkirr@nexedi.com
When testing is True we do not have hardware around and only check
generated configuration files. Most lopcomm promises were already
skipping themselves under testing=True environment, but
check_lopcomm_config_log and check_lopcomm_stats_log were missing
testing checks. This leads to test failures when trying to test
ors-amarisoft with Lopcomm driver in my upcoming work via [1] e.g. as
================================================================================
Error with promises for the following partitions:
TestENB_Lopcomm4-0[enb]: Promise 'RU1-stats-log.py' failed with output: Not subscribed
-> Fix it by making sure `testing==True` checks are present in all
promises related to lopcomm.
P.S. in current ors-amarisoft Lopcomm driver is not tested at all: even
though we have testFDD-LOPCOMM.py there[2] `python unittest discover ...`
does not pick up test files with dash in their name. This is also
true for all other dashed test files. Currently only testTDD.py and
testFDD.py are run during the tests there.
[1] <a href="https://lab.nexedi.com/kirr/slapos/blob/5b8ec2b3/software/ors-amarisoft/test/test.py">https://lab.nexedi.com/kirr/slapos/blob/5b8ec2b3/software/ors-amarisoft/test/test.py</a>
[2] <a href="https://lab.nexedi.com/nexedi/slapos/tree/15871bbf/software/ors-amarisoft/test">https://lab.nexedi.com/nexedi/slapos/tree/15871bbf/software/ors-amarisoft/test</a>
/cc <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>, <a href="/xavier_thompson" data-user="3136" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Xavier Thompson">@xavier_thompson</a>, <a href="/Daetalus" data-user="50" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Boxiang Sun">@Daetalus</a>
/reviewed-by <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/129" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/129" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7439" data-project-path="nexedi/slapos.toolbox" data-iid="129" data-mr-title="promise/plugin/check_lopcomm_*: Skip all promises when testing=True" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!129</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/a974c1e530177a92a84f4a4924ccf732a296cbadRelease 0.1402023-11-29T22:59:55+03:00Kirill Smelkovkirr@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/63b240f169b46c628b29d4567075608be7f5e638fixup! Release 0.1342023-11-29T22:59:12+03:00Kirill Smelkovkirr@nexedi.com
slapos.toolbox$ rst2html.py CHANGES.txt CHANGES.html
CHANGES.txt:33: (WARNING/2) Bullet list ends without a blank line; unexpected unindent.
-> Fix it.https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/640c01307ce466da629933b7dae639df978be673slapos/promise/plugin/check_cpri_lock: Don't check whatever device blindly2023-11-02T11:54:37+03:00Kirill Smelkovkirr@nexedi.com
Currently this promise is implemented by grepping whole rf_info output
for "HW" and "SW" strings. But this won't work ok in the presence of
multiple CPRI devices. Imagine, for example if one device has CPRI lock,
while the other does not:
PCIe CPRI /dev/sdr2@1:
Hardware ID: 0x4b12
DNA: [0x0048248a334a7054]
Serial: ''
FPGA revision: 2023-06-23 10:05:24
FPGA vccint: 0.98 V
FPGA vccaux: 1.76 V
FPGA vccbram: 0.98 V
FPGA temperature: 71.9 °C
Clock tune: 0.0 ppm
NUMA: 0
CPRI_option: '5' (x8) lock=no <-- NOTE
DMA0: TX fifo: 66.67us Usage=16/32768 (0%)
DMA0: RX fifo: 66.67us Usage=16/32768 (0%)
DMA0 Underflows: 0
DMA0 Overflows: 0
PCIe CPRI /dev/sdr3@1:
Hardware ID: 0x4b12
DNA: [0x0048248a334a7054]
Serial: ''
FPGA revision: 2023-06-23 10:05:24
FPGA vccint: 0.98 V
FPGA vccaux: 1.77 V
FPGA vccbram: 0.98 V
FPGA temperature: 71.7 °C
Clock tune: 0.0 ppm
NUMA: 0
CPRI_option: '5' (x8) lock=HW+SW rx/tx=46.606us <-- NOTE
Port #0: T14=46.606us
DMA0: TX fifo: 66.67us Usage=16/32768 (0%)
DMA0: RX fifo: 66.67us Usage=16/32768 (0%)
DMA0 Underflows: 0
DMA0 Overflows: 0
the old code would still report "CPRI locked all ok" and also globally
without indicating which CPRI channel is locked.
-> Fix it by adjusting check_cpri_lock to parse rf_info text more
precisely, detect devices there and to understand which device has CPRI
lock and which does not.
For now this change is accompanied by the following change in
ors-amarisoft SR to keep it working:
--- a/software/ors-amarisoft/instance-enb.jinja2.cfg
+++ b/software/ors-amarisoft/instance-enb.jinja2.cfg
@@ -35,7 +35,6 @@ parts =
check-lopcomm-sync.py
check-lopcomm-config-log.py
check-lopcomm-stats-log.py
- check-cpri-lock.py
{% endif %}
{% if slapparameter_dict.get("dnsmasq", None) %}
dnsmasq-service
@@ -48,6 +47,7 @@ parts =
{% endif %}
monitor-base
publish-connection-information
+{% set extra_part_list = [] %}
extends = {{ monitor_template }}
@@ -688,12 +688,21 @@ config-testing = {{ slapparameter_dict.get("testing", False) }}
config-config-log = ${lopcomm-rrh-config-template:log-output}
config-stats-period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
-[check-cpri-lock.py]
+{% if ru == "lopcomm" %}
+{%- set cell_list = slapparameter_dict.get('cell_list', {'default': {}}) %}
+{%- for i, k in enumerate(cell_list) %}
+{%- set sfp_port = cell_list[k].get('cpri_port_number', i) %}
+{%- do extra_part_list.append('SFP{{sfp_port}}-cpri-lock.py') %}
+[SFP{{sfp_port}}-cpri-lock.py]
<= macro.promise
promise = check_cpri_lock
config-testing = {{ slapparameter_dict.get("testing", False) }}
+config-sdr_dev = {{ slapparameter_dict.get('sdr_number', 0) }}
+config-sfp_port = {{ sfp_port }}
config-amarisoft-rf-info-log = ${amarisoft-rf-info-template:log-output}
config-stats-period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
+{%- endfor %}
+{% endif %}
[check-rx-saturated.py]
<= macro.promise
@@ -702,3 +711,9 @@ config-testing = {{ slapparameter_dict.get("testing", False) }}
config-amarisoft-stats-log = ${amarisoft-stats-template:log-output}
config-stats-period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
config-max-rx-sample-db = {{ slapparameter_dict.get("max_rx_sample_db", 0) }}
+
+[buildout]
+parts +=
+{%- for part in extra_part_list %}
+ {{ part }}
+{%- endfor %}
(posted in <a href="https://lab.nexedi.com/nexedi/slapos/merge_requests/1461" data-original="https://lab.nexedi.com/nexedi/slapos/merge_requests/1461" data-link="false" data-link-reference="true" data-project="15" data-merge-request="7236" data-project-path="nexedi/slapos" data-iid="1461" data-mr-title="software/ors-amarisoft: Adjust check-cpri-lock promise to explicitly specify watched CPRI ports" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">slapos!1461</a>)
The way rf_info text is parsed could be also useful in the future to
e.g. detect FPGA revision of the boards and report their recency status
via promise.
/cc <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>, <a href="/xavier_thompson" data-user="3136" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Xavier Thompson">@xavier_thompson</a>, <a href="/Daetalus" data-user="50" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Boxiang Sun">@Daetalus</a>
/reviewed-by <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/127" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/127" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7235" data-project-path="nexedi/slapos.toolbox" data-iid="127" data-mr-title="slapos/promise/plugin/check_cpri_lock: Don't check whatever device blindly + other fixes" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!127</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/7c3b240f74d257b3757312ec6cbe0f40d6be289epromise/plugin/check_cpri_lock: Fix it to detect stale data2023-11-02T11:53:54+03:00Kirill Smelkovkirr@nexedi.com
This promise plugin was using tail_file(self.amarisoft_rf_info_log) to
get the most recent log entry to check. But tail_file simply return last
line of the log file without checking timestamp of returned entry. So it
could be the case that last line is ages ago, reports "CPRI locked ok"
and then, if there are no more rf_info entries for one reason or
another, the CPRI-locked promise will be holding green despite the fact
that data became stale.
-> Fix it by explicitly checking timestamp of last log entry to be in
expected recent range.
/cc <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>, <a href="/xavier_thompson" data-user="3136" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Xavier Thompson">@xavier_thompson</a>, <a href="/Daetalus" data-user="50" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Boxiang Sun">@Daetalus</a>
/reviewed-by <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/127" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/127" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7235" data-project-path="nexedi/slapos.toolbox" data-iid="127" data-mr-title="slapos/promise/plugin/check_cpri_lock: Don't check whatever device blindly + other fixes" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!127</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/47f4f8a6bb0f33c302720749b5ef61a488dd07dfpromise/plugin/check_cpri_lock: test: Factor common code to write to log and...2023-11-02T11:53:13+03:00Kirill Smelkovkirr@nexedi.compromise/plugin/check_cpri_lock: test: Factor common code to write to log and promise into common place
We are going to add more tests. Keeping the code to initialize test
environment duplicated over and over will be not convenient.
/cc <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>, <a href="/xavier_thompson" data-user="3136" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Xavier Thompson">@xavier_thompson</a>, <a href="/Daetalus" data-user="50" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Boxiang Sun">@Daetalus</a>
/reviewed-by <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/127" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/127" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7235" data-project-path="nexedi/slapos.toolbox" data-iid="127" data-mr-title="slapos/promise/plugin/check_cpri_lock: Don't check whatever device blindly + other fixes" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!127</a>
https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/6db7895c24ddb9ba165e02600abfcb57bd735f10promise/plugin/check_cpri_lock: test: No need to manually remove amarisoft_rf...2023-11-02T11:52:18+03:00Kirill Smelkovkirr@nexedi.com
When files are opened with 'w' mode - they are truncated to empty state.
/cc <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>, <a href="/xavier_thompson" data-user="3136" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Xavier Thompson">@xavier_thompson</a>, <a href="/Daetalus" data-user="50" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Boxiang Sun">@Daetalus</a>
/reviewed-by <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/127" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/127" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7235" data-project-path="nexedi/slapos.toolbox" data-iid="127" data-mr-title="slapos/promise/plugin/check_cpri_lock: Don't check whatever device blindly + other fixes" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!127</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/a6211143357cb576f7e6e75a1dd574886a97245dpromise/plugin/check_rx_saturated: Don't hardcode "all rx antennas" as a set ...2023-10-31T21:25:08+03:00Kirill Smelkovkirr@nexedi.com
Currently check_rx_saturated checks saturation on all rx antennas. This
works well for ORS, which has only one SDR board, but won't work for
multiRU case where we will need to check RX for saturation for each
Radio Unit separately.
-> As a preparatory step adjust check_rx_saturated to take list of which
RX antennas to check for saturation.
For now this change is accompanied by the following change in
ors-amarisoft SR to keep it working as before:
--- a/software/ors-amarisoft/instance-enb.jinja2.cfg
+++ b/software/ors-amarisoft/instance-enb.jinja2.cfg
@@ -699,6 +699,7 @@ config-stats-period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
<= macro.promise
promise = check_rx_saturated
config-testing = {{ slapparameter_dict.get("testing", False) }}
+config-rf-rx-chan-list = {{ list(range(0, int(slapparameter_dict.get('n_antenna_ul', default_n_antenna_ul)))) }}
config-amarisoft-stats-log = ${amarisoft-stats-template:log-output}
config-stats-period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
config-max-rx-sample-db = {{ slapparameter_dict.get("max_rx_sample_db", 0) }}
(posted in <a href="https://lab.nexedi.com/nexedi/slapos/merge_requests/1459" data-original="https://lab.nexedi.com/nexedi/slapos/merge_requests/1459" data-link="false" data-link-reference="true" data-project="15" data-merge-request="7232" data-project-path="nexedi/slapos" data-iid="1459" data-mr-title='software/ors-amarisoft: Adjust check-rx-saturated promise to explicitly specify "all rx antennas"' data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">slapos!1459</a>)
/cc <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>, <a href="/xavier_thompson" data-user="3136" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Xavier Thompson">@xavier_thompson</a>, <a href="/Daetalus" data-user="50" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Boxiang Sun">@Daetalus</a>
/reviewed-by <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>
/partly-reviewed-by <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/126" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/126" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7231" data-project-path="nexedi/slapos.toolbox" data-iid="126" data-mr-title="promise/plugin/check_rx_saturated: Don't hardcode "all rx antennas" as a set of what to check" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!126</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/60d1bc2cfd862b41ff9a926f76c62dc6365c2963promise/plugin/check_sdr_busy: Don't hardcode /dev/sdr0@02023-10-31T20:53:03+03:00Kirill Smelkovkirr@nexedi.com
Currently check_sdr_busy always checks /dev/sdr0 (via `-c 0`) and
also implicitly DMA channel 0 as sdr_util help explains:
./sdr_util -h
...
-c device_num select the device (default = all)
-d channel_num select the channel (default = 0)
This works well for ORS, which always has only single SDR board.
However for cases when there are either a) multiple SDR boards, or b)
single CPRI board, the assumption is incorrect:
- for multiple SDR boards we need to be able to specify /dev/sdrX
instead of sdr0.
- for the case of one CPRI boards, links to different Radio Units
attached to different SFP ports are associated with different DMA
channels, so to test e.g. whether RU1 is being used it is necessary to
check e.g. sdr0@0, while for RU2 it is necessary to check sdr0@1.
I explicitly verified that for CPRI case
a) Amarisoft kernel driver allows /dev/sdrX associated with CPRI card
to be opened multiple times simultaneously - up to the amount of SFP
ports = # of DMA channels, and
b) that only DMA channels / SFP ports actually being in use are
reported as busy by sdr_util, while the other DMA channels / SFP
ports are not reported as busy.
I also verified that for regular SDR board (not CPRI) using -d 0 does
not change any verification semantic as such SDR boards have only one
DMA channel.
-> As a preparatory step for multiRU work adjust check_sdr_busy promise
to take SDR device number and DMA channel number as arguments instead of
hardcoding sdr0@0.
For now this change is accompanied by the following change in
ors-amarisoft SR to keep it working as before:
--- a/software/ors-amarisoft/instance-enb.jinja2.cfg
+++ b/software/ors-amarisoft/instance-enb.jinja2.cfg
@@ -615,6 +615,8 @@ name = ${:_buildout_section_name_}
promise = check_sdr_busy
config-testing = {{ slapparameter_dict.get("testing", False) }}
config-sdr = {{ sdr }}
+config-sdr_dev = 0
+config-dma_chan = 0
(posted in <a href="https://lab.nexedi.com/nexedi/slapos/merge_requests/1458" data-original="https://lab.nexedi.com/nexedi/slapos/merge_requests/1458" data-link="false" data-link-reference="true" data-project="15" data-merge-request="7230" data-project-path="nexedi/slapos" data-iid="1458" data-mr-title="software/ors-amarisoft: Adjust check_sdr_busy promise to explicitly specify /dev/sdr0@0" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">slapos!1458</a>)
/cc <a href="/xavier_thompson" data-user="3136" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Xavier Thompson">@xavier_thompson</a>, <a href="/Daetalus" data-user="50" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Boxiang Sun">@Daetalus</a>
/reviewed-by <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>
/partly-reviewed-by <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/125" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/125" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7229" data-project-path="nexedi/slapos.toolbox" data-iid="125" data-mr-title="promise/plugin/check_sdr_busy: Don't hardcode /dev/sdr0@0" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!125</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/5c1d2f76dd4a622dd06bd382c6c62bfb94a680e5promis/plugin/check_free_disk_space: np.float -> float2023-10-27T22:55:17+03:00Kirill Smelkovkirr@nexedi.com
Running tests with recent numpy (1.26.0) yields the following:
slapos.toolbox$ python -m unittest discover -v -s slapos/test/promise/plugin/ -t . -k test_display_prediction
...
Enable to display disk space predictions: True
module 'numpy' has no attribute 'float'.
`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
<a href="https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations" rel="nofollow noreferrer noopener" target="_blank">https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations</a>
Traceback (most recent call last):
File "/home/kirr/src/wendelin/slapos/slapos.core/slapos/grid/promise/generic.py", line 500, in run
self.sense()
File "/home/kirr/src/wendelin/slapos/slapos.toolbox/slapos/promise/plugin/check_free_disk_space.py", line 327, in sense
disk_space_prediction_tuple = self.diskSpacePrediction(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/kirr/src/wendelin/slapos/slapos.toolbox/slapos/promise/plugin/check_free_disk_space.py", line 182, in diskSpacePrediction
df = df.astype({'free': np.float})
^^^^^^^^
File "/home/kirr/src/wendelin/venv/py3.venv/lib/python3.11/site-packages/numpy/__init__.py", line 324, in __getattr__
raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'float'.
`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
<a href="https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations" rel="nofollow noreferrer noopener" target="_blank">https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations</a>
ERROR
-> Replace np.float with float as the error says.
/cc <a href="/Just1" data-user="5569" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Justin">@Just1</a>, <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>, <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/123" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/123" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7227" data-project-path="nexedi/slapos.toolbox" data-iid="123" data-mr-title="promis/plugin/check_free_disk_space: np.float -> float" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!123</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/daf7820f9521204d0a774656bca065f346000e4bpromis/plugin/check_free_disk_space: test: Fix unclosed file ResourceWarning2023-10-27T22:52:17+03:00Kirill Smelkovkirr@nexedi.com
folder_disk_test.sql was opened to be read but was not closed:
slapos.toolbox$ python -m unittest discover -v -s slapos/test/promise/plugin/ -t . -k test_display_prediction
test_display_prediction (slapos.test.promise.plugin.test_check_free_disk_space.testcheckfreediskspace.test_display_prediction) ...
/usr/lib/python3.11/unittest/case.py:576: resourcewarning: unclosed file <_io.textiowrapper name='/home/kirr/src/wendelin/slapos/slapos.toolbox/slapos/test/promise/data/disktest.sql' mode='r' encoding='utf-8'>
self.setup()
/cc <a href="/Just1" data-user="5569" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Justin">@Just1</a>, <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>, <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/124" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/124" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7228" data-project-path="nexedi/slapos.toolbox" data-iid="124" data-mr-title="promis/plugin/check_free_disk_space: test: Fix unclosed file ResourceWarning" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!124</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/dfb322474c36cc43fda6eeabf8a3020bf35cd46f*: Compare integers by == or != instead of by `is` or `is not`2023-10-27T22:47:19+03:00Kirill Smelkovkirr@nexedi.com
Same logic as in previous patch. Suggested by @jeorme in
<a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/122#note_193062" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/122#note_193062" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7226" data-project-path="nexedi/slapos.toolbox" data-iid="122" data-mr-title="*: Compare strings by == or != instead of by `is` or `is not`" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!122 (comment 193062)</a> .
/suggested-and-reviewed-by <a href="/jerome" data-user="9" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Jérome Perrin">@jerome</a>
/reviewed-n <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/122" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/122" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7226" data-project-path="nexedi/slapos.toolbox" data-iid="122" data-mr-title="*: Compare strings by == or != instead of by `is` or `is not`" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!122</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/b1c4c044295b70236973eb60c5f7ac2096901667*: Compare strings by == or != instead of by `is` or `is not`2023-10-27T22:45:01+03:00Kirill Smelkovkirr@nexedi.com
In python `is` checks object identity, not content:
In [1]: a = 'hello'
In [2]: a += ' world'
In [3]: b = 'hello world'
In [4]: id(a)
Out[4]: 139735676540976
In [5]: id(b)
Out[5]: 139735675829040
In [6]: a is b <-- NOTE
Out[6]: False
In [7]: a == b <-- NOTE
Out[7]: True
So comparing strings by is is generally incorrect.
-> Fix strings comparision to use == / != everywhere (at least in found
places where string is compared wrt string literal)
We already had similar fix in <a href="/nexedi/slapos.toolbox/-/commit/a8526f4e25156a1a0ac2405e8f1f37c473cefddb" data-original="a8526f4e" data-link="false" data-link-reference="false" data-project="78" data-commit="a8526f4e25156a1a0ac2405e8f1f37c473cefddb" data-reference-type="commit" data-container="body" data-placement="top" data-html="true" title="promise: use '==' instead of 'is' to compare two strings" class="gfm gfm-commit has-tooltip">a8526f4e</a>, but seems the story continues
again.
/cc <a href="/alain.takoudjou" data-user="3" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Alain Takoudjou">@alain.takoudjou</a>, <a href="/Just1" data-user="5569" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Justin">@Just1</a>, <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>, <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>
/reviewed-by <a href="/jerome" data-user="9" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Jérome Perrin">@jerome</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/122" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/122" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7226" data-project-path="nexedi/slapos.toolbox" data-iid="122" data-mr-title="*: Compare strings by == or != instead of by `is` or `is not`" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!122</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/b578b8cdfd4cd370491e277216f95c0c83bd9956Adjust Amarisoft-related promises and tests to treat `data` in `*.json.log` a...2023-10-12T12:38:17+03:00Kirill Smelkovkirr@nexedi.com
Hello up there,
This merge-requests primarily adjusts promises code to treat `data` field in `*.json.log` as real JSON. It is counterpart to <a href="https://lab.nexedi.com/nexedi/slapos/merge_requests/1447" data-original="https://lab.nexedi.com/nexedi/slapos/merge_requests/1447" data-link="false" data-link-reference="true" data-project="15" data-merge-request="7175" data-project-path="nexedi/slapos" data-iid="1447" data-mr-title="software/ors-amarisoft: Switch *.json.log to emit `data` field via JSON" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">slapos!1447</a> .
- patch 1 syncs tests to current state of ORS SR;
- patch 2 removes replacement of `'` with `"` in input data;
- patch 3 removes UTF-8 decoding when input is fed to json.loads.
Please see individual patches for details.
Kirill
/cc <a href="/jhuge" data-user="3135" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Joanne Hugé">@jhuge</a>, <a href="/lu.xu" data-user="1242" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Lu Xu">@lu.xu</a>, <a href="/tomo" data-user="737" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Thomas Gambier">@tomo</a>, <a href="/xavier_thompson" data-user="3136" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Xavier Thompson">@xavier_thompson</a>, <a href="/Daetalus" data-user="50" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Boxiang Sun">@Daetalus</a>, <a href="/jerome" data-user="9" data-reference-type="user" data-container="body" data-placement="top" data-html="true" class="gfm gfm-project_member" title="Jérome Perrin">@jerome</a>
/reviewed-on <a href="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/120" data-original="https://lab.nexedi.com/nexedi/slapos.toolbox/merge_requests/120" data-link="false" data-link-reference="true" data-project="78" data-merge-request="7176" data-project-path="nexedi/slapos.toolbox" data-iid="120" data-mr-title="Adjust Amarisoft-related promises and tests to treat `data` in `*.json.log` as JSON" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!120</a> and <a href="https://lab.nexedi.com/nexedi/slapos/merge_requests/1447" data-original="https://lab.nexedi.com/nexedi/slapos/merge_requests/1447" data-link="false" data-link-reference="true" data-project="15" data-merge-request="7175" data-project-path="nexedi/slapos" data-iid="1447" data-mr-title="software/ors-amarisoft: Switch *.json.log to emit `data` field via JSON" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">slapos!1447</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/0982927e9a7b94b3208de66538c1be5857894420!fixup promise/plugin: improve check-rx-saturated messages2023-10-12T10:03:32+02:00Joanne Hugéjoanne.huge@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/4c984df193d6f319c38a9c7c1c00783dc339bb58promise/plugin: improve check-rx-saturated messages2023-10-11T13:59:14+02:00Joanne Hugéjoanne.huge@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/eeaa40075ad4e81448d27dea7f3210de2d26f7cb*: No need to decode bytes when fed to json.loads2023-10-11T11:18:55+03:00Kirill Smelkovkirr@nexedi.com
Starting from py3.6 json.loads accepts all unicode, bytes and bytearray:
<a href="https://docs.python.org/3/library/json.html#:~:text=json.loads(s" rel="nofollow noreferrer noopener" target="_blank">https://docs.python.org/3/library/json.html#:~:text=json.loads(s</a>
<a href="https://github.com/python/cpython/commit/b161562f72a2" rel="nofollow noreferrer noopener" target="_blank">https://github.com/python/cpython/commit/b161562f72a2</a>
<a href="https://bugs.python.org/issue17909" rel="nofollow noreferrer noopener" target="_blank">https://bugs.python.org/issue17909</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/b067cc0e3cde778ee4f518748c6e284dd4ae1458promise/plugin/*: Do not replace ' -> " in input JSON data2023-10-11T11:18:41+03:00Kirill Smelkovkirr@nexedi.com
Adjust promises correspondingly to <a href="https://lab.nexedi.com/nexedi/slapos/merge_requests/1447" data-original="https://lab.nexedi.com/nexedi/slapos/merge_requests/1447" data-link="false" data-link-reference="true" data-project="15" data-merge-request="7175" data-project-path="nexedi/slapos" data-iid="1447" data-mr-title="software/ors-amarisoft: Switch *.json.log to emit `data` field via JSON" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">slapos!1447</a>
which changed ors-amarisoft software-release to emit log payload via
json.dumps instead of py %s.
Do this for both promises code and JSON-loading utilities in slapos/promise/plugin/util.py also used inside ORS promises code.
We can adjust the utilities because there are two of them (get_json_log_data_interval and get_json_log_latest_timestamp) with
get_json_log_latest_timestamp being used only in ORS-promises:
slapos.toolbox$ git grep get_json_log_latest_timestamp
slapos/promise/plugin/check_amarisoft_stats_log.py:from .util import get_json_log_latest_timestamp
slapos/promise/plugin/check_amarisoft_stats_log.py: latest_timestamp = get_json_log_latest_timestamp(self.amarisoft_stats_log)
slapos/promise/plugin/util.py:def get_json_log_latest_timestamp(json_log_file):
and get_json_log_data_interval being used in ORS promises and
check_cpu_temperature, check_network_transit and check_ram_usage:
slapos.toolbox$ git grep get_json_log_data_interval
slapos/promise/plugin/check_baseband_latency.py:from .util import get_json_log_data_interval
slapos/promise/plugin/check_baseband_latency.py: data_list = get_json_log_data_interval(self.amarisoft_stats_log, self.stats_period * 5)
slapos/promise/plugin/check_cpu_temperature.py: temp_list = self.get_json_log_data_interval(self.avg_temp_duration)
slapos/promise/plugin/check_network_transit.py: temp_list = self.get_json_log_data_interval(self.transit_period)
slapos/promise/plugin/check_ram_usage.py: temp_list = self.get_json_log_data_interval(self.avg_ram_period)
slapos/promise/plugin/check_rx_saturated.py:from .util import get_json_log_data_interval
slapos/promise/plugin/check_rx_saturated.py: data_list = get_json_log_data_interval(self.amarisoft_stats_log, self.stats_period * 2)
slapos/promise/plugin/util.py:def get_json_log_data_interval(json_log_file, interval):
slapos/promise/plugin/util.py: def get_json_log_data_interval(self, interval):
slapos/promise/plugin/util.py: return get_json_log_data_interval(self.__json_log_file, interval)
However all check_cpu_temperature, check_network_transit and
check_ram_usage produce their *.json.log files themselves and already
emit `data` via json.dumps:
<a href="https://lab.nexedi.com/nexedi/slapos.toolbox/blob/453dce5f/slapos/promise/plugin/check_cpu_temperature.py#L41-54">https://lab.nexedi.com/nexedi/slapos.toolbox/blob/453dce5f/slapos/promise/plugin/check_cpu_temperature.py#L41-54</a>
<a href="https://lab.nexedi.com/nexedi/slapos.toolbox/blob/453dce5f/slapos/promise/plugin/check_network_transit.py#L29-42">https://lab.nexedi.com/nexedi/slapos.toolbox/blob/453dce5f/slapos/promise/plugin/check_network_transit.py#L29-42</a>
<a href="https://lab.nexedi.com/nexedi/slapos.toolbox/blob/453dce5f/slapos/promise/plugin/check_ram_usage.py#L34-46">https://lab.nexedi.com/nexedi/slapos.toolbox/blob/453dce5f/slapos/promise/plugin/check_ram_usage.py#L34-46</a>
So it is safe to adjust the utilities.https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/cbe9c8221b9d5964cbd48a49acfdd532d603f941tests/promise/plugin: Adjust Amarisoft-related tests to match...2023-10-11T10:57:06+03:00Kirill Smelkovkirr@nexedi.comtests/promise/plugin: Adjust Amarisoft-related tests to match amarisoft_stats.json.log emitted by SR
In <a href="https://lab.nexedi.com/nexedi/slapos/commit/b32b4a8e" data-original="https://lab.nexedi.com/nexedi/slapos/commit/b32b4a8e" data-link="false" data-link-reference="true" data-project="15" data-commit="b32b4a8e11b8da9e99fa552ea9632efa29c4cfda" data-reference-type="commit" data-container="body" data-placement="top" data-html="true" title="software/ors-amarisoft: general improvement for RU (logs/promises/input parameters)" class="gfm gfm-commit has-tooltip">slapos@b32b4a8e</a> `data` field in
that log switched from emitting objects via py repr to emitting them via
JSON. As the result, in particular, strings are now emitted quoted with
" instead of with ' .
-> Adjust all tests that simulate amarisoft_stats.json.log to follow
actual software-release behaviour.
The tests continue to pass.
https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/453dce5f84201b97b4eb6d05d214baabc1abd6b3Release 0.1392023-09-22T06:17:23+02:00Jérome Perrinjerome@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/2c955c9a2250a8e8ec02082c289fc2d10168a61echeck_url_available: new allow-redirects option2023-09-22T06:15:29+02:00Jérome Perrinjerome@nexedi.com
See merge request <a href="/nexedi/slapos.toolbox/-/merge_requests/119" data-original="nexedi/slapos.toolbox!119" data-link="false" data-link-reference="false" data-project="78" data-merge-request="7124" data-project-path="nexedi/slapos.toolbox" data-iid="119" data-mr-title="check_url_available: new allow-redirects option" data-reference-type="merge_request" data-container="body" data-placement="top" data-html="true" title="" class="gfm gfm-merge_request">!119</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/268a82aec228f4a95f9b88d3850c576c1f2cb123Release 0.1382023-09-21T16:37:08+02:00lu.xulu.xu@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/90d828ae8a94989d643fb17667d39766533871aecheck_url_available: new allow-redirects option2023-09-21T18:04:30+09:00Jérome Perrinjerome@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/9b8d98fbd8e2923282818baeaca9a19ead8dc60ctest_check_url_available: adjust expected message for requests 2.28.22023-09-21T17:26:57+09:00Jérome Perrinjerome@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/2db8fcf16ea75ec5a524e7523736472aa731b767drop more python2 support2023-09-21T17:13:05+09:00Jérome Perrinjerome@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/9de2b6c4251d23b5fa63850c011956494c350101promise/plugin: add PA over output power for Lopcomm RU2023-08-07T15:05:24+02:00lu.xulu.xu@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/c2ebc7265f47f80d7bc8b4af7589635b8047ab5aRelease 0.1372023-06-15T13:59:52+02:00lu.xulu.xu@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/4ce05af3e2b9d7867b826a94cce2ed806fd22c67promise/plugin: add alarms for lopcomm RU2023-06-08T10:38:02+02:00lu.xulu.xu@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/ffcd378e90de355df38816738aa0f247e7435167Release 0.1362023-05-16T14:19:03+02:00Łukasz Nowakluke@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/24bbc019fa4d181d525ad273bef4019da8fc000esetup.py: Define description content type2023-05-16T14:18:55+02:00Łukasz Nowakluke@nexedi.com
See <a href="https://pypi.org/help/#description-content-type" rel="nofollow noreferrer noopener" target="_blank">https://pypi.org/help/#description-content-type</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/84db494a857007370a404e0e6159ecb2c5f4daecRelease 0.1342023-05-16T14:11:02+02:00Łukasz Nowakluke@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/e12e6ba36369b5e6e0a7238ee09197345000bd57check_surykatka_json: Allow to select senses2023-05-15T16:23:22+02:00Łukasz Nowakluke@nexedi.com
In some deployments it is important to being able to select only specific
senses on which the promise shall react.https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/3a000d3af8d710a328854c107edfaf13e2be6653Drop python2 support2023-03-31T22:18:49+09:00Jérome Perrinjerome@nexedi.com
See also <a href="https://lab.nexedi.com/nexedi/slapos/commit/4230cd1b" data-original="https://lab.nexedi.com/nexedi/slapos/commit/4230cd1b" data-link="false" data-link-reference="true" data-project="15" data-commit="4230cd1b5afad7b82545d0353f9ea04c0e59090f" data-reference-type="commit" data-container="body" data-placement="top" data-html="true" title="stack/slapos.cfg: pin slapos.toolbox to 0.128 on python2" class="gfm gfm-commit has-tooltip">slapos@4230cd1b</a>https://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/d38b50635b4e686337502cbbd1329e28641faad6monitor/build_statistic: support python32023-03-20T23:49:43+09:00Jérome Perrinjerome@nexedi.comhttps://lab.nexedi.cn/nexedi/slapos.toolbox/-/commit/91e7b55962efb61db125191dc3c9757f7e47548bRelease 0.1342023-03-20T08:43:18+01:00Łukasz Nowakluke@nexedi.com