123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #include "DataManagerProxy.h"
- #include "RedisClient.h"
- #include <QJsonArray>
- #include <QJsonObject>
- DataManagerProxy::DataManagerProxy() {
- }
- QList<DataManagerInfo> DataManagerProxy::loadModuleInfos(const Config& config)
- {
- RedisClient redis;
- QList<DataManagerInfo > listDataManageInfo;
- // QString key = QString("%1:%2").arg(config.AppName, config.AppId);
- QString key = config.Service;
- DeviceInfo di;
- redis.Setup(config.redisCfg.host, config.redisCfg.port, config.redisCfg.au);
- // QHash<QString, QString> h = redis->hgetall(key);
- // for(auto it = h.begin(); it != h.end(); it++)
- // {
- // qDebug()<< "key" << it.key();
- // //qDebug()<< "val" << it.value();
- // QJsonArray ja = QJsonDocument::fromJson(it.value().toUtf8()).array();
- // // QJsonObject jo = QJsonDocument::fromJson(it.value().toUtf8()).object();
- // }
- QStringList lst = redis.hvals(key);
- foreach (QString str, lst)
- {
- if( str.isEmpty() )
- {
- continue;
- }
- QJsonParseError jsonParseError;
- QJsonDocument jsonDocument(QJsonDocument::fromJson(str.toUtf8(), &jsonParseError));
- if(QJsonParseError::NoError != jsonParseError.error)
- {
- //LOGERROR("parse json file {} error", fullpath.toStdString().c_str());
- continue;
- }
- if(!jsonDocument.isObject()){
- continue;
- }
- // QJsonArray ja = jsonDocument.array();
- QJsonObject jo = jsonDocument.object();
- if(!jo.contains("config")){
- continue;
- }
- QJsonObject jConfig = jo["config"].toObject();
- ModuleInfo mi;
- // mi.Name = "TDengineSubscriber";
- mi.AssemblyName = "plugins/TDengineSubscriber.dll";
- // mi.Name = jConfig["name"].toString().toStdString();
- mi.Name = jConfig["code"].toString().toStdString();
- // mi.AssemblyName = jConfig["model"].toString().toStdString();
- QJsonObject jSettings = jConfig["settings"].toObject();
- QJsonArray jInputs = jConfig["inputs"].toArray();
- auto parse = [](const QJsonArray& jInputs)
- ->std::tuple<std::list<std::string>, std::set<std::string>, std::unordered_multimap<std::string, std::string>>{
- std::list<std::string>inputLists;
- std::set<std::string>tables;
- std::unordered_multimap<std::string,std::string>inputsMap;
- foreach (auto var, jInputs) {
- QString item = var.toString();
- inputLists.push_back(item.toLocal8Bit().toStdString());
- QStringList strlist = item.split(QLatin1Char('.'), Qt::SkipEmptyParts);
- tables.insert(strlist.at(0).toStdString());
- inputsMap.insert({strlist.at(0).toStdString(),strlist.at(1).toStdString()});
- }
- return {inputLists, tables, inputsMap};
- };
- auto [inputLists, tables, inputsMap] = parse(jInputs);
- mi.Topics = tables;
- ConsumerInfo ci;
- ci.Name = jConfig["code"].toString().toStdString();
- ci.AssemblyName = jConfig["model"].toString().toStdString();
- ci.SubscribeName = mi.Name;
- ci.dataItems = inputLists;
- ci.topicsMap = inputsMap;
- QJsonDocument doc(jSettings);
- QString js(doc.toJson(QJsonDocument::Compact));
- ci.Settings = js.toStdString();
- DataManagerInfo dataManageInfo;
- dataManageInfo.consumers.push_back(ci);
- dataManageInfo.modules.push_back(mi);
- listDataManageInfo.push_back(dataManageInfo);
- // foreach (auto var, ja) {
- // QJsonObject item = var.toObject();
- // QString topic = item["topic"].toString();
- // QJsonArray clients = item["Client"].toArray();
- // DataManagerInfo dataManageInfo;
- // ModuleInfo mi;
- // mi.Name = "TDengineSubscriber";
- // mi.AssemblyName = "plugins/TDengineSubscriber.dll";
- // // mi.ClassName = "TDengineSubscriber";
- // mi.Code = topic.toStdString();
- // mi.Topic = topic.toStdString();
- // foreach (auto client, clients) {
- // ConsumerInfo ci;
- // ci.Name = client["Name"].toString().toStdString();
- // ci.AssemblyName = client["AssemblyName"].toString().toStdString();
- // //ci.ClassName = "Alarm";
- // ci.SubscribeName = topic.toStdString();
- // ci.Settings = client["Settings"].toVariant().toString().toStdString();
- // dataManageInfo.consumers.push_back(ci);
- // }
- // dataManageInfo.modules.push_back(mi);
- // listDataManageInfo.push_back(dataManageInfo);
- // }
- }
- #if 0
- ModuleInfo mi;
- mi.Name = "TDengineSubscriber";
- mi.AssemblyName = "plugins/TDengineSubscriber.dll";
- mi.ClassName = "TDengineSubscriber";
- mi.Code = "topic:xxx";
- ConsumerInfo ci;
- ci.Name = "Alarm";
- ci.AssemblyName = "plugins/Alarm.dll";
- ci.ClassName = "Alarm";
- ci.SubscribeName = "TDengineSubscriber";
- DataManagerInfo dataManageInfo;
- dataManageInfo.consumers.push_back(ci);
- dataManageInfo.modules.push_back(mi);
- listDataManageInfo.push_back(dataManageInfo);
- #endif
- //return di;
- return listDataManageInfo;
- }
|