我有一个C程序,可以填充和计算数据结构,如
struct Users
{
unsigned char login[LOGIN_SIZE+1];
unsigned int hours, minut, works;
struct Range {
unsigned int hours_a, minut_a, time_a;
unsigned int hours_b, minut_b, time_b;
unsigned int dur_hours, dur_minut, dur_time;
struct WorkIDs {
unsigned int work_id;
unsigned int filled;
} work;
unsigned int filled;
} range[RANGE_SIZE];
unsigned int verbosity;
unsigned int filled;
} users[USERS_SIZE];
现在,我需要将填充的数据结构从C程序中导出到任何一个Grafana支持的数据库中,即。InfluxDB, MySQL 或 PostgreSQL (完整名单见 https:/grafana.comdocsgrafanalatestfeaturesdatasources。 并可通过插件进行扩展)
但是,我找不到什么好的例子来导出一个C语言填充的数据结构到数据库中,并努力建立这些技术之间的联系。请您能给我一个正确的方法吗?
我的工作方法 (欢迎提出替代方案!)
1) 使用PostgreSQL 不像MySQL给了我很多各种错误,直到我放弃,PostgreSQL的安装真的很快,很直接,只要按照一篇文章就可以了,如 https:/www.digitalocean.comcommunitytutorialshow-to-install-and-use-postgresql-on-ubuntu-18-04 以快速开始使用你的第一个示例数据库。
2) 取一个libpqxx库 :他们在文档中给出了一个很好的C++例子 http:/pqxx.orgdevelopmentlibpqxx ,它可以用一个命令来建立,如 c++ -o post post.cxx -lpqxx -lpq
. 您的 libpqxx
库需要高于一定的版本,这个例子才会正常工作 在Linux Mint 19.3上,我不得不下载了 libpqxx-6.2_6.2.5-1_amd64.deb
和 libpqxx-dev_6.2.5-1_amd64.deb
"Eoan Ermine "中的 "Eoan Ermine"。https:/launchpad.netubuntu+sourceelibpqxx。 :因为建立一个新的 libpqxx
并不是那么容易,而它在Linux Mint发行版的官方仓库中的版本也太老了,而且不够用。
这个C++例子中的连接字符串可以替换成类似于pqxx::connection c("dbname=anonymous host=localhost user=anonymous password=123");
然后就可以了。整个修改后的源码,配合1的教程--将所有的游乐场所涂成自己喜欢的颜色。
#include <iostream>
#include <pqxx/pqxx>
int main(int, char *argv[])
{
pqxx::connection c("dbname=anonymous host=localhost user=anonymous password=123");
pqxx::work txn(c);
int equip_id = 1;
std::cout << "Updating equip_id #" << equip_id << " and others" << std::endl;
for (equip_id = 1; equip_id < 3; equip_id++) {
txn.exec0(
"UPDATE playground "
"SET color = " + txn.quote(argv[1]) +
"WHERE equip_id = " + txn.quote(equip_id));
}
// Make our change definite.
txn.commit();
}
然后,你就可以用大量的SQL查询周期性地将C结构的数据字段导出到这个PostgreSQL数据库中,这只是一个时间问题;虽然,你还需要想出一个好的数据库结构,并将其添加到PostgreSQL中,用一个 psql
交互式命令行之前,先做这个工作。
3) 安装Grafana并配置PostgreSQL数据源。 - 使用的教程,如
我不得不禁用SSL模式,在 Data Sources / PostgreSQL
配置,以便使用与你的C++程序相同的用户名和密码成功连接到数据库。(不需要指定端口).