Show
Ignore:
Timestamp:
01/21/09 23:13:05 (1 year ago)
Author:
syrus
Message:

optimisation postgres par sxpert - synchro avec la version en prod

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • wifidog/wifidog-auth/wifidog/ping/index.php

    r307 r598  
    4646 
    4747/** 
     48 * Raphael Jacquot 2009-01-15 
     49 * amélioration des vérifications des entrées. 
     50 */ 
     51 
     52/** 
    4853 * Load required files 
    49  */ 
    50 require_once('../include/common.php'); 
     54 * connect to the database directly, get rid of the dumbass abstraction layer from hell 
     55 */ 
     56require_once('../config.php'); 
     57$conn_string = "host=".CONF_DATABASE_HOST." dbname=".CONF_DATABASE_NAME." user=".CONF_DATABASE_USER." password=".CONF_DATABASE_PASSWORD; 
     58$db = @ pg_pconnect($conn_string); 
     59 
     60if ($db == FALSE) { 
     61    // si on a un probleme, on sort sans rien faire 
     62    error_log ("Unable to connect to database"); 
     63    exit(1); 
     64
    5165 
    5266echo "Pong"; 
    5367 
    5468// On recupere l'id de la gateway 
    55 $node_id = $db->escapeString($_REQUEST['gw_id']); 
     69if (array_key_exists('gw_id',$_REQUEST)) $node_id = $_REQUEST['gw_id']; 
     70else $node_id=""; 
    5671 
    5772// On recupere la version de Wifidog utilisee 
    58 $user_agent =  $db->escapeString($_SERVER['HTTP_USER_AGENT']); 
     73if (array_key_exists('HTTP_USER_AGENT',$_SERVER)) $user_agent =  $_SERVER['HTTP_USER_AGENT']; 
     74else $user_agent=""; 
    5975 
    6076// On recupere le network_id 
    61 if(isset($_REQUEST['network_id'])) $network_id = $db->escapeString($_REQUEST['network_id'])
    62  
     77if (array_key_exists('network_id',$_REQUEST)) $network_id = $_REQUEST['network_id']
     78else $network_id=""; 
    6379 
    6480// On recupere les coordonnees gps  
    65 if(isset($_REQUEST['lat'])) $lat = $db->escapeString($_REQUEST['lat']); 
    66 else $lat = 0
    67  
    68 if(isset($_REQUEST['lon'])) $lon = $db->escapeString($_REQUEST['lon'])
    69 else $lon = 0
     81// c'est transformé en float automatiquement par php (comme ca on est tranquille) 
     82if (array_key_exists('lat', $_REQUEST)) $lat = 0.0+$_REQUEST['lat']
     83else $lat = 0.0; 
     84if (array_key_exists('lon', $_REQUEST)) $lon=0.0+$_REQUEST['lon']
     85else $lon = 0.0
    7086 
    7187// On recupere le node name 
    72 if(isset($_REQUEST['node_name'])) $node_name = $db->escapeString($_REQUEST['node_name']); 
     88if (array_key_exists('node_name',$_REQUEST)) $node_name = trim($_REQUEST['node_name']); 
    7389else $node_name = ""; 
    7490 
    7591if($node_name == "(null)") $node_name = ""; 
    7692 
    77  
    7893// On verifie que le noeud existe en base 
    79 $db->execSql("SELECT * FROM nodes WHERE node_id='$node_id'",$result0,false); 
    80 $numrow = count($result0); 
     94$q = pg_query_params($db, "select node_id, name from nodes where node_id=$1;", array($node_id)); 
     95$numrow = pg_num_rows($q); 
    8196 
    8297// Si le noeud n'existe pas  
    83 if ($numrow == 0 && isset($_REQUEST['prop'])){ 
     98if (($numrow == 0) && array_key_exists('prop',$_REQUEST)){ 
    8499         
     100    /* modifications de valeurs */ 
     101    if($network_id=="") $network_id="default-network"; 
     102        if($node_name=="") $node_name="Node".$owner; 
     103 
     104    echo "\nLe node $node_id n existe pas\n"; 
    85105    // On verifie que le proprietaire est enregistre en base 
    86     $proprietary = $db->escapeString($_REQUEST['prop']); 
    87     $db->execSql("SELECT user_id FROM users WHERE username='$proprietary'",$result,false); 
    88     $numrow = count($result); 
     106 
     107    $owner = $_REQUEST['prop']; 
     108    echo "Proprio: $owner\n"; 
     109 
     110    $q = pg_query_params($db, "select user_id from users where username=$1;", array($owner)); 
     111    $numrow = pg_num_rows($q); 
    89112    
     113    echo "Nbr de résultats : $numrow\n"; 
     114 
    90115    // Si le proprietaire est enregistre comme utilisateur 
     116    // normalement on ne doit en avoir qu'un seul 
    91117    if ($numrow == 1){ 
    92         $user_id=$result[0]["user_id"];  
     118        echo "Proprio $owner existe\n"; 
     119 
     120        $row = pg_fetch_assoc($q); 
     121        $user_id=$row["user_id"];  
    93122        
    94123        // On ajoute le noeud a la base 
    95         if($network_id=="") $network_id="default-network"; 
    96  
    97                 if($node_name=="") $node_name="Node".$proprietary; 
    98  
    99         $db->execSql("INSERT into nodes(network_id,last_heartbeat_ip,last_heartbeat_timestamp,last_heartbeat_user_agent,node_id,latitude,longitude,node_deployment_status,name) values('$network_id','$_SERVER[REMOTE_ADDR]', NOW(), '$user_agent', '$node_id', $lat, $lon , 'DEPLOYED', '$node_name' )",$result,false); 
     124        echo "Rajout du node $node_id\n"; 
     125 
     126        pg_query_params ($db, "insert into nodes(network_id, last_heartbeat_ip, last_heartbeat_timestamp, last_heartbeat_user_agent,". 
     127            "node_id, latitude, longitude, node_deployment_status, name) values ($1, $2, CURRENT_TIMESTAMP, $3, $4, $5, $6, $7, $8);", 
     128            array ($network_id, $_SERVER['REMOTE_ADDR'], $user_agent, $node_id, $lat, $lon, "DEPLOYED", $node_name)); 
    100129 
    101130        // On ajoute les droits d'administration du noeud au proprietaire 
    102         $db->execSql("INSERT into node_stakeholders(node_id,user_id,is_owner,is_tech_officer) values('$node_id','$user_id', 'TRUE', 'FALSE')",$result,false); 
     131        echo "Rajout $user_id pour $node_id\n"; 
     132        pg_query_params ($db, "insert into node_stakeholders (node_id, user_id, is_owner, is_tech_officer) values ($1, $2, 'TRUE', 'FALSE');", array($node_id, $user_id)); 
    103133         
     134    } else { 
     135        if ($numrow==0) { 
     136            $errmsg = sprintf("Attempting to add node %s (%s) to network %s with owner %s failed, owner does not exist", 
     137                $node_id, $node_name, $network_id, $owner); 
     138            error_log ($errmsg); 
     139        } else { 
     140            $errmsg = sprintf("CAN'T HAPPEN: found multiple (%d) users for user_id %s", $numrow, $user_id); 
     141            error_log ($errmsg); 
     142        } 
    104143    } 
    105144 
     
    107146    // Le noeud existe deja en base, on met a jour ses informations 
    108147 
     148    echo "\nMise a jour des infos.\n"; 
     149 
    109150    $sql = "last_heartbeat_ip='". $_SERVER['REMOTE_ADDR']. "', last_heartbeat_user_agent='$user_agent'"; 
    110151 
     
    113154    if($lat!=0 && $lon!=0) $sql .= ", latitude=$lat, longitude=$lon"; 
    114155 
    115         if($result0[0]["name"] == "") $sql .= ", name='". $node_name ."'"; 
    116  
    117         $db->execSqlUpdate("UPDATE nodes SET last_heartbeat_timestamp=NOW(), node_deployment_status='DEPLOYED', $sql  WHERE node_id='$node_id'"); 
     156    // change le nom du node si ca a changé 
     157        $row = pg_fetch_assoc($q); 
     158    $errmsg = "node_id = '".$node_id."', name = '".$row['name']."', node_name = '".$node_name."'"; 
     159    if (strcmp($row["name"], $node_name)!=0) { 
     160        $errmsg.=" ==> name change"; 
     161        error_log ($errmsg); 
     162    } 
     163 
     164    $req = "update nodes set last_heartbeat_timestamp=CURRENT_TIMESTAMP, node_deployment_status='DEPLOYED', $sql where node_id='$node_id';"; 
     165        pg_query($db, $req); 
    118166 
    119167} 
    120168 
     169pg_close($db); 
    121170 
    122171////////////////////////////////////////////////////////////////////////