]> git.stg.codes - stg.git/commitdiff
Table builders added for the SMUX plugin
authorMaxim Mamontov <faust.madf@gmail.com>
Mon, 8 Aug 2011 18:25:03 +0000 (21:25 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Mon, 8 Aug 2011 18:25:03 +0000 (21:25 +0300)
projects/stargazer/plugins/other/smux/tables.cpp [new file with mode: 0644]
projects/stargazer/plugins/other/smux/tables.h [new file with mode: 0644]

diff --git a/projects/stargazer/plugins/other/smux/tables.cpp b/projects/stargazer/plugins/other/smux/tables.cpp
new file mode 100644 (file)
index 0000000..023b90b
--- /dev/null
@@ -0,0 +1,45 @@
+#include <utility>
+
+#include "stg/user_property.h"
+
+#include "tables.h"
+
+void TariffUsersTable::UpdateSensors(Sensors & sensors) const
+{
+std::map<std::string, size_t> data;
+
+int handle = users.OpenSearch();
+if (!handle)
+    return;
+
+USER_PTR user;
+while (!users.SearchNext(handle, &user))
+    {
+    std::string tariffName(user->GetProperty().tariffName.ConstData());
+    std::map<std::string, size_t>::iterator it;
+    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<std::string, size_t>::const_iterator it(data.begin());
+while (it != data.end())
+    {
+    sensors[prefixOid.copyWithSuffix(2, idx)] = new ConstSensor<std::string>(it->first);
+    sensors[prefixOid.copyWithSuffix(3, idx)] = new ConstSensor<int>(it->second);
+    ++idx;
+    ++it;
+    }
+}
diff --git a/projects/stargazer/plugins/other/smux/tables.h b/projects/stargazer/plugins/other/smux/tables.h
new file mode 100644 (file)
index 0000000..ad3b55a
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef __TABLES_H__
+#define __TABLES_H__
+
+#include <string>
+#include <map>
+
+#include "sensors.h"
+
+class TableSensor {
+    public:
+        TableSensor(const std::string & p) : prefix(p) {}
+        virtual ~TableSensor() {}
+
+        const std::string & GetPrefix() const { return prefix; }
+        virtual void UpdateSensors(Sensors & sensors) const = 0;
+
+    protected:
+        std::string prefix;
+};
+
+class TariffUsersTable : public TableSensor {
+    public:
+        TariffUsersTable(const std::string & p,
+                         USERS & u)
+            : TableSensor(p),
+              users(u)
+        {}
+        virtual ~TariffUsersTable() {}
+
+        void UpdateSensors(Sensors & sensors) const;
+
+    private:
+        USERS & users;
+};
+
+typedef std::map<std::string, TableSensor *> Tables;
+
+#endif