2011-02-27 Miguel de Dios <miguel.dedios@artica.es>
* pandoradb_data.sql, pandoradb.data.postgreSQL.sql: in the table "tgrupo" reordered the last field, this field is "custom_id" with '' value. * pandoradb.postgreSQL.sql: commented the first lines before it was for make manuallity the schema. Fixed in the "talert_templates" the column "id_alert_action" can be null, and fixed the type of column "id_language" in table "tlanguage". And move to empty lines some end line comments and group in one line the functions for avoid the error in the install. * include/db/postgresql.php: fixed in the function "postgresql_get_db_row" the quotes for the field, the correct quotes is " for PostgreSQL. * include/auth/mysql.php, include/functions_db.php: cleaned source code style. * install.php: now the installer can install a schema and data in PostgreSQL database. * extensions/update_manager.php: added some code and TODO comment to fix or develop the method to use postgreSQL. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@4021 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
parent
b73a6f05e2
commit
5df64e0295
|
@ -1,3 +1,26 @@
|
|||
2011-02-27 Miguel de Dios <miguel.dedios@artica.es>
|
||||
|
||||
* pandoradb_data.sql, pandoradb.data.postgreSQL.sql: in the table "tgrupo"
|
||||
reordered the last field, this field is "custom_id" with '' value.
|
||||
|
||||
* pandoradb.postgreSQL.sql: commented the first lines before it was for
|
||||
make manuallity the schema. Fixed in the "talert_templates" the column
|
||||
"id_alert_action" can be null, and fixed the type of column "id_language"
|
||||
in table "tlanguage". And move to empty lines some end line comments and
|
||||
group in one line the functions for avoid the error in the install.
|
||||
|
||||
* include/db/postgresql.php: fixed in the function "postgresql_get_db_row"
|
||||
the quotes for the field, the correct quotes is " for PostgreSQL.
|
||||
|
||||
* include/auth/mysql.php, include/functions_db.php: cleaned source code
|
||||
style.
|
||||
|
||||
* install.php: now the installer can install a schema and data in PostgreSQL
|
||||
database.
|
||||
|
||||
* extensions/update_manager.php: added some code and TODO comment to fix or
|
||||
develop the method to use postgreSQL.
|
||||
|
||||
2011-02-24 Miguel de Dios <miguel.dedios@artica.es>
|
||||
|
||||
* include/db/postgresql.php: in function "postgresql_connect_db" added
|
||||
|
|
|
@ -134,6 +134,12 @@ if(isset($config['id_user'])) {
|
|||
}
|
||||
|
||||
$db = NULL;
|
||||
|
||||
pandora_update_manager_install ();
|
||||
switch ($config['dbtype']) {
|
||||
case 'mysql':
|
||||
pandora_update_manager_install ();
|
||||
break;
|
||||
case 'postgresql':
|
||||
//TODO MAKE THE UPDATE MANAGER FOR POSTGRESQL
|
||||
break;
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -232,7 +232,7 @@ function get_user_id ($user) {
|
|||
* @return bool True if the user exists.
|
||||
*/
|
||||
function is_user ($user) {
|
||||
$user = get_db_row ('tusuario', 'id_user', get_user_id ($user));
|
||||
$user = get_db_row('tusuario', 'id_user', get_user_id ($user));
|
||||
if (! $user)
|
||||
return false;
|
||||
return true;
|
||||
|
|
|
@ -103,15 +103,15 @@ function postgresql_get_db_row ($table, $field_search, $condition, $fields = fal
|
|||
}
|
||||
|
||||
if (is_int ($condition)) {
|
||||
$sql = sprintf ('SELECT %s FROM "%s" WHERE \'%s\' = %d LIMIT 1',
|
||||
$sql = sprintf ('SELECT %s FROM "%s" WHERE "%s" = %d LIMIT 1',
|
||||
$fields, $table, $field_search, $condition);
|
||||
}
|
||||
else if (is_float ($condition) || is_double ($condition)) {
|
||||
$sql = sprintf ("SELECT %s FROM \"%s\" WHERE '%s' = %f LIMIT 1",
|
||||
$sql = sprintf ("SELECT %s FROM \"%s\" WHERE \"%s\" = %f LIMIT 1",
|
||||
$fields, $table, $field_search, $condition);
|
||||
}
|
||||
else {
|
||||
$sql = sprintf ("SELECT %s FROM \"%s\" WHERE '%s' = '%s' LIMIT 1",
|
||||
$sql = sprintf ("SELECT %s FROM \"%s\" WHERE \"%s\" = '%s' LIMIT 1",
|
||||
$fields, $table, $field_search, $condition);
|
||||
}
|
||||
$result = get_db_all_rows_sql ($sql);
|
||||
|
|
|
@ -71,7 +71,7 @@ function check_login () {
|
|||
}
|
||||
|
||||
if ((isset($_SESSION["id_usuario"])) AND ($_SESSION["id_usuario"] != "")) {
|
||||
if (is_user ($_SESSION["id_usuario"])) {
|
||||
if (is_user($_SESSION["id_usuario"])) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -170,20 +170,46 @@ function parse_mysql_dump($url){
|
|||
return 0;
|
||||
}
|
||||
|
||||
function parse_postgresql_dump($url) {
|
||||
function parse_postgresql_dump($connection, $url, $debug = false) {
|
||||
if (file_exists($url)) {
|
||||
$file_content = file($url);
|
||||
|
||||
$query = "";
|
||||
|
||||
foreach($file_content as $sql_line){
|
||||
$comment = preg_match("/^(\s|\t)*--.*$/", $line);
|
||||
$clean_line = trim($sql_line);
|
||||
$comment = preg_match("/^(\s|\t)*--.*$/", $clean_line);
|
||||
if ($comment) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$clean_line = $sql_line;
|
||||
var_dump($clean_line);
|
||||
if (empty($clean_line)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$query .= $clean_line;
|
||||
|
||||
//Check if the end of query with the the semicolon and any returns in the end of line
|
||||
if(preg_match("/;[\040]*\$/", $clean_line)) {
|
||||
//And execute and clean buffer
|
||||
pg_send_query($connection, $query);
|
||||
|
||||
$result = pg_get_result($connection);
|
||||
|
||||
if ($debug) {
|
||||
var_dump($query);
|
||||
var_dump(pg_result_error($result));
|
||||
}
|
||||
|
||||
if (pg_result_status($result) == PGSQL_FATAL_ERROR) {
|
||||
echo pg_result_error($result);
|
||||
echo "<i><br>$query<br></i>";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
$query = "";
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -527,8 +553,9 @@ function install_step4() {
|
|||
check_generic ( 1, "Connection with Database");
|
||||
|
||||
// Drop database if needed
|
||||
if ($dbdrop == 1)
|
||||
if ($dbdrop == 1) {
|
||||
mysql_query ("DROP DATABASE IF EXISTS $dbname");
|
||||
}
|
||||
|
||||
// Create schema
|
||||
$step1 = mysql_query ("CREATE DATABASE $dbname");
|
||||
|
@ -558,10 +585,10 @@ function install_step4() {
|
|||
$cfgin = fopen ("include/config.inc.php","r");
|
||||
$cfgout = fopen ($pandora_config,"w");
|
||||
$config_contents = fread ($cfgin, filesize("include/config.inc.php"));
|
||||
$dbtype = 'mysql'; //TODO set other types
|
||||
$dbtype = 'mysql';
|
||||
$config_new = '<?php
|
||||
// Begin of automatic config file
|
||||
$config["dbtype"] = "' . $dbtype . '"; //DB type (mysql, postgres)
|
||||
$config["dbtype"] = "' . $dbtype . '"; //DB type (mysql, postgresql...in future others)
|
||||
$config["dbname"]="'.$dbname.'"; // MySQL DataBase name
|
||||
$config["dbuser"]="pandora"; // DB User
|
||||
$config["dbpass"]="'.$random_password.'"; // DB Password
|
||||
|
@ -597,7 +624,7 @@ function install_step4() {
|
|||
|
||||
// Drop database if needed
|
||||
if ($dbdrop == 1) {
|
||||
pg_query($connection, "DROP DATABASE \"" . $dbname . "\";");
|
||||
$result = pg_query($connection, "DROP DATABASE \"" . $dbname . "\";");
|
||||
}
|
||||
|
||||
pg_send_query($connection, "CREATE DATABASE \"" . $dbname . "\" WITH ENCODING 'utf8';");
|
||||
|
@ -623,8 +650,127 @@ function install_step4() {
|
|||
check_generic ($step2, "Opening database '$dbname'");
|
||||
|
||||
if ($step2) {
|
||||
$step3 = parse_postgresql_dump("pandoradb.postgreSQL.sql");
|
||||
check_generic ($step3, "Creating schema");
|
||||
$step3 = parse_postgresql_dump($connection, "pandoradb.postgreSQL.sql");
|
||||
}
|
||||
|
||||
check_generic($step3, "Creating schema");
|
||||
|
||||
if ($step3) {
|
||||
$step4 = parse_postgresql_dump($connection, "pandoradb.data.postgreSQL.sql");
|
||||
}
|
||||
|
||||
check_generic ($step4, "Populating database");
|
||||
|
||||
if ($step4) {
|
||||
$random_password = random_name (8);
|
||||
|
||||
pg_query($connection, "DROP USER pandora");
|
||||
pg_send_query($connection, "CREATE USER pandora WITH PASSWORD '" . $random_password . "'");
|
||||
$result = pg_get_result($connection);
|
||||
|
||||
if (pg_result_status($result) != PGSQL_FATAL_ERROR) {
|
||||
//Set the privileges for DB
|
||||
pg_send_query($connection, "GRANT ALL PRIVILEGES ON DATABASE pandora to pandora;");
|
||||
$result = pg_get_result($connection);
|
||||
|
||||
$setDBPrivileges = 0;
|
||||
if (pg_result_status($result) != PGSQL_FATAL_ERROR) {
|
||||
$setDBPrivileges = 1;
|
||||
}
|
||||
|
||||
if ($setDBPrivileges) {
|
||||
//Set the privileges for each tables.
|
||||
pg_send_query($connection, "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';");
|
||||
$result = pg_get_result($connection);
|
||||
|
||||
$tables = array();
|
||||
while ($row = pg_fetch_assoc($result)) {
|
||||
$tables[] = $row['table_name'];
|
||||
}
|
||||
|
||||
$correct = 1;
|
||||
foreach ($tables as $table) {
|
||||
pg_send_query($connection, "GRANT ALL PRIVILEGES ON TABLE " . $table . " to pandora;");
|
||||
$result = pg_get_result($connection);
|
||||
|
||||
if (pg_result_status($result) == PGSQL_FATAL_ERROR) {
|
||||
$correct = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
//INI ----- Grant for secuences
|
||||
pg_send_query($connection, "SELECT column_name FROM information_schema.columns WHERE table_name = '" . $table . "';");
|
||||
$result2 = pg_get_result($connection);
|
||||
|
||||
$columns = array();
|
||||
while ($row = pg_fetch_assoc($result2)) {
|
||||
$columns[] = $row['column_name'];
|
||||
}
|
||||
|
||||
//Check for each column if it have a sequence to grant
|
||||
foreach ($columns as $column) {
|
||||
pg_send_query($connection, "SELECT pg_get_serial_sequence('" . $table . "', '" . $column . "');");
|
||||
$result3 = pg_get_result($connection);
|
||||
|
||||
$sequence = pg_fetch_assoc($result3);
|
||||
if (!empty($sequence['pg_get_serial_sequence'])) {
|
||||
pg_send_query($connection, "GRANT ALL PRIVILEGES ON SEQUENCE " . $sequence['pg_get_serial_sequence'] . " to pandora;");
|
||||
$result4 = pg_get_result($connection);
|
||||
|
||||
if (pg_result_status($result4) == PGSQL_FATAL_ERROR) {
|
||||
$correct = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//END ----- Grant for secuences
|
||||
|
||||
}
|
||||
|
||||
if ($correct) {
|
||||
$step5 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
check_generic ($step5, "Established privileges for user pandora. A new random password has been generated: <b>$random_password</b><div class='warn'>Please write it down, you will need to setup your Pandora FMS server, editing the </i>/etc/pandora/pandora_server.conf</i> file</div>");
|
||||
|
||||
if ($step5) {
|
||||
$step6 = is_writable("include");
|
||||
}
|
||||
|
||||
check_generic ($step6, "Write permissions to save config file in './include'");
|
||||
|
||||
if ($step6) {
|
||||
$cfgin = fopen ("include/config.inc.php","r");
|
||||
$cfgout = fopen ($pandora_config,"w");
|
||||
$config_contents = fread ($cfgin, filesize("include/config.inc.php"));
|
||||
$dbtype = 'postgresql';
|
||||
$config_new = '<?php
|
||||
// Begin of automatic config file
|
||||
$config["dbtype"] = "' . $dbtype . '"; //DB type (mysql, postgresql...in future others)
|
||||
$config["dbname"]="'.$dbname.'"; // MySQL DataBase name
|
||||
$config["dbuser"]="pandora"; // DB User
|
||||
$config["dbpass"]="'.$random_password.'"; // DB Password
|
||||
$config["dbhost"]="'.$dbhost.'"; // DB Host
|
||||
$config["homedir"]="'.$path.'"; // Config homedir
|
||||
$config["homeurl"]="'.$url.'"; // Base URL
|
||||
// End of automatic config file
|
||||
?>';
|
||||
$step7 = fputs ($cfgout, $config_new);
|
||||
$step7 = $step7 + fputs ($cfgout, $config_contents);
|
||||
if ($step7 > 0)
|
||||
$step7 = 1;
|
||||
fclose ($cfgin);
|
||||
fclose ($cfgout);
|
||||
chmod ($pandora_config, 0600);
|
||||
}
|
||||
|
||||
check_generic ($step7, "Created new config file at '".$pandora_config."'");
|
||||
|
||||
if (($step7 + $step6 + $step5 + $step4 + $step3 + $step2 + $step1) == 7) {
|
||||
$everything_ok = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -704,19 +850,20 @@ function install_step5() {
|
|||
|
||||
if (! isset($_GET["step"])){
|
||||
install_step1();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$step = $_GET["step"];
|
||||
switch ($step) {
|
||||
case 11: install_step1_licence();
|
||||
break;
|
||||
case 2: install_step2();
|
||||
break;
|
||||
case 3: install_step3();
|
||||
break;
|
||||
case 4: install_step4();
|
||||
break;
|
||||
case 5: install_step5();
|
||||
break;
|
||||
case 11: install_step1_licence();
|
||||
break;
|
||||
case 2: install_step2();
|
||||
break;
|
||||
case 3: install_step3();
|
||||
break;
|
||||
case 4: install_step4();
|
||||
break;
|
||||
case 5: install_step5();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -105,15 +105,16 @@ COMMIT WORK;
|
|||
--
|
||||
BEGIN WORK;
|
||||
LOCK TABLE "tgrupo";
|
||||
INSERT INTO "tgrupo" VALUES
|
||||
(2,'Servers','server_database',0,0,'',0),
|
||||
(4,'Firewalls','firewall',0,0,'',0),
|
||||
(8,'Databases','database_gear',0,0,'',0),
|
||||
(9,'Network','transmit',0,0,'',0),
|
||||
(10,'Unknown','world',0,0,'',0),
|
||||
(11,'Workstations','computer',0,0,'',0),
|
||||
(12,'Applications','applications',0,0,'',0),
|
||||
(13,'Web','world',0,0,'',0);
|
||||
INSERT INTO "tgrupo" ("id_grupo", "nombre", "icon", "parent", "propagate", "disabled", "custom_id")
|
||||
VALUES
|
||||
(2,'Servers','server_database',0,0,0,''),
|
||||
(4,'Firewalls','firewall',0,0,0,''),
|
||||
(8,'Databases','database_gear',0,0,0,''),
|
||||
(9,'Network','transmit',0,0,0,''),
|
||||
(10,'Unknown','world',0,0,0,''),
|
||||
(11,'Workstations','computer',0,0,0,''),
|
||||
(12,'Applications','applications',0,0,0,''),
|
||||
(13,'Web','world',0,0,0,'');
|
||||
COMMIT WORK;
|
||||
|
||||
--
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
-- -----------------------------------------------------------
|
||||
|
||||
-- The charset is for all DB not only table.
|
||||
CREATE DATABASE "pandora" WITH ENCODING 'utf8';
|
||||
--CREATE DATABASE "pandora" WITH ENCODING 'utf8';
|
||||
|
||||
\c "pandora"
|
||||
--\c "pandora"
|
||||
|
||||
CREATE LANGUAGE plpgsql;
|
||||
|
||||
|
@ -60,9 +60,12 @@ CREATE TABLE "tagente" (
|
|||
"custom_id" varchar(255) default '',
|
||||
"server_name" varchar(100) default '',
|
||||
"cascade_protection" SMALLINT NOT NULL default 0,
|
||||
"timezone_offset" SMALLINT NULL DEFAULT 0, --number of hours of diference with the server timezone
|
||||
"icon_path" VARCHAR(127) NULL DEFAULT NULL, --path in the server to the image of the icon representing the agent
|
||||
"update_gis_data" SMALLINT NOT NULL DEFAULT 1 --set it to one to update the position data (altitude, longitude, latitude) when getting information from the agent or to 0 to keep the last value and don\'t update it
|
||||
--number of hours of diference with the server timezone
|
||||
"timezone_offset" SMALLINT NULL DEFAULT 0,
|
||||
--path in the server to the image of the icon representing the agent
|
||||
"icon_path" VARCHAR(127) NULL DEFAULT NULL,
|
||||
--set it to one to update the position data (altitude, longitude, latitude) when getting information from the agent or to 0 to keep the last value and don\'t update it
|
||||
"update_gis_data" SMALLINT NOT NULL DEFAULT 1
|
||||
);
|
||||
CREATE INDEX "tagente_nombre_idx" ON "tagente"("nombre");
|
||||
CREATE INDEX "tagente_direccion_idx" ON "tagente"("direccion");
|
||||
|
@ -239,7 +242,7 @@ CREATE TABLE "talert_templates" (
|
|||
"id" SERIAL NOT NULL PRIMARY KEY,
|
||||
"name" text default '',
|
||||
"description" TEXT,
|
||||
"id_alert_action" INTEGER NOT NULL REFERENCES talert_actions("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
"id_alert_action" INTEGER REFERENCES talert_actions("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
"field1" text default '',
|
||||
"field2" text default '',
|
||||
"field3" text NOT NULL,
|
||||
|
@ -419,17 +422,12 @@ CREATE TABLE "tincidencia" (
|
|||
CREATE INDEX "tincidencia_id_1_idx" ON "tincidencia"("id_usuario","id_incidencia");
|
||||
CREATE INDEX "tincidencia_id_agente_modulo_idx" ON "tincidencia"("id_agente_modulo");
|
||||
--This function is for to tranlate "on update CURRENT_TIMESTAMP" of MySQL.
|
||||
CREATE OR REPLACE FUNCTION update_tincidencia_actualizacion()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.actualizacion = now();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ language 'plpgsql';
|
||||
--It is in only one line because the parser of Pandora installer execute the code at the end with ;
|
||||
CREATE OR REPLACE FUNCTION update_tincidencia_actualizacion() RETURNS TRIGGER AS $$ BEGIN NEW.actualizacion = now(); RETURN NEW; END; $$ language 'plpgsql';
|
||||
CREATE TRIGGER trigger_tincidencia_actualizacion BEFORE UPDATE ON tincidencia FOR EACH ROW EXECUTE PROCEDURE update_tincidencia_actualizacion();
|
||||
|
||||
CREATE TABLE "tlanguage" (
|
||||
"id_language" SERIAL NOT NULL PRIMARY KEY,
|
||||
"id_language" varchar(6) NOT NULL default '',
|
||||
"name" varchar(100) NOT NULL default ''
|
||||
);
|
||||
|
||||
|
@ -662,7 +660,7 @@ CREATE TABLE "tusuario" (
|
|||
"language" varchar(10) default NULL,
|
||||
"timezone" varchar(50) default '',
|
||||
"block_size" INTEGER NOT NULL default 20,
|
||||
"flash_chart" INTEGER NOT NULL default 1,
|
||||
"flash_chart" INTEGER NOT NULL default 1
|
||||
);
|
||||
|
||||
CREATE TABLE "tusuario_perfil" (
|
||||
|
@ -823,7 +821,8 @@ CREATE TABLE "tserver_export" (
|
|||
"port" INTEGER NOT NULL default 0,
|
||||
"directory" varchar(100) NOT NULL default '',
|
||||
"options" varchar(100) NOT NULL default '',
|
||||
"timezone_offset" SMALLINT NOT NULL default 0 --Number of hours of diference with the server timezone
|
||||
--Number of hours of diference with the server timezone
|
||||
"timezone_offset" SMALLINT NOT NULL default 0
|
||||
);
|
||||
|
||||
-- id_export_server is real pandora fms export server process that manages this server
|
||||
|
@ -861,16 +860,23 @@ CREATE TABLE "tplanned_downtime_agents" (
|
|||
-- -----------------------------------------------------
|
||||
--Table to store historical GIS information of the agents
|
||||
CREATE TABLE "tgis_data_history" (
|
||||
"id_tgis_data" SERIAL NOT NULL PRIMARY KEY, --key of the table
|
||||
--key of the table
|
||||
"id_tgis_data" SERIAL NOT NULL PRIMARY KEY,
|
||||
"longitude" DOUBLE PRECISION NOT NULL,
|
||||
"latitude" DOUBLE PRECISION NOT NULL,
|
||||
"altitude" DOUBLE PRECISION NOT NULL,
|
||||
"start_timestamp" TIMESTAMP without time zone DEFAULT CURRENT_TIMESTAMP, --timestamp on wich the agente started to be in this position
|
||||
"end_timestamp" TIMESTAMP without time zone default NULL, --timestamp on wich the agent was placed for last time on this position
|
||||
"description" TEXT DEFAULT NULL, --description of the region correoponding to this placemnt
|
||||
"manual_placement" SMALLINT NOT NULL default 0, --0 to show that the position cames from the agent, 1 to show that the position was established manualy
|
||||
"number_of_packages" INTEGER NOT NULL default 1, --Number of data packages received with this position from the start_timestampa to the_end_timestamp
|
||||
"tagente_id_agente" INTEGER NOT NULL --reference to the agent
|
||||
--timestamp on wich the agente started to be in this position
|
||||
"start_timestamp" TIMESTAMP without time zone DEFAULT CURRENT_TIMESTAMP,
|
||||
--timestamp on wich the agent was placed for last time on this position
|
||||
"end_timestamp" TIMESTAMP without time zone default NULL,
|
||||
--description of the region correoponding to this placemnt
|
||||
"description" TEXT DEFAULT NULL,
|
||||
-- 0 to show that the position cames from the agent, 1 to show that the position was established manualy
|
||||
"manual_placement" SMALLINT NOT NULL default 0,
|
||||
-- Number of data packages received with this position from the start_timestampa to the_end_timestamp
|
||||
"number_of_packages" INTEGER NOT NULL default 1,
|
||||
--reference to the agent
|
||||
"tagente_id_agente" INTEGER NOT NULL
|
||||
);
|
||||
CREATE INDEX "tgis_data_history_start_timestamp_idx" ON "tgis_data_history"("start_timestamp");
|
||||
CREATE INDEX "tgis_data_history_end_timestamp_idx" ON "tgis_data_history"("end_timestamp");
|
||||
|
@ -880,17 +886,28 @@ CREATE INDEX "tgis_data_history_end_timestamp_idx" ON "tgis_data_history"("end_t
|
|||
-- -----------------------------------------------------
|
||||
--Table to store last GIS information of the agents
|
||||
CREATE TABLE "tgis_data_status" (
|
||||
"tagente_id_agente" INTEGER NOT NULL REFERENCES "tagente"("id_agente") ON DELETE CASCADE ON UPDATE NO ACTION, --Reference to the agent
|
||||
"current_longitude" DOUBLE PRECISION NOT NULL, --Last received longitude
|
||||
"current_latitude" DOUBLE PRECISION NOT NULL, --Last received latitude
|
||||
"current_altitude" DOUBLE PRECISION NOT NULL, --Last received altitude
|
||||
"stored_longitude" DOUBLE PRECISION NOT NULL, --Reference longitude to see if the agent has moved
|
||||
"stored_latitude" DOUBLE PRECISION NOT NULL, --Reference latitude to see if the agent has moved
|
||||
"stored_altitude" DOUBLE PRECISION DEFAULT NULL, --Reference altitude to see if the agent has moved
|
||||
"number_of_packages" INTEGER NOT NULL default 1, --Number of data packages received with this position since start_timestampa
|
||||
"start_timestamp" TIMESTAMP without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, --Timestamp on wich the agente started to be in this position
|
||||
"manual_placement" SMALLINT NOT NULL default 0, --0 to show that the position cames from the agent, 1 to show that the position was established manualy
|
||||
"description" TEXT NULL, --description of the region correoponding to this placemnt
|
||||
--Reference to the agent
|
||||
"tagente_id_agente" INTEGER NOT NULL REFERENCES "tagente"("id_agente") ON DELETE CASCADE ON UPDATE NO ACTION,
|
||||
--Last received longitude
|
||||
"current_longitude" DOUBLE PRECISION NOT NULL,
|
||||
--Last received latitude
|
||||
"current_latitude" DOUBLE PRECISION NOT NULL,
|
||||
--Last received altitude
|
||||
"current_altitude" DOUBLE PRECISION NOT NULL,
|
||||
--Reference longitude to see if the agent has moved
|
||||
"stored_longitude" DOUBLE PRECISION NOT NULL,
|
||||
--Reference latitude to see if the agent has moved
|
||||
"stored_latitude" DOUBLE PRECISION NOT NULL,
|
||||
--Reference altitude to see if the agent has moved
|
||||
"stored_altitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--Number of data packages received with this position since start_timestampa
|
||||
"number_of_packages" INTEGER NOT NULL default 1,
|
||||
--Timestamp on wich the agente started to be in this position
|
||||
"start_timestamp" TIMESTAMP without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
--0 to show that the position cames from the agent, 1 to show that the position was established manualy
|
||||
"manual_placement" SMALLINT NOT NULL default 0,
|
||||
--description of the region correoponding to this placemnt
|
||||
"description" TEXT NULL,
|
||||
PRIMARY KEY("tagente_id_agente")
|
||||
);
|
||||
CREATE INDEX "tgis_data_status_start_timestamp_idx" ON "tgis_data_status"("start_timestamp");
|
||||
|
@ -901,18 +918,30 @@ CREATE INDEX "tgis_data_status_tagente_id_agente_idx" ON "tgis_data_status"("tag
|
|||
-- -----------------------------------------------------
|
||||
--Table containing information about a gis map
|
||||
CREATE TABLE "tgis_map" (
|
||||
"id_tgis_map" SERIAL NOT NULL PRIMARY KEY, --table identifier
|
||||
"map_name" VARCHAR(63) NOT NULL, --Name of the map
|
||||
"initial_longitude" DOUBLE PRECISION DEFAULT NULL, --longitude of the center of the map when it\'s loaded
|
||||
"initial_latitude" DOUBLE PRECISION DEFAULT NULL, --latitude of the center of the map when it\'s loaded
|
||||
"initial_altitude" DOUBLE PRECISION DEFAULT NULL, --altitude of the center of the map when it\'s loaded
|
||||
"zoom_level" SMALLINT NOT NULL default 1, --Zoom level to show when the map is loaded.
|
||||
"map_background" VARCHAR(127) DEFAULT NULL, --path on the server to the background image of the map
|
||||
"default_longitude" DOUBLE PRECISION DEFAULT NULL, --default longitude for the agents placed on the map
|
||||
"default_latitude" DOUBLE PRECISION DEFAULT NULL, --default latitude for the agents placed on the map
|
||||
"default_altitude" DOUBLE PRECISION DEFAULT NULL, --default altitude for the agents placed on the map
|
||||
"group_id" INTEGER NOT NULL default 0, --Group that owns the map
|
||||
"default_map" SMALLINT NOT NULL default 0 --1 if this is the default map, 0 in other case
|
||||
--table identifier
|
||||
"id_tgis_map" SERIAL NOT NULL PRIMARY KEY,
|
||||
--Name of the map
|
||||
"map_name" VARCHAR(63) NOT NULL,
|
||||
--longitude of the center of the map when it\'s loaded
|
||||
"initial_longitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--latitude of the center of the map when it\'s loaded
|
||||
"initial_latitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--altitude of the center of the map when it\'s loaded
|
||||
"initial_altitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--Zoom level to show when the map is loaded.
|
||||
"zoom_level" SMALLINT NOT NULL default 1,
|
||||
--path on the server to the background image of the map
|
||||
"map_background" VARCHAR(127) DEFAULT NULL,
|
||||
--default longitude for the agents placed on the map
|
||||
"default_longitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--default latitude for the agents placed on the map
|
||||
"default_latitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--default altitude for the agents placed on the map
|
||||
"default_altitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--Group that owns the map
|
||||
"group_id" INTEGER NOT NULL default 0,
|
||||
--1 if this is the default map, 0 in other case
|
||||
"default_map" SMALLINT NOT NULL default 0
|
||||
);
|
||||
CREATE INDEX "tgis_map_tagente_map_name_idx" ON "tgis_map"("map_name");
|
||||
|
||||
|
@ -921,19 +950,32 @@ CREATE INDEX "tgis_map_tagente_map_name_idx" ON "tgis_map"("map_name");
|
|||
-- -----------------------------------------------------
|
||||
--Table to store the map connection information
|
||||
CREATE TABLE "tgis_map_connection" (
|
||||
"id_tmap_connection" SERIAL NOT NULL PRIMARY KEY, --table id
|
||||
"conection_name" VARCHAR(45) DEFAULT NULL, --Name of the connection (name of the base layer)
|
||||
"connection_type" VARCHAR(45) DEFAULT NULL, --Type of map server to connect
|
||||
"conection_data" TEXT DEFAULT NULL, --connection information (this can probably change to fit better the possible connection parameters)
|
||||
"num_zoom_levels" SMALLINT DEFAULT NULL, --Number of zoom levels available
|
||||
"default_zoom_level" SMALLINT NOT NULL default 16, --Default Zoom Level for the connection
|
||||
"default_longitude" DOUBLE PRECISION DEFAULT NULL, --default longitude for the agents placed on the map
|
||||
"default_latitude" DOUBLE PRECISION DEFAULT NULL, --default latitude for the agents placed on the map
|
||||
"default_altitude" DOUBLE PRECISION DEFAULT NULL, --default altitude for the agents placed on the map
|
||||
"initial_longitude" DOUBLE PRECISION DEFAULT NULL, --longitude of the center of the map when it\'s loaded
|
||||
"initial_latitude" DOUBLE PRECISION DEFAULT NULL, --latitude of the center of the map when it\'s loaded
|
||||
"initial_altitude" DOUBLE PRECISION DEFAULT NULL, --altitude of the center of the map when it\'s loaded
|
||||
"group_id" INTEGER NOT NULL default 0 --Group that owns the map
|
||||
--table id
|
||||
"id_tmap_connection" SERIAL NOT NULL PRIMARY KEY,
|
||||
--Name of the connection (name of the base layer)
|
||||
"conection_name" VARCHAR(45) DEFAULT NULL,
|
||||
--Type of map server to connect
|
||||
"connection_type" VARCHAR(45) DEFAULT NULL,
|
||||
--connection information (this can probably change to fit better the possible connection parameters)
|
||||
"conection_data" TEXT DEFAULT NULL,
|
||||
--Number of zoom levels available
|
||||
"num_zoom_levels" SMALLINT DEFAULT NULL,
|
||||
--Default Zoom Level for the connection
|
||||
"default_zoom_level" SMALLINT NOT NULL default 16,
|
||||
--default longitude for the agents placed on the map
|
||||
"default_longitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--default latitude for the agents placed on the map
|
||||
"default_latitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--default altitude for the agents placed on the map
|
||||
"default_altitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--longitude of the center of the map when it\'s loaded
|
||||
"initial_longitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--latitude of the center of the map when it\'s loaded
|
||||
"initial_latitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--altitude of the center of the map when it\'s loaded
|
||||
"initial_altitude" DOUBLE PRECISION DEFAULT NULL,
|
||||
--Group that owns the map
|
||||
"group_id" INTEGER NOT NULL default 0
|
||||
);
|
||||
|
||||
-- -----------------------------------------------------
|
||||
|
@ -941,22 +983,21 @@ CREATE TABLE "tgis_map_connection" (
|
|||
-- -----------------------------------------------------
|
||||
--Table to asociate a connection to a gis map
|
||||
CREATE TABLE "tgis_map_has_tgis_map_connection" (
|
||||
"tgis_map_id_tgis_map" INTEGER NOT NULL REFERENCES "tgis_map"("id_tgis_map") ON DELETE CASCADE ON UPDATE NO ACTION, --reference to tgis_map
|
||||
"tgis_map_connection_id_tmap_connection" INTEGER NOT NULL REFERENCES "tgis_map_connection" ("id_tmap_connection") ON DELETE CASCADE ON UPDATE NO ACTION, --reference to tgis_map_connection
|
||||
"modification_time" TIMESTAMP without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, --Last Modification Time of the Connection
|
||||
"default_map_connection" SMALLINT NOT NULL default 0, --Flag to mark the default map connection of a map
|
||||
--reference to tgis_map
|
||||
"tgis_map_id_tgis_map" INTEGER NOT NULL REFERENCES "tgis_map"("id_tgis_map") ON DELETE CASCADE ON UPDATE NO ACTION,
|
||||
--reference to tgis_map_connection
|
||||
"tgis_map_connection_id_tmap_connection" INTEGER NOT NULL REFERENCES "tgis_map_connection" ("id_tmap_connection") ON DELETE CASCADE ON UPDATE NO ACTION,
|
||||
--Last Modification Time of the Connection
|
||||
"modification_time" TIMESTAMP without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
--Flag to mark the default map connection of a map
|
||||
"default_map_connection" SMALLINT NOT NULL default 0,
|
||||
PRIMARY KEY ("tgis_map_id_tgis_map", "tgis_map_connection_id_tmap_connection")
|
||||
);
|
||||
CREATE INDEX "tgis_map_has_tgis_map_connection_map_tgis_map_id_tgis_map_idx" ON "tgis_map_has_tgis_map_connection"("tgis_map_id_tgis_map");
|
||||
CREATE INDEX "tgis_map_has_tgis_map_connection_map_tgis_map_connection_id_tmap_connection_idx" ON "tgis_map_has_tgis_map_connection"("tgis_map_connection_id_tmap_connection");
|
||||
--This function is for to tranlate "ON UPDATE CURRENT_TIMESTAMP" of MySQL.
|
||||
CREATE OR REPLACE FUNCTION update_tgis_map_has_tgis_map_connection_modification_time()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.modification_time = now();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ language 'plpgsql';
|
||||
--It is in only one line because the parser of Pandora installer execute the code at the end with ;
|
||||
CREATE OR REPLACE FUNCTION update_tgis_map_has_tgis_map_connection_modification_time() RETURNS TRIGGER AS $$ BEGIN NEW.modification_time = now(); RETURN NEW; END; $$ language 'plpgsql';
|
||||
CREATE TRIGGER trigger_tgis_map_has_tgis_map_connection_modification_time BEFORE UPDATE ON tgis_map_has_tgis_map_connection FOR EACH ROW EXECUTE PROCEDURE update_tgis_map_has_tgis_map_connection_modification_time();
|
||||
|
||||
-- -----------------------------------------------------
|
||||
|
@ -964,12 +1005,18 @@ CREATE TRIGGER trigger_tgis_map_has_tgis_map_connection_modification_time BEFORE
|
|||
-- -----------------------------------------------------
|
||||
--Table containing information about the map layers
|
||||
CREATE TABLE "tgis_map_layer" (
|
||||
"id_tmap_layer" SERIAL NOT NULL PRIMARY KEY, --table id
|
||||
"layer_name" VARCHAR(45) NOT NULL, --Name of the layer
|
||||
"view_layer" SMALLINT NOT NULL default 1, --True if the layer must be shown
|
||||
"layer_stack_order" SMALLINT NOT NULL default 0, --Number of order of the layer in the layer stack, bigger means upper on the stack.\n
|
||||
"tgis_map_id_tgis_map" INTEGER NOT NULL default 0 REFERENCES "tgis_map"("id_tgis_map") ON DELETE CASCADE ON UPDATE NO ACTION, --reference to the map containing the layer
|
||||
"tgrupo_id_grupo" BIGINT NOT NULL --reference to the group shown in the layer
|
||||
--table id
|
||||
"id_tmap_layer" SERIAL NOT NULL PRIMARY KEY,
|
||||
--Name of the layer
|
||||
"layer_name" VARCHAR(45) NOT NULL,
|
||||
--True if the layer must be shown
|
||||
"view_layer" SMALLINT NOT NULL default 1,
|
||||
--Number of order of the layer in the layer stack, bigger means upper on the stack.\n
|
||||
"layer_stack_order" SMALLINT NOT NULL default 0,
|
||||
--reference to the map containing the layer
|
||||
"tgis_map_id_tgis_map" INTEGER NOT NULL default 0 REFERENCES "tgis_map"("id_tgis_map") ON DELETE CASCADE ON UPDATE NO ACTION,
|
||||
--reference to the group shown in the layer
|
||||
"tgrupo_id_grupo" BIGINT NOT NULL
|
||||
);
|
||||
CREATE INDEX "tgis_map_layer_id_tmap_layer_idx" ON "tgis_map_layer"("id_tmap_layer");
|
||||
|
||||
|
|
|
@ -108,14 +108,14 @@ UNLOCK TABLES;
|
|||
|
||||
LOCK TABLES `tgrupo` WRITE;
|
||||
INSERT INTO `tgrupo` VALUES
|
||||
(2,'Servers','server_database',0,0,'',0),
|
||||
(4,'Firewalls','firewall',0,0,'',0),
|
||||
(8,'Databases','database_gear',0,0,'',0),
|
||||
(9,'Network','transmit',0,0,'',0),
|
||||
(10,'Unknown','world',0,0,'',0),
|
||||
(11,'Workstations','computer',0,0,'',0),
|
||||
(12,'Applications','applications',0,0,'',0),
|
||||
(13,'Web','world',0,0,'',0);
|
||||
(2,'Servers','server_database',0,0,0,''),
|
||||
(4,'Firewalls','firewall',0,0,0,''),
|
||||
(8,'Databases','database_gear',0,0,0,''),
|
||||
(9,'Network','transmit',0,0,0,''),
|
||||
(10,'Unknown','world',0,0,0,''),
|
||||
(11,'Workstations','computer',0,0,0,''),
|
||||
(12,'Applications','applications',0,0,0,''),
|
||||
(13,'Web','world',0,0,0,'');
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue