Alexander A. Klimov
c0f87dd4c9
/v1/actions/schedule-downtime: reject request on invalid trigger_name
...
For this purpose lookup the specified Downtime. Also pass Downtime objects,
not just names, to Downtime::AddDowntime() not to lookup it twice.
2024-04-25 12:13:52 +02:00
Alexander A. Klimov
f0b5239a15
[Refactor] Downtime::GetDowntimeIDFromLegacyID(): return the Downtime itself
...
not just its name.
2024-04-25 12:13:52 +02:00
Alexander A. Klimov
28b0f7a48c
[Refactor] l_LegacyDowntimesCache: store Downtime objects, not just their names
...
to avoid names of vanished objects.
2024-04-24 12:33:56 +02:00
Alexander A. Klimov
bb13e98ca5
PluginCheckTask::ProcessFinishedHandler(): warn about exit codes outside 0..3
...
in the plugin output as well, in addition to the warning log.
2024-04-23 17:45:31 +02:00
Alexander A. Klimov
e33befabfb
Make ProcessResult#ExitStatus and CheckResult#exit_status 64-bit ints
...
so that they can hold Windows exit codes like 3221225477 (>2147483647).
2024-04-23 17:45:31 +02:00
Alexander A. Klimov
5c17465a19
OpenTsdbWriter#CheckResultHandler(): skip custom tags with empty values
...
refs #7724
2024-04-18 11:36:21 +02:00
Julian Brost
31be43ff6c
Merge pull request #10018 from Icinga/revert-9980-config-sync-conflicts
...
Revert "Process `config::update/delete` cluster events gracefully"
2024-03-08 16:58:28 +01:00
Julian Brost
af97431bfb
Merge pull request #10006 from Icinga/http-error-handling
...
HttpServerConnection: use exceptions for error handling
2024-03-08 15:06:51 +01:00
Yonas Habteab
a924a49cd8
Revert "Process `config::update/delete` cluster events gracefully"
2024-03-07 17:17:17 +01:00
Julian Brost
097ba00a9c
Merge pull request #10008 from Icinga/Al2Klimov-patch-12
...
Don't unnecessarily shuffle items before config validation
2024-03-07 16:44:38 +01:00
Alexander Aleksandrovič Klimov
629038344b
OpenTsdbWriter#CheckResultHandler(): clarify log messages
...
Clarify which "host or service" an "Unable to resolve macro" debug log message refers to.
2024-02-22 10:34:35 +01:00
Julian Brost
abea2f270c
Merge pull request #9997 from Icinga/ListenerCoroutineProc-remote_endpoint
...
ApiListener#ListenerCoroutineProc(): get remote endpoint ASAP for logging
2024-02-20 13:46:02 +01:00
Alexander Aleksandrovič Klimov
51cdd593da
Don't unnecessarily shuffle items before config validation
...
Before ae693cb7e1
(#9577 ) we've repeatedly looped over all items in parallel like this:
while not types.done:
for t in types:
if not t.done and t.dependencies.done:
with parallel(all_items, CONCURRENCY) as some_items:
for i in some_items:
if i.type is t:
i.commit()
I.e. all items got distributed over CONCURRENCY threads, but not always equally. E.g. it was the hosts' turn, but only two threads got hosts and did all the work. The others didn't do actual work (due to the lack of hosts in their queue) which reduced the performance. c721c302cd
(#6581 ) fixed it by shuffling all_items first. ae693cb7e1
(#9577 ) made the latter unnecessary by replacing the above algorithm with this:
while not types.done:
for t in types:
if not t.done and t.dependencies.done:
with parallel(all_items[t], CONCURRENCY) as some_items:
for i in some_items:
if i.type is t:
i.commit()
I.e. parallel() gets only items of type t, so all threads get e.g. hosts.
2024-02-19 14:26:06 +01:00
Julian Brost
700c5a13d7
HttpServerConnection: use exceptions for error handling
...
When a HTTP connection dies prematurely while the response is sent,
`http::async_write()` sets the error code to something like broken pipe for
example. When calling `async_flush()` afterwards, it sometimes happens that
this never returns. This results in a resource leak as the coroutine isn't
cleaned up. This commit makes the individual functions throw exceptions instead
of silently ignoring the errors, resulting in the function terminating early
and also resulting in an error being logged as well.
2024-02-19 14:12:41 +01:00
Julian Brost
04ef105caa
Merge pull request #9980 from Icinga/config-sync-conflicts
...
Process `config::update/delete` cluster events gracefully
2024-02-19 13:49:41 +01:00
Julian Brost
7d1c887a32
Merge pull request #9999 from Icinga/reset-log-message-count-correctly
...
ApiListener: Reset `m_LogMessageCount` when rotating
2024-02-15 17:06:16 +01:00
Alexander Aleksandrovič Klimov
9db1c4aca3
Merge pull request #8011 from Icinga/bugfix/reset-sigpipe-6912
...
Reset all signal handlers of child processes
2024-02-15 12:22:36 +01:00
Yonas Habteab
456144c1dc
ApiListener: Process cluster config updates sequentially
2024-02-14 14:25:53 +01:00
Yonas Habteab
40011b0584
Introduce `ObjectNamesMutex` helper class
2024-02-14 14:25:53 +01:00
Alexander Aleksandrovič Klimov
1a8ce5a90e
Merge pull request #9575 from Icinga/WorkQueue-ParallelFor
...
WorkQueue#ParallelFor(): allocate lambda once per thread, not once per item
2024-02-14 12:59:50 +01:00
Julian Brost
2be08aa2e0
Merge pull request #9992 from Icinga/remove-redundat-cpu-bound-work
...
Drop redundant `CpuBoundWork` usage in `JsonRpcConnection::Disconnect()`
2024-02-13 15:51:34 +01:00
Julian Brost
fc6a106345
Merge pull request #9994 from Icinga/redundant-cpu-bound-work-usages
...
Drop redundant `CpuBoundWork` usages in `lib/remote`
2024-02-13 14:53:59 +01:00
Alexander Aleksandrovič Klimov
48eb563ca0
Merge pull request #9736 from Icinga/stream-read-allow_partial
...
Stream#Read(): remove de facto unused param allow_partial
2024-02-13 13:04:15 +01:00
Yonas Habteab
008fcd1744
Preserve runtime objects in a tmp file for the entire validation process
...
Given that the internal `config::Update` cluster events are using this
as well to create received runtime objects, we don't want to persist
first the conf file and the load and validate it with `CompileFile`.
Otherwise, we are forced to remove the newly created file whenever we
can't validate, commit or activate it. This also would also have the
downside that two cluster events for the same object arriving at the
same moment from two different endpoints would result in two different
threads simultaneously creating and loading the same config file -
whereby only one of the surpasses the validation, while the other is
facing an object `re-definition` error and tries to remove that config
file it mistakenly thinks it has created. As a consequence, an object
successfully created by the former is implicitly deleted by the latter
thread, causing the objects to mysteriously disappear.
2024-02-12 15:18:32 +01:00
Yonas Habteab
6e66cd9aff
ApiListener: Reset `m_LogMessageCount` when rotating
...
Closing and re-opening that very same log file shouldn't reset the
counter, otherwise some log files may exceed the max limit per file as
their offset indicator is reset each time they are re-opened.
2024-02-09 18:04:20 +01:00
Yonas Habteab
eb813cfb99
HttpServerConnection: Drop superfluous `CpuBoundWork` usage
2024-02-09 15:17:26 +01:00
Alexander A. Klimov
62e1d7650d
ApiListener#ListenerCoroutineProc(): get remote endpoint ASAP for logging
...
On incoming connection timeout we log the remote endpoint which isn't
available if it was already disconnected - an exception is thrown. Get it
as long as we're still connected not to lose it, nor to get an exception.
2024-02-09 12:27:25 +01:00
Yonas Habteab
32531fe909
EventsHandler: Drop superfluous `CpuBoundWork` usage
2024-02-09 12:00:50 +01:00
Eric Lippmann
c7293de91d
IoEngine: Always log coroutine exception diagnostics
...
While analyzing a possible memory leak, we encountered several coroutine
exception messages, which unfortunately do not provide any information
about what exactly went wrong, as exception diagnostics were previously
only logged at the notice level.
2024-02-08 12:09:06 +01:00
Yonas Habteab
72266434df
Drop redundant `CpuBoundWork` usages in `lib/remote`
2024-02-08 11:30:23 +01:00
Yonas Habteab
e2793f1d88
Drop redundant `CpuBoundWork` usage in `JsonRpcConnection::Disconnect()`
...
Although there is locking involved here, it shoudln't take too long for
the thread to actually acquire it, since there aren't that many threads
dealing with endpoint clients concurrently. It's just wasting pointless
time trying to obtain a CPU slot.
2024-02-08 11:24:55 +01:00
Alexander Aleksandrovič Klimov
e9fcbf400f
Merge pull request #9966 from Icinga/Al2Klimov-patch-3
...
HttpServerConnection: remove duplicate ")" from a log message
2024-01-18 10:46:51 +01:00
Alexander A. Klimov
d48b369554
Reset all signal handlers of child processes
...
... not to disturb check plugins.
refs #6912
2024-01-17 12:25:59 +01:00
Alexander Aleksandrovič Klimov
966b46e808
Merge pull request #9965 from Icinga/http-request-time
...
HttpServerConnection: log request processing time as well
2024-01-17 11:30:33 +01:00
Julian Brost
b1fe15f694
Merge pull request #9962 from Icinga/influx-disk-9948
...
Influx DB: truncate timestamps to whole seconds to save disk space
2024-01-17 08:50:16 +01:00
Alexander A. Klimov
b6874cc8d4
HttpServerConnection: log request processing time as well
2024-01-16 17:52:07 +01:00
Alexander Aleksandrovič Klimov
6a4cb5c12c
HttpServerConnection: remove duplicate ")" from a log message
...
The commit 5c32a5a7dc
, which introduced it, clearly shows that the other ")" already existed legitimately.
2024-01-16 16:31:00 +01:00
Alexander A. Klimov
cc9db3756f
Revert "Influx DB: don't unneccessarily truncate timestamps to whole seconds"
...
This reverts commit eaa3cd83ad
.
2024-01-16 12:19:48 +01:00
Alexander A. Klimov
fc5b1178c6
Revert "Remove no-op InfluxDB URL param"
...
This reverts commit 21f548d3c0
.
2024-01-16 12:19:47 +01:00
Alexander Aleksandrovič Klimov
28b2db8446
Merge pull request #9851 from Icinga/Al2Klimov-patch-3
...
Make ObjectImpl<Logger>#GetSeverity() non-virtual
2023-12-22 12:44:51 +01:00
Alexander Aleksandrovič Klimov
6c03598678
Merge pull request #9896 from Icinga/provide-cancel_time-where-has_been_cancelled-may-be-1
...
Disallow triggering a cancelled downtime, but provide cancel_time in Icinga DB downtime history where has_been_cancelled may be 1
2023-12-20 10:03:09 +01:00
Alexander Aleksandrovič Klimov
949d983a76
Merge pull request #9895 from Icinga/targeted-api-filter
...
FilterUtility::GetFilterTargets(): don't run filter for specific object(s) for all objects
2023-12-19 15:18:41 +01:00
Alexander Aleksandrovič Klimov
8b2e28a869
Merge pull request #9891 from Icinga/renew-the-ca-9890
...
ApiListener#Start(): auto-renew CA on its owner
2023-12-19 14:57:47 +01:00
Alexander Aleksandrovič Klimov
96cfc4abe8
Merge pull request #9887 from Icinga/argument-list-too-long-9340
...
PluginNotificationTask::ScriptFunc(): on Linux truncate output and comment
2023-12-19 14:36:57 +01:00
Alexander A. Klimov
175153ce6a
PluginNotificationTask::ScriptFunc(): on Linux truncate output and comment
...
not to run into an exec(3) error E2BIG due to a too long argument.
This sends a notification with truncated output instead of not sending.
2023-12-19 12:21:03 +01:00
Alexander A. Klimov
966216f4ba
RequestCertificateHandler(): also renew if CA needs a renewal
...
and a newer one is available.
2023-12-18 15:28:11 +01:00
Alexander A. Klimov
551c3afa60
CertificateToString(): allow raw pointer input
2023-12-18 15:28:11 +01:00
Alexander A. Klimov
bc778116e9
ApiListener#Start(): auto-renew CA on its owner
...
otherwise it would expire.
2023-12-18 15:28:11 +01:00
Alexander A. Klimov
36a08b0497
ApiListener#RenewCert(): enable optional CA creation
2023-12-18 15:28:11 +01:00
Alexander A. Klimov
7b55df6f11
CreateCertIcingaCA(EVP_PKEY*, X509_NAME*): enable optional CA creation
2023-12-18 15:28:11 +01:00
Alexander Aleksandrovič Klimov
953eeba061
Merge pull request #9893 from Icinga/do-not-re-notify-if-filtered-states-don-t-change-4503
...
Discard likely duplicate problem notifications via Notification#last_notified_state_per_user
2023-12-13 16:13:28 +01:00
Alexander A. Klimov
ecfc9033b0
FilterUtility::GetFilterTargets(): don't run filter for specific object(s) for all objects
2023-12-13 16:02:50 +01:00
Alexander A. Klimov
15191bcd74
ApplyRule::GetTarget*s(): support constant strings from variables
...
in addition to literal strings. This is for sandboxed filters with some
variables pre-set by the caller. They're "constant" in that scope, too.
2023-12-13 16:02:50 +01:00
Alexander A. Klimov
a04cef1890
Introduce DictExpression#GetExpressions()
2023-12-13 16:02:50 +01:00
Alexander A. Klimov
8bcae97ecc
Introduce Dictionary#GetRef()
2023-12-13 16:02:50 +01:00
Alexander A. Klimov
97cd05db7a
Notification#BeginExecuteNotification(): on recovery clear last_notified_state_per_user
2023-12-13 13:21:22 +01:00
Alexander A. Klimov
44e9c6f40d
Notification#BeginExecuteNotification(): discard likely duplicate problem notifications
2023-12-13 13:21:19 +01:00
Alexander A. Klimov
74f52c6fcd
Introduce IsCaUptodate() by splitting IsCertUptodate()
2023-12-13 12:08:34 +01:00
Julian Brost
871fa67b52
Merge pull request #9885 from Icinga/renegotiation
2023-12-12 17:38:09 +01:00
Alexander A. Klimov
2cff763295
Cluster-sync Notification#last_notified_state_per_user
2023-12-12 15:29:50 +01:00
Alexander A. Klimov
b25ba7a316
Notification#BeginExecuteNotification(): track state change notifications
2023-12-07 12:43:30 +01:00
Julian Brost
d2a7117007
Merge pull request #9899 from Icinga/icinga2-crashes-silently-9897
...
IcingaDB#SendConfigDelete(): fix missing nullptr check before deref
2023-11-21 11:03:28 +01:00
Alexander Aleksandrovič Klimov
7fc7d054af
Merge pull request #9841 from WuerthPhoenix/fix-9840-lock-console-api-during-reload
2023-11-21 10:36:26 +01:00
Alexander A. Klimov
7174dc864d
IcingaDB#SendConfigDelete(): fix missing nullptr check before deref
2023-11-10 17:43:33 +01:00
Alexander A. Klimov
9aaa9901bd
Icinga DB downtime history: provide cancel_time where has_been_cancelled may be 1
...
The table sla_history_downtime requires a downtime_end.
The Go daemon takes the cancel_time if has_been_cancelled is 1.
So we must supply a cancel_time whereever has_been_cancelled is 1.
Otherwise the Go daemon can't process some entries.
2023-11-08 15:22:39 +01:00
Alexander A. Klimov
7ce9457a4a
Disable TLS renegotiation
...
The API doesn't need it and a customer's security scanner
is afraid of a potential DoS attack vector.
2023-11-06 18:46:37 +01:00
Theo Buehler
1f06589f7a
Remove dead code in GetSignatureAlgorithm()
...
This code was added in commit 548eb93
and never did anything useful.
Using X509_get_signature_nid() or its expanded version in the pre-1.1
branch is the correct way of retrieving the signature algorithm of a
certificate.
CLA: trivial
2023-10-20 18:55:44 +02:00
Julian Brost
bba6a76f4a
Merge pull request #9853 from Icinga/GelfWriter-m_StreamMutex
...
GelfWriter: protect m_Stream via m_WorkQueue, not ObjectLock(this)
2023-09-07 11:46:38 +02:00
Alexander Aleksandrovič Klimov
e5d988a2fe
Merge pull request #7799 from Icinga/bugfix/file-end
...
Fix file endings
2023-08-25 11:06:19 +02:00
Alexander A. Klimov
4ee10a6c20
GelfWriter: protect m_Stream via m_WorkQueue, not ObjectLock(this)
...
On shutdown or HA re-connect ConfigObject#SetAuthority(false) is called which
does ObjectLock(this) and ConfigObject#Pause(). GelfWriter#Pause(), with the
above ObjectLock, calls m_WorkQueue.Join(). But items inside that also doing
ObjectLock(this) cause a deadlock.
2023-08-24 17:48:09 +02:00
Alexander Aleksandrovič Klimov
993c9b742d
Make ObjectImpl<Logger>#GetSeverity() non-virtual
...
After all it's not overridden.
2023-08-15 13:03:31 +02:00
Mattia Codato
41e21cb8cf
Prevent calls to command API while the configuration is reloading.
...
Fixes #9840
2023-08-09 08:45:04 +02:00
Alexander A. Klimov
1308ad62af
Stream#Read(): remove de facto unused param allow_partial
...
The only caller passes true, so no one forbids partial reads (even implicitly).
All usages in the implementation just assert it being true (allowed).
2023-07-13 16:55:48 +02:00
Alexander Aleksandrovič Klimov
1af5109ad3
Merge pull request #9734 from Icinga/remove-unused-stream-peek-
...
Remove unused Stream#Peek()
2023-07-13 16:52:29 +02:00
Alexander A. Klimov
8f8a6ee2a0
Application::m_LastReloadFailed: if double isn't always lock free, use uint32_t
...
which will overflow in 2106, not 2038.
This fixes a compile failure on 32-bit Raspbian.
2023-07-10 10:51:02 +02:00
Alexander Aleksandrovič Klimov
000a776dfb
Built-in check command: ifw-api ( #9062 )
2023-07-06 14:18:21 +02:00
Julian Brost
26a75f8a6f
Merge pull request #9812 from Icinga/support-elasticsearch-8-0-9251
...
ElasticsearchWriter: switch to v7+ URL schema to support v8
2023-07-05 10:15:10 +02:00
Julian Brost
fe13b96226
Merge pull request #9809 from Icinga/reevaluate-and-update-default-tls-cipher-list-9808
...
Copy and paste global default TLS cipher set from ssl-config.mozilla.org
2023-07-03 19:13:10 +02:00
Alexander A. Klimov
617dda61fb
Re-order global default TLS cipher list to prefer AES256 over AES128
2023-07-03 15:36:11 +02:00
Alexander A. Klimov
4c2e59a690
ElasticsearchWriter: switch to v7+ URL schema to support v8
...
and OpenSearch 2. This breaks the EOL v5 and v6.
2023-07-03 14:43:45 +02:00
Julian Brost
70d6b6e424
Merge pull request #9810 from Icinga/Al2Klimov-patch-8
...
ElasticsearchWriter#Pause(): call Flush() only once
2023-06-30 17:21:16 +02:00
Alexander Aleksandrovič Klimov
076eb59443
ElasticsearchWriter#Pause(): lock m_DataBufferMutex during Flush()
...
just to be sure regarding race conditions.
2023-06-30 14:57:18 +02:00
Julian Brost
a2e05f89e8
Enable built-in OpenSSL DH parameters to allow DHE TLS ciphers
...
Non-ECC DHE ciphers in the `cipher_list` attribute of `ApiListener` (the
default value includes these) had no effect as no DH parameters were available
and therefore the server wouldn't offer these ciphers. OpenSSL provides
built-in DH parameters starting from version 1.1.0, however, these have to be
enables explicitly using the `SSL_CTX_set_dh_auto()` function. This commit does
so and thereby makes it possible to establish a connection to an Icinga 2
server using a DHE cipher.
2023-06-29 12:06:26 +02:00
Alexander Aleksandrovič Klimov
d5e6ecec8a
ElasticsearchWriter#Pause(): call Flush() only once
...
The first Flush() is redundant and may access m_DataBuffer at the same time as some Flush() in m_WorkQueue (race condition) which isn't joined, yet.
2023-06-29 10:42:12 +02:00
Alexander A. Klimov
2e053b0e06
Copy and paste global default TLS cipher set from ssl-config.mozilla.org
...
which got more secure by now, but still overlaps with v2.13.x' set.
2023-06-28 14:49:08 +02:00
Julian Brost
a2926b8604
Merge pull request #9794 from Icinga/round-notification-times-begin-end-not-to-crash-go-daemon
...
IcingaDB::PrepareObject(): round Notification#times.{begin,end} not to crash Go daemon
2023-06-27 17:08:41 +02:00
Alexander A. Klimov
dccb678882
IcingaDB::PrepareObject(): cut off (null) negative Notification#times.{begin,end} not to crash Go daemon
...
At least our PostgreSQL schema enforces positive values.
2023-06-27 12:58:08 +02:00
Alexander A. Klimov
415b810abf
IcingaDB::PrepareObject(): round Notification#times.{begin,end} not to crash Go daemon
...
The latter expects ints, not floats - not to mention strings.
Luckily Icinga already enforces numeric strings so that we can cast it to number.
2023-06-27 12:53:08 +02:00
Julian Brost
9cf519316e
Merge pull request #9805 from Icinga/checkcommand-timeout-0-crashes-icinga-db-daemon-9804
...
IcingaDB::PrepareObject(): cut off (0) negative Command#timeout for Redis
2023-06-27 10:45:02 +02:00
Julian Brost
c08d3beeb1
Merge pull request #9785 from Icinga/Al2Klimov-patch-8
...
Icinga DB: also write ConfigObject#original_attributes into Redis
2023-06-27 10:24:41 +02:00
Julian Brost
bd11bc2eb4
Merge pull request #9793 from Icinga/unmarshal-number-42-5-into-go-struct-field-notification-notification_interval
...
IcingaDB::PrepareObject(): round Notification#interval and limit it to >=0
2023-06-27 10:12:13 +02:00
Alexander A. Klimov
d641a3c799
IcingaDB::PrepareObject(): cut off (0) negative Command#timeout for Redis
...
not to crash the Go daemon which expects positive values there.
2023-06-26 15:36:47 +02:00
Julian Brost
5350aa3c72
Merge pull request #9792 from Icinga/icingadb-conversion-of-strings-to-number-types-to-avoid-crashes-9791
...
IcingaDB::PrepareObject(): convert non-null Checkable#check_timeout to number
2023-06-26 15:03:21 +02:00
Alexander A. Klimov
273aa6f997
IcingaDB::PrepareObject(): round Notification#interval and limit it to >=0
...
otherwise, e.g. with -42.5, the Go daemon crashes. It expects uints there.
2023-06-19 12:46:40 +02:00
Alexander A. Klimov
9f08bad395
IcingaDB::PrepareObject(): convert non-null Checkable#check_timeout to number
...
and, in case of null, fall back to Checkable#check_command.timeout, just like
IcingaDB#SerializeState(). Otherwise the Go daemon crashes. It expects a number.
2023-06-15 12:29:42 +02:00
Alexander A. Klimov
1587431945
POST /v1/objects: allow array of attrs to undo modifications of
2023-06-13 16:40:33 +02:00
Alexander A. Klimov
385fe2fd76
Icinga DB: also write ConfigObject#original_attributes into Redis
...
for the case the Go daemon decides to sync them into DB.
2023-06-12 12:53:25 +02:00
Julian Brost
7c381ae12f
Merge pull request #9779 from Icinga/macroprocessor-resolvemacro-quasi-cv-object-icingaapplication
...
MacroProcessor::ResolveMacro(): treat quasi-CV-object IcingaApplication as real CV-object
2023-05-31 20:41:31 +02:00
Alexander A. Klimov
a9c80ffb2e
MacroProcessor::ResolveMacro(): treat quasi-CV-object IcingaApplication as real CV-object
...
As MacroProcessor checked just for CustomVarObject base class, but
IcingaApplication provided the vars attribute by itself, it had to also
resolve CV macros by itself. That logic diverged from MacroProcessor so that
macros inside IcingaApplication CVs weren't resolved. Until now.
2023-05-31 16:35:09 +02:00
Julian Brost
8a42c3bf18
Merge pull request #9775 from Icinga/icingadb-service-crashes-on-negative-downtime-duration-or-end-before-start-9774
...
Icinga DB: don't write negative Downtime durations into Redis
2023-05-31 11:37:42 +02:00
Alexander A. Klimov
75eaa81c06
Icinga DB: don't write negative Downtime durations into Redis
...
via `std::max(0, x)` not to crash the Go daemon which can't handle such.
2023-05-30 17:56:03 +02:00
Julian Brost
b0899d9ab4
Merge pull request #8429 from Icinga/bugfix/last-reload-attempt-failed-8428
...
Share "Last reload attempt failed" time across Icinga process tree on *nix
2023-05-30 11:42:21 +02:00
Julian Brost
d871c5c837
Merge pull request #9772 from Icinga/icinga-db-feature-should-normalize-command-arguments-required-skip_key-repeat_key-to-boolean-9576
...
Icinga DB feature: normalize *Command.arguments[*].{required,skip_key…
2023-05-25 11:54:01 +02:00
Alexander A. Klimov
ad618e9716
Icinga DB feature: normalize *Command.arguments[*].{required,skip_key,repeat_key} to boolean
...
At the moment, the Icinga DB feature will use that value as-is and
serialize it to JSON, resulting in a crash in Icinga DB down the road
because it expects a boolean.
2023-05-24 16:04:14 +02:00
Julian Brost
2470e930eb
Merge pull request #9643 from Icinga/hardware_concurrency
...
Always use Configuration#Concurrency, not `std:🧵 :hardware_concurrency()`
2023-05-23 19:23:14 +02:00
Alexander A. Klimov
3fae41ef22
Restart thread pool after freezing Configuration
...
The user (-D) or we could have changed Configuration.Concurrency,
so correct the thread pool's thread amount.
2023-05-23 14:41:35 +02:00
Julian Brost
0e25644151
Merge pull request #8969 from Icinga/bugfix/perfdata-dont-get-parsed-correctly-8912
...
PluginUtility: Fix PerfData parsing for values separated with multiple spaces
2023-05-22 17:16:31 +02:00
Alexander A. Klimov
9376a311ea
Fix file endings
...
git ls-files -z \
|grep -zEe '^lib/' \
|grep -zEe '\.[ch]pp$' \
|xargs -0 perl -p0i -e 's/\n*(?!(?:.|\n))/\n/'
2023-05-17 18:05:13 +02:00
Alexander A. Klimov
32eb1680f7
Configuration.Concurrency: default to 1 until Configuration freeze
...
not to start many threads before the user could override their amount (-D).
2023-05-11 16:59:47 +02:00
Alexander A. Klimov
8fb5d53118
Track Configuration.Concurrency modifications
2023-05-11 15:41:35 +02:00
Alexander A. Klimov
5c330e9d4f
Share "Last reload attempt failed" time across Icinga process tree on *nix
...
... as only the umbrella process knows that time,
but the icinga check running in the main process also needs to know it.
refs #8428
2023-05-08 14:42:21 +02:00
Julian Brost
eca8890d49
Merge pull request #9718 from Icinga/acknowledgement-sync-between-masters-are-not-working-9652
...
Checkable#ProcessCheckResult(): only clean up ack comments older than check result
2023-05-05 15:29:38 +02:00
Julian Brost
af9d67b262
Merge pull request #9726 from Icinga/43624b
...
Remove -and notify- expired downtimes immediately, not every 60s II
2023-05-02 11:25:03 +02:00
Alexander A. Klimov
58b788cd51
Downtime#Start(): trigger flexible downtimes not earlier than fixed ones
...
the last state change could be a long time ago. If it's longer than
the new downtime's duration, the downtime expires immediately.
trigger time + duration < now
2023-04-18 16:55:32 +02:00
Julian Brost
8238ec0d96
Merge pull request #9725 from Icinga/operation_aborted-shutDownIfNeeded.Cancel
...
ApiListener#NewClientHandlerInternal(): on basic_socket#cancel() (due to timeout) don't ssl::stream#async_shutdown()
2023-04-17 12:21:21 +02:00
Alexander A. Klimov
0ac1cd1ecb
Rename Downtime::DowntimesExpireTimerHandler()
...
to actually reflect its purpose.
2023-04-14 14:52:05 +02:00
Alexander A. Klimov
6adf2d19e4
Remove -and notify- expired downtimes immediately, not every 60s
...
Don't look for expired downtimes in a timer fired every 60s,
but fire one timer per downtime once at expire time.
2023-04-14 14:52:05 +02:00
Alexander A. Klimov
ba7102cae3
Explicitly stop started timers and wait for them
...
before permitting their parent objects' destruction.
For the cases where the handlers have raw pointers to these objects.
2023-04-14 14:52:04 +02:00
Julian Brost
8228fae740
Merge pull request #8627 from WuerthPhoenix/bug/agent-cannot-update-executions-8616
...
Fix update execution message discarded. refs #8616
2023-04-13 19:29:49 +02:00
Julian Brost
f505325ff9
Merge pull request #9445 from Icinga/9365
...
Disallow config modifications via API during reload
2023-04-13 17:11:58 +02:00
Mattia Codato
c5c17928a6
Allow to exec command on endpoint where the checkable is not present but checkable has command_endpoint specified
2023-04-13 14:44:07 +02:00
Alexander A. Klimov
2ee776b5ab
Disallow config modifications via API during reload
...
Once the new main process has read the config,
it misses subsequent modifications from the old process otherwise.
2023-04-12 14:45:40 +02:00
Alexander A. Klimov
64e000df56
Introduce ConfigObjects*Lock
2023-04-12 13:36:48 +02:00
Julian Brost
50018c1d2b
Merge pull request #8218 from efuss/redundancy_group
...
Introduce redundancy groups for Dependency Objects
2023-04-05 18:49:58 +02:00
Yonas Habteab
24d95e1178
PluginUtility: Fix PerfData don't get parsed correctly
...
The problem was that some PerfData labels contained several whitespace characters,
not just one, and therefore it was parsed incorrectly in `SplitPerfdata()`. I.e. the condition
in line 144 checks whether the first and last character is a normal quote, but since the
label can contain spaces at the beginning and at the end respectively, this caused the problems.
This PR fixes the problem by removing all occurring whitespace from the beginning and end,
before starting to parse the actual label.
2023-04-05 15:37:54 +02:00
Alexander A. Klimov
a66ace7245
Introduce SharedMemory
2023-04-04 13:40:27 +02:00
Alexander A. Klimov
c41e5fd05d
Support multiple redundant Timer#Start() calls
...
so that only the first one changes l_AliveTimers (as in Timer#Stop()).
2023-04-04 10:35:22 +02:00
Alexander A. Klimov
298f3b1973
Timer: actually support non-periodic timers
2023-04-04 10:35:22 +02:00
Alexander A. Klimov
3933502739
Timer#Start(): don't unnecessarily unlock/lock l_TimerMutex
...
via new Timer#InternalRescheduleUnlocked()
2023-04-04 10:35:22 +02:00
Alexander A. Klimov
13b9cfda41
Timer::TimerThreadProc(): don't unnecessarily unlock and lock l_TimerMutex
2023-04-04 10:35:22 +02:00
Alexander A. Klimov
1badbab002
Timer::TimerThreadProc(): keep a Timer alive while it's running
...
to prevent the case: Timer callback destroys parent object -> destroys
Timer -> ~Timer() -> Stop(true) -> waits for the Timer callback to finish
-> deadlock.
2023-04-04 10:35:22 +02:00
Alexander A. Klimov
9b00c1c4dd
Timer: drop unnecessary base class
2023-04-04 10:35:22 +02:00
Alexander A. Klimov
24681b30f6
Make Timer::Ptr a std::shared_ptr
2023-04-04 10:35:22 +02:00
Alexander A. Klimov
9ee4d08722
Make Timer#Timer() private to enforce Timer::Create() usage
2023-04-04 10:35:22 +02:00
Alexander A. Klimov
21b68455ce
Use Timer::Create() instead of new Timer()
...
git ls-files -z |xargs -0 perl -pi -e 's/\bnew Timer\b/Timer::Create/g'
ex. in Timer::Create() itself.
2023-04-04 10:35:20 +02:00
Alexander A. Klimov
bb1f574b69
Introduce factory method Timer::Create()
2023-04-04 10:35:10 +02:00
Alexander A. Klimov
35248b1b63
Code style
2023-04-03 13:39:08 +02:00
Alexander A. Klimov
cc872dac1f
Remove CheckResultReader which has been deprecated for 5 major versions
2023-04-03 11:39:21 +02:00
Julian Brost
7a7902cea7
Merge pull request #9715 from Icinga/StatusDataWriter
...
Remove StatusDataWriter which has been deprecated for 5 major versions
2023-03-31 12:32:43 +02:00
Julian Brost
e87e1ea73f
Freeze globals namespace during config load
...
This allows for a faster config load due to less locking required.
The change is slightly backwards-incompatible. Before, you could manipulate the
globals namespace at a later stage, but disallowing this feels reasonable for
the performance benefit alone (which especially shows on many-core machines).
Apart from that, it's doubtful if doing so is even useful at all as the DSL
provides no mechanism for you to synchronize your operations that may run in
parallel. The data structures itself are protected from race conditions, but
anything implemented on top of this may still be subject to race conditions.
And even if some user has a good reason for doing this, there's a feasible
workaround by creating your own namespace like globals.mutable and using that
instead.
2023-03-30 18:07:51 +02:00
Alexander A. Klimov
335688909b
Document why Timer::TimerThreadProc() can use Timer members during Timer#~Timer() call
2023-03-29 18:04:19 +02:00
Alexander A. Klimov
78b4dc6509
Remove unused Stream#Peek()
2023-03-24 18:18:13 +01:00
Alexander A. Klimov
4c154f93dc
ApiListener#NewClientHandlerInternal(): on basic_socket#cancel() (due to timeout) don't ssl::stream#async_shutdown()
...
If a connection hangs for too long in ApiListener#NewClientHandler(),
ApiListener#AddConnection()'s Timeout calls boost::asio::basic_socket#cancel()
on that connection to trigger an exception which unwinds
ApiListener#NewClientHandler(). Previously that unwind could trigger a Defer
which called boost::asio::ssl::stream#async_shutdown() which extended the hang.
2023-03-21 10:57:40 +01:00
Julian Brost
66b039df9c
Merge pull request #9497 from Icinga/9249
...
Application::Exit(): don't exit(), but _exit(), even in debug build mode
2023-03-10 16:04:54 +01:00
Alexander A. Klimov
6414fd19f5
Checkable#ProcessCheckResult(): only clean up ack comments older than check result
...
Normally if for some reason an ack comment still exists on a checkable not
acked anymore, still clean it up. But while replaying log config objects
incl. ack comments come before check results and acks. I.e. 1) ack comment,
2) DOWN check result and 3) ack. Not 1) DOWN check result, 2) ack and 3) ack
comment. So the checkable is temporarily not acked, but already has the ack
comment. In this case the DOWN check result which is older than the ack
comment shall not clean up the latter.
2023-03-03 15:48:34 +01:00
Alexander A. Klimov
4662d4477b
Checkable#RemoveAckComments(): add optional comment entry time filter
2023-03-03 15:48:11 +01:00
Alexander A. Klimov
dceb29c742
Checkable#RemoveCommentsByType(): remove redundant parameter
2023-03-03 11:53:02 +01:00
Mattia Codato
912fdb9700
Fix update execution message discarded
...
refs Icinga#8616
2023-03-02 17:50:39 +01:00
Alexander Aleksandrovič Klimov
55930c8042
ProcessSpawnImpl(): remove redundant _exit(128);
...
Now this if doesn’t _exit(128) by itself, but "return" to the outer if which immediately _exit(128)s.
2023-03-02 12:45:15 +01:00
Alexander A. Klimov
bbf2e80002
Remove StatusDataWriter which has been deprecated for 5 major versions
2023-03-01 17:16:28 +01:00