Commit Graph

5113 Commits

Author SHA1 Message Date
Jean Flach d104eb4ac1 Fix timeout 2019-11-02 14:00:23 +01:00
Jean Flach 6ce4612cd7 Export last hard/soft state dummies 2019-11-02 14:00:23 +01:00
Jean Flach e2caa47f18 Fix is_handled 2019-11-02 14:00:23 +01:00
Noah Hilverling 328adf1fc4 Add host/service state sync to acknowledgement 2019-11-02 14:00:23 +01:00
Jean Flach 916bfd20fb Update state sync 2019-11-02 14:00:23 +01:00
Noah Hilverling 9aec47efb3 Use OnStateChange instead of OnStateChanged 2019-11-02 14:00:23 +01:00
Jean Flach 02ecc3e445 Add additional fields 2019-11-02 14:00:23 +01:00
Jean Flach a7e615fbc0 Fix one unchecked checkresult access 2019-11-02 14:00:23 +01:00
Jean Flach 9b9cf6d5b0 Update sate sync
fix a crash, possibly two
2019-11-02 14:00:23 +01:00
Jean Flach d8737b238a Update state sync 2019-11-02 14:00:23 +01:00
Jean Flach 223ca6c6a0 Clean up code 2019-11-02 14:00:23 +01:00
Jean Flach f68ad634b2 Rename state stream keys 2019-11-02 14:00:23 +01:00
Jean Flach 3def496b62 Update state sync
Makes state serialization its own function to be used also when writing
out the initial state
2019-11-02 14:00:23 +01:00
Jean Flach fcb3752973 Remove debug log message 2019-11-02 14:00:23 +01:00
Jean Flach 3da4cef1e6 Update state sync 2019-11-02 14:00:23 +01:00
Jean Flach 2215e9e16f Implement minimal state sync 2019-11-02 14:00:23 +01:00
Jean Flach c825a3f4b5 Remove unnecessary parameter 2019-11-02 14:00:23 +01:00
Jean Flach 5f64d809d7 Check if RedisConnection exists before checking connection 2019-11-02 14:00:23 +01:00
Jean Flach a056e14834 Fix another RedisWriter crash
Same as the other fix, this makes us lose events
2019-11-02 14:00:23 +01:00
Jean Flach eec1928a0b Fix segfault on startup 2019-11-02 14:00:23 +01:00
Jean Flach 67208c4f07 Handle runtime config updates
fixes #37
2019-11-02 14:00:23 +01:00
Noah Hilverling f4145579ca Add missing include 2019-11-02 14:00:23 +01:00
Jean Flach 47905a25e8 Improve event payload
Adds host/service_id Acknowledgement events. AcknowledgementSet events also send the comment_id.

fixes #29
2019-11-02 14:00:23 +01:00
Jean Flach e889de966e Publish dump event
fixes #34
2019-11-02 14:00:23 +01:00
Jean Flach 5e3e114a16 Handle icingadb- / icinga-type mismatches
fixes servicedowntimes being written to hostdowntimes (and vice versa)
2019-11-02 14:00:23 +01:00
Jean Flach 3c651b4c99 Fix icingadb specific type names 2019-11-02 14:00:23 +01:00
Jean Flach 77ce8f67bd Add downtimes sync 2019-11-02 14:00:23 +01:00
Jean Flach 36588ce31a Code formatting 2019-11-02 14:00:23 +01:00
Jean Flach 1d21626b30 Code style 2019-11-02 14:00:23 +01:00
Jean Flach 0634e27d6d Add new connection handling 2019-11-02 14:00:23 +01:00
Jean Flach f89e649871 Add recursive callback to manage auth and db select 2019-11-02 14:00:23 +01:00
Jean Flach b59189b8d3 Simplify vector usage
Also leak less memory ;)
2019-11-02 14:00:23 +01:00
Jean Flach 6aaa35a0a6 Rewrite the RedisWriter
There should be more atomic commits but the whole thing was a mess. This
commit changes the synchrounous Redis connection into an asynchronous
one in its own class RedisConnection.
The RedisConnection uses a Workqueue with commands to fire against the
Redis server. When a response is required a callback must be supplied,
refer to RedisWriter::RedisGet().

