utils llist: Removed sdb_ prefix from private functions.
For consistency!
For consistency!
plugin: Do not expect all callbacks to have a plugin context assigned.
For callbacks not registered from a plugin, we don't have a context. For
example, the frontend's connection logger callback does not have a context.
For callbacks not registered from a plugin, we don't have a context. For
example, the frontend's connection logger callback does not have a context.
plugin: Unset the plugin context before unregistering a plugin.
Else, the context is still considered to be in use and, thus, won't be removed
from the global plugin (context) list.
Else, the context is still considered to be in use and, thus, won't be removed
from the global plugin (context) list.
plugin: Log to stderr if no logger has been registered.
Check the length of the list rather than replying on it being uninitialized.
Check the length of the list rather than replying on it being uninitialized.
plugin: Let ctx_create() use ctx_set().
This ensures consistent handling of reference counts.
This ensures consistent handling of reference counts.
plugin: Split sdb_plugin_load() into multiple functions.
… to make it easier to reuse parts of the function.
… to make it easier to reuse parts of the function.
plugin: Fixed detection of plugins loaded twice.
This was missing in commit fdfe2a68ba1838cdb1c34d3275d129fb217fbd9d.
This was missing in commit fdfe2a68ba1838cdb1c34d3275d129fb217fbd9d.
plugin: Keep a global reference of a plugin context if it's still in use.
D'oh!
D'oh!
plugin: Increment ref-count for a context stored in the TSD.
… and release it when removing it from the TSD. While this shouldn't matter
when everything is done right, this ensures that memory management is done
right.
… and release it when removing it from the TSD. While this shouldn't matter
when everything is done right, this ensures that memory management is done
right.
plugin: Only log a message when actually unloading a module.
plugin: Unload (dlclose) a plugin when it's no longer used.
Do so, if the init callback failed.
Do so, if the init callback failed.
plugin: Name the plugin context after the actual module name.
That is, the name as specified by the user without '::' replaced by '/'.
The latter is only used for loading the shared object by file-name.
That is, the name as specified by the user without '::' replaced by '/'.
The latter is only used for loading the shared object by file-name.
sysdbd: Fixed a config parser error message.
plugin: Keep a usage counter for each plugin.
Also, let plugin_load return early if the plugin is already loaded.
This is mostly in preparation for future improvements around plugin handling.
Also, let plugin_load return early if the plugin is already loaded.
This is mostly in preparation for future improvements around plugin handling.
sysdbd: Moved main loop handling into a separate function.
This will allow for easier restart of the main loop.
This will allow for easier restart of the main loop.
llist_test: Removed "llist" from all test names.
No need to use overly long names.
No need to use overly long names.
llist utils: Added sdb_llist_remove_by_name().
This function removes the first entry with the specified name.
This function removes the first entry with the specified name.
llist_test: Removed "sdb" from test names.
frontend: Force-close the connection in sdb_connection_close().
Previously, it would still be kept open if someone else referenced the object.
Previously, it would still be kept open if someone else referenced the object.
Frontend: Improve debug log when destroying a connection.
The file-descriptor associated with the connection might not be open any more
and, thus, be -1. Instead of using that in the message, use the connection's
object name which includes the file-descriptor as used when accepting the
connection.
The file-descriptor associated with the connection might not be open any more
and, thus, be -1. Instead of using that in the message, use the connection's
object name which includes the file-descriptor as used when accepting the
connection.
frontend: Fixed a memory leak in the connection context handler.
Previously, the ownership was not taken away from the thread-specific data
aftter removing the connection from the current context, thus leaking each
connection object.
Previously, the ownership was not taken away from the thread-specific data
aftter removing the connection from the current context, thus leaking each
connection object.
Merged branch 'master' of git://git.tokkee.org/sysdb.
sysdbd: Ignore SIGPIPE (e.g. when a client connection was aborted).
frontend: Be more robust in case of failed connections.
Make sure not to write to a failed connection, most notably, don't try to log
to a failed connection.
Make sure not to write to a failed connection, most notably, don't try to log
to a failed connection.
frontend: Close a connection when receiving an exception of the fd.
sysdb: Added support for the -c <cmd> option.
This option (which may be specified multiple times) may be used to send
commands to the server in a non-interactive way. After handling the reply from
the last command, the process exits.
This option (which may be specified multiple times) may be used to send
commands to the server in a non-interactive way. After handling the reply from
the last command, the process exits.
sock.h: Fixed documentation of sdb_client_send() return values.
core: Allow objects to have the same size as sdb_object_t.
That is, allow minimalistic objects which only have a name.
That is, allow minimalistic objects which only have a name.
sysdb: Let sdb_command_print_reply() accept client instead of input objects.
This is more flexible.
This is more flexible.
Travis: Only run coveralls when using gcc.
We don't have any gcov information in any other case.
We don't have any gcov information in any other case.
Travis: Don't use 'coveralls --verbose'.
coveralls reports work fine now, so we don't need this anymore.
coveralls reports work fine now, so we don't need this anymore.
README: Added links to travis-ci and coveralls.
sysdbd(1): Fixed typo.
Added sysdb(1) manpage and updated sysdb help output.
Travis: Don't use --use-mirrors with pip.
It's been deprecated and I think we don't need it ;-)
It's been deprecated and I think we don't need it ;-)
Travis; Pass --build-root to coveralls.
Else, it cannot find the right source files.
Else, it cannot find the right source files.
Travis: Display information about cpp-coveralls after installing it.
t/coverage.sh: Restore t/cibuild.sh in the temp directory.
This is to avoid the version being marked as dirty.
This is to avoid the version being marked as dirty.
store_lookup_test: Added a more complex parser/lookup test.
store_lookup: Added "tostring" methods for matcher objects.
This is meant for logging and debugging. For now, it's used in tests to check
parsed and compiled matchers.
This is meant for logging and debugging. For now, it's used in tests to check
parsed and compiled matchers.
store_lookup_test: Fixed user-data passed to the lookup callback.
parser: Make sure that each comparator matcher is a host matcher.
So far, 'NOT (service|attribute).<attr> <cmp> <value>' matches did not work
correctly, because the object matcher was not correctly wrapped into a host
matcher. Since we do not currently support querying any object types besides
hosts, this was wrong.
The respective code has been moved into sdb_store_matcher_parse_cmp() which
also implements and checks the restriction on matching host objects only.
A new set of tests has been introduced which exposed this problem and which
(roughly) verifies the result of a lookup using a parsed matcher.
So far, 'NOT (service|attribute).<attr> <cmp> <value>' matches did not work
correctly, because the object matcher was not correctly wrapped into a host
matcher. Since we do not currently support querying any object types besides
hosts, this was wrong.
The respective code has been moved into sdb_store_matcher_parse_cmp() which
also implements and checks the restriction on matching host objects only.
A new set of tests has been introduced which exposed this problem and which
(roughly) verifies the result of a lookup using a parsed matcher.
frontend/parser_test: Cover more basic expressions.
plugin: Removed obsolete TODO note.
frontend: Actually implement support for the NOT operator.
core, frontend: Added !=, !~, and NOT operators.
store_lookup: Added sdb_store_inv_matcher().
This creates a matcher objects which matches the inverse (logical NOT) of the
specified matcher.
This creates a matcher objects which matches the inverse (logical NOT) of the
specified matcher.
frontend: Let the parser support brackets in matcher expressions.
frontend: Fixed memory holes in the parser.
store: Don't change the interval if the new interval is zero.
If the interval is zero, multiple updates happened at the same time. This does
not affect the interval at which the object is updated in the backend, though.
If the interval is zero, multiple updates happened at the same time. This does
not affect the interval at which the object is updated in the backend, though.
parser_test: Check operator precedence.
parser_test: Check matcher type returned by sdb_fe_parse_matcher().
frontend parser: Added support for AND and OR matchers.
frontend: Updated unit-tests for expression related parsing.
frontend: Accept compare matchers as expressions.
… replacing the current placeholder.
For now, this is specific to '=' (equal) and '=~' (regex) comparison.
… replacing the current placeholder.
For now, this is specific to '=' (equal) and '=~' (regex) comparison.
frontend: Don't ignore single characters in the scanner.
This would lead to those characters be silently ignored at any place in the
input stream.
This would lead to those characters be silently ignored at any place in the
input stream.
store: Added sdb_store_matcher_parse_cmp().
This function parses simple matcher compare expressions (<obj_type>.<attr>
<op> <value>).
This function parses simple matcher compare expressions (<obj_type>.<attr>
<op> <value>).
store: Moved matcher types to store-private.h.
collectd::unixsock backend: Simplified host updates.
Also, don't do duplicate updates in a single iteration. This caused bad
startup effects for the interval calculation.
Later, we should make the core more robust in that respect, I guess.
Also, don't do duplicate updates in a single iteration. This caused bad
startup effects for the interval calculation.
Later, we should make the core more robust in that respect, I guess.
store_test: Added a test for interval calculation.
store: Include update interval in the JSON serialization.
core/time: Added sdb_strfinterval().
This function formats a time interval using the format 1Y2M3D4h5m6.7s.
This function formats a time interval using the format 1Y2M3D4h5m6.7s.
store: Fixed a conversion warning reported by GCC.
store: Calculate and store each objects update interval.
The interval is calculated as the moving average of the incoming update
intervals. This should also work fine for out-of-order updates or updates from
multiple sources.
The interval is calculated as the moving average of the incoming update
intervals. This should also work fine for out-of-order updates or updates from
multiple sources.
frontend: Let LIST not include details.
Now that we have FETCH and LOOKUP, list should only provide basic information
(name and last_update).
Now that we have FETCH and LOOKUP, list should only provide basic information
(name and last_update).
parser_test: Added simple LOOKUP parser tests.
frontend: Added LOOKUP support to the connection handler.
For now, the wire format is: <CONNECTION_LOOKUP>;<len>;<expression>
For now, the wire format is: <CONNECTION_LOOKUP>;<len>;<expression>
frontend: Added simple 'LOOKUP <type> WHERE <expression>' query.
This query command may be used to retrieve a list of detailed host information
for each host matching the specified expression. For now, querying hosts is
supported only.
This query command may be used to retrieve a list of detailed host information
for each host matching the specified expression. For now, querying hosts is
supported only.
store: Let sdb_store_matcher_matches return true if it matches.
Rather than using 0 for matches and -1 else.
Rather than using 0 for matches and -1 else.
store: Added sdb_store_lookup().
This function looks up objects from the store which match a user-specified
matcher. For each such object, a user-specified callback is executed.
This function looks up objects from the store which match a user-specified
matcher. For each such object, a user-specified callback is executed.
store: Added sdb_store_iterate().
This function iterates over all (host, for now) objects in the store and calls
a user-specified callback for each.
This function iterates over all (host, for now) objects in the store and calls
a user-specified callback for each.
grammar.y: Added some (very) short documentation for each statement.
parser_test: Fixed a sign-compare warning/error on GCC.
frontend: Require strings instead of identifiers.
… for host names and name matchers. Identifiers were used as an early
work-around but they are not valid in those places.
… for host names and name matchers. Identifiers were used as an early
work-around but they are not valid in those places.
frontend: Added very simple single-quoted string support.
No escape sequences whatsoever are supported so far but except for that any
single-quoted strings which do not contain single quotes, can be used.
FETCH now supports host names specified as strings as well.
No escape sequences whatsoever are supported so far but except for that any
single-quoted strings which do not contain single quotes, can be used.
FETCH now supports host names specified as strings as well.
frontend: Free dynamically allocated memory in the parser.
frontend: Added FETCH support to the connection handler.
The wire format is: <CONNECTION_FETCH>;<len>;<host>
The wire format is: <CONNECTION_FETCH>;<len>;<host>
parser_test: Check the node's command type.
frontend: Added 'FETCH <name>' query command.
For now, <name> may only be a simple identifier.
For now, <name> may only be a simple identifier.
object: Added sdb_object_create_dT() macro.
This may be used to create a simple dynamic object of a specified type.
Dynamic type means that it uses a destructor.
This may be used to create a simple dynamic object of a specified type.
Dynamic type means that it uses a destructor.
object: Let create_simple() accept an optional destructor.
This is still simple but it allows for some more dynamic.
This is still simple but it allows for some more dynamic.
frontend: Let the parser not accept other grammars in default mode.
utils llist: Let llist_get() increment the reference count.
This feels more consistent.
This feels more consistent.
frontend parser: Added support for parsing single expressions.
The parser has been extended to support different modes. In SDB_PARSE_EXPR
mode, a single expression will be accepted as a start condition. The new
function sdb_fe_parse_matcher() uses this to parse expressions.
For now, this implements only the basic framework. Any identifier will be
parsed as a simple name matcher expression.
The parser has been extended to support different modes. In SDB_PARSE_EXPR
mode, a single expression will be accepted as a start condition. The new
function sdb_fe_parse_matcher() uses this to parse expressions.
For now, this implements only the basic framework. Any identifier will be
parsed as a simple name matcher expression.
t/cibuild.sh: Use ./configure --enable-standards.
configure: Don't use -pedantic.
Else, GCC will complain about "ISO C forbids conversion of object pointer to
function pointer type", even for casting function points to or from void
pointers. This is allowed by POSIX, though, and required, for example, for
dlsym() to work.
Else, GCC will complain about "ISO C forbids conversion of object pointer to
function pointer type", even for casting function points to or from void
pointers. This is allowed by POSIX, though, and required, for example, for
dlsym() to work.
configure: Make "standards" and "hardening" flags part of STRICT_CFLAGS.
Most importantly, don't assign them to CFLAGS which might be overwritten when
running make, thus leaving out the flags which were originally requested to be
used.
Most importantly, don't assign them to CFLAGS which might be overwritten when
running make, thus leaving out the flags which were originally requested to be
used.
configure: Disable -Wsign-conversion.
It may cause problems in expanded macros from libc.
It may cause problems in expanded macros from libc.
configure: Request X/Open 7 (XSI) compliance.
This is required for strndup().
This is required for strndup().
configure: Include _BSD_SOURCE in standards related defines.
Else, GNU libc does not define strcasecmp() even though it conforms to
POSIX.1-2001.
Else, GNU libc does not define strcasecmp() even though it conforms to
POSIX.1-2001.
Removed semicolon from SDB_PLUGIN_MAGIC definition.
Rather, the semicolon is added when using the define.
Rather, the semicolon is added when using the define.
Fixed (pedantic) void-pointer to function-pointer cast warnings.
Include config.h in source files.
Else, we don't get any definitions required for enforcing standard compliance.
Else, we don't get any definitions required for enforcing standard compliance.
frontend: Fixed two typing issues.
frontend, liboconfig: Added missing prototypes for yylex/yyparse.
store_lookup_test: Continue loop after fail().
The compiler does not know that fail aborts the test program and clang
(correctly) complains that the variable ('m' in this case) might be used
uninitialized afterwards.
The compiler does not know that fail aborts the test program and clang
(correctly) complains that the variable ('m' in this case) might be used
uninitialized afterwards.
t/coverage.sh: Fall-back to lcov without --no-external.
Old versions of lcov don't support that flag. Simply try to fall back in case
the first run fails.
Old versions of lcov don't support that flag. Simply try to fall back in case
the first run fails.
store_lookup: Made logical operators public.
Added tests for store lookup functions.
store: Added public functions to create and execute matchers.
The matcher types are now based on sdb_object_t to ease memory management in
case a matcher is used in multiple places. Constructors for each matcher type
are now available and the top-level matching function has been made public.
The matcher types are now based on sdb_object_t to ease memory management in
case a matcher is used in multiple places. Constructors for each matcher type
are now available and the top-level matching function has been made public.