Files
EdgeManager/app/EDataCapture/ENodeConfigure.php

109 lines
3.5 KiB
PHP

<?php
namespace EdgeManager\EDataCapture;
class ENodeConfigure {
function __construct(
protected $dbconn,
protected $post = NULL,
protected $get = NULL
) {}
function add_node() {
$exists = pg_query(sprintf(
"SELECT EXISTS(
SELECT 1 FROM hf_mes_scada_data_capture_node_configure WHERE code='%s'
)", $this -> post['code']
));
if (pg_fetch_assoc($exists)['exists'] == 't') {
return "REPLICATED";
}
$table_name = "hf_mes_scada_data_capture_node_data_" . $this -> post['working_subclass'];
pg_query($this -> dbconn, "BEGIN");
$res[] = pg_query($this -> dbconn, sprintf(
"CREATE TABLE IF NOT EXISTS %s (
id serial8,
code text references hf_mes_scada_data_capture_node_configure(code),
v_string text,
v_int int,
v_float float8,
v_bool bool,
device_code text,
batch text,
capture_time timestamp NOT NULL DEFAULT NOW()
)", $table_name
));
$res[] = pg_insert(
$this -> dbconn,
'hf_mes_scada_data_capture_node_configure',
$this -> post
);
// 检查一下,如果超表已经有了就不要尝试重复创建了
$table_exists = pg_query(sprintf(
"SELECT *
FROM timescaledb_information.hypertables
WHERE hypertable_name = '%s'
", $table_name
));
if (!in_array($table_name, pg_fetch_all_columns($table_exists, 1))) {
$res[] = pg_query($this -> dbconn, sprintf("SELECT create_hypertable('%s', 'capture_time')", $table_name));
$res[] = pg_query($this -> dbconn, sprintf(
"CREATE INDEX ON %s (v_string, v_int, v_float, v_bool, capture_time DESC)
WHERE COALESCE(v_string, v_int::text, v_float::text, v_bool::text) IS NOT NULL
", $table_name
));
}
if (in_array(false, $res)) {
pg_query($this -> dbconn, "ROLLBACK");
return false;
} else {
pg_query($this -> dbconn, "COMMIT");
return true;
}
}
function remove_node() {
pg_query($this -> dbconn, "BEGIN");
$res[] = pg_delete(
$this -> dbconn,
'hf_mes_scada_data_capture_node_configure',
$this -> post,
);
$exists = pg_query(sprintf(
"SELECT EXISTS(
SELECT 1 FROM hf_mes_scada_data_capture_node_configure WHERE code='%s'
)", $this -> post['working_subclass']
));
if (pg_fetch_assoc($exists)['exists'] == 'f') {
$res[] = pg_query(sprintf(
"DROP TABLE hf_mes_scada_data_capture_node_data_%s",
$this -> post['working_subclass']
));
}
if (in_array(false, $res)) {
pg_query($this -> dbconn, "ROLLBACK");
return false;
} else {
pg_query($this -> dbconn, "COMMIT");
return true;
}
}
function update_node() {
return pg_update(
$this -> dbconn,
'hf_mes_scada_data_capture_node_configure',
$this -> post,
['code' => $this -> post['code']]
);
}
function get_nodes() {
$res = pg_query($this -> dbconn, "SELECT * FROM hf_mes_scada_data_capture_node_configure");
return pg_fetch_all($res);
}
}