Known Issues:
- Authentication has no error handling and can break the connection
- Error handling in general is iffy due to the nature of the async redis
connection
- Getting a reply out of RedisConnection is not trivial
- HandleRW... sunt dracones
2019-11-02 14:00:23 +01:00
Jean Flach 64515b81e3 Add disconnect 2019-11-02 14:00:23 +01:00
Jean Flach d96dcf869e Add RedisConnection object
This works using an async Redis connection. Multiple connections are not
possible. The connection is fed from a workqueue filled with
RedisCommands in the way of a vector of strings.
2019-11-02 14:00:23 +01:00
Jean Flach 0456298c58 Reformat code
CLion is now pretty close at what we use with Icinga, other changes do
make sense to me.
2019-11-02 14:00:23 +01:00
Jean Flach 8f411c7475 Support comments for icingadb
This splits comments into Host and Service comments
2019-11-02 14:00:23 +01:00
Alexander A. Klimov ed3db5b491 Fix elephant oversight 2019-11-02 14:00:23 +01:00
Jean Flach 315e9ffad8 Stringify flat values 2019-11-02 14:00:23 +01:00
Alexander A. Klimov d0a45521a9 Unify schema structure
refs #15
2019-11-02 14:00:23 +01:00
Jean Flach c4962559ff Remove parent_checksum
parent_checksum is always the first element in all_parents_checksums
2019-11-02 14:00:23 +01:00
Jean Flach a47e16fb5b Rename command_checksums 2019-11-02 14:00:23 +01:00
Jean Flach 65c38a3958 ignore user/usergroup for property checksum 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 3a8cf8d74d RedisWriter: dump missing checksums for notifications
refs #18
2019-11-02 14:00:23 +01:00
Alexander A. Klimov 4d40293217 RedisWriter: dump all_parents_checksum and all_parents_checksums for zones 2019-11-02 14:00:23 +01:00
Alexander A. Klimov cd05240624 RedisWriter: dump period_checksum for users 2019-11-02 14:00:23 +01:00
Michael Friedrich de99d68351 Only use the type for commands in the object identifier checksum 2019-11-02 14:00:23 +01:00
Jean Flach c70316a835 Sync ranges_checksum for timeperiods
Signed-off-by: Michael Friedrich <michael.friedrich@icinga.com>
2019-11-02 14:00:23 +01:00
Alexander A. Klimov 3e0a2f59e2 RedisWriter: make config object identifiers type-aware
SHA1(PackObject([Environment, Type, __name]))
2019-11-02 14:00:23 +01:00
Alexander A. Klimov b04b1d954e RedisWriter: compute checksums of command arguments and env vars
refs #14
2019-11-02 14:00:23 +01:00
Alexander A. Klimov a908f84750 Revert unneccessary dynamic_pointer_cast 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 1b81b85582 RedisWriter: dump zone_checksum for endpoints
refs #11
2019-11-02 14:00:23 +01:00
Michael Friedrich d65fb529eb Simplify host_checksum 2019-11-02 14:00:23 +01:00
Jean Flach d09a435fe3 Export usergroup(s)_checksum(s)
Warning: ugly code
2019-11-02 14:00:23 +01:00
Michael Friedrich 876d98a13f Add 'parent_checksum' for zone objects 2019-11-02 14:00:23 +01:00
Michael Friedrich bb2e7854fd Add command_endpoint, event/check_command, action/notes_url, icon_image checksums for host/service objects 2019-11-02 14:00:23 +01:00
Michael Friedrich 4fb73a44bd Add 'host_checksum' for services 2019-11-02 14:00:23 +01:00
Michael Friedrich 48f1ce215b Drop obsolete delete query on config dump 2019-11-02 14:00:23 +01:00
Michael Friedrich e31679b2de Update Redis prefix namespaces and move their declaration into the class
icinga:config:object:<type>:<sha1>
icinga:config:checksum:<type> <sha1>
icinga:config:customvar:<type> <sha1>

