14305 Commits

Author SHA1 Message Date
Yonas Habteab
82b80e24c1 fix comment 2025-07-11 14:05:54 +02:00
Yonas Habteab
cd1ab7548c Rename AsyncJsonWriter::Flush() -> MayFlush() to reflect its usage 2025-07-11 13:55:33 +02:00
Yonas Habteab
89418f38ee JsonEncoder: let the serializer replace invalid UTF-8 characters
Replacing invalid UTF-8 characters beforehand by our selves doesn't make
any sense, the serializer can literally perform the same replacement ops
with the exact same Unicode replacement character (U+FFFD) on its own.
So, why not just use it directly? Instead of wasting memory on a temporary
`String` object to always UTF-8 validate every and each value, we just
use the serializer to directly to dump the replaced char (if any) into
the output writer. No memory waste, no fuss!
2025-07-10 18:09:21 +02:00
Yonas Habteab
dad4c0889f JsonEncoder: lock olock conditionally & flush output regularly 2025-07-10 18:09:21 +02:00
Yonas Habteab
398b5e3193 Implement LockIfRequired() method for Namespace, Dictionary & Array 2025-07-10 18:09:21 +02:00
Yonas Habteab
57726fbb66 Do not require olock on frozen Namespace, Dictionary & Array 2025-07-10 18:09:21 +02:00
Yonas Habteab
2461e0415d Introduce JsonEncode helper function
It's just a wrapper around the `JsonEncoder` class to simplify its usage.
2025-07-10 18:09:21 +02:00
Yonas Habteab
9dd2e2a3ec Introduce JsonEncoder class 2025-07-10 18:09:21 +02:00
Yonas Habteab
1c61bced03 Introduce AsyncJsonWriter output adapter interface 2025-07-09 13:41:15 +02:00
Yonas Habteab
8ef921aa5e Implement bool operator for ObjectLock 2025-07-08 18:24:16 +02:00
Yonas Habteab
4c0628c24d Allow to defer lock on ObjectLock 2025-07-08 18:24:16 +02:00
Yonas Habteab
455d6fcde1 Introduce ValueGenerator class 2025-07-08 18:24:16 +02:00
Yonas Habteab
241cf08263
Merge pull request #10499 from Icinga/remove-override-frozen
No longer allow overriding the frozen attribute of containers
2025-07-08 17:22:58 +02:00
Julian Brost
0ebcd2662d No longer allow overriding the frozen attribute of containers
The Array, Dictionary, and Namespace types provide a Freeze() method that makes
them read-only. So far, there was the possibility to call some methods with
`overrideFrozen=true` which would then bypass the corresponding check and allow
modification of the data structures nonetheless.

With 24b57f0d3a222835178e88489eabd595755ed883, this possibility was already
removed from the Namespace type. However, for interface compatibility, it kept
the parameter and just ignores it, throwing an exception on any modification on
a frozen instance.

