Julian Brost
bf5b905707
Merge pull request #9250 from Icinga/feature/fix-compiler-warning-do-not-move-local-variables
...
Fix compiler warnings don't move local variables
2022-03-08 11:37:09 +01:00
Alexander A. Klimov
6b5106ffdd
IcingaDB#Stop(): don't block shutdown, timeout instead
2022-03-02 16:39:44 +01:00
Alexander A. Klimov
3a8efcb4ea
IcingaDB#Send*(): don't enqueue any history once stopped
2022-03-02 16:39:44 +01:00
Alexander A. Klimov
cac22fe38b
RedisConnection#Connect(): wait for all promises to be completed
...
by the read loop from the previous connection.
2022-03-02 16:39:44 +01:00
Alexander A. Klimov
732d5c472d
RedisConnection#ReadLoop(): don't crash (silently) if a promise to be set is already set
2022-03-02 16:39:37 +01:00
Alexander A. Klimov
50fee6aeb9
Icinga DB: include amount of history kept in memory in /v1/status
2022-03-02 16:39:37 +01:00
Alexander A. Klimov
ad0fe764f7
Icinga DB: log amount of history kept in memory every 10s
2022-03-02 16:39:37 +01:00
Alexander A. Klimov
8ea62f7fc7
Icinga DB: keep history in memory until written to Redis
...
by putting the messages into a Bulker and retrying each chunk.
2022-03-02 16:39:37 +01:00
Yonas Habteab
a0607aceff
Fix compiler warnings don't move local variables
2022-02-22 17:51:43 +01:00
Julian Brost
99008755b5
Merge pull request #9213 from Icinga/feature/icingadb-add-previous_soft_state-to-host_state-and-service_state-9210
...
IcingaDB: Add previous_soft_state to host_state and service_state
2022-02-18 14:09:35 +01:00
Alexander A. Klimov
c613e62454
IcingaDB: Add previous_soft_state to host_state and service_state
...
refs #9210
2022-02-14 11:32:46 +01:00
Alexander A. Klimov
84d09876b4
Icinga DB: ensure is_reachable and severity don't miss updates
...
refs #9143
2022-01-25 13:33:46 +01:00
Julian Brost
185fab3761
Merge pull request #9144 from Icinga/bugfix/icingadb-state-history
...
Icinga DB: don't write state history for ack/downtime/host problem changes
2022-01-20 12:00:24 +01:00
Julian Brost
463b159414
Merge pull request #9171 from Icinga/bugfix/icinga-db-notification-history-might-use-incorrect-previous_hard_state-9132
...
IcingaDB#SendSentNotification(): make stream deterministic via CheckResult#previous_hard_state
2022-01-18 16:54:16 +01:00
Julian Brost
31da6a56e6
Icinga DB: remove obsolete StateChangeHandler overload
...
This version of StateChangeHandler is no longer called anywhere as it was the
wrong function for all previous callers anyways.
2022-01-18 12:26:43 +01:00
Julian Brost
cf73c6136b
Icinga DB: make host problem change events update the state tables but not write state history
...
StateChangeHandler() is the function used when the actual hard/soft state
changes and thus also writes state history. This is not desired in this case,
instead, a runtime update should be generated, therefore call UpdateState()
instead.
refs #9063
2022-01-18 12:26:43 +01:00
Julian Brost
855e342b63
Icinga DB: make acknowledgement events update the state tables but not write state history
...
StateChangeHandler() is the function used when the actual hard/soft state
changes and thus also writes state history. This is not desired in this case,
instead, a runtime update should be generated, therefore call UpdateState()
instead.
refs #9063
2022-01-18 12:26:43 +01:00
Julian Brost
f63268b0dd
Icinga DB: make downtime events update the state tables but not write state history
...
StateChangeHandler() is the function used when the actual hard/soft state
changes and thus also writes state history. This is not desired in this case,
instead, a runtime update should be generated, therefore call UpdateState()
instead.
refs #9063
2022-01-18 12:26:43 +01:00
Julian Brost
447884be72
Icinga DB: don't reimplement volatile state update in SendConfigUpdate
...
Sending a volatile state update is already implemented in UpdateState, so just
use that function instead of generating the update queries.
2022-01-18 12:26:43 +01:00
Julian Brost
a6d6cb788e
Icinga DB: Merge SendStatusUpdate into UpdateState
...
Previously, both funktions did related operations but had unclear and confusing
naming:
- UpdateState updated the icinga:{host,service}:state Redis keys.
- SendStatusUpdate sent a runtime update for the icinga:{host,service}:state.
This commit merges both functions into one with a new mode parameter. The
following modes are now supported:
- Volatile: Update the icinga:{host,service}:state Redis key.
- Full: Perform the volatile state update and in addition send a corresponding
runtime update so that this state update gets written through to the
persistent database by a running icingadb process.
- RuntimeOnly: Special mode for callers that can ensure that a volatile update
for the current state was already performed but has to be upgraded to a full
update.
refs #9063
2022-01-18 12:26:43 +01:00
Alexander A. Klimov
1fee3f1b12
IcingaDB#SendSentNotification(): make stream deterministic via CheckResult#previous_hard_state
...
Now it gets everything from one source, the CheckResult.
refs #9132
2022-01-10 19:18:11 +01:00
Julian Brost
e518dc2436
Merge pull request #9112 from Icinga/bugfix/sync-missing-history-information
...
Icinga DB: ensure consistent history streams in HA setup
2022-01-07 15:14:06 +01:00
Julian Brost
3e73a262cc
Sync comment and downtime removal info for Icinga DB history
...
When a comment or downtime is removed manually, the name of the requestor and
timestamp have to be synced to other nodes in the cluster to allow all of them
to generate a consistent Icinga DB history stream.
refs #9101
2022-01-05 10:27:13 +01:00
Alexander A. Klimov
a8c9d19dae
Icinga DB: ensure icinga:*command:argument#order is an int
...
The config parser requires *Command#arguments#order to be a Number, i.e. 42,
4.2 or even "4.2". That's int-casted where needed, now also for Icinga DB.
Before:
```
object CheckCommand "9117" {
command = [ "true" ]
arguments = {
"4.2" = { order = "4.2" }
}
}
```
2022-01-03T13:25:07.166+0100 FATAL icingadb json: cannot unmarshal string into Go value of type int64
2022-01-03 13:28:19 +01:00
Noah Hilverling
4d3b1709fd
Merge pull request #9009 from Icinga/bugfix/icingadb-runtime-updates-delete-relationships
...
Icinga DB: Make sure object relationships are handled correctly during runtime updates
2021-11-12 17:52:59 +01:00
Julian Brost
b9e6273ba0
Icinga DB: only log queries at debug level
2021-11-12 15:41:17 +01:00
Noah Hilverling
7a0796061a
IcingaDB::AddObjectDataToRuntimeUpdates(): Copy data before modifying
2021-11-12 13:34:57 +01:00
Noah Hilverling
73e0d6e61b
Icinga DB: Make sure object relationships are handled correctly
2021-11-12 13:34:57 +01:00
Noah Hilverling
4e79eb080c
Merge pull request #9058 from Icinga/bugfix/icingadb-prefix-command_id
...
IcingaDB: Prefix command_id with command type
2021-11-11 11:50:26 +01:00
Noah Hilverling
c1098bef35
Merge pull request #9061 from Icinga/add-downtime-duration-and-service-state-host-id-streams
...
Icinga DB: Add `downtime.duration` & `service_state.host_id` to Redis
2021-11-11 10:19:47 +01:00
Noah Hilverling
a9c2304c61
IcingaDB: Prefix command_id with command type
2021-11-09 12:26:30 +01:00
Eric Lippmann
35053ac1dd
Icinga DB: Sync groups earlier
...
Host and service groups are structural information that are used
for Web filters and should therefore be synchronized as soon as
possible.
2021-11-09 11:17:01 +01:00
Alexander A. Klimov
07c8440fd2
Icinga DB: sync checkables along with their states first
...
`WorkQueue#ParallelFor(x, false, y)` will enqueue x's items in FIFO order,
so x has to start with host and service.
2021-11-09 11:17:01 +01:00
Yonas Habteab
fe5aa1e18d
Icinga DB: Add `service_state.host_id` to Redis
2021-11-09 11:08:22 +01:00
Yonas Habteab
5dc45baebb
Icinga DB: Add `downtime.duration` & `scheduled_duration` to Redis
2021-11-09 11:08:22 +01:00
Julian Brost
848f1ae167
Merge pull request #8998 from Icinga/bugfix/icingadb-program-start-milliseconds
...
Icinga DB: set value in milliseconds for program_start in stats/heartbeat
2021-11-08 18:18:19 +01:00
Julian Brost
524fe92a1d
Merge pull request #9028 from Icinga/bugfix/icingadb-zone-parent
...
IcingaDB: actually write parent to parent_id of zones
2021-11-08 18:08:48 +01:00
Julian Brost
e46d83b6be
Icinga DB: set value in milliseconds for program_start in stats/heartbeat
2021-11-08 14:37:08 +01:00
Noah Hilverling
0b9317a5bf
IcingaDB: Remove GetObjectIdentifiersWithoutEnv()
...
Having the command type be a part of the command ID isn't needed anywhere. Removing this simplifies the way we generate IDs in general, because we don't need Prepend() anymore.
The command type was only needed to prevent ID collisions within the command_envvar and command_argument tables. Those tables have since been separated into {check,event,notification}command_envvar and {check,event,notification}command_argument tables.
2021-11-05 17:01:40 +01:00
Julian Brost
3c8672b4dc
Icinga DB: increase Redis schema version
...
PR #9036 introduces some incompatible changes to the Redis schema, most
importantly where Icinga DB has to read the environment from: now it has to use
a new top-level key of the icinga:stats message instead of a value in the
IcingaApplication part of that message.
2021-11-05 14:14:37 +01:00
Julian Brost
6007848146
IcingaDB: export environment_id via API
...
Primarily required for Icinga DB integration tests at the moment, but could
also be helpful in other situations.
2021-11-05 14:14:37 +01:00
Julian Brost
4ade4c757b
IcingaDB: write new environment to icinga:stats stream
2021-11-05 14:14:37 +01:00
Julian Brost
525dd50859
IcingaDB: introduce a new environment ID derived from the CA public key
...
In order to avoid changes to the environment ID, it is now no longer derived
from the Environment constant but instead from the public key of the CA
certificate. This ensures that it is different between clusters by default, so
no additional changes have to be done to allow two clusters to use Icinga DB to
write into the same database.
To prevent the ID from changing when the CA certificate is replaced, it is also
persisted into the file /var/lib/icinga2/icingadb.env, so if that file exists,
it takes precedence over the CA certificate.
2021-11-05 14:14:37 +01:00
Julian Brost
f976e351f4
Merge pull request #9044 from Icinga/bugfix/idb-dump-buf-lost
...
Icinga DB init. dump: flush both buffered states and state checksums
2021-11-04 12:26:28 +01:00
Alexander A. Klimov
0ff7d0a06e
Icinga DB: raise icinga:schema 1 -> 2
2021-11-02 15:00:55 +01:00
Alexander A. Klimov
b1714a10c2
Icinga DB: make icinga:history:stream:*#event_id deterministic
...
... i.e. UUID -> SHA1(env, eventType, x...) given that SHA1(env, x...) = type-specific ID.
Rationale: allow both masters to write the same history concurrently (while not
in split-brain), so that REPLACE INTO deduplicates the same events written twice.
* ack: SHA1(env, "ack_set"|"ack_clear", checkable.name, setTime)
* comment: SHA1(env, "comment_add"|"comment_remove", comment.name)
* downtime: SHA1(env, "downtime_start"|"downtime_end", downtime.name)
* flapping: SHA1(env, "flapping_start"|"flapping_end", checkable.name, startTime)
* notification: SHA1(env, "notification", notification.name, notificationType, sendTime)
* state: SHA1(env, "state_change", checkable.name, changeTime)
2021-11-02 15:00:03 +01:00
Alexander A. Klimov
5c44365c4e
Icinga DB: make icinga:history:stream:notification#id deterministic
...
... i.e. UUID -> SHA1(x..., send time) given that SHA1(x...) = notification id.
Rationale: allow both masters to write the same notification history concurrently (while
not in split-brain), so that REPLACE INTO deduplicates the same events written twice.
2021-11-02 15:00:03 +01:00
Alexander A. Klimov
c2422c56fe
Icinga DB: make icinga:history:stream:state#id deterministic
...
... i.e. UUID -> SHA1(x..., check time) given that SHA1(x...) = checkable id.
Rationale: allow both masters to write the same state history concurrently (while
not in split-brain), so that REPLACE INTO deduplicates the same events written twice.
2021-11-02 15:00:03 +01:00
Alexander Aleksandrovič Klimov
f5f8ccb1f4
Merge pull request #9020 from Icinga/feature/icingaeb-schema-version
...
Icinga DB: publish Redis schema version via XADD icinga:schema
2021-10-25 13:21:37 +02:00
Alexander A. Klimov
d8b4768471
Icinga DB init. dump: flush both buffered states and state checksums
...
not to dump x states, but only x - (x % bulk) state checksums.
2021-10-21 13:49:24 +02:00
Noah Hilverling
a7cbf50674
Merge pull request #9030 from Icinga/Al2Klimov-patch-1
...
Icinga DB: don't include checkable types in history IDs
2021-10-19 14:52:43 +02:00
Alexander A. Klimov
4b0688047e
Icinga DB: stream runtime state updates only to icinga:runtime:state
...
... where they belong to, not to icinga:runtime.
2021-10-18 18:11:30 +02:00
Alexander Aleksandrovič Klimov
e0339c387b
Icinga DB: don't include checkable types in history IDs
...
... as they’re unnecessary for being distinguish across types.
Services always have a ! in the name, hosts never do.
2021-10-11 16:14:30 +02:00
Alexander Aleksandrovič Klimov
30a5ba3961
Merge pull request #9002 from Icinga/feature/icingadb-remove-usernotification-stream
...
Icinga DB: remove usernotification history stream
2021-10-08 19:16:26 +02:00
Alexander Aleksandrovič Klimov
4190d58668
Merge pull request #9011 from Icinga/bugfix/icingadb-remove-zone-parent-key
...
Icinga DB: Remove unused Redis key 'icinga:zone:parent'
2021-10-08 17:19:51 +02:00
Noah Hilverling
750e64b974
Icinga DB: Remove unused Redis key 'icinga:zone:parent'
2021-10-08 12:06:14 +02:00
Julian Brost
df84a498f4
IcingaDB: actually write parent to parent_id of zones
...
This fixes that the code used the wrong variable. Previously, it was written to
Redis that each zone is its own parent (if it has a parent at all).
2021-10-08 11:15:54 +02:00
Alexander Aleksandrovič Klimov
ed50a9d529
Merge pull request #9001 from Icinga/feature/icingadb-add-user-ids-to-notification-history
...
Icinga DB: Write IDs of notified users into notification history stream
2021-10-01 17:42:48 +02:00
Alexander A. Klimov
0182d793ac
Icinga DB: publish Redis schema version via XADD icinga:schema
...
... to be able both to subscribe for its change and to just fetch it.
2021-10-01 15:58:57 +02:00
Alexander Aleksandrovič Klimov
6cf0673c11
Merge pull request #9010 from Icinga/feature/icingadb-scheduling_source
...
Make CheckResult#scheduling_source available to Icinga DB
2021-09-27 16:31:16 +02:00
Alexander A. Klimov
755fc72a66
Make CheckResult#scheduling_source available to Icinga DB
2021-09-22 16:57:49 +02:00
Julian Brost
6fc15449a8
Merge pull request #8953 from Icinga/bugfix/icinga-checksum-state-growing
...
Icinga DB: clean up vanished objects from icinga:checksum:*:state
2021-09-17 12:04:41 +02:00
Julian Brost
130b22e939
Icinga DB: remove usernotification history stream
...
These will be added to the normal notification stream so there is no more need
for this extra stream.
2021-09-15 14:47:25 +02:00
Julian Brost
81e5feeb08
Icinga DB: Write IDs of notified users into notification history stream
2021-09-15 14:45:35 +02:00
Noah Hilverling
95cdc00ad4
Merge pull request from GHSA-cxfm-8j5v-5qr2
...
Add TLS server certificate validation to ElasticsearchWriter, GelfWriter, InfluxdbWriter and Influxdb2Writer (v2)
2021-08-19 13:52:29 +02:00
Julian Brost
cb09d6833f
RedisConnection: remove now redundant setting of TLS verification parameters
...
This is now done in UnbufferedAsioTlsStream.
2021-08-13 17:24:24 +02:00
Alexander A. Klimov
70b4558a62
Icinga DB: introduce icinga:history:stream:downtime#scheduled_by
...
... with the Downtime#scheduled_by attribute.
2021-08-09 20:07:38 +02:00
Alexander A. Klimov
e3a5d613aa
Icinga DB: clean up vanished objects from icinga:checksum:*:state
...
... not to let it grow non-stop.
2021-08-05 11:32:47 +02:00
Alexander Aleksandrovič Klimov
40c186515b
Merge pull request #8942 from Icinga/bugfix/idb-hashes
...
Icinga DB: keep state checksums consistent
2021-07-29 21:54:58 +02:00
Julian Brost
6fa44c8e4e
Merge pull request #8941 from Icinga/bugfix/icingadb-init-all-connections-before-sync
...
Icinga DB: ensure all connections are ready on first use
2021-07-29 17:33:29 +02:00
Alexander Aleksandrovič Klimov
afca6c001e
Merge pull request #8916 from Icinga/feature/icingadb-last_comment_id
...
Icinga DB: introduce Checkable#last_comment_id
2021-07-29 17:29:51 +02:00
Alexander A. Klimov
8476627e91
Icinga DB: keep state checksums consistent
...
I.e. make hashes in hashmaps and stream the same.
2021-07-29 12:43:40 +02:00
Alexander A. Klimov
5c10fffa3b
Icinga DB: introduce Checkable#last_comment_id
2021-07-29 12:22:12 +02:00
Alexander A. Klimov
173a93c487
Split IcingaDB#SendStatusUpdate(), separate stream and history
2021-07-29 12:22:12 +02:00
Alexander Aleksandrovič Klimov
5923950e61
Merge pull request #8919 from Icinga/bugfix/idb-del-state-chksm
...
Icinga DB: HDEL also icinga:checksum:*:state, not only icinga:*:state
2021-07-29 11:08:33 +02:00
Julian Brost
929ebd0f6c
IcingaDB: start initial sync after all child connections are established
...
Icinga started the initial config sync right after the first Redis connection
was established. If any other connections would take longer to connect than
when it's first needed, queries were discarded.
2021-07-28 15:27:32 +02:00
Julian Brost
a50120c399
IcingaDB: start parent connection after children are initialized
...
The loop in the connected callback of the parent connection uses m_Rcons which
previously was only initialized after that connection was already started.
2021-07-28 15:27:20 +02:00
Julian Brost
f4b2bbc7af
Merge pull request #8940 from Icinga/bugfix/redisconnection-reset-callback
...
RedisConnection: copy callback before calling it
2021-07-28 15:19:26 +02:00
Julian Brost
9d5ae0f6fa
Merge pull request #8899 from Icinga/feature/icingadb-connect_timeout
...
Introduce IcingaDB#connect_timeout
2021-07-28 13:52:00 +02:00
Julian Brost
4c7199fd7d
RedisConnection: copy callback before calling it
...
This allows the callback to call RedisConnection::SetConnectedCallback() to set
another callback for this connection. This sets m_ConnectedCallback and thereby
destroys the std::function while it's running resulting in undefined behavior.
By operating on a copy, m_ConnectedCallback can be set without affecting the
currently running callback.
2021-07-28 11:34:17 +02:00
Noah Hilverling
ff2abaa687
Merge pull request #8917 from Icinga/bugfix/idb-state-del-prio
...
Icinga DB: HDEL from *:state with same prio as HSET
2021-07-28 11:08:10 +02:00
Alexander A. Klimov
0919df5aa1
Introduce IcingaDB#connect_timeout
2021-07-27 21:59:09 +02:00
Alexander Aleksandrovič Klimov
9169c805a8
Merge pull request #8933 from Icinga/bugfix/icinga-db-only-start-multiple-redis-connections-after-the-first-one-succeeded-8920
...
Icinga DB: only start multiple Redis connections after the first one succeeded
2021-07-27 21:52:21 +02:00
Alexander Aleksandrovič Klimov
4d2f694805
Merge pull request #8897 from Icinga/feature/icingadb-pass-db
...
RedisConnection: AUTH and SELECT
2021-07-27 21:51:46 +02:00
Alexander Aleksandrovič Klimov
2d75bbd8ed
Merge pull request #8915 from Icinga/bugfix/icingadb-prio-state
...
Icinga DB: priorize state > config
2021-07-27 20:22:26 +02:00
Noah Hilverling
dcb5fcc7ba
Merge pull request #8923 from Icinga/bugfix/idb-del-icinga-nextupdate-
...
Icinga DB: DEL icinga:nextupdate:* along with the other keys to delete
2021-07-27 19:05:43 +02:00
Noah Hilverling
07cb6cd1cb
Merge pull request #8930 from Icinga/bugfix/wq-balance
...
WorkQueue#ParallelFor(): optionally don't pre-glue items together to chunks of different size
2021-07-27 19:05:26 +02:00
Noah Hilverling
07145d2e61
Merge pull request #8913 from Icinga/feature/remove-child-downtimes
...
API Action "remove-downtime": Also remove child downtimes
2021-07-27 18:02:15 +02:00
Alexander A. Klimov
e45b43a4d9
Icinga DB: only start multiple Redis connections after the first one succeeded
...
refs #8920
2021-07-27 12:21:04 +02:00
Alexander A. Klimov
e1e8ec2ea2
RedisConnection: AUTH and SELECT
...
... or PING to trigger NOAUTH.
2021-07-27 12:05:27 +02:00
Alexander A. Klimov
fcda3a7283
Icinga DB: HDEL also icinga:checksum:*:state, not only icinga:*:state
...
... as they belong together.
2021-07-26 17:35:56 +02:00
Alexander A. Klimov
392fd8a75c
Icinga DB: HDEL from *:state with same prio as HSET
...
... to ensure the right modifications order per key.
2021-07-26 17:30:38 +02:00
Alexander A. Klimov
ae9b371128
Icinga DB: priorize state > config
...
I.e. do the following in parallel (highest priority first):
* Stream state changes to icinga:runtime:state
* Sync config and initial state,
then let queued runtime updates to the just synced state pass
2021-07-26 16:39:18 +02:00
Alexander Aleksandrovič Klimov
9684fe8141
Merge pull request #8544 from Icinga/feature/icingadb-tls
...
Icinga DB: support TLS
2021-07-26 15:50:52 +02:00
Alexander A. Klimov
497a8dd993
Icinga DB: DEL icinga:nextupdate:* along with the other keys to delete
...
... not on config dump finish.
2021-07-26 11:44:21 +02:00
Alexander A. Klimov
8731d84299
WorkQueue#ParallelFor(): optionally don't pre-glue items together to chunks of different size
...
... to equally distribute the load across the workers.
2021-07-26 11:40:43 +02:00
Noah Hilverling
7217959206
API Action 'remove-downtime': Also remove child downtimes
2021-07-23 13:53:44 +02:00
Alexander A. Klimov
8a30657ce9
Icinga DB: write state updates to icinga:runtime:state
...
... allowing the Go daemon to priorize state updates.
2021-07-23 11:52:28 +02:00
Alexander A. Klimov
37e53eaa68
Icinga DB: support TLS
2021-07-22 14:34:07 +02:00
Alexander A. Klimov
50bc7a7f3d
Icinga DB: HDEL also icinga:checksum:*, not only icinga:*
2021-07-22 14:13:12 +02:00