将C数据结构导出到Grafana支持的数据库:你的建议?

问题描述 投票:-1回答:1

我有一个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, MySQLPostgreSQL (完整名单见 https:/grafana.comdocsgrafanalatestfeaturesdatasources。 并可通过插件进行扩展)

但是,我找不到什么好的例子来导出一个C语言填充的数据结构到数据库中,并努力建立这些技术之间的联系。请您能给我一个正确的方法吗?

c database postgresql structure grafana
1个回答
0
投票

我的工作方法 (欢迎提出替代方案!)

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.deblibpqxx-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++程序相同的用户名和密码成功连接到数据库。(不需要指定端口).

© www.soinside.com 2019 - 2024. All rights reserved.