12228 Commits

Author SHA1 Message Date
Alexander A. Klimov
1eb274b550 Perfdata writers: disconnect handlers from signals in Pause()
as they would be re-connected in Resume() (HA).

Before they were still connected during pause and connected X+1 times
after X split-brains (the same data was written X+1 times).
2022-04-07 13:00:27 +02:00
Alexander Aleksandrovič Klimov
92e688b94a
Merge pull request #9320 from Icinga/boost1.78
Make compatible with Boost 1.78 (for Windows)
2022-04-06 16:38:33 +02:00
Alexander Aleksandrovič Klimov
eebfd0284c
Merge pull request #9317 from Icinga/revert-9245-bugfix/adjust-behavior-of-service-get-severity-212
Revert "Service#GetSeverity(): behave as the respective IDO query of Icinga Web"
2022-04-06 13:39:41 +02:00
Alexander A. Klimov
1e0a0f7f9d Fix missing include 2022-04-06 12:44:49 +02:00
Edgar Fuß
bce291439c Avoid name clashes on case-insensitive file systems
On case-insensitive file systems (i.e. macOS), the VERSION file collides with the Boost-provided version file on #include <version>.

Work around by re-naming VERSION to ICINGA2_VERSION.
2022-04-06 12:43:13 +02:00
Julian Brost
f60a0111b7
Merge pull request #9313 from Icinga/9308
IDO MySQL: explicitly use latin1
2022-04-06 09:50:15 +02:00
Julian Brost
77aec49667
Revert "Service#GetSeverity(): behave as the respective IDO query of Icinga Web" 2022-04-01 15:06:47 +02:00
Alexander A. Klimov
11b8d0f058 IDO MySQL: reason latin1 charset for actually UTF-8 bytes 2022-03-31 18:10:21 +02:00
Alexander A. Klimov
245fbad1e5 IDO MySQL: explicitly use latin1
for the case the MySQL client lib is compiled with another default
not to turn Unicode chars into ??.
2022-03-31 15:04:45 +02:00
Alexander Aleksandrovič Klimov
16ca076262
Merge pull request #9305 from Icinga/bugfix/add-some-missing-locks-2.12
Add some missing locks to prevent data races
2022-03-30 10:54:45 +02:00
Yonas Habteab
7f9cbc8707 ConfigObject: Initialize local static var at declaration to ensure thread safety 2022-03-29 16:36:50 +02:00
Yonas Habteab
6ecf4fe4b5 ConfigItem: Use atomic variables for notified and commited items count 2022-03-29 16:36:50 +02:00
Julian Brost
5d2625c711
Merge pull request #9294 from Icinga/bugfix/override-default-template-apply-rules-7914
Apply rules: import default templates first
2022-03-29 16:03:46 +02:00
Alexander A. Klimov
07cd15f48f Apply rules: import default templates first
... to allow to override the attributes they set.

refs #7914
2022-03-24 14:04:58 +01:00
Julian Brost
2accf9962b
Merge pull request #9270 from Icinga/feature/subscription-212
GHA: build RHEL and Amazon Linux
2022-03-22 14:43:47 +01:00
Julian Brost
77eed19482
Merge pull request #9246 from Icinga/bugfix/timeperiod-dst-2.0-212
LegacyTimePeriod::ScriptFunc: fix DST edge-cases
2022-03-08 15:28:20 +01:00
Julian Brost
9dcd2da9b3
Merge pull request #9229 from Icinga/bugfix/processcheckresult-dependency-deadlock-2.12
Prevent deadlock in ProcessCheckResult
2022-03-07 11:15:11 +01:00
Julian Brost
26d78231dd Add tests for LegacyTimePeriod::ScriptFunc when used by TimePeriod::IsInside 2022-03-07 09:42:21 +01:00
Julian Brost
93217de515 LegacyTimePeriod::ScriptFunc: fix DST edge-cases
This change fixes two problems:
* The internal functions used by ScriptFunc more or less expect to operate on
  full days, but ScriptFunc may have called them with some random timestamp
  during the day. This is fixed by always using midnight of the day as
  reference time.
* Previously, the code advanced a timestamp to the next day by adding 24 hours.
  On days with DST changes, this could either still be on the same day (a day
  may have 25 hours) or skip an entire day (a day may have 23 hours). This is
  fixed by using a struct tm to advance the time to the next day.
