frontend, proto: Include object type in FETCH and LOOKUP messages.
The respective commands only support hosts at the moment but this change
prepares the wire-format to support other types as well.
The respective commands only support hosts at the moment but this change
prepares the wire-format to support other types as well.
ReleaseNotes: Fixed date of the 0.2.0 release.
sysdbql(7): Fixed example LIST output.
When querying services/metrics skip hosts without such children.
This takes into account any filters and, thus, might mean that filters have to
be evaluated multiple times: once for determining if there are any children
and then again while serializing the data. This is because filtering happens
during serialization at which point it's too late to skip a host.
This takes into account any filters and, thus, might mean that filters have to
be evaluated multiple times: once for determining if there are any children
and then again while serializing the data. This is because filtering happens
during serialization at which point it's too late to skip a host.
sysdbql(7): Use “SysQL” as the official abbreviation.
This is to avoid that people will call it “SQL”. Thanks to Julian Hein (and
others) for suggesting this.
This is to avoid that people will call it “SQL”. Thanks to Julian Hein (and
others) for suggesting this.
sysdbql(7): Updated documentation for the LIST command.
frontend/grammar: Added support for LISTing services and metrics.
store: Added a helper function to parse object type names.
frontend: Added support for LISTing services and metrics as well.
When listing objects other than hosts, the returned JSON list will include the
respective type listed below each host object.
When listing objects other than hosts, the returned JSON list will include the
respective type listed below each host object.
frontend: Use sdb_proto_get_int() instead of a custom helper.
ReleaseNotes: Fixed a typo.
store: Fixed JSON for serialized time-series.
Each field needs a name, add the name to the "data" field.
Each field needs a name, add the name to the "data" field.
store: Don't wrap JSON serialized LIST replies in a separate object.
Previously, the reply was {"hosts": [<list>]} while now it's just the list.
This way, the response format matches that of other commands which return host
lists.
Previously, the reply was {"hosts": [<list>]} while now it's just the list.
This way, the response format matches that of other commands which return host
lists.
utils strbuf: Exponentially increase the buffer size.
That'll make sure that lots of small writes don't result in lots of memory
reallocations.
That'll make sure that lots of small writes don't result in lots of memory
reallocations.
utils strbuf: Added 'min_size' to be considered when shrinking the buffer.
It's set to the initial size of the buffer (or 64). The idea is that the
initial size should provide an estimate of a reasonable size and shrinking the
buffer below that size causes unecessary churn.
For example, this is important for the frontend's command handlers which
usually need a large buffer size but initial writes to the buffer may be
small.
It's set to the initial size of the buffer (or 64). The idea is that the
initial size should provide an estimate of a reasonable size and shrinking the
buffer below that size causes unecessary churn.
For example, this is important for the frontend's command handlers which
usually need a large buffer size but initial writes to the buffer may be
small.
utils strbuf: Renamed buffer variables from 'strbuf' to 'buf'.
frontend, sysdb: Correctly handle empty queries.
Let the frontend send back a DATA message even on empty queries to make sure
the client sees the expected reply.
Let sysdb handle empty replies correctly and also not print any errors on
empty replies (successful command not returning any data).
Let the frontend send back a DATA message even on empty queries to make sure
the client sees the expected reply.
Let sysdb handle empty replies correctly and also not print any errors on
empty replies (successful command not returning any data).
frontend/proto: Include the log priority in LOG messages.
The priority is encoded as 32 bit integer in network byte order and added as a
separate field before the actual log message.
The 'sysdb' client now handles LOG messages accordingly and prefixes the
message with a string describing the priority.
The priority is encoded as 32 bit integer in network byte order and added as a
separate field before the actual log message.
The 'sysdb' client now handles LOG messages accordingly and prefixes the
message with a string describing the priority.
frontend/proto: Let CONNECTION_DATA not replace CONNECTION_ERROR.
Instead, reserve some space for groups of status/state codes and then use a
new number / block for CONNECTION_DATA.
Instead, reserve some space for groups of status/state codes and then use a
new number / block for CONNECTION_DATA.
frontend, proto: Include the response data type in query replies.
For that purpose, use the newly added CONNECTION_DATA status instead of
CONNECTION_OK for query replies and include the data type as the first field
in the message body. The type is the same as the respective command type.
For that purpose, use the newly added CONNECTION_DATA status instead of
CONNECTION_OK for query replies and include the data type as the first field
in the message body. The type is the same as the respective command type.
strbuf utils: Clarified handling of binary data.
proto: Fixed/clarified authentication handshake options during startup.
The server may request further authentication information from the client
before sending an OK status.
The server may request further authentication information from the client
before sending an OK status.
ReleaseNotes: Added some notes about compatibility.
That is, mention that there are no compatibility guarantees at the moment (pre
1.0 versions).
That is, mention that there are no compatibility guarantees at the moment (pre
1.0 versions).
frontend: Guarantee that no async messages are sent before startup finished.
version-gen.sh: Added .git suffix to default version again.
Release SysDB 0.4.0.
ReleaseNotes: Added 0.4.0 release.
Switched all sysdb.io links to https://
sysdb(7): Documented basic concepts in more detail.
Added more in-depth documentation and examples for hosts/services, how
hostname canonicalization works, and how to use metrics and time-series.
Added more in-depth documentation and examples for hosts/services, how
hostname canonicalization works, and how to use metrics and time-series.
configure: Make plugin related options more consistent.
That is, use the full plugin names (except "backend" prefixes) for the
--enable-* options.
That is, use the full plugin names (except "backend" prefixes) for the
--enable-* options.
collectd::unixsock: Support 'rrdcached' metrics as well.
It's the same as 'rrdtool' :-)
It's the same as 'rrdtool' :-)
timeseries::rrdtool: Added support for RRDCacheD.
After enabling RRDCacheD support, the plugin supports an additional
time-series fetcher callback which may be used to flush outstanding updates to
an RRD file before fetching data from it.
After enabling RRDCacheD support, the plugin supports an additional
time-series fetcher callback which may be used to flush outstanding updates to
an RRD file before fetching data from it.
doc/: Improved documentation around the rrdtool time-series fetcher.
sysdbql(7): Documented supported data types.
frontend: Added support for single quotes in string constants.
Just like in SQL, single quotes may be included in a string by specifying two
adjacent single quotes.
Just like in SQL, single quotes may be included in a string by specifying two
adjacent single quotes.
Added __attribute__((format(printf, ...))) where appropriate.
Also, fixed various (mostly minor) issues identified this way.
Also, fixed various (mostly minor) issues identified this way.
plugin: Added missing argument to sdb_log() call.
sysdbql(7): Documented the ‘TIMESERIES’ command.
sysdbd-collectd-unixsock(5): Documented the new 'Timeseries' options.
Added documentation for the new timeseries::rrdtool plugin.
README: Mention the support for metrics and time-series.
sysdb-description.txt: Mention the support for metrics and time-series.
timeseries: Free the actual time-series object itself as well.
collectd::unixsock: Report an error if TimeseriesBackend != rrdtool.
No other backends are supported yet by the plugin. Support for other types
will require different metric store ID generation.
No other backends are supported yet by the plugin. Support for other types
will require different metric store ID generation.
collectd::unixsock: Record the, configurable, time-series store.
The new config options 'TimeseriesBackend' and 'TimeseriesBaseURL' may be used
to configure the backend store to be used for fetching time-series data for
collectd metrics.
The new config options 'TimeseriesBackend' and 'TimeseriesBaseURL' may be used
to configure the backend store to be used for fetching time-series data for
collectd metrics.
timeseries::rrdtool: Added a plugin to fetch time-series from RRD files.
Obviously, the plugin requires librrd. The configure script checks for librrd
using pkg-config.
Obviously, the plugin requires librrd. The configure script checks for librrd
using pkg-config.
timeseries: Added sdb_timeseries_create().
This function allocates a time-series object and pre-allocates the data array
based on size information passed to the function. All memory is initialized to
zero (except for the length information) such that the object contains valid
(but mostly useless) information.
This function allocates a time-series object and pre-allocates the data array
based on size information passed to the function. All memory is initialized to
zero (except for the length information) such that the object contains valid
(but mostly useless) information.
timeseries: Fixed timeseries_destroy().
Correctly access all information indexed by data_names_len and make sure not
to access array members if the array is NULL.
Correctly access all information indexed by data_names_len and make sure not
to access array members if the array is NULL.
store: Fixed JSON-serialization of time-series data.
Typos caused the end-time and all values to be treated incorrectly.
Typos caused the end-time and all values to be treated incorrectly.
Moved backends from src/backend/ to src/plugins/backend/.
collectd::unixsock: Store metrics instead of services.
integration/simple_query.sh: Test another failure mode.
frontend: Let CONNECTION_QUERY support 'TIMESERIES' queries.
frontend/parser: Added support for the 'TIMESERIES' command.
Syntax is: TIMESERIES <host>.<metric> [START <datetime>] [END <datetime>]
Syntax is: TIMESERIES <host>.<metric> [START <datetime>] [END <datetime>]
store: Added sdb_store_fetch_timeseries().
The function fetches a time-series for a specified host's metric and
serializes it into a JSON buffer.
The function fetches a time-series for a specified host's metric and
serializes it into a JSON buffer.
timeseries: Added 'data_names_len' field.
Else, a user cannot tell how many different sequences are stored in a
data-series.
Else, a user cannot tell how many different sequences are stored in a
data-series.
timeseries: Added sdb_timeseries_destroy().
plugin: Added sdb_plugin_fetch_timeseries().
This function fetches a time-series from a named backend data-store using a
previously registered "time-series fetcher" callback.
This function fetches a time-series from a named backend data-store using a
previously registered "time-series fetcher" callback.
core: Introduced the concept of time-series.
A timeseries describes one or multiple sequences of data-points where each
data-point is a timestamp and a value.
A new type of plugin, "time-series fetchers", has been introduced to access
time-series information from arbitrary data-stores.
A timeseries describes one or multiple sequences of data-points where each
data-point is a timestamp and a value.
A new type of plugin, "time-series fetchers", has been introduced to access
time-series information from arbitrary data-stores.
store: Store "data-store" information alongside metrics.
A metric data-store describes how to access data (e.g. time-series) of a
metric.
A metric data-store describes how to access data (e.g. time-series) of a
metric.
store.h: Removed very outdated comments in the documentation.
README: Updated Travis-CI and coveralls links.
The main repo has been moved from tokkee/sysdb to sysdb/sysdb.
The main repo has been moved from tokkee/sysdb to sysdb/sysdb.
integration tests: Added simple tests for service and metric queries.
To make that work, let the mock_plugin store some metrics as well.
To make that work, let the mock_plugin store some metrics as well.
store_lookup_test: Added various tests for metrics.
store: Added support for storing metric objects.
store: Added core support for “metrics” objects.
This is going to be used to store information about available metrics (in the
broadest sense). A metric is any kind of queryable value like performance
data.
This is going to be used to store information about available metrics (in the
broadest sense). A metric is any kind of queryable value like performance
data.
sysdbql(7): Updated documentation to keep up with the latest changes.
frontend/grammar: Changes ‘FETCH 'name'’ to ‘FETCH host 'name'’.
This also seems more consistent.
This also seems more consistent.
frontend/grammar: Changed ‘LIST …’ to ‘LIST hosts …’.
This seems more consistent.
This seems more consistent.
frontend/parser: Let ‘LIST’ and ‘FETCH’ accept optional filters as well.
This allows for more consistent results across different types of queries.
This allows for more consistent results across different types of queries.
frontend/parser: Simplified handling of MATCHING and FILTER clauses.
Make LOOKUP MATCHING clauses optional.
Make LOOKUP MATCHING clauses optional.
frontend/proto.h: Documented the current frontend protocol.
frontend: Let sdb_fe_<cmd> check the current command.
Now that the code is no longer internal-only, we'll have to be a bit careful
about what the users passes in.
Now that the code is no longer internal-only, we'll have to be a bit careful
about what the users passes in.
frontend: Split up command_handle() into several sdb_fe_<cmd> functions.
One big function is not very nice to handle.
One big function is not very nice to handle.
frontend: Renamed sdb_fe_<cmd> functions to sdb_fe_exec_<cmd>.
That name better describes what the function is doing.
That name better describes what the function is doing.
data: Simplified the implementation of expr_eval().
frontend: Make sure to not read to much from a connection buffer.
The current command, as stored in the connection buffer, is not necessarily
nil-terminated. That's only the case if there's no further data in the buffer
(which will *often* be the case in the current implementation when using
'sysdb' as the client) but the code should never rely on that.
In cases where the function operating on the data does not support specifying
the length of the string to work on, copy the data to a temporary buffer
first.
The current command, as stored in the connection buffer, is not necessarily
nil-terminated. That's only the case if there's no further data in the buffer
(which will *often* be the case in the current implementation when using
'sysdb' as the client) but the code should never rely on that.
In cases where the function operating on the data does not support specifying
the length of the string to work on, copy the data to a temporary buffer
first.
store_expr: Fixed a memory leak in an error condition.
store_expr: Evaluate constant expressions early.
That is, when creating a new expression objects, evaluate it right away if its
left and right operands are constant values.
That is, when creating a new expression objects, evaluate it right away if its
left and right operands are constant values.
data: Document the use of dynamically allocated data in expr_eval().
data: Let sdb_data_expr_eval() check it's arguments.
version-gen.sh: Added .git suffix to default version again.
Release SysDB 0.3.0.
unit tests: Fixed some -Werror=unused-result compiler errors.
ReleaseNotes: Added 0.3.0 release.
data: Support some arithmetic expressions on mismatching types.
The following cases are now supported:
- <integer> or <decimal> <mul> <datetime>
- <datetime> <mul> or <div> or <mod> <integer> or <decimal>
Think of <datetime> having a time unit like seconds. It's perfectly fine to
multiply with or divide seconds by a number. However, since we don't have any
type having the unit Hertz, we cannot support numbers divided by <datetime>.
The following cases are now supported:
- <integer> or <decimal> <mul> <datetime>
- <datetime> <mul> or <div> or <mod> <integer> or <decimal>
Think of <datetime> having a time unit like seconds. It's perfectly fine to
multiply with or divide seconds by a number. However, since we don't have any
type having the unit Hertz, we cannot support numbers divided by <datetime>.
frontend/grammar: Added support for field names in expressions.
store_expr: Added support to include field values in an expression.
Added sdb_store_expr_fieldvalue() to create such an expression object and pass
a stored object to sdb_store_expr_eval() to be able to extract the field value
when evaluation the expression.
Added sdb_store_expr_fieldvalue() to create such an expression object and pass
a stored object to sdb_store_expr_eval() to be able to extract the field value
when evaluation the expression.
store: Added sdb_store_get_field().
This function may be used to retrieve the value of queryable fields of objects
in the store.
For now, all fields except the backend(s) are supported.
This function may be used to retrieve the value of queryable fields of objects
in the store.
For now, all fields except the backend(s) are supported.
sysdbql(7): Document FILTER clauses.
frontend: Added 'FILTER' support to the 'LOOKUP' command.
The new syntax is 'LOOKUP <obj> MATCHING <cond> [FILTER <cond>]'.
The new syntax is 'LOOKUP <obj> MATCHING <cond> [FILTER <cond>]'.
t/integration: Execute test scripts using 'set -x'.
A lot of tests fail rather silently. This helps identify the failing test.
A lot of tests fail rather silently. This helps identify the failing test.
frontend/scanner: Simplified handling of reserved words.
store, frontend: Parse object field matchers.
Field names are identified as ":<field-name>" and all conditional operators
are supported to compare them against an expression.
Field names are identified as ":<field-name>" and all conditional operators
are supported to compare them against an expression.
frontend/parser: Added support for time interval values.
time: Added sdb_strpunit() to parse a time unit.
time: Renamed PRIscTIME to PRIsdbTIME.
Another remnant of the “syscollector” days ;-)
Another remnant of the “syscollector” days ;-)
frontend: Let FETCH/LIST/LOOKUP implementations accept filters.
This is in preparation for letting the parser support filters. It's not
actually used yet.
This is in preparation for letting the parser support filters. It's not
actually used yet.
store: Fixed JSON serialization when skipping hosts due to filters.
Previously, it might have happened that a comma was appended to a list of
hosts even though all subsequent hosts were filtered out. This created invalid
JSON. Now, don't let sdb_store_host_tojson ignore hosts entirely. Instead,
always let it serialize the host passed to the function and only pass on the
filter to child objects. The caller is now responsible for calling the filter
and, at the same time, the caller is able to correctly handle skipped hosts.
Fixed the unit-test which should have caught this.
Previously, it might have happened that a comma was appended to a list of
hosts even though all subsequent hosts were filtered out. This created invalid
JSON. Now, don't let sdb_store_host_tojson ignore hosts entirely. Instead,
always let it serialize the host passed to the function and only pass on the
filter to child objects. The caller is now responsible for calling the filter
and, at the same time, the caller is able to correctly handle skipped hosts.
Fixed the unit-test which should have caught this.
store: Let JSON serializers support (object) filters.
Only objects covered by the specified filter will be included in the JSON
output.
Only objects covered by the specified filter will be included in the JSON
output.