icinga:status:object:<type>:<sha1>

This avoids multiple definitions all over the code. Maybe we want
to make the schema configurable at some point.
2019-11-02 14:00:23 +01:00
Michael Friedrich 3ce8f5599e Fix missing object locks 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 413e351805 RedisWriter: dump custom vars verbosely 2019-11-02 14:00:23 +01:00
Michael Friedrich e4355f27c9 Send zone_checksum globally, if 'zone' attribute is set 2019-11-02 14:00:23 +01:00
Jean Flach a4b0f9125e Only sync zone_checksum when object in zone 2019-11-02 14:00:23 +01:00
Jean Flach 85f621cb90 Add zone checksum for redis to checkables 2019-11-02 14:00:23 +01:00
Michael Friedrich c5e913dfd4 Fix error handling for GetSubscriptionTypes() 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 50d83e850f RedisWriter: dump endpoints' zones' identifiers (zone_checksum) 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 550e385b9e RedisWriter: fix checksums of disappeared config objects not being deleted 2019-11-02 14:00:23 +01:00
Alexander A. Klimov d15769fa34 RedisWriter: fix disappeared config objects not being deleted 2019-11-02 14:00:23 +01:00
Alexander A. Klimov e7411ea158 RedisWriter#UpdateAllConfigObjects(): use one transaction per config object type 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 1ad9c80143 RedisWriter: sync all config objects atomically 2019-11-02 14:00:23 +01:00
Alexander A. Klimov c92827fa5e RedisWriter: dump monitored objects' groups' identifiers (group_checksums) 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 724ce1f172 RedisWriter: dump also environment_checksum (per config object) 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 4eee9572ab RedisWriter: identify config objects by SHA1(PackObject([Environment, __name])) 2019-11-02 14:00:23 +01:00
Michael Friedrich fae5b88e48 Add all stats similar to /v1/status 2019-11-02 14:00:23 +01:00
Michael Friedrich d7f6d7994b Move stats into a separate file 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 3229982bee RedisWriter: compute name_checksum as expected 2019-11-02 14:00:23 +01:00
Alexander A. Klimov f05a5eecc2 Centralize identifier computation 2019-11-02 14:00:23 +01:00
Alexander A. Klimov a5aef627f8 RedisWriter: use __name as object key 2019-11-02 14:00:23 +01:00
Alexander A. Klimov 3ea3b2ba27 RedisWriter: checksum package, source_location and templates separately in metadata_checksum 2019-11-02 14:00:23 +01:00
Alexander A. Klimov e980485e23 RedisWriter: Explicitly checksum Zone#endpoints 2019-11-02 14:00:23 +01:00
Alexander A. Klimov dcdf6b8a44 RedisWriter: Exclude explicitly checksummed properties from properties_checksum 2019-11-02 14:00:23 +01:00
Alexander A. Klimov dc73db01b8 RedisWriter: use one checksum algo for everything 2019-11-02 14:00:23 +01:00
Alexander A. Klimov b32b81d957 RedisWriter: Pack objects consistently for hashing 2019-11-02 14:00:23 +01:00
Michael Friedrich 60a5a14aa2 Checksums 2019-11-02 14:00:23 +01:00
Michael Friedrich 79f06a90d4 WIP 2019-11-02 14:00:23 +01:00
Michael Friedrich 782486ce9c Ensure that arrays are sorted for checksum calculation 2019-11-02 14:00:23 +01:00
Michael Friedrich 26a2095426 Implement config object check sums, shot one 2019-11-02 14:00:23 +01:00
Michael Friedrich 8c38c7eddc Ensure that type names are lower cases for Redis lookups 2019-11-02 14:00:23 +01:00
Michael Friedrich 33a00e4b5a Move UpdateObjectAttrs into the objects scope 2019-11-02 14:00:23 +01:00
Michael Friedrich f715d479e7 Rename source file 2019-11-02 14:00:23 +01:00
Michael Friedrich ddf2aea065 Compile redis into the icinga2 binary; apply more C++11 code changes 2019-11-02 14:00:23 +01:00
Michael Friedrich 61edfcb68d Apply code style 2019-11-02 14:00:23 +01:00
Jean Flach 5eab856673 Publish events to one enpoint 2019-11-02 14:00:23 +01:00
Jean Flach c8561676ec Add limit for subscriptions 2019-11-02 14:00:23 +01:00
Gunnar Beutner f631bf8cb5 Use sets for subscriptions
refs #5656
2019-11-02 14:00:23 +01:00
Gunnar Beutner 06211c3ac7 Implement support for the new config/state schema
fixes #5671
2019-11-02 14:00:23 +01:00
Gunnar Beutner 1725038ca8 Implement pipelining support for Redis queries
fixes #5670
2019-11-02 14:00:23 +01:00
Jean Flach 7c8412928e Subscriptions
fixes #5656
2019-11-02 14:00:23 +01:00
Jean Flach 1ada53dd57 Trim event queue
TODO: make configurable

