]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/other/smux/tables.cpp
962c91a8207f3e288ceb2e1eb1adb1ffcc56223f
[stg.git] / projects / stargazer / plugins / other / smux / tables.cpp
1 #include <cassert>
2 #include <utility>
3 #include <iterator>
4 #include <algorithm>
5
6 #include "stg/user_property.h"
7 #include "stg/tariffs.h"
8 #include "stg/users.h"
9
10 #include "tables.h"
11
12 std::pair<std::string, size_t> TD2Info(const TARIFF_DATA & td);
13
14 void TariffUsersTable::UpdateSensors(Sensors & sensors) const
15 {
16 std::map<std::string, size_t> data;
17
18 std::list<TARIFF_DATA> tdl;
19 tariffs.GetTariffsData(&tdl);
20 std::transform(tdl.begin(),
21                tdl.end(),
22                std::inserter(data, data.begin()),
23                TD2Info);
24
25 int handle = users.OpenSearch();
26 assert(handle && "USERS::OpenSearch is always correct");
27
28 USER_PTR user;
29 while (!users.SearchNext(handle, &user))
30     {
31     std::string tariffName(user->GetProperty().tariffName.ConstData());
32     std::map<std::string, size_t>::iterator it;
33     it = data.lower_bound(tariffName);
34     if (it == data.end() ||
35         it->first != tariffName)
36         {
37         data.insert(it, std::make_pair(tariffName, 1));
38         }
39     else
40         {
41         ++it->second;
42         }
43     }
44
45 users.CloseSearch(handle);
46
47 size_t idx = 1;
48 OID prefixOid(prefix);
49
50 std::map<std::string, size_t>::const_iterator it(data.begin());
51 while (it != data.end())
52     {
53     sensors[prefixOid.copyWithSuffix(2, idx)] = new ConstSensor<std::string>(it->first);
54     sensors[prefixOid.copyWithSuffix(3, idx)] = new ConstSensor<int>(it->second);
55     ++idx;
56     ++it;
57     }
58 }
59
60 std::pair<std::string, size_t> TD2Info(const TARIFF_DATA & td)
61 {
62 return std::make_pair(td.tariffConf.name, 0);
63 }