Commit Graph

5132 Commits

Author SHA1 Message Date
Jean Flach d2dc0047a3 Lock before queueing multiple queries 2019-11-02 14:00:23 +01:00
Jean Flach 03a61347cd Fix Service's name 2019-11-02 14:00:23 +01:00
Jean Flach 037357aea5 Add severity 2019-11-02 14:00:23 +01:00
Jean Flach 57b9fc94c3 Remove is_active_check 2019-11-02 14:00:23 +01:00
Jean Flach 6705158d31 Remove unused variable 2019-11-02 14:00:23 +01:00
Jean Flach accadb5dfb Only dump relevant object types 2019-11-02 14:00:23 +01:00
Jean Flach dc5dc46364 Use ReflectionType instead of dynamic casts 2019-11-02 14:00:23 +01:00
Jean Flach 5cfd3c1ab0 Rewrite config dump 2019-11-02 14:00:23 +01:00
Jean Flach e90fb43b91 Fix empty perf data strings 2019-11-02 14:00:23 +01:00
Jean Flach 446796dadb Fix output and longOutput 2019-11-02 14:00:23 +01:00
Jean Flach 50aa0eb1d3 Fix command line string 2019-11-02 14:00:23 +01:00
Jean Flach 553f6f6ba9 Change commandline and performancedata 2019-11-02 14:00:23 +01:00
Noah Hilverling 3439ea755f Fix that state does not get synced on acknowledgement removal 2019-11-02 14:00:23 +01:00
Noah Hilverling 992727707d Redis: Encode check command 2019-11-02 14:00:23 +01:00
Jean Flach 08bfbbc070 Encode perfdata 2019-11-02 14:00:23 +01:00
Jean Flach 933de15c36 Remove TODO 2019-11-02 14:00:23 +01:00
Noah Hilverling 3fb3e8bb6d Remove dev debug log 2019-11-02 14:00:23 +01:00
Noah Hilverling 2202bde56c Add downtime handlers to state sync 2019-11-02 14:00:23 +01:00
Jean Flach af05a354fa Stop json-encoding everything 2019-11-02 14:00:23 +01:00
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