Closed sebek72 closed 11 months ago
@jr-timme any idea?
We don't build the Icinga packages ourselves, we're currently running the latest Versions from the Icinga Debian repository:
icingadb:
Installed: 1.1.1-1+debian11
Candidate: 1.1.1-1+debian11
Version table:
*** 1.1.1-1+debian11 500
500 https://packages.icinga.com/debian icinga-bullseye/main amd64 Packages
icingadb-web:
Installed: 1.0.2-1+debian11
Candidate: 1.0.2-1+debian11
Version table:
*** 1.0.2-1+debian11 500
500 https://packages.icinga.com/debian icinga-bullseye/main amd64 Packages
icingaweb2:
Installed: 2.11.4-1+debian11
Candidate: 2.11.4-1+debian11
Version table:
*** 2.11.4-1+debian11 500
500 https://packages.icinga.com/debian icinga-bullseye/main amd64 Packages
So I can't really speak to the Master Branch version but with the versions from the official repository the icingadb module returns the last_update
field as Milliseconds since the Unix Epoch, e.g.,
[...]
"state": {
[...]
"last_update": "1695295061.506",
[...]
I don't really have any deeper knowledge of the Icinga Code, but it looks to me as that is still the case in the master Branch: https://github.com/Icinga/icingadb/blob/c20f066bd87528960ec095c2e6fd88d014156b6c/pkg/icingadb/v1/state.go#L25 https://github.com/Icinga/icingadb/blob/c20f066bd87528960ec095c2e6fd88d014156b6c/schema/pgsql/schema.sql#L436 https://github.com/Icinga/icingadb/blob/c20f066bd87528960ec095c2e6fd88d014156b6c/schema/mysql/schema.sql#L322
How the icingaweb2 version could change that I don't know.
@sebek72 did you change anything in regard to the timestamps, so that they are already formatted instead of in Milliseconds since the Unix Epoch?
Hi. Thanks for the feedback. I would not know where to change that :) I tried to install previous icinga stack versions to see if there is an instance where this works (btw my icinga is deployed via docker), but also with 2.1.12 (with icingadb 1.1.0) it behaves the same.
mariadb output seems to be fine
MariaDB [icingadb]> SELECT last_update from service_state; +---------------+ | last_update | +---------------+ | 1695289781960 | | 1695289782390 | | 1695289782160 | | 1695289782661 |
Could you check the raw json output, just to make sure that the date there is already formatted?
curl -v -l -b cookies.txt -c cookies.txt "http://10.55.32.212:8080/icingadb/hosts?host.state.is_problem=y&host.state.state_type=hard&columns=host.state.last_update&format=json" | jq
cookies can either be exported from a browser or generated through another curl in which you authenticate yourself
This is the json output:
"last_update":"2023-09-21T09:49:38.753+00:00","last_state_change":"1970-01-01T00:00:00.000+00:00", "next_check":"2023-09-21T09:49:59.838+00:00", "next_update":"2023-09-21T09:50:21.846+00:00",
Update: Also tried now with icingaweb2.12.0 (released) same output
Just tired the update and still getting an error:
Sorry.. missed the host part. Working on it!
Sorry.. missed the host part. Working on it!
It works now thanks!
I updated and now have a new issue.
ERROR: 2023-11-03 07:07:01.376042 NEW PROD Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/Nagstamon/Servers/IcingaDBWeb.py", line 214, in _get_status self.new_hosts[host_name].last_check = datetime.datetime.fromisoformat(h['state']['last_update']) AttributeError: type object 'datetime.datetime' has no attribute 'fromisoformat'
https://stackoverflow.com/questions/60266554/type-object-datetime-datetime-has-no-attribute-fromisoformat Using EL8 platform where python3.6 is the default version available
@sebek72 well, maybe the easiest fix is an update to EL9? Even Python 3.7 is out there for a while.
I saw that you can install python38, python39, python3.11 even in EL8 - maybe try it this way?
@sebek72 how do you get it running at all? Looks like you need to do some special moves anyway?
I will check how to use different python in EL8 (I took the EL8 src rpm and changed the spec file to re-create the EL8 rpm). Now I also created a Debian docker image with embedded nagstamon to make it more portable.
Dockerfile
FROM debian:bullseye-slim
RUN ["bash", "-exo", "pipefail", "-c", "export DEBIAN_FRONTEND=noninteractive; apt-get update; apt-get install --no-install-{recommends,suggests} -y wget python3 python3-{pkg-resources,bs4,lxml,requests,requests-kerberos,psutil,pyqt5,keyring,ewmh,pyqt5.qtsvg,pyqt5.qtmultimedia,dbus.mainloop.pyqt5,dateutil} libqt5gui5 libqt5multimedia5-plugins sound-icons; apt-get clean; rm -vrf /var/lib/apt/lists/*; wget https://github.com/HenriWahl/Nagstamon/releases/download/latest/nagstamon_3.13-20231031_all.deb; dpkg -i nagstamon_3.13-20231031_all.deb; rm -rf nagstamon*"]
I am able to start it on MacOS (with XQuartz: https://gist.github.com/cschiewek/246a244ba23da8b9f0e7b11a68bf3285, for audio it is a bit tricky (with pulse audio), but on linux it should be more straightforward).
docker run -ti -e DISPLAY=host.docker.internal:0 -v /tmp/.X11-unix:/tmp/.X11-unix IMAGENAME:TAG nagstamon
Hi @sebek72 - there is also a native binary for macOS - just in case. Maybe you could find a way to update the currently outdated Flatpak package of Nagstamon at https://flathub.org/apps/de.ifw_dresden.nagstamon? I tried but failed hardly.
Hi @sebek72 - just out of curiosity: did you try with https://github.com/mviereck/x11docker already? Looks like another solution.
I know about it, but still need to test, thanks. Flatpak is something that I will not pursue ;)
Hi! Thank you for the work and the fix. Is it possible to release this any time soon?
It is available as testing release 3.13-20231117 right now.
Kinda in a dead lock....if I use python3.6 for EL8 I can create and run the rpm...but then have a fromisoformat issue (newer python needed). If I try to use python3.8 then the keyring package (is not found. the installed one is for python3.6: https://rhel.pkgs.org/8/epel-x86_64/python3-keyring-21.5.0-2.el8.noarch.rpm.html). I cannot find an alternative one. Is there a way to get EL8 (Alma or Rocky) rpm for nagstamon like for other platforms?
I have managed to create an el8 rpm using python3.8 But still have the date issue
File "/usr/lib/python3.8/site-packages/Nagstamon/Servers/IcingaDBWeb.py", line 214, in _get_status self.new_hosts[host_name].last_check = datetime.datetime.fromisoformat(h['state']['last_update']) AttributeError: type object 'datetime.datetime' has no attribute 'fromisoformat'
pip3 list | grep date isodate 0.6.0 python-dateutil 2.8.2
@sebek72 due to missing dependencies there was just added EL9 support.
Having issues with the latest 20230808 build.
monitor type: icingaDBWEB backend: icingaweb2.11.4+ (build from master from August) icingadb 1.1.0 icingadb-web (master, pre 1.1.0)
DEBUG: 2023-08-28 12:37:00.660402 NEW PROD Start rechecking all DEBUG: 2023-08-28 12:37:02.245729 NEW PROD Refreshing all hosts and services DEBUG: 2023-08-28 12:37:02.876868 NEW PROD FetchURL: http://10.55.32.212:8080/icingadb/hosts?host.state.is_problem=y&host.state.state_type=hard&columns=host.state.last_update&format=json CGI Data: None ERROR: 2023-08-28 12:37:02.987765 NEW PROD Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/Nagstamon/Servers/IcingaDBWeb.py", line 211, in _get_status self.new_hosts[host_name].last_check = datetime.datetime.fromtimestamp(int(float(h['state']['last_update']))) ValueError: could not convert string to float: '2023-08-25T07:02:14.894+00:00'
P.S: older icingaweb2 (no icingadb) works ok.