#ifndef CASSANDRA_H_ #define CASSANDRA_H_ #include #include #include #include #include #include #include class Cassandra : public TSDatabase { public: struct Config { std::string host; int port; std::string database; unsigned maxInsertsPerBatch; unsigned TTLSecs; }; Cassandra(Config config); virtual ~Cassandra() {}; virtual void insertMetaNodeData( std::shared_ptr node, const MetaNodeDataContent& data) override; virtual void insertStorageNodeData( std::shared_ptr node, const StorageNodeDataContent& data) override; virtual void insertHighResMetaNodeData( std::shared_ptr node, const HighResolutionStats& data) override; virtual void insertHighResStorageNodeData( std::shared_ptr node, const HighResolutionStats& data) override; virtual void insertStorageTargetsData( std::shared_ptr node, const StorageTargetInfo& data) override; virtual void insertClientNodeData( const std::string& id, const NodeType nodeType, const std::map& opMap, bool perUser) override; virtual void write() override; private: std::function cluster_new; std::function cluster_free; std::function session_new; std::function session_free; std::function batch_new; std::function batch_free; std::function batch_add_statement; std::function cluster_set_contact_points; std::function cluster_set_port; std::function session_connect; std::function session_execute; std::function session_execute_batch; std::function future_error_code; std::function future_error_message; std::function future_free; std::function statement_new; std::function statement_free; std::unique_ptr cluster; std::unique_ptr session; std::unique_ptr batch; const Config config; std::unique_ptr libHandle; std::string queryBuffer; unsigned numQueries; mutable Mutex queryMutex; void appendQuery(const std::string& query); void query(const std::string& query, bool waitForResult = true); void writeUnlocked(); }; #endif