Przeglądaj źródła

fix counters sql request

Nicolas FRADIN 12 lat temu
rodzic
commit
0c6d388e66
3 zmienionych plików z 38 dodań i 12 usunięć
  1. 2 1
      engines/countersEngine.js
  2. 18 9
      mysql-backend.js
  3. 18 2
      tables/counters_statistics.sql

+ 2 - 1
engines/countersEngine.js

@@ -27,7 +27,8 @@ MySQLBackendCountersEngine.prototype.buildQuerries = function(userCounters, time
          *    - userCounterName: Counter name
          *    - counterValue: Counter value
          */
-        querries.push("insert into `counters_statistics` (`timestamp`,`name`,`value`) values(" + time_stamp + ",'" + userCounterName +"'," + counterValue + ") on duplicate key update value = value + " + counterValue + ", timestamp = " + time_stamp);
+        //querries.push("insert into `counters_statistics` (`timestamp`,`name`,`value`) values(" + time_stamp + ",'" + userCounterName +"'," + counterValue + ") on duplicate key update value = value + " + counterValue + ", timestamp = " + time_stamp);
+        querries.push("insert into `counters_statistics` values ("+time_stamp+", '"+userCounterName+"', counters_get_max(name) + "+counterValue+");");
       }
     }
 

+ 18 - 9
mysql-backend.js

@@ -201,15 +201,24 @@ StatdMySQLBackend.prototype.checkDatabase = function() {
               console.log("Unable to read file: '" + sqlFilePath + "' ! Exit...");
               process.exit(-1);
             }
+
+            // Split querries
+            var querries = data.split("$$");
+
+            // Execute each query
+            for(var queryIndex in querries) {
+              var query = querries[queryIndex];
+              if(query.trim() == "") continue;
+              self.sqlConnection.query(query, function(err, results, fields) {
+                if(err) {
+                  console.log("Unable to execute query: '" + query +"' for table '"+table_name+"' ! Exit...");
+                  process.exit(-1);
+                } 
+
+              });
+            }
+            console.log("Table '" + table_name +"' was created with success.");
             
-            self.sqlConnection.query(data, function(err, results, fields) {
-              if(err) {
-                console.log("Unable to create table: '" + table_name +"' ! Exit...");
-                process.exit(-1);
-              } 
-
-              console.log("Table '" + table_name +"' was created with success.");
-            });
           });
         }
       });
@@ -279,7 +288,7 @@ StatdMySQLBackend.prototype.handleCounters = function(_counters, time_stamp) {
     console.log("Querries count : " + querriesCount );
 
     //////////////////////////////////////////////////////////////////////
-    // If at least one querry can be executed, execute pending querries
+    // If at least one query can be executed, execute pending querries
     if(querriesCount > 0) {
 
       // Open MySQL connection

+ 18 - 2
tables/counters_statistics.sql

@@ -1,5 +1,21 @@
+-- Stadard DELIMITER is $$
+
+-- Counters statistics table
 CREATE  TABLE `statsd_db`.`counters_statistics` (
     `timestamp` BIGINT NOT NULL ,
     `name` VARCHAR(255) NOT NULL ,
-    `value` VARCHAR(45) NOT NULL ,
-PRIMARY KEY (`timestamp`, `name`) );
+    `value` INT(11) NOT NULL ,
+PRIMARY KEY (`name`, `timestamp`) )$$
+
+-- Procedure used to calculate values sum for the same userKey name
+CREATE FUNCTION `counters_get_max`(_name VARCHAR(255)) RETURNS INT(11)
+READS SQL DATA
+BEGIN 
+      DECLARE r INT;
+      SELECT  MAX(`value`)
+      INTO    r
+      FROM    `statsd_db`.`counters_statistics`
+      WHERE   name = _name;
+      
+      RETURN IF(r IS NULL, 0, r);
+END$$