The only place using `overrideFrozen` was processing of the `-D`/`--define`
command line flag that allows setting additional variables in the DSL. At the
time it is evaluated, there are no user-created data structures yet that could
be frozen, so the only frozen objects that could be encountered are Namespaces
(Icinga doesn't freeze other types by itself) and for these, `overrideFrozen`
already has no effect.

Hence, there is no harm in removing `overrideFrozen` altogether. This
simplifies the code and also means that frozen objects are now indeed read-only
without exceptions, allowing further optimizations regarding locking in the
future.
2025-07-08 14:16:20 +02:00
Alvar
a13751d972
Merge pull request #10481 from Icinga/docs-02-installation-icingadb-for-everyone
docs: Icinga DB Setup for every Distribution
2025-07-03 15:50:57 +00:00
Alvar Penning
950c8017df
docs: Icinga DB Setup for every Distribution
Within the GNU/Linux distribution specific installation guides, the "Set
up Icinga DB" section was only excluded for openSUSE. However, since
there is an openSUSE installation guide within Icinga DB[^0], this is
not consistent. Thus, the if-guard was removed, resulting in this
section being available for each distribution. Windows is already
excluded through an if-guard above.

Some cases for Fedora were missing, which were also added.

[^0]: https://icinga.com/docs/icinga-db/latest/doc/02-Installation/openSUSE/
2025-07-03 15:42:34 +02:00
Julian Brost
c2ca7d1cfc
Merge pull request #10493 from martialblog/docs/elastic
Mention Elasticsearch prefix for indices and various minor fixes
2025-07-02 10:30:49 +02:00
Julian Brost
464bf7eab4
Merge pull request #10486 from cjsoftuk/10485-checkable-expiry-time
Fix expiry times not applying correctly to Acknowledgements
2025-07-02 10:25:42 +02:00
Markus Opolka
b7deb5099a Update AUTHORS 2025-06-30 16:55:18 +02:00
Markus Opolka
3a031a1f55 docs: Fix various misspellings 2025-06-30 16:50:34 +02:00
Markus Opolka
730a51ccb0 docs: Mention Elasticsearch prefix for indices 2025-06-30 16:21:31 +02:00
Chris Malton
035f130901 Update AUTHORS 2025-06-23 11:58:05 +02:00
Chris Malton
ec48dae331 Correct a problem with expiry times not being passed through to AcknowledgeProblem 2025-06-23 11:57:29 +02:00
Julian Brost
d861cd59d2
Merge pull request #10482 from Icinga/release-checklist-upgrading-docs
Add a hint for upgrading docs to the release checklist
2025-06-18 13:41:10 +02:00
Julian Brost
3cdc115863
Merge pull request #10483 from Icinga/upgrading-docs-v2.15.0
Add upgrading docs for v2.15.0
2025-06-18 12:28:59 +02:00
Julian Brost
e105eefee7 Add upgrading docs for v2.15.0 2025-06-18 11:51:34 +02:00
Julian Brost
2b8fbe5d92 Add a hint for upgrading docs to the release checklist 2025-06-18 11:29:51 +02:00
Julian Brost
f87948081f
Merge pull request #10471 from Icinga/release-215
Release v2.15.0
v2.15.0
2025-06-17 14:18:50 +02:00
Yonas Habteab
1fc8395deb Release v2.15.0 2025-06-17 14:03:01 +02:00
Alvar
7ea12ab514
Merge pull request #10480 from Icinga/mailmap-three-alvars
.mailmap: Merge Alvar email addresses
2025-06-17 09:39:43 +00:00
Alvar Penning
bf628960f3
.mailmap: Merge Alvar email addresses
Merging PRs via GitHub resulted in using the noreply email addresses. By
adding a .mailmap entry, they are hidden from the git log.

Before:
> $ git shortlog -sne v2.14.0..HEAD | grep -i alvar
>     22  Alvar Penning <alvar.penning@icinga.com>
>      1  Alvar <8402811+oxzi@users.noreply.github.com>
>      1  alvar <8402811+oxzi@users.noreply.github.com>

After:
> $ git shortlog -sne v2.14.0..HEAD | grep -i alvar
>     24  Alvar Penning <alvar.penning@icinga.com>
2025-06-17 11:15:16 +02:00
Julian Brost
6e654cd808
Merge pull request #10479 from Icinga/docs-02-installation-fedora-fix-and-icingadb
docs: Fix Fedora Repository, Icinga DB, SELinux
2025-06-17 10:46:22 +02:00
Alvar Penning
881e1cc9cb
docs: Fix Fedora Repository, Icinga DB, SELinux
With Fedora 41, DNF was upgraded to version 5, breaking the command line
API of "dnf config-manager"[^0]. Unfortunately, DNF 5's addrepo does not
work with a simple URL anymore, but requires to construct a .repo file.

Furthermore, no information about trusting the Icinga signing key was
available, resulting in one being unable to install packages. This was
already the case for Fedora 40, still using DNF 4.

Since we are building Icinga DB for Fedora, I have included Icinga DB
documentation for Fedora. Otherwise, this section was empty.

Finally, the icingadb-redis-selinux package was mentioned for
distributions were we started to build SELinux packages for[^1].

[^0]: https://docs.fedoraproject.org/en-US/quick-docs/adding-or-removing-software-repositories-in-fedora/#_adding_repositories
[^1]: https://github.com/Icinga/icingadb/issues/580
2025-06-17 10:41:29 +02:00
Julian Brost
1aa62d4bb9
Merge pull request #10420 from Icinga/bundled-perfdata-writers-fix
Serialize fields before queueing them to the workqueue
2025-06-17 10:17:27 +02:00
Julian Brost
3c9b4693a9
Merge pull request #9747 from Icinga/vs2022
GHA: Windows: upgrade to VS 2022
2025-06-17 10:07:30 +02:00
Yonas Habteab
dcef22e125
Merge pull request #10460 from Icinga/apilistener-shutdown-conns-on-stop
Deterministically shut down all connections on ApiListener::Stop()
2025-06-16 17:47:26 +02:00
Alexander Aleksandrovič Klimov
cbff5c5179
Merge pull request #10478 from Icinga/windows-installer-compat
icinga-installer: statically link MSVC runtime library on CMake 3.15+
2025-06-16 14:22:31 +02:00
Alexander A. Klimov
3b729e9cd7 GHA: Windows: upgrade to VS 2022 2025-06-16 13:02:33 +02:00
Julian Brost
15a8114b4b icinga-installer: statically link MSVC runtime library on CMake 3.15+
CMake 3.15 introduced the `MSVC_RUNTIME_LIBRARY` property as a way to specify
which MSVC runtime library is used and how it is linked. Also with that
release, policy CMP0091 was introduced where the new behavior no longer adds
the corresponding compile flags to the `CMAKE_<LANG>_FLAGS_<CONFIG>` variables.

The new policy was enabled by 7f164bda96341272be385fa1359a26f97eb9d2b4,
resulting in the MSI no longer working on previous Windows Server versions
(2019 for example) as the CMake configuration replaced those compile flags
(lines 3-9 in the same file) which no longer works when they are no longer part
of the string. This commit fixes this regression by setting the
`MSVC_RUNTIME_LIBRARY` property on the icinga-installer target.

I've also added a comment stating my understanding of why this is necessary.
Unfortunately, I couldn't find an explanation of why replacing the /MD with the
/MT flag was done originally in the project history, so it's a bit of
guesswork.

https://cmake.org/cmake/help/latest/policy/CMP0091.html
https://cmake.org/cmake/help/latest/prop_tgt/MSVC_RUNTIME_LIBRARY.html
2025-06-16 12:16:48 +02:00
Johannes Schmidt
82bb636d2b Use WaitGroup to wait for or abort HTTP requests
The wait group gets passed to HttpServerConnection, then down to the
HttpHandlers. For those handlers that modify the program state, the
wait group is locked so ApiListener will wait on Stop() for the
request to complete. If the request iterates over config objects,
a further check on the state of the wait group is added to abort early
and not delay program shutdown. In that case, 503 responses will be
sent to the client.

Additionally, in HttpServerConnection, no further requests than the
one already started will be allowed once the wait group is joining.
2025-06-13 14:48:15 +02:00
Johannes Schmidt
33777f6f3f Disconnect JSON-RPC clients on ApiListner::Stop() 2025-06-13 14:48:15 +02:00
Johannes Schmidt
00802ed9fa Stop ApiListener::ListenerCoroutineProc() when Stop() is called 2025-06-13 14:48:11 +02:00
Johannes Schmidt
157e3750e3 Add IsLockable method to WaitGroup 2025-06-13 14:48:07 +02:00
Julian Brost
b27310fb6c
Merge pull request #10467 from Icinga/icingadb-calceventid-no-double-timestamptomilliseconds
IcingaDB::CalcEventID: No milliseconds as eventTime
2025-06-10 17:09:16 +02:00
Julian Brost
37f0b244cb
Merge pull request #10470 from Icinga/changelog-2144
Add Icinga `2.14.*` & `2.13.12` `CHANGELOG.md` to master
2025-06-10 16:44:33 +02:00
Julian Brost
dcd9a2dd41
Merge pull request #10457 from Icinga/remove-superfluous-dsl-functions
Drop superfluous (broken) DSL functions
2025-06-10 16:33:37 +02:00
Julian Brost
da89233dbe Mention #10343 in changelog for 2.14.5
The problem was only noticed after the changelog already got merged, hence this
has to be added retroactively.
2025-06-10 15:41:41 +02:00
Julian Brost
2e640bc7e2 Icinga 2.13.12 2025-06-10 13:26:20 +02:00
Julian Brost
404136141b Icinga 2.14.6 2025-06-10 13:24:08 +02:00
Julian Brost
8c7ed2faca Release v2.14.5 2025-06-10 13:21:46 +02:00