refs #5119
2019-11-02 14:00:23 +01:00
Gunnar Beutner b6c86f98ec Clean up the code a bit 2019-11-02 14:00:23 +01:00
Gunnar Beutner fff1049ba0 Ensure that the WorkQueue name is set 2019-11-02 14:00:23 +01:00
Gunnar Beutner b75e21a998 Redis support (WIP) 2019-11-02 14:00:23 +01:00
Michael Friedrich 7e369c0443
Merge pull request #7546 from Icinga/feature/zone-in-zone-7530
DaemonUtility#ValidateConfigFiles(): re-try unknown zones once they may have become known
2019-10-31 16:34:08 +01:00
Alexander Aleksandrovič Klimov 3804f4edcc I like to move it, move it 2019-10-28 13:46:33 +01:00
Michael Friedrich e0ef5fe9de
Merge pull request #7458 from Icinga/feature/config-parser-cleanup
Config parser: introduce optional_newlines
2019-10-22 17:29:59 +02:00
Michael Friedrich 3b49c10d0a
Merge pull request #7584 from Icinga/bugfix/cluster-sync-checksums-timestamps
Cluster Config Sync: Check the timestamp prior to config file checksums for changes
2019-10-22 17:22:27 +02:00
Michael Friedrich 6103f53c5b
Merge pull request #7541 from Icinga/bugfix/heredoc-eof
Config lexer: complain on EOF in heredocs, i.e. {{{abc<EOF>
2019-10-22 17:19:27 +02:00
Michael Friedrich cb20b4829a Cluster Config Sync: Check the timestamp prior to config file checksums
Otherwise old configuration received from a secondary master/satellite
could always trigger a config change & reload.
2019-10-22 14:07:10 +02:00
Alexander A. Klimov 768044a754 Replace std::shared_ptr<NamespaceValue> with NamespaceValue::Ptr
refs #7361
2019-10-21 17:10:51 +02:00
Alexander A. Klimov aa4cad7482 Replace std::shared_ptr<Expression> with Expression::Ptr
refs #7361
2019-10-21 17:10:51 +02:00
Alexander A. Klimov 4438ccbf9e Introduce SharedObject
refs #7361
2019-10-21 17:10:51 +02:00
Alexander A. Klimov ba1ce9c853 Replace std::shared_ptr<boost::asio::ssl::context> with Shared<boost::asio::ssl::context>::Ptr 2019-10-21 16:12:46 +02:00
Alexander A. Klimov a1fef92835 Replace std::shared_ptr<boost::asio::ip::tcp::acceptor> with Shared<boost::asio::ip::tcp::acceptor>::Ptr 2019-10-21 16:12:46 +02:00
Alexander A. Klimov 26ce2cfb73 Replace std::shared_ptr<AsioTcpStream> with Shared<AsioTcpStream>::Ptr 2019-10-21 16:12:46 +02:00
Alexander A. Klimov a1683568a1 Replace std::shared_ptr<AsioTlsStream> with Shared<AsioTlsStream>::Ptr 2019-10-21 16:12:35 +02:00
Alexander A. Klimov b046ffe152 Introduce Shared<T> 2019-10-21 11:07:42 +02:00
Michael Friedrich 3e6fc9bfa1
Merge pull request #7457 from Icinga/feature/config-parser-malloc
Config parser: save some memory allocations
2019-10-17 17:19:30 +02:00
Michael Friedrich e7c07062f8 Avoid syncing .authorititative marker received from < 2.11 parent nodes 2019-10-02 10:49:02 +02:00
Alexander A. Klimov eacdb3dac7 DaemonUtility#ValidateConfigFiles(): re-try unknown zones once they may have become known
refs #7530
2019-09-30 10:26:13 +02:00
Alexander A. Klimov 672f497c3a Config lexer: complain on EOF in heredocs, i.e. {{{abc<EOF> 2019-09-26 13:10:19 +02:00
Michael Friedrich f0fcfdf910
Merge pull request #7538 from Icinga/bugfix/dependency-ignore_on_error-7536
Dependency#OnAllConfigLoaded(): don't link *this with the child if *this is going to be dropped
2019-09-25 12:12:22 +02:00
Michael Friedrich 4e23f954fa
Merge pull request #7529 from Icinga/bugfix/activestageoverride-7521
WarnOnImplicitlySetGlobalVar(): warn only on sins inside actual DSL code
2019-09-25 12:11:26 +02:00
Alexander A. Klimov 7668314b4a Dependency#OnAllConfigLoaded(): don't link *this with the child if *this is going to be dropped
refs #7536
2019-09-25 11:30:50 +02:00
Alexander A. Klimov b8d495ae07 Introduce Checkable#next_update 2019-09-25 10:44:49 +02:00
Alexander A. Klimov b4e3736e31 WarnOnImplicitlySetGlobalVar(): warn only on sins inside actual DSL code 2019-09-23 15:09:57 +02:00
Michael Friedrich 617f1d1333 Improve error message for command endpoint checkable's requiring a zone
fixes #7514
2019-09-23 09:41:08 +02:00
Michael Friedrich eddb40a913 CSR Auto-signing: Add debug logging for skipped signing 2019-09-18 11:53:58 +02:00
Michael Friedrich d3eb62301e API: Add AES128-GCM-SHA256 compatible cipher for el6
fixes #7501
2019-09-16 14:19:22 +02:00
Michael Friedrich 9ec246a2f4 Revert: Always reset Boost beast buffer in HttpServerConnection#ProcessMessages #7476
Not a simple revert but also adds a comment for the buffer.

refs #7476
2019-09-12 17:00:17 +02:00
Michael Friedrich 2c0e0da2d9 Introduce IoEngine::SpawnCoroutine wrapping asio::spawn and Boost exceptions
This is required to

- catch all exceptions and wrap them into Boost exceptions. They
are the only ones allowed with Boost.Coroutine.
- set a dedicated coroutine stack size for Windows.

refs #7431
2019-09-09 16:40:35 +02:00
Michael Friedrich 5fa7331cc9 Quality: Replace deprecated Boost IO service code
https://github.com/boostorg/asio/issues/110
https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/example/cpp03/services/logger_service.hpp
2019-09-09 15:27:57 +02:00
Alexander A. Klimov 0a9563b3db HttpServerConnection#ProcessMessages(): avoid I/O if shutting down
refs #7431
2019-09-09 13:37:44 +02:00
Alexander A. Klimov b85b8b9697 HttpServerConnection#ProcessMessages(): avoid I/O after boost::asio::error::operation_aborted
refs #7431
2019-09-09 13:29:47 +02:00
Alexander A. Klimov dfaeb88ac3 {HttpServer,JsonRpc}Connection#Disconnect(): cancel I/O ops ASAP
refs #7431
2019-09-09 13:11:51 +02:00
Michael Friedrich b3c48e7520
Merge pull request #7485 from Icinga/bugfix/api-disconnect-defer
Avoid the Defer-Disconnect destructor pattern with Boost.Coroutines
2019-09-09 11:41:34 +02:00
Michael Friedrich c5aa978912 Rewrite error handling in HttpServerConnection#EnsureValidHeaders()
Throwing local exceptions unnecessarily pollutes the exception
stack with immediate unwinding. Avoid this pattern at all cost within
Boost.Coroutines. MSVC may handle exceptions differently and cause
problems with stack unwinding.

refs #7431
refs #7351
2019-09-09 11:03:21 +02:00
Michael Friedrich 17d4d17307 Avoid the Defer-Disconnect destructor pattern with Boost.Coroutines
Exceptions in Disconnect() might be thrown (this has been reworked
into error_code locally) which are swallowed inside the Destructor
for being dangerous. On the other hand, swallowing them may
corrupt the stack unwinding operation from the coroutine layer.

The best is to avoid Defer inside lib/remote and call Disconnect()
directly after breaking from other operations.

refs #7351
refs #7431
2019-09-09 10:57:13 +02:00
Michael Friedrich ebb0826be0 JsonRpcConnection: Don't swallow exceptions in Boost.Coroutine
refs #7351
2019-09-09 09:26:12 +02:00
Michael Friedrich cdacd545c6
Merge pull request #7477 from Icinga/bugfix/api-boost-exceptions-errors
HttpServerConnection: Prefer error codes over Boost exceptions
2019-09-06 10:22:42 +02:00
Michael Friedrich a208f7baf0 HttpServerConnection: Prefer error codes over Boost exceptions
When run within a coroutine, exceptions on Windows may influence
bad behaviour here. Instead, we'll check for the error code
and extract the message from memory. In contrast to exceptions
which are stored on the stack frame and then return, this costs
a little more memory but simplifies the logic.

This doesn't fix the linked issue, but is related to the analysis.

refs #7431
2019-09-06 10:06:17 +02:00
Michael Friedrich eabba2de42 Always reset Boost beast buffer in HttpServerConnection#ProcessMessages
refs #7431
2019-09-06 09:31:16 +02:00
Michael Friedrich 1f50a705f9 Adjust code comment for Logger->Flush() on Windows 2019-09-06 09:24:34 +02:00
Michael Friedrich 8a07b64800
Merge pull request #7459 from Icinga/feature/expose-problem-handled-counts
Metrics: Expose problem/handled counts for hosts/services
2019-08-30 09:04:03 +02:00
Michael Friedrich 55d7da30ca Metrics: Expose problem/handled counts for hosts/services
With the addition of problem/handled as checkable runtime
attributes in #7096 we should also expose them via CIB
into

- icinga check
- /v1/status/CIB
- IcingaApplication runtime macros

This originates from a request by @phil-or at the recent
Icinga meetup in Linz.
2019-08-29 17:04:23 +02:00
Alexander A. Klimov 360cb50c9e Config parser: inline arraysep 2019-08-29 14:06:01 +02:00
Alexander A. Klimov fd88ac2f83 Config parser: introduce optional_newlines 2019-08-29 14:05:58 +02:00
Alexander A. Klimov 203482a675 Config parser: save some memory allocations 2019-08-29 10:54:54 +02:00
Michael Friedrich bea8527083
Merge pull request #7356 from Icinga/bugfix/influxdbwriter-clone
InfluxdbWriter: clone less
2019-08-28 09:16:19 +02:00
Michael Friedrich f62db49d3e
Merge pull request #7451 from Icinga/bugfix/update-docs
Update docs: Fix online URL, cipher list
2019-08-28 08:59:28 +02:00
Michael Friedrich 5ed91098d2
Merge pull request #7445 from Icinga/bugfix/ddos-reconnect-7444
JsonRpcConnection#Disconnect(): unregister the connection ASAP
2019-08-28 08:59:14 +02:00