osquery-1/include/osquery/config.h

133 lines
4.2 KiB
C
Raw Normal View History

2014-07-31 00:35:19 +00:00
// Copyright 2004-present Facebook. All Rights Reserved.
#pragma once
2014-07-31 00:35:19 +00:00
#include <future>
#include <memory>
#include <mutex>
#include <string>
#include <utility>
#include <vector>
#include "osquery/status.h"
2014-07-31 00:35:19 +00:00
2014-08-15 07:25:30 +00:00
namespace osquery {
2014-07-31 00:35:19 +00:00
2014-09-15 18:09:33 +00:00
/** @brief represents the relevant parameters of a scheduled query.
*
* Within the context of osqueryd, a scheduled query may have many relevant
* attributes. Those attributes are represented in this data structure.
*/
2014-07-31 00:35:19 +00:00
struct OsqueryScheduledQuery {
2014-09-15 18:09:33 +00:00
/// name represents the "name" of a query.
2014-07-31 00:35:19 +00:00
std::string name;
2014-09-15 18:09:33 +00:00
/// query represents the actual SQL query.
2014-07-31 00:35:19 +00:00
std::string query;
2014-09-15 18:09:33 +00:00
/// interval represents how often the query should be executed, in minutes.
2014-07-31 00:35:19 +00:00
int interval;
2014-09-15 18:09:33 +00:00
/// equals operator
2014-07-31 00:35:19 +00:00
bool operator==(const OsqueryScheduledQuery& comp) const {
2014-08-15 07:25:30 +00:00
return (comp.name == name) && (comp.query == query) &&
2014-07-31 00:35:19 +00:00
(comp.interval == interval);
}
2014-09-15 18:09:33 +00:00
/// not equals operator
2014-07-31 00:35:19 +00:00
bool operator!=(const OsqueryScheduledQuery& comp) const {
return !(*this == comp);
}
};
2014-09-15 18:09:33 +00:00
/** @brief A native representation of osquery configuration data.
*
* When you use osquery::Config::getInstance(), you are getting a singleton
* handle to interact with the data stored in an instance of this struct.
*/
2014-07-31 00:35:19 +00:00
struct OsqueryConfig {
2014-09-15 18:09:33 +00:00
/// A vector of all of the queries that are scheduled to execute.
std::vector<OsqueryScheduledQuery> scheduledQueries;
2014-07-31 00:35:19 +00:00
};
2014-09-15 20:02:30 +00:00
/** @brief A string which represents the default consfig retriever.
2014-09-15 18:09:33 +00:00
*
* The config plugin that you use to define your config retriever can be
* defined via a command-line flag, however, if you don't define a config
* plugin to use via the command-line, then the config retriever which is
* represented by the string stored in kDefaultConfigRetriever will be used.
*/
2014-07-31 00:35:19 +00:00
extern const std::string kDefaultConfigRetriever;
2014-09-15 18:09:33 +00:00
/** @brief A singleton that exposes accessors to osquery's configuration data.
*
* osquery has two types on configurations. Things that don't change during
* the execution of the process should be configured as command-line
* arguments. Things that can change during the lifetime of program execution
* should be defined using the osquery::config::Config class and the pluggable
* plugin interface that is included with it.
*/
2014-07-31 00:35:19 +00:00
class Config {
2014-08-15 07:25:30 +00:00
public:
2014-09-15 18:09:33 +00:00
/** @brief The primary way to access the Config singleton.
*
* osquery::config::Config::getInstance() provides access to the Config
* singleton
*
* @code{.cpp}
* auto config = osquery::config::Config::getInstance();
* @endcode
*
* @return a singleton instance of Config.
*/
2014-07-31 00:35:19 +00:00
static std::shared_ptr<Config> getInstance();
2014-09-15 18:09:33 +00:00
/** @brief Get a vector of all scheduled queries.
*
* @code{.cpp}
* auto config = osquery::config::Config::getInstance();
* for (const auto& q : config->getScheduledQueries()) {
* LOG(INFO) << "name: " << q.name;
* LOG(INFO) << "interval: " << q.interval;
* }
* @endcode
*
* @return a vector of OsqueryScheduledQuery's which represent the queries
* that are to be executed
*/
2014-09-15 18:17:48 +00:00
std::vector<OsqueryScheduledQuery> getScheduledQueries();
2014-08-15 07:25:30 +00:00
private:
2014-09-15 18:09:33 +00:00
/** @brief Default constructor.
*
* Since instances of Config should only be created via getInstance(),
* Config's constructor is private
*/
2014-07-31 00:35:19 +00:00
Config();
2014-09-15 18:09:33 +00:00
/** @brief Uses the specified config retriever to populate a config struct.
*
* Internally, genConfig checks to see if there was a config retriever
* specified on the command-line. If there was, it checks to see if that
* config retriever actually exists. If it does, it gets used to generate
* configuration data. If it does not, an error is logged.
*
* If no config retriever was specified, the config retriever represented by
* kDefaultConfigRetriever is used.
*
* @param conf a reference to a struct which will be populated by the config
* retriever in use.
*
* @return an instance of osquery::Status, indicating the success or failure
* of the operation.
*/
static osquery::Status genConfig(OsqueryConfig& conf);
2014-08-15 07:25:30 +00:00
private:
2014-09-15 18:09:33 +00:00
/** @brief the private member that stores the raw osquery config data in a
* native format
*/
2014-07-31 00:35:19 +00:00
OsqueryConfig cfg_;
};
2014-08-15 07:25:30 +00:00
}