X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8c6fa3fbaccc22127280bf77a48fab5a3ee0716e..46b0747592074017ff0ea4b33d4a7194235886e5:/stargazer/plugins/other/smux/tables.cpp diff --git a/stargazer/plugins/other/smux/tables.cpp b/stargazer/plugins/other/smux/tables.cpp new file mode 100644 index 00000000..c3e3ef54 --- /dev/null +++ b/stargazer/plugins/other/smux/tables.cpp @@ -0,0 +1,64 @@ +#include +#include +#include +#include + +#include "stg/user_property.h" +#include "stg/tariffs.h" +#include "stg/users.h" + +#include "tables.h" + +std::pair TD2Info(const TARIFF_DATA & td); + +void TariffUsersTable::UpdateSensors(Sensors & sensors) const +{ +std::map data; + +std::list tdl; +tariffs.GetTariffsData(&tdl); +std::transform(tdl.begin(), + tdl.end(), + std::inserter(data, data.begin()), + TD2Info); + +int handle = users.OpenSearch(); +assert(handle && "USERS::OpenSearch is always correct"); + +USER_PTR user; +while (!users.SearchNext(handle, &user)) + { + if (user->GetDeleted()) + continue; + std::string tariffName(user->GetProperty().tariffName.ConstData()); + std::map::iterator it(data.lower_bound(tariffName)); + if (it == data.end() || + it->first != tariffName) + { + data.insert(it, std::make_pair(tariffName, 1)); + } + else + { + ++it->second; + } + } + +users.CloseSearch(handle); + +size_t idx = 1; +OID prefixOid(prefix); + +std::map::const_iterator it(data.begin()); +while (it != data.end()) + { + sensors[prefixOid.copyWithSuffix(2, static_cast(idx))] = new ConstSensor(it->first); + sensors[prefixOid.copyWithSuffix(3, static_cast(idx))] = new ConstSensor(it->second); + ++idx; + ++it; + } +} + +std::pair TD2Info(const TARIFF_DATA & td) +{ +return std::make_pair(td.tariffConf.name, 0); +}