index 0577550b57f25c8814f7fb399e69b4bd623180b5..ade3a7cb192eaa7fc1ccf0fa5c01c050723c69e8 100644 (file)
*/
/*
- * CONNECTION_OK:
+ * SDB_CONNECTION_OK:
* Indicates that a command was successful. The message body will usually
* be empty but may contain a string providing unformatted information
* providing more details.
* +---------------+---------------+
* | optional status message ... |
*/
- CONNECTION_OK = 0,
+ SDB_CONNECTION_OK = 0,
/*
- * CONNECTION_ERROR:
+ * SDB_CONNECTION_ERROR:
* Indicates that a command has failed. The message body will contain a
* string describing the error.
*
* +---------------+---------------+
* | error message ... |
*/
- CONNECTION_ERROR,
+ SDB_CONNECTION_ERROR,
/*
- * CONNECTION_LOG:
+ * SDB_CONNECTION_LOG:
* Indicates an asynchronous log message. The message body will contain
* the log priority (see utils/error.h) and message. Log messages may be
* sent to the client any time.
* +---------------+ |
* | ... |
*/
- CONNECTION_LOG,
+ SDB_CONNECTION_LOG,
/*
* Query-result specific messages.
*/
/*
- * CONNECTION_DATA:
+ * SDB_CONNECTION_DATA:
* Indicates that a data query was successful. The message body will
* contain the type of the data and the result encoded as a JSON string.
* The type is the same as the command code of the respective command (see
* +---------------+ |
* | ... |
*/
- CONNECTION_DATA = 100,
+ SDB_CONNECTION_DATA = 100,
} sdb_conn_status_t;
/* accepted commands / state of the connection */
typedef enum {
/*
- * CONNECTION_IDLE:
+ * SDB_CONNECTION_IDLE:
* This is an internal state used for idle connections.
*/
- CONNECTION_IDLE = 0,
+ SDB_CONNECTION_IDLE = 0,
/*
- * CONNECTION_PING:
+ * SDB_CONNECTION_PING:
* Check if the current connection is still alive. The server will reply
- * with CONNECTION_OK and an empty message body if it was able to handle
- * the command.
+ * with SDB_CONNECTION_OK and an empty message body if it was able to
+ * handle the command.
*
* 0 32 64
* +---------------+---------------+
* | PING | 0 |
* +---------------+---------------+
*/
- CONNECTION_PING,
+ SDB_CONNECTION_PING,
/*
- * CONNECTION_STARTUP:
+ * SDB_CONNECTION_STARTUP:
* Setup of a client connection. The message body shall include the
* username of the user contacting the server. The server may then send
* further requests to the client for authentication (not implemented
* yet). Once the setup and authentication was successful, the server
- * replies with CONNECTION_OK. Further information may be requested from
- * the server using special messages specific to the authentication
+ * replies with SDB_CONNECTION_OK. Further information may be requested
+ * from the server using special messages specific to the authentication
* method. The server does not send any asynchronous messages before
* startup is complete.
*
* +---------------+---------------+
* | username ... |
*/
- CONNECTION_STARTUP,
+ SDB_CONNECTION_STARTUP,
/*
* Querying the server. On success, the server replies with
- * CONNECTION_DATA.
+ * SDB_CONNECTION_DATA.
*
* The command codes listed here are used, both, for sending a query to
* the server and to indicate the response type from a query in a DATA
*/
/*
- * CONNECTION_QUERY:
+ * SDB_CONNECTION_QUERY:
* Execute a query in the server. The message body shall include a single
* query command as a text string. Multiple commands are ignored by the
* server entirely to protect against injection attacks.
* +---------------+---------------+
* | query string ... |
*/
- CONNECTION_QUERY,
+ SDB_CONNECTION_QUERY,
/*
- * CONNECTION_FETCH:
+ * SDB_CONNECTION_FETCH:
* Execute the 'FETCH' command in the server. The message body shall
* include the type and the identifier of the object to be retrieved.
* Hosts are identified by their name. Other types are not supported yet.
* +---------------+ |
* | ... |
*/
- CONNECTION_FETCH,
+ SDB_CONNECTION_FETCH,
/*
- * CONNECTION_LIST:
+ * SDB_CONNECTION_LIST:
* Execute the 'LIST' command in the server. The message body may include
* the type of the objects to be listed, encoded as a 32bit integer in
* network byte-order. The response includes all hosts and the respective
* | [object type] |
* +---------------+
*/
- CONNECTION_LIST,
+ SDB_CONNECTION_LIST,
/*
- * CONNECTION_LOOKUP:
+ * SDB_CONNECTION_LOOKUP:
* Execute the 'LOOKUP' command in the server. The message body shall
* include the type of the objects to look up and a string representing
* the conditional expression of the 'MATCHING' clause. The type is
* +---------------+ |
* | clause ... |
*/
- CONNECTION_LOOKUP,
+ SDB_CONNECTION_LOOKUP,
/*
- * CONNECTION_TIMESERIES:
+ * SDB_CONNECTION_TIMESERIES:
* Execute the 'TIMESERIES' command in the server. This command is not yet
- * supported on the wire. Use CONNECTION_QUERY instead.
+ * supported on the wire. Use SDB_CONNECTION_QUERY instead.
*/
- CONNECTION_TIMESERIES,
+ SDB_CONNECTION_TIMESERIES,
+
+ /*
+ * SDB_CONNECTION_STORE:
+ * Execute the 'STORE' command in the server. The message body shall
+ * include the type of the object to be stored, the timestamp of the last
+ * update, and a list of fields describing the object depending on the
+ * object type. Object types are encoded as 32bit integers in network
+ * byte-order where attribute types are bitwise ORed with the appropriate
+ * parent object type. Timestamps are encoded as 64bit integers in network
+ * byte-order. Fields are null-terminated strings.
+ *
+ * 0 32 64
+ * +---------------+---------------+
+ * | STORE | length |
+ * +---------------+---------------+
+ * | object type | last_update.. |
+ * +---------------+---------------+
+ * | ... | fields |
+ * +---------------+ |
+ * | ... |
+ *
+ * Fields:
+ *
+ * HOST: name
+ * SERVICE: hostname, name
+ * METRIC: hostname, name, [store type, store id]
+ * ATTRIBUTE: [hostname], parent object name, key, <value>
+ *
+ * Values are encoded as their type (32bit integer in network byte-order),
+ * and their content as implemented by sdb_proto_marshal_data.
+ */
+ SDB_CONNECTION_STORE = 50,
+
+ /* Only used internally: */
+ SDB_CONNECTION_STORE_HOST,
+ SDB_CONNECTION_STORE_SERVICE,
+ SDB_CONNECTION_STORE_METRIC,
+ SDB_CONNECTION_STORE_ATTRIBUTE,
/*
* Command subcomponents.
*/
/*
- * CONNECTION_MATCHER:
+ * SDB_CONNECTION_MATCHER:
* A parsed matcher. Only used internally.
*/
- CONNECTION_MATCHER = 100,
+ SDB_CONNECTION_MATCHER = 100,
+
+ /*
+ * SDB_CONNECTION_EXPR:
+ * A parsed expression. Only used internally.
+ */
+ SDB_CONNECTION_EXPR,
+
+ /*
+ * Server status queries.
+ */
+
+ /*
+ * SDB_CONNECTION_SERVER_VERSION:
+ * Retrieve the server version. The server replies with SDB_CONNECTION_OK
+ * on success and the server version as an unsigned 32-bit integer,
+ * optionally followed by a string describing extra version components.
+ * The integer server version is encoded as 100000 * major + 100 * minor +
+ * patch.
+ *
+ * 0 32 64
+ * +---------------+---------------+
+ * | SERVER_VERSION| 0 |
+ * +---------------+---------------+
+ */
+ SDB_CONNECTION_SERVER_VERSION = 1000,
} sdb_conn_state_t;
+#define SDB_CONN_MSGTYPE_TO_STRING(t) \
+ (((t) == SDB_CONNECTION_IDLE) ? "IDLE" \
+ : ((t) == SDB_CONNECTION_PING) ? "PING" \
+ : ((t) == SDB_CONNECTION_STARTUP) ? "STARTUP" \
+ : ((t) == SDB_CONNECTION_QUERY) ? "QUERY" \
+ : ((t) == SDB_CONNECTION_FETCH) ? "FETCH" \
+ : ((t) == SDB_CONNECTION_LIST) ? "LIST" \
+ : ((t) == SDB_CONNECTION_LOOKUP) ? "LOOKUP" \
+ : ((t) == SDB_CONNECTION_TIMESERIES) ? "TIMESERIES" \
+ : ((t) == SDB_CONNECTION_STORE) ? "STORE" \
+ : "UNKNOWN")
+
#ifdef __cplusplus
} /* extern "C" */
#endif