[rhmessaging-commits] rhmessaging commits: r4255 - in mgmt/newdata: rosemary/python/rosemary and 1 other directory.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Mon Sep 6 10:48:33 EDT 2010


Author: justi9
Date: 2010-09-06 10:48:32 -0400 (Mon, 06 Sep 2010)
New Revision: 4255

Modified:
   mgmt/newdata/cumin/python/cumin/main.py
   mgmt/newdata/cumin/python/cumin/model.py
   mgmt/newdata/cumin/python/cumin/stat.py
   mgmt/newdata/rosemary/python/rosemary/model.py
   mgmt/newdata/rosemary/python/rosemary/sqloperation.py
Log:
For bz623189, to provide data continuity of samples between agent
restarts.

Sample data is now keyed by qmf agent and object id, not by the local
database ids used for objects.  The latter change as agents come and
go.

This change requires a schema reload.


Modified: mgmt/newdata/cumin/python/cumin/main.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/main.py	2010-09-03 20:23:44 UTC (rev 4254)
+++ mgmt/newdata/cumin/python/cumin/main.py	2010-09-06 14:48:32 UTC (rev 4255)
@@ -54,6 +54,8 @@
         self.operator_email = None
         self.update_interval = 10
 
+        # self.model.sql_logging_enabled = True
+
     def check(self):
         log.info("Checking %s", self)
 

Modified: mgmt/newdata/cumin/python/cumin/model.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/model.py	2010-09-03 20:23:44 UTC (rev 4254)
+++ mgmt/newdata/cumin/python/cumin/model.py	2010-09-06 14:48:32 UTC (rev 4255)
@@ -458,21 +458,27 @@
 
 class SamplesSqlAdapter(SqlAdapter):
     qmf_update_col = '_qmf_update_time'
-    _parent_id_col = "_parent_id"
 
-    def __init__(self, app, table, parent_id):
+    def __init__(self, app, table, agent_id, object_id):
         super(SamplesSqlAdapter, self).__init__(app, table)
 
-        self.parent_id = parent_id
+        assert ";" not in agent_id
+        assert ";" not in object_id
 
+        col = self.table._qmf_agent_id
+        filter = SqlComparisonFilter(col, "'%s'" % agent_id)
+        self.query.add_filter(filter)
+
+        col = self.table._qmf_object_id
+        filter = SqlComparisonFilter(col, "'%s'" % object_id)
+        self.query.add_filter(filter)
+
     def get_sql_options(self, options):
         return options
 
     def avg_samples(self, stat, secs, interval, secs2):
-        table = self.table
-        stat_col = table._columns_by_name[stat.name]
-        updated_col = table._columns_by_name[self.qmf_update_col]
-        parent_col = table._columns_by_name[self._parent_id_col]
+        stat_col = self.table._columns_by_name[stat.name]
+        updated_col = self.table._columns_by_name[self.qmf_update_col]
 
         max_col = "max(%s) as interval_end" % updated_col.identifier
         value_col = "cast(avg(%s) as integer) as value" % stat_col.identifier
@@ -484,10 +490,6 @@
         columns.append(dev_col)
         self.columns = columns
 
-        self.query.filters = list()
-        filter = SqlComparisonFilter(parent_col, self.parent_id, "=")
-        self.query.add_filter(filter)
-
         when = "now() - interval '%i seconds'" % int(secs + secs2)
         filter = SqlComparisonFilter(updated_col, when, ">=")
         self.query.add_filter(filter)
@@ -504,25 +506,18 @@
         samples = self.get_data({}, options)
         return samples
 
-
     def samples(self, stat, secs, interval, method, secs2=0, delta=False):
         if method == "avg":
             return self.avg_samples(stat, secs, interval, secs2)
 
-        table = self.table
-        stat_col = table._columns_by_name[stat.name]
-        updated_col = table._columns_by_name[self.qmf_update_col]
-        parent_col = table._columns_by_name[self._parent_id_col]
+        stat_col = self.table._columns_by_name[stat.name]
+        updated_col = self.table._columns_by_name[self.qmf_update_col]
 
         columns = list()
         columns.append(updated_col.identifier)
         columns.append(stat_col.identifier)
         self.columns = columns
 
-        self.query.filters = list()
-        filter = SqlComparisonFilter(parent_col, self.parent_id, "=")
-        self.query.add_filter(filter)
-
         if not delta:
             when = "now() - interval '%i seconds'" % int(secs + secs2)
             filter = SqlComparisonFilter(updated_col, when, ">=")

Modified: mgmt/newdata/cumin/python/cumin/stat.py
===================================================================
--- mgmt/newdata/cumin/python/cumin/stat.py	2010-09-03 20:23:44 UTC (rev 4254)
+++ mgmt/newdata/cumin/python/cumin/stat.py	2010-09-06 14:48:32 UTC (rev 4255)
@@ -108,7 +108,8 @@
         object = self.object.get(session)
         params = list()
 
-        params.append("id=%i" % object._id)
+        params.append("agent=%s" % object._qmf_agent_id)
+        params.append("object=%s" % object._qmf_object_id)
         params.append("chart_id=%s" % self.render_id(session, None))
         params.append("duration=%s" % self.duration.get(session))
         params.append("rpkg=%s" % object._class._package._name)
@@ -233,12 +234,13 @@
         self.rosemary_package = Parameter(app, "rpkg")
         self.add_parameter(self.rosemary_package)
 