2022-03-07 09:42:21 +01:00
Julian Brost
9e0459e5e1
Merge pull request #9245 from Icinga/bugfix/adjust-behavior-of-service-get-severity-212
Service#GetSeverity(): behave as the respective IDO query of Icinga Web
2022-03-07 09:24:13 +01:00
Julian Brost
7a1058993c
Merge pull request #9244 from Icinga/bugfix/doc-allow-to-change-severity-formula-across-icinga2-releases-212
Doc: technical concepts: allow to change severity formula across Icin…
2022-03-07 09:23:16 +01:00
Julian Brost
4bdde970df
Merge pull request #9243 from Icinga/bugfix/multi-ido-notification-id-212
IDO: fix incorrect contacts in notification history with multiple IDO instances on a single node
2022-03-07 09:22:17 +01:00
Alexander A. Klimov
a8969a7176 GHA: preserve .rpm job names 2022-03-02 18:18:53 +01:00
Alexander A. Klimov
0da0c69fdd GHA: build Amazon Linux 2022-03-02 18:18:53 +01:00
Alexander A. Klimov
f32c76e5c9 GHA: build RHEL 2022-03-02 18:18:53 +01:00
Alexander A. Klimov
04865cf077 GHA: correct subscription packages repo 2022-03-02 18:18:53 +01:00
Alexander A. Klimov
978d3d0e59 GHA: new subscription packages repo access token
with more permissions and URL-friendlier login name.
2022-03-02 18:18:53 +01:00
Alexander A. Klimov
f1145606cb GHA: explicitly specify whether $DISTRO packages require subscription
to have all info at one place in the file.
2022-03-02 18:18:53 +01:00
Julian Brost
0ccd7b799c
Merge pull request #9247 from Icinga/bugfix/influxdb-writer-synchronization-212
Fix unsafe concurrent access to m_DataBuffer in InfluxdbWriter
2022-03-01 15:07:48 +01:00
Julian Brost
4d28a01b84 InfluxdbWriter: use atomic_size_t to data buffer size from stats function
m_DataBuffer may be modified concurrently while StatsFunc() is called, thus
it's unsafe to call size() on it. As write access to m_DataBuffer is already
synchronized by only modifying it from the single work queue thread, instead of
adding a mutex, this commit adds a new std::atomic_size_t which is additionally
updated when modifying m_DataBuffer and can safely be accessed in StatsFunc().
2022-02-28 17:39:18 +01:00
Julian Brost
489660fb27
Merge pull request #9261 from Icinga/bugfix/event-handler-spamming-8704-212
Checkable#ExecuteEventHandler(): don't outsource event command run twice
2022-02-25 16:52:50 +01:00
Alexander A. Klimov
74935dad7b Checkable#ExecuteEventHandler(): don't outsource event command run twice
refs #8704
2022-02-24 14:03:57 +01:00
Alexander Aleksandrovič Klimov
5ec8097811
Merge pull request #9253 from Icinga/bugfix/timeperiod-dst
TimePeriod/ScheduledDowntime: improve DST handling
2022-02-23 16:53:15 +01:00
Julian Brost
a2a5c3f28d InfluxdbWriter: only flush from work queue
There is no explicit synchronization of access to m_DataBuffer which is fine if
it is only accessed from the single-threaded work queue. However, Stop() also
called Flush() in another thread, leading to concurrent write access to
m_DataBuffer which can result in a crash due to use after free/double free.

Changes in this commit:
* Flush() is renamed to FlushWQ() to show that it should only be called from
  the work queue. Additionally, it now asserts that it is running on the work
  queue.
* Visibility of some data members is changed from protected to private. No
  other classes have to access these at the moment. By this change, accidental
  concurrent access from derived classes in the future is prevented.
* Stop() now flushes by posting FlushWQ() to the work queue and joining it.
2022-02-23 15:08:57 +01:00
Julian Brost
3b4662345e Add tests for DST handling in TimePeriods and ScheduledDowntimes 2022-02-22 11:48:44 +01:00
Julian Brost
899e020fde LegacyTimePeriod: Prevent modification of input parameters
Many functions of LegacyTimePeriod take a tm pointer as an input parameter and
then pass it to mktime() which actually modifies it. This causes problems if
tm_isdst was intentionally set to -1 (to automatically detect whether DST is
active at some time) and then a function is called that implicitly sets
tm_isdst and then the values of tm are modified in a way that crosses a DST
change. This resulted in 1 hour offsets with ScheduledDowntimes on days with
DST changes.
2022-02-22 11:48:44 +01:00
Alexander Aleksandrovič Klimov
627fd91ac6 Service#GetSeverity(): behave as the respective IDO query of Icinga Web
which doesn't include host reachability.
2022-02-21 16:11:48 +01:00
Alexander Aleksandrovič Klimov
865953ecb8 Doc: technical concepts: allow to change severity formula across Icinga 2 releases
so nobody is surprised in that case.
2022-02-21 16:09:37 +01:00
Julian Brost
69f181f98e IDO: use per-instance notification_id in history
When there are multiple active IDO instances on the same node, before this
commit, all of them would share a single DbValue object for the notification_id
column of the icinga_contactnotifications table. This resulted in the issue
that one database references the notification_id in another database.

This commit fixes this by using a separate DbValue value for each IDO instance.
This needs a new signal as the existing OnQuery and OnMultipleQueries signals
perform the same queries on all IDO instances, but different queries are needed
here per instance (they only differ in the referenced DbValue). Therefore, a
new signal OnMakeQueries is added that takes a std::function which is called
once per IDO instance and can access callbacks to perform one or multiple
queries only on this specific IDO instance.
2022-02-21 16:03:14 +01:00
Alexander Aleksandrovič Klimov
f150ad9535
Merge pull request #9234 from Icinga/bugfix/gha-pin-windows-version-2.12
GitHub Actions: pin Windows Server version to 2019
2022-02-21 15:09:00 +01:00
Alexander Aleksandrovič Klimov
a1e11b9024
Merge pull request #9232 from Icinga/bugfix/gha-drop-centos8-2.12
GHA: drop CentOS 8
2022-02-21 14:05:32 +01:00
Julian Brost
fe5eb0a2f5 GitHub Actions: pin Windows Server version to 2019 2022-02-18 16:09:40 +01:00
Alexander Aleksandrovič Klimov
71bd0d6f67 GHA: drop CentOS 8
It's EOL.
2022-02-18 16:07:05 +01:00
Julian Brost
485e287d28 Prevent deadlock in ProcessCheckResult
Without this commit, children and parents of a checkable were rescheduled on a
state change while holding the lock for the current checkable. If both ends of
a dependency are checked at the same time and both change state, they could end
up in a deadlock waiting for each other.

This commit fixes this problem by changing the code so that other checkables
are rescheduled only after releasing the lock for the current checkable.
2022-02-18 14:39:48 +01:00
Julian Brost
93461e9397
Merge pull request #9184 from Icinga/bugfix/downtime-all-services-on-child-hosts-212
Fix scheduling of downtimes for all services on child hosts
2022-01-21 18:03:32 +01:00
Julian Brost
5140b2e3d6
Merge pull request #9185 from Icinga/bugfix/dont-trigger-fixed-downtime-as-flexible-212
Don't trigger a fixed downtime like a flexible one
2022-01-21 18:03:15 +01:00
Julian Brost
9fc426e20e Don't trigger a fixed downtime like a flexible one
When creating a fixed downtime that starts immediately while the checkable is
in a non-OK state, previously the code path for flexible downtimes was used to
trigger this downtime. This is fixed by this commit which resolves two issued:

1. Missing downtime start notification: notifications work differently for
   fixed and flexible downtimes. This resulted in missing downtime start
   notifications under the conditions described above.
2. Incorrect downtime trigger time: this code path would incorrectly assume the
   timestamp of the last checkable as the trigger time which is incorrect for
   fixed downtimes.
2022-01-20 11:45:38 +01:00
Julian Brost
8b3bd062ac Document which other downtimes are deleted by /v1/actions/remove-downtime 2022-01-20 11:40:21 +01:00
Julian Brost
b9e2499148 Prevent duplicate donwtimes when combining child_options and all_services 2022-01-20 11:40:21 +01:00
Julian Brost
f298314216 Fix scheduling of downtimes for all services on child hosts
The loop iterated over the services of the wrong host resulting in duplicate
downtimes scheduled for services of the parent host instead of downtimes for
services of the child host.
2022-01-20 11:40:21 +01:00