-        self.id = IntegerParameter(app, "id")
-        self.add_parameter(self.id)
+        self.agent_id = StringParameter(app, "agent")
+        self.add_parameter(self.agent_id)
 
+        self.object_id = StringParameter(app, "object")
+        self.add_parameter(self.object_id)
+
         param = Parameter(app, "param")
-        self.add_parameter(param)
-
         self.stats = ListParameter(app, "stat", param)
         self.add_parameter(self.stats)
 
@@ -279,9 +281,16 @@
         rclass = self.rosemary_class.get(session)
         rosemary_package = self.app.model._packages_by_name[rpackage]
         rosemary_class = rosemary_package._classes_by_name[rclass]
-        id = str(self.id.get(session))
 
-        adapter = SamplesSqlAdapter(self.app, rosemary_class.sql_samples_table, id)
+        table = rosemary_class.sql_samples_table
+        agent_id = self.agent_id.get(session)
+        object_id = self.object_id.get(session)
+
+        assert agent_id
+        assert object_id
+
+        adapter = SamplesSqlAdapter(self.app, table, agent_id, object_id)
+
         stats = [getattr(rosemary_class, x) for x in self.stats.get(session)]
 
         return (adapter, stats)

Modified: mgmt/newdata/rosemary/python/rosemary/model.py
===================================================================
--- mgmt/newdata/rosemary/python/rosemary/model.py	2010-09-03 20:23:44 UTC (rev 4254)
+++ mgmt/newdata/rosemary/python/rosemary/model.py	2010-09-06 14:48:32 UTC (rev 4255)
@@ -263,6 +263,8 @@
 
         self._id.sql_column = self.sql_table.key_column
 
+        self.add_samples_sql()
+
         for hdr in self._headers:
             hdr.init()
 
@@ -286,8 +288,6 @@
             ref.init()
 
     def add_sql_entities(self):
-        # Main table
-
         name = "%s_id_seq" % self._name
         self.sql_sequence = SqlSequence(self._package.sql_schema, name)
 
@@ -299,25 +299,9 @@
         name = "%s_pk" % self._name
         SqlPrimaryKeyConstraint(self.sql_table, name, (id_col,))
 
-        # Stats table
-
-        name = "%s_samples" % self._name
-        self.sql_samples_table = SqlTable(self._package.sql_schema, name)
-
-        name = "_parent_id"
-        parent_col = SqlColumn(self.sql_samples_table, name, sql_int8)
-        parent_col.foreign_key_column = id_col
-
-        name = "%s_%s_idx" % (self.sql_samples_table._name, parent_col.name)
-        index = SqlIndex(self._package.sql_schema, name, (parent_col,))
-
-        name = "_qmf_update_time"
-        SqlColumn(self.sql_samples_table, name, sql_timestamp)
-
     def add_sql_constraints(self):
         name = "%s_qmf_id_uq" % self._name
         cols = (self._qmf_agent_id.sql_column, self._qmf_object_id.sql_column)
-
         SqlUniqueConstraint(self.sql_table, name, cols)
 
     def add_sql_operations(self):
@@ -329,8 +313,20 @@
         self.sql_update_object = SqlUpdateObject(self.sql_table)
         self.sql_delete_object = SqlDeleteObject(self.sql_table)
 
-        table = self.sql_samples_table
+    def add_samples_sql(self):
+        name = "%s_samples" % self._name
+        table = SqlTable(self._package.sql_schema, name)
 
+        self.sql_samples_table = table
+
+        agent_col = SqlColumn(table, "_qmf_agent_id", sql_text)
+        object_col = SqlColumn(table, "_qmf_object_id", sql_text)
+
+        name = "%s_qmf_id_idx" % table._name
+        SqlIndex(self._package.sql_schema, name, (agent_col, object_col))
+
+        SqlColumn(table, "_qmf_update_time", sql_timestamp)
+
         self.sql_samples_insert = SqlInsertObjectSamples(table)
         self.sql_samples_delete = SqlDeleteObjectSamples(table)
 
@@ -714,7 +710,7 @@
         log.debug("Initializing %s", self)
 
         schema = self.cls._package.sql_schema
-        name = "%s_%s_index" % (self.cls._name, self.name)
+        name = "%s_%s_idx" % (self.cls._name, self.name)
         columns = [x.sql_column for x in self.attributes]
 
         self.sql_index = SqlIndex(schema, name, columns)

Modified: mgmt/newdata/rosemary/python/rosemary/sqloperation.py
===================================================================
--- mgmt/newdata/rosemary/python/rosemary/sqloperation.py	2010-09-03 20:23:44 UTC (rev 4254)
+++ mgmt/newdata/rosemary/python/rosemary/sqloperation.py	2010-09-06 14:48:32 UTC (rev 4255)
@@ -104,8 +104,11 @@
         cols = ["\"%s\"" % x for x in names]
         vals = ["%%(%s)s" % x for x in names]
 
-        cols.append("\"_parent_id\"")
-        vals.append("%(_id)s")
+        cols.append("\"_qmf_agent_id\"")
+        cols.append("\"_qmf_object_id\"")
+        
+        vals.append("%(_qmf_agent_id)s")
+        vals.append("%(_qmf_object_id)s")
 
         cols = ", ".join(cols)
         vals = ", ".join(vals)



More information about the rhmessaging-commits mailing list