Преглед изворни кода

- the bool type has been replaced with a numeric one in postgres
- In the csv generation script for oxidized, exceptions have been added for devices without an Ip address and with the cli turned off.

Dmitriev Roman пре 3 месеци
родитељ
комит
0274c8a4f2

+ 353 - 394
docs/databases/postgres/en/create_db.sql

@@ -1,11 +1,11 @@
 -- Create database with English locale
 CREATE DATABASE stat
-    WITH 
-    ENCODING = 'UTF8'
-    LC_COLLATE = 'en_US.UTF-8'
-    LC_CTYPE = 'en_US.UTF-8'
-    TEMPLATE = template0
-    CONNECTION LIMIT = -1;
+WITH
+ENCODING = 'UTF8'
+LC_COLLATE = 'en_US.UTF-8'
+LC_CTYPE = 'en_US.UTF-8'
+TEMPLATE = template0
+CONNECTION LIMIT = -1;
 
 \c stat;
 
@@ -16,10 +16,10 @@ CREATE EXTENSION IF NOT EXISTS ip4r;
 
 -- Access Control List
 CREATE TABLE acl (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(30) NOT NULL,
-    "description.english" VARCHAR(250) NOT NULL,
-    "description.russian" VARCHAR(250) NOT NULL
+id SERIAL PRIMARY KEY,
+name VARCHAR(30) NOT NULL,
+"description.english" VARCHAR(250) NOT NULL,
+"description.russian" VARCHAR(250) NOT NULL
 );
 COMMENT ON TABLE acl IS 'Access Control List - roles and permissions';
 COMMENT ON COLUMN acl."description.english" IS 'Description in English';
@@ -27,9 +27,9 @@ COMMENT ON COLUMN acl."description.russian" IS 'Description in Russian';
 
 -- Active Directory computer cache
 CREATE TABLE ad_comp_cache (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(63) NOT NULL UNIQUE,
-    last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id SERIAL PRIMARY KEY,
+name VARCHAR(63) NOT NULL UNIQUE,
+last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE ad_comp_cache IS 'Cache of computers from Active Directory';
 COMMENT ON COLUMN ad_comp_cache.name IS 'Computer name in AD';
@@ -37,12 +37,12 @@ COMMENT ON COLUMN ad_comp_cache.last_found IS 'Last time this computer was found
 
 -- Authentication rules
 CREATE TABLE auth_rules (
-    id SERIAL PRIMARY KEY,
-    user_id INTEGER,
-    ou_id INTEGER,
-    type INTEGER NOT NULL,
-    rule VARCHAR(40) UNIQUE,
-    comment VARCHAR(250)
+id SERIAL PRIMARY KEY,
+user_id INTEGER,
+ou_id INTEGER,
+type SMALLINT NOT NULL,
+rule VARCHAR(40) UNIQUE,
+comment VARCHAR(250)
 );
 COMMENT ON TABLE auth_rules IS 'User authentication and authorization rules';
 COMMENT ON COLUMN auth_rules.type IS 'Rule type: 0=allow, 1=deny, etc.';
@@ -50,33 +50,33 @@ COMMENT ON COLUMN auth_rules.rule IS 'Rule identifier (unique)';
 
 -- Buildings
 CREATE TABLE building (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(50) NOT NULL,
-    comment VARCHAR(250)
+id SERIAL PRIMARY KEY,
+name VARCHAR(50) NOT NULL,
+comment VARCHAR(250)
 );
 COMMENT ON TABLE building IS 'Physical buildings/locations';
 COMMENT ON COLUMN building.name IS 'Building name';
 
 -- System configuration
 CREATE TABLE config (
-    id SERIAL PRIMARY KEY,
-    option_id INTEGER,
-    value VARCHAR(250)
+id SERIAL PRIMARY KEY,
+option_id INTEGER,
+value VARCHAR(250)
 );
 COMMENT ON TABLE config IS 'System configuration values';
 
 -- Configuration options
 CREATE TABLE config_options (
-    id SERIAL PRIMARY KEY,
-    option_name VARCHAR(50) NOT NULL,
-    "description.russian" TEXT,
-    "description.english" TEXT,
-    draft BOOLEAN NOT NULL DEFAULT FALSE,
-    uniq BOOLEAN NOT NULL DEFAULT TRUE,
-    type VARCHAR(100) NOT NULL,
-    default_value VARCHAR(250),
-    min_value INTEGER NOT NULL DEFAULT 0,
-    max_value INTEGER NOT NULL DEFAULT 0
+id SERIAL PRIMARY KEY,
+option_name VARCHAR(50) NOT NULL,
+"description.russian" TEXT,
+"description.english" TEXT,
+draft SMALLINT NOT NULL DEFAULT 0,
+uniq SMALLINT NOT NULL DEFAULT 1,
+type VARCHAR(100) NOT NULL,
+default_value VARCHAR(250),
+min_value INTEGER NOT NULL DEFAULT 0,
+max_value INTEGER NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE config_options IS 'Available configuration options';
 COMMENT ON COLUMN config_options.option_name IS 'Option name/key';
@@ -85,11 +85,11 @@ COMMENT ON COLUMN config_options.uniq IS 'Is option unique (single value)';
 
 -- Network connections
 CREATE TABLE connections (
-    id BIGSERIAL PRIMARY KEY,
-    device_id BIGINT NOT NULL,
-    port_id BIGINT NOT NULL,
-    auth_id BIGINT NOT NULL,
-    last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id BIGSERIAL PRIMARY KEY,
+device_id BIGINT NOT NULL,
+port_id BIGINT NOT NULL,
+auth_id BIGINT NOT NULL,
+last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE connections IS 'Current network connections (MAC-IP-device-port)';
 COMMENT ON COLUMN connections.device_id IS 'Network device ID';
@@ -99,12 +99,12 @@ COMMENT ON COLUMN connections.last_found IS 'Last time this connection was activ
 
 -- System customers/users
 CREATE TABLE Customers (
-    id SERIAL PRIMARY KEY,
-    Login VARCHAR(20),
-    comment VARCHAR(100),
-    password VARCHAR(255),
-    api_key VARCHAR(255),
-    rights SMALLINT NOT NULL DEFAULT 3
+id SERIAL PRIMARY KEY,
+Login VARCHAR(20),
+comment VARCHAR(100),
+password VARCHAR(255),
+api_key VARCHAR(255),
+rights SMALLINT NOT NULL DEFAULT 3
 );
 COMMENT ON TABLE Customers IS 'System users/administrators';
 COMMENT ON COLUMN Customers.Login IS 'User login name';
@@ -112,45 +112,45 @@ COMMENT ON COLUMN Customers.rights IS 'Access rights level: 0=view, 1=operator,
 
 -- Network devices
 CREATE TABLE devices (
-    id SERIAL PRIMARY KEY,
-    device_type INTEGER NOT NULL DEFAULT 1,
-    device_model_id INTEGER DEFAULT 89,
-    firmware VARCHAR(100),
-    vendor_id INTEGER NOT NULL DEFAULT 1,
-    device_name VARCHAR(50),
-    building_id INTEGER NOT NULL DEFAULT 1,
-    ip INET,
-    ip_int BIGINT,
-    login VARCHAR(50),
-    password VARCHAR(255),
-    protocol SMALLINT NOT NULL DEFAULT 0,
-    control_port INTEGER NOT NULL DEFAULT 23,
-    port_count INTEGER NOT NULL DEFAULT 0,
-    SN VARCHAR(80),
-    comment VARCHAR(255),
-    snmp_version SMALLINT NOT NULL DEFAULT 0,
-    snmp3_auth_proto VARCHAR(10) NOT NULL DEFAULT 'sha512',
-    snmp3_priv_proto VARCHAR(10) NOT NULL DEFAULT 'aes128',
-    snmp3_user_rw VARCHAR(20),
-    snmp3_user_rw_password VARCHAR(20),
-    snmp3_user_ro VARCHAR(20),
-    snmp3_user_ro_password VARCHAR(20),
-    community VARCHAR(50) NOT NULL DEFAULT 'public',
-    rw_community VARCHAR(50) NOT NULL DEFAULT 'private',
-    fdb_snmp_index BOOLEAN NOT NULL DEFAULT FALSE,
-    discovery BOOLEAN NOT NULL DEFAULT TRUE,
-    netflow_save BOOLEAN NOT NULL DEFAULT FALSE,
-    user_acl BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios BOOLEAN NOT NULL DEFAULT FALSE,
-    active BOOLEAN NOT NULL DEFAULT TRUE,
-    nagios_status VARCHAR(10) NOT NULL DEFAULT 'UP',
-    queue_enabled BOOLEAN NOT NULL DEFAULT FALSE,
-    connected_user_only BOOLEAN NOT NULL DEFAULT TRUE,
-    user_id INTEGER,
-    deleted BOOLEAN NOT NULL DEFAULT FALSE,
-    discovery_locked BOOLEAN NOT NULL DEFAULT FALSE,
-    locked_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+id SERIAL PRIMARY KEY,
+device_type INTEGER NOT NULL DEFAULT 1,
+device_model_id INTEGER DEFAULT 89,
+firmware VARCHAR(100),
+vendor_id INTEGER NOT NULL DEFAULT 1,
+device_name VARCHAR(50),
+building_id INTEGER NOT NULL DEFAULT 1,
+ip INET,
+ip_int BIGINT,
+login VARCHAR(50),
+password VARCHAR(255),
+protocol SMALLINT NOT NULL DEFAULT 0,
+control_port INTEGER NOT NULL DEFAULT 23,
+port_count INTEGER NOT NULL DEFAULT 0,
+SN VARCHAR(80),
+comment VARCHAR(255),
+snmp_version SMALLINT NOT NULL DEFAULT 0,
+snmp3_auth_proto VARCHAR(10) NOT NULL DEFAULT 'sha512',
+snmp3_priv_proto VARCHAR(10) NOT NULL DEFAULT 'aes128',
+snmp3_user_rw VARCHAR(20),
+snmp3_user_rw_password VARCHAR(20),
+snmp3_user_ro VARCHAR(20),
+snmp3_user_ro_password VARCHAR(20),
+community VARCHAR(50) NOT NULL DEFAULT 'public',
+rw_community VARCHAR(50) NOT NULL DEFAULT 'private',
+fdb_snmp_index SMALLINT NOT NULL DEFAULT 0,
+discovery SMALLINT NOT NULL DEFAULT 1,
+netflow_save SMALLINT NOT NULL DEFAULT 0,
+user_acl SMALLINT NOT NULL DEFAULT 0,
+dhcp SMALLINT NOT NULL DEFAULT 0,
+nagios SMALLINT NOT NULL DEFAULT 0,
+active SMALLINT NOT NULL DEFAULT 1,
+nagios_status VARCHAR(10) NOT NULL DEFAULT 'UP',
+queue_enabled SMALLINT NOT NULL DEFAULT 0,
+connected_user_only SMALLINT NOT NULL DEFAULT 1,
+user_id INTEGER,
+deleted SMALLINT NOT NULL DEFAULT 0,
+discovery_locked SMALLINT NOT NULL DEFAULT 0,
+locked_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE devices IS 'Network devices (switches, routers, etc.)';
 COMMENT ON COLUMN devices.device_type IS 'Device type ID';
@@ -161,31 +161,31 @@ COMMENT ON COLUMN devices.active IS 'Is device active and monitored';
 
 -- Device filter instances
 CREATE TABLE device_filter_instances (
-    id SERIAL PRIMARY KEY,
-    instance_id INTEGER,
-    device_id INTEGER
+id SERIAL PRIMARY KEY,
+instance_id INTEGER,
+device_id INTEGER
 );
 COMMENT ON TABLE device_filter_instances IS 'Filter instances assigned to devices';
 
 -- Device L3 interfaces
 CREATE TABLE device_l3_interfaces (
-    id SERIAL PRIMARY KEY,
-    device_id INTEGER,
-    snmpin INTEGER,
-    interface_type INTEGER NOT NULL DEFAULT 0,
-    name VARCHAR(100)
+id SERIAL PRIMARY KEY,
+device_id INTEGER,
+snmpin INTEGER,
+interface_type SMALLINT NOT NULL DEFAULT 0,
+name VARCHAR(100)
 );
 COMMENT ON TABLE device_l3_interfaces IS 'Layer 3 interfaces on devices';
 COMMENT ON COLUMN device_l3_interfaces.interface_type IS 'Interface type: 0=unknown, 1=LAN, 2=WAN, 3=DMZ';
 
 -- Device models
 CREATE TABLE device_models (
-    id SERIAL PRIMARY KEY,
-    model_name VARCHAR(200),
-    vendor_id INTEGER DEFAULT 1,
-    poe_in BOOLEAN NOT NULL DEFAULT FALSE,
-    poe_out BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios_template VARCHAR(200)
+id SERIAL PRIMARY KEY,
+model_name VARCHAR(200),
+vendor_id INTEGER DEFAULT 1,
+poe_in SMALLINT NOT NULL DEFAULT 0,
+poe_out SMALLINT NOT NULL DEFAULT 0,
+nagios_template VARCHAR(200)
 );
 COMMENT ON TABLE device_models IS 'Device models and specifications';
 COMMENT ON COLUMN device_models.poe_in IS 'Supports Power over Ethernet input';
@@ -193,23 +193,23 @@ COMMENT ON COLUMN device_models.poe_out IS 'Provides Power over Ethernet';
 
 -- Device ports
 CREATE TABLE device_ports (
-    id BIGSERIAL PRIMARY KEY,
-    device_id INTEGER,
-    snmp_index INTEGER,
-    port INTEGER,
-    ifName VARCHAR(40),
-    port_name VARCHAR(40),
-    comment VARCHAR(50),
-    target_port_id INTEGER NOT NULL DEFAULT 0,
-    auth_id BIGINT,
-    last_mac_count INTEGER DEFAULT 0,
-    uplink BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios BOOLEAN NOT NULL DEFAULT FALSE,
-    skip BOOLEAN NOT NULL DEFAULT FALSE,
-    vlan INTEGER NOT NULL DEFAULT 1,
-    tagged_vlan VARCHAR(250),
-    untagged_vlan VARCHAR(250),
-    forbidden_vlan VARCHAR(250)
+id BIGSERIAL PRIMARY KEY,
+device_id INTEGER,
+snmp_index INTEGER,
+port INTEGER,
+ifName VARCHAR(40),
+port_name VARCHAR(40),
+comment VARCHAR(50),
+target_port_id INTEGER NOT NULL DEFAULT 0,
+auth_id BIGINT,
+last_mac_count INTEGER DEFAULT 0,
+uplink SMALLINT NOT NULL DEFAULT 0,
+nagios SMALLINT NOT NULL DEFAULT 0,
+skip SMALLINT NOT NULL DEFAULT 0,
+vlan INTEGER NOT NULL DEFAULT 1,
+tagged_vlan VARCHAR(250),
+untagged_vlan VARCHAR(250),
+forbidden_vlan VARCHAR(250)
 );
 COMMENT ON TABLE device_ports IS 'Network device ports/interfaces';
 COMMENT ON COLUMN device_ports.port IS 'Physical port number';
@@ -218,9 +218,9 @@ COMMENT ON COLUMN device_ports.vlan IS 'Default/native VLAN ID';
 
 -- Device types
 CREATE TABLE device_types (
-    id SERIAL PRIMARY KEY,
-    "name.russian" VARCHAR(50),
-    "name.english" VARCHAR(50)
+id SERIAL PRIMARY KEY,
+"name.russian" VARCHAR(50),
+"name.english" VARCHAR(50)
 );
 COMMENT ON TABLE device_types IS 'Device type classification';
 COMMENT ON COLUMN device_types."name.russian" IS 'Device type name in Russian';
@@ -228,17 +228,17 @@ COMMENT ON COLUMN device_types."name.english" IS 'Device type name in English';
 
 -- DHCP logs
 CREATE TABLE dhcp_log (
-    id BIGSERIAL PRIMARY KEY,
-    mac MACADDR NOT NULL,
-    ip_int BIGINT NOT NULL,
-    ip INET NOT NULL,
-    action VARCHAR(10) NOT NULL,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    auth_id BIGINT NOT NULL,
-    dhcp_hostname VARCHAR(250),
-    "circuit-id" VARCHAR(255),
-    "remote-id" VARCHAR(255),
-    "client-id" VARCHAR(250)
+id BIGSERIAL PRIMARY KEY,
+mac MACADDR NOT NULL,
+ip_int BIGINT NOT NULL,
+ip INET NOT NULL,
+action VARCHAR(10) NOT NULL,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+auth_id BIGINT NOT NULL,
+dhcp_hostname VARCHAR(250),
+"circuit-id" VARCHAR(255),
+"remote-id" VARCHAR(255),
+"client-id" VARCHAR(250)
 );
 COMMENT ON TABLE dhcp_log IS 'DHCP server transaction logs';
 COMMENT ON COLUMN dhcp_log.action IS 'DHCP action: DISCOVER, REQUEST, ACK, NAK, RELEASE';
@@ -246,32 +246,32 @@ COMMENT ON COLUMN dhcp_log."circuit-id" IS 'DHCP option 82 circuit ID';
 
 -- DHCP queue
 CREATE TABLE dhcp_queue (
-    id BIGSERIAL PRIMARY KEY,
-    mac MACADDR NOT NULL,
-    ip INET NOT NULL,
-    action VARCHAR(10) NOT NULL,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    dhcp_hostname VARCHAR(250)
+id BIGSERIAL PRIMARY KEY,
+mac MACADDR NOT NULL,
+ip INET NOT NULL,
+action VARCHAR(10) NOT NULL,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+dhcp_hostname VARCHAR(250)
 );
 COMMENT ON TABLE dhcp_queue IS 'Pending DHCP operations queue';
 
 -- DNS cache
 CREATE TABLE dns_cache (
-    id BIGSERIAL PRIMARY KEY,
-    dns VARCHAR(250),
-    ip BIGINT,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id BIGSERIAL PRIMARY KEY,
+dns VARCHAR(250),
+ip BIGINT,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE dns_cache IS 'DNS resolution cache';
 
 -- DNS queue
 CREATE TABLE dns_queue (
-    id SERIAL PRIMARY KEY,
-    auth_id INTEGER,
-    name_type VARCHAR(10) NOT NULL DEFAULT 'A',
-    name VARCHAR(200),
-    type VARCHAR(10) NOT NULL DEFAULT 'add',
-    value VARCHAR(100)
+id SERIAL PRIMARY KEY,
+auth_id INTEGER,
+name_type VARCHAR(10) NOT NULL DEFAULT 'A',
+name VARCHAR(200),
+type VARCHAR(10) NOT NULL DEFAULT 'add',
+value VARCHAR(100)
 );
 COMMENT ON TABLE dns_queue IS 'Pending DNS operations queue';
 COMMENT ON COLUMN dns_queue.name_type IS 'DNS record type: A, AAAA, PTR, CNAME';
@@ -279,22 +279,22 @@ COMMENT ON COLUMN dns_queue.type IS 'Operation type: add, delete, update';
 
 -- Filter instances
 CREATE TABLE filter_instances (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(50) UNIQUE,
-    comment VARCHAR(200)
+id SERIAL PRIMARY KEY,
+name VARCHAR(50) UNIQUE,
+comment VARCHAR(200)
 );
 COMMENT ON TABLE filter_instances IS 'Filter policy instances';
 
 -- Filter rules list
 CREATE TABLE Filter_list (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(50),
-    comment VARCHAR(250),
-    proto VARCHAR(10),
-    dst TEXT,
-    dstport VARCHAR(20),
-    srcport VARCHAR(20),
-    type INTEGER NOT NULL DEFAULT 0
+id SERIAL PRIMARY KEY,
+name VARCHAR(50),
+comment VARCHAR(250),
+proto VARCHAR(10),
+dst TEXT,
+dstport VARCHAR(20),
+srcport VARCHAR(20),
+type SMALLINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Filter_list IS 'Firewall/filter rules';
 COMMENT ON COLUMN Filter_list.proto IS 'Protocol: tcp, udp, icmp, etc.';
@@ -303,43 +303,43 @@ COMMENT ON COLUMN Filter_list.type IS 'Rule type: 0=allow, 1=deny';
 
 -- Gateway subnets
 CREATE TABLE gateway_subnets (
-    id SERIAL PRIMARY KEY,
-    device_id INTEGER,
-    subnet_id INTEGER
+id SERIAL PRIMARY KEY,
+device_id INTEGER,
+subnet_id INTEGER
 );
 COMMENT ON TABLE gateway_subnets IS 'Which devices serve as gateways for which subnets';
 
 -- Filter assignments to groups
 CREATE TABLE Group_filters (
-    id SERIAL PRIMARY KEY,
-    group_id INTEGER NOT NULL DEFAULT 0,
-    filter_id INTEGER NOT NULL DEFAULT 0,
-    "order" INTEGER NOT NULL DEFAULT 0,
-    action BOOLEAN NOT NULL DEFAULT FALSE
+id SERIAL PRIMARY KEY,
+group_id INTEGER NOT NULL DEFAULT 0,
+filter_id INTEGER NOT NULL DEFAULT 0,
+"order" INTEGER NOT NULL DEFAULT 0,
+action SMALLINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Group_filters IS 'Filter rules assigned to groups';
 COMMENT ON COLUMN Group_filters."order" IS 'Rule processing order';
-COMMENT ON COLUMN Group_filters.action IS 'Action: true=allow, false=deny';
+COMMENT ON COLUMN Group_filters.action IS 'Action: 1=allow, 0=deny';
 
 -- Filter groups
 CREATE TABLE Group_list (
-    id SERIAL PRIMARY KEY,
-    instance_id INTEGER NOT NULL DEFAULT 1,
-    group_name VARCHAR(50),
-    comment VARCHAR(250)
+id SERIAL PRIMARY KEY,
+instance_id INTEGER NOT NULL DEFAULT 1,
+group_name VARCHAR(50),
+comment VARCHAR(250)
 );
 COMMENT ON TABLE Group_list IS 'Filter policy groups';
 
 -- MAC address history
 CREATE TABLE mac_history (
-    id BIGSERIAL PRIMARY KEY,
-    mac VARCHAR(12),
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    device_id BIGINT,
-    port_id BIGINT,
-    ip VARCHAR(16) NOT NULL DEFAULT '',
-    auth_id BIGINT,
-    dhcp_hostname VARCHAR(250)
+id BIGSERIAL PRIMARY KEY,
+mac VARCHAR(12),
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+device_id BIGINT,
+port_id BIGINT,
+ip VARCHAR(16) NOT NULL DEFAULT '',
+auth_id BIGINT,
+dhcp_hostname VARCHAR(250)
 );
 COMMENT ON TABLE mac_history IS 'Historical MAC address movements';
 COMMENT ON COLUMN mac_history.mac IS 'MAC address (12 hex chars)';
@@ -347,31 +347,31 @@ COMMENT ON COLUMN mac_history.ip IS 'IP address last used';
 
 -- MAC address vendors
 CREATE TABLE mac_vendors (
-    id SERIAL PRIMARY KEY,
-    oui VARCHAR(20),
-    companyName VARCHAR(255),
-    companyAddress VARCHAR(255)
+id SERIAL PRIMARY KEY,
+oui VARCHAR(20),
+companyName VARCHAR(255),
+companyAddress VARCHAR(255)
 );
 COMMENT ON TABLE mac_vendors IS 'MAC address vendor database';
 COMMENT ON COLUMN mac_vendors.oui IS 'Organizationally Unique Identifier (first 6 chars of MAC)';
 
 -- Organizational Units
 CREATE TABLE OU (
-    id SERIAL PRIMARY KEY,
-    ou_name VARCHAR(40),
-    comment VARCHAR(250),
-    default_users BOOLEAN NOT NULL DEFAULT FALSE,
-    default_hotspot BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios_dir VARCHAR(255),
-    nagios_host_use VARCHAR(50),
-    nagios_ping BOOLEAN NOT NULL DEFAULT TRUE,
-    nagios_default_service VARCHAR(100),
-    enabled INTEGER NOT NULL DEFAULT 0,
-    filter_group_id INTEGER NOT NULL DEFAULT 0,
-    queue_id INTEGER NOT NULL DEFAULT 0,
-    dynamic BOOLEAN NOT NULL DEFAULT FALSE,
-    life_duration DECIMAL(10,2) NOT NULL DEFAULT 24.00,
-    parent_id INTEGER
+id SERIAL PRIMARY KEY,
+ou_name VARCHAR(40),
+comment VARCHAR(250),
+default_users SMALLINT NOT NULL DEFAULT 0,
+default_hotspot SMALLINT NOT NULL DEFAULT 0,
+nagios_dir VARCHAR(255),
+nagios_host_use VARCHAR(50),
+nagios_ping SMALLINT NOT NULL DEFAULT 1,
+nagios_default_service VARCHAR(100),
+enabled SMALLINT NOT NULL DEFAULT 0,
+filter_group_id INTEGER NOT NULL DEFAULT 0,
+queue_id INTEGER NOT NULL DEFAULT 0,
+dynamic SMALLINT NOT NULL DEFAULT 0,
+life_duration DECIMAL(10,2) NOT NULL DEFAULT 24.00,
+parent_id INTEGER
 );
 COMMENT ON TABLE OU IS 'Organizational Units (departments/groups)';
 COMMENT ON COLUMN OU.ou_name IS 'OU name/identifier';
@@ -379,10 +379,10 @@ COMMENT ON COLUMN OU.life_duration IS 'Default lease duration in hours for dynam
 
 -- Traffic shaping queues
 CREATE TABLE Queue_list (
-    id SERIAL PRIMARY KEY,
-    queue_name VARCHAR(20) NOT NULL,
-    Download INTEGER NOT NULL DEFAULT 0,
-    Upload INTEGER NOT NULL DEFAULT 0
+id SERIAL PRIMARY KEY,
+queue_name VARCHAR(20) NOT NULL,
+Download INTEGER NOT NULL DEFAULT 0,
+Upload INTEGER NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Queue_list IS 'Traffic shaping bandwidth profiles';
 COMMENT ON COLUMN Queue_list.Download IS 'Download speed limit in Kbps';
@@ -390,43 +390,43 @@ COMMENT ON COLUMN Queue_list.Upload IS 'Upload speed limit in Kbps';
 
 -- Remote syslog messages
 CREATE TABLE remote_syslog (
-    id BIGSERIAL PRIMARY KEY,
-    date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    device_id BIGINT NOT NULL,
-    ip VARCHAR(15) NOT NULL,
-    message TEXT NOT NULL
+id BIGSERIAL PRIMARY KEY,
+date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+device_id BIGINT NOT NULL,
+ip VARCHAR(15) NOT NULL,
+message TEXT NOT NULL
 );
 COMMENT ON TABLE remote_syslog IS 'Syslog messages from network devices';
 
 -- PHP sessions
 CREATE TABLE sessions (
-    id VARCHAR(128) PRIMARY KEY,
-    data TEXT NOT NULL,
-    last_accessed INTEGER NOT NULL
+id VARCHAR(128) PRIMARY KEY,
+data TEXT NOT NULL,
+last_accessed INTEGER NOT NULL
 );
 COMMENT ON TABLE sessions IS 'PHP session storage';
 
 -- Network subnets
 CREATE TABLE subnets (
-    id SERIAL PRIMARY KEY,
-    subnet VARCHAR(18),
-    vlan_tag INTEGER NOT NULL DEFAULT 1,
-    ip_int_start BIGINT NOT NULL,
-    ip_int_stop BIGINT NOT NULL,
-    dhcp_start BIGINT NOT NULL DEFAULT 0,
-    dhcp_stop BIGINT NOT NULL DEFAULT 0,
-    dhcp_lease_time INTEGER NOT NULL DEFAULT 480,
-    gateway BIGINT NOT NULL DEFAULT 0,
-    office BOOLEAN NOT NULL DEFAULT TRUE,
-    hotspot BOOLEAN NOT NULL DEFAULT FALSE,
-    vpn BOOLEAN NOT NULL DEFAULT FALSE,
-    free BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp BOOLEAN NOT NULL DEFAULT TRUE,
-    static BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp_update_hostname BOOLEAN NOT NULL DEFAULT FALSE,
-    discovery BOOLEAN NOT NULL DEFAULT TRUE,
-    notify SMALLINT NOT NULL DEFAULT 7,
-    comment VARCHAR(250)
+id SERIAL PRIMARY KEY,
+subnet VARCHAR(18),
+vlan_tag INTEGER NOT NULL DEFAULT 1,
+ip_int_start BIGINT NOT NULL,
+ip_int_stop BIGINT NOT NULL,
+dhcp_start BIGINT NOT NULL DEFAULT 0,
+dhcp_stop BIGINT NOT NULL DEFAULT 0,
+dhcp_lease_time INTEGER NOT NULL DEFAULT 480,
+gateway BIGINT NOT NULL DEFAULT 0,
+office SMALLINT NOT NULL DEFAULT 1,
+hotspot SMALLINT NOT NULL DEFAULT 0,
+vpn SMALLINT NOT NULL DEFAULT 0,
+free SMALLINT NOT NULL DEFAULT 0,
+dhcp SMALLINT NOT NULL DEFAULT 1,
+static SMALLINT NOT NULL DEFAULT 0,
+dhcp_update_hostname SMALLINT NOT NULL DEFAULT 0,
+discovery SMALLINT NOT NULL DEFAULT 1,
+notify SMALLINT NOT NULL DEFAULT 7,
+comment VARCHAR(250)
 );
 COMMENT ON TABLE subnets IS 'Network subnets configuration';
 COMMENT ON COLUMN subnets.subnet IS 'Network in CIDR notation';
@@ -437,17 +437,17 @@ COMMENT ON COLUMN subnets.notify IS 'Bitmask for notifications: 1=email, 2=sms,
 
 -- Detailed traffic logs
 CREATE TABLE Traffic_detail (
-    id BIGSERIAL PRIMARY KEY,
-    auth_id BIGINT,
-    router_id INTEGER NOT NULL DEFAULT 0,
-    timestamp TIMESTAMP,
-    proto SMALLINT,
-    src_ip INTEGER NOT NULL,
-    dst_ip INTEGER NOT NULL,
-    src_port INTEGER NOT NULL,
-    dst_port INTEGER NOT NULL,
-    bytes BIGINT NOT NULL,
-    pkt INTEGER NOT NULL DEFAULT 0
+id BIGSERIAL PRIMARY KEY,
+auth_id BIGINT,
+router_id INTEGER NOT NULL DEFAULT 0,
+timestamp TIMESTAMP,
+proto SMALLINT,
+src_ip INTEGER NOT NULL,
+dst_ip INTEGER NOT NULL,
+src_port INTEGER NOT NULL,
+dst_port INTEGER NOT NULL,
+bytes BIGINT NOT NULL,
+pkt INTEGER NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Traffic_detail IS 'Detailed traffic flow records (NetFlow)';
 COMMENT ON COLUMN Traffic_detail.proto IS 'IP protocol number';
@@ -456,56 +456,56 @@ COMMENT ON COLUMN Traffic_detail.bytes IS 'Bytes transferred in this flow';
 
 -- Unknown MAC addresses
 CREATE TABLE Unknown_mac (
-    id BIGSERIAL PRIMARY KEY,
-    mac VARCHAR(12),
-    port_id BIGINT,
-    device_id INTEGER,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id BIGSERIAL PRIMARY KEY,
+mac VARCHAR(12),
+port_id BIGINT,
+device_id INTEGER,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE Unknown_mac IS 'Recently discovered unknown MAC addresses';
 
 -- User authorization records
 CREATE TABLE User_auth (
-    id SERIAL PRIMARY KEY,
-    user_id BIGINT NOT NULL DEFAULT 0,
-    ou_id INTEGER,
-    ip VARCHAR(18) NOT NULL DEFAULT '',
-    ip_int BIGINT NOT NULL DEFAULT 0,
-    save_traf BOOLEAN NOT NULL DEFAULT FALSE,
-    enabled BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp BOOLEAN NOT NULL DEFAULT TRUE,
-    filter_group_id SMALLINT NOT NULL DEFAULT 0,
-    dynamic BOOLEAN NOT NULL DEFAULT FALSE,
-    eof TIMESTAMP,
-    deleted BOOLEAN NOT NULL DEFAULT FALSE,
-    comments VARCHAR(250),
-    dns_name VARCHAR(253),
-    dns_ptr_only BOOLEAN NOT NULL DEFAULT FALSE,
-    WikiName VARCHAR(250),
-    dhcp_acl TEXT,
-    queue_id INTEGER NOT NULL DEFAULT 0,
-    mac VARCHAR(20) NOT NULL DEFAULT '',
-    dhcp_action VARCHAR(10) NOT NULL DEFAULT '',
-    dhcp_option_set VARCHAR(50),
-    dhcp_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    dhcp_hostname VARCHAR(60),
-    last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    arp_found TIMESTAMP,
-    blocked BOOLEAN NOT NULL DEFAULT FALSE,
-    day_quota INTEGER NOT NULL DEFAULT 0,
-    month_quota INTEGER NOT NULL DEFAULT 0,
-    device_model_id INTEGER DEFAULT 87,
-    firmware VARCHAR(100),
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "client-id" VARCHAR(250),
-    nagios BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios_status VARCHAR(10) NOT NULL DEFAULT '',
-    nagios_handler VARCHAR(50) NOT NULL DEFAULT '',
-    link_check BOOLEAN NOT NULL DEFAULT FALSE,
-    changed BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp_changed INTEGER NOT NULL DEFAULT 0,
-    changed_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    created_by VARCHAR(10)
+id SERIAL PRIMARY KEY,
+user_id BIGINT NOT NULL DEFAULT 0,
+ou_id INTEGER,
+ip VARCHAR(18) NOT NULL DEFAULT '',
+ip_int BIGINT NOT NULL DEFAULT 0,
+save_traf SMALLINT NOT NULL DEFAULT 0,
+enabled SMALLINT NOT NULL DEFAULT 0,
+dhcp SMALLINT NOT NULL DEFAULT 1,
+filter_group_id SMALLINT NOT NULL DEFAULT 0,
+dynamic SMALLINT NOT NULL DEFAULT 0,
+eof TIMESTAMP,
+deleted SMALLINT NOT NULL DEFAULT 0,
+comments VARCHAR(250),
+dns_name VARCHAR(253),
+dns_ptr_only SMALLINT NOT NULL DEFAULT 0,
+WikiName VARCHAR(250),
+dhcp_acl TEXT,
+queue_id INTEGER NOT NULL DEFAULT 0,
+mac VARCHAR(20) NOT NULL DEFAULT '',
+dhcp_action VARCHAR(10) NOT NULL DEFAULT '',
+dhcp_option_set VARCHAR(50),
+dhcp_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+dhcp_hostname VARCHAR(60),
+last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+arp_found TIMESTAMP,
+blocked SMALLINT NOT NULL DEFAULT 0,
+day_quota INTEGER NOT NULL DEFAULT 0,
+month_quota INTEGER NOT NULL DEFAULT 0,
+device_model_id INTEGER DEFAULT 87,
+firmware VARCHAR(100),
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+"client-id" VARCHAR(250),
+nagios SMALLINT NOT NULL DEFAULT 0,
+nagios_status VARCHAR(10) NOT NULL DEFAULT '',
+nagios_handler VARCHAR(50) NOT NULL DEFAULT '',
+link_check SMALLINT NOT NULL DEFAULT 0,
+changed SMALLINT NOT NULL DEFAULT 0,
+dhcp_changed SMALLINT NOT NULL DEFAULT 0,
+changed_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+created_by VARCHAR(10)
 );
 COMMENT ON TABLE User_auth IS 'Network user/device authorization records';
 COMMENT ON COLUMN User_auth.enabled IS 'Is this authorization active';
@@ -515,30 +515,30 @@ COMMENT ON COLUMN User_auth.nagios IS 'Enable Nagios monitoring for this host';
 
 -- User authorization aliases
 CREATE TABLE User_auth_alias (
-    id SERIAL PRIMARY KEY,
-    auth_id INTEGER NOT NULL,
-    alias VARCHAR(100),
-    description VARCHAR(100),
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id SERIAL PRIMARY KEY,
+auth_id INTEGER NOT NULL,
+alias VARCHAR(100),
+description VARCHAR(100),
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE User_auth_alias IS 'Aliases/DNS names for authorization records';
 
 -- User list
 CREATE TABLE User_list (
-    id BIGSERIAL PRIMARY KEY,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    login VARCHAR(255),
-    fio VARCHAR(255),
-    enabled BOOLEAN NOT NULL DEFAULT TRUE,
-    blocked BOOLEAN NOT NULL DEFAULT FALSE,
-    deleted BOOLEAN NOT NULL DEFAULT FALSE,
-    ou_id INTEGER NOT NULL DEFAULT 0,
-    device_id INTEGER,
-    filter_group_id INTEGER NOT NULL DEFAULT 0,
-    queue_id INTEGER NOT NULL DEFAULT 0,
-    day_quota INTEGER NOT NULL DEFAULT 0,
-    month_quota INTEGER NOT NULL DEFAULT 0,
-    permanent BOOLEAN NOT NULL DEFAULT FALSE
+id BIGSERIAL PRIMARY KEY,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+login VARCHAR(255),
+fio VARCHAR(255),
+enabled SMALLINT NOT NULL DEFAULT 1,
+blocked SMALLINT NOT NULL DEFAULT 0,
+deleted SMALLINT NOT NULL DEFAULT 0,
+ou_id INTEGER NOT NULL DEFAULT 0,
+device_id INTEGER,
+filter_group_id INTEGER NOT NULL DEFAULT 0,
+queue_id INTEGER NOT NULL DEFAULT 0,
+day_quota INTEGER NOT NULL DEFAULT 0,
+month_quota INTEGER NOT NULL DEFAULT 0,
+permanent SMALLINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE User_list IS 'User accounts in the system';
 COMMENT ON COLUMN User_list.fio IS 'Full name (ФИО)';
@@ -546,77 +546,77 @@ COMMENT ON COLUMN User_list.permanent IS 'Is this a permanent user (not dynamic)
 
 -- User sessions (web interface)
 CREATE TABLE user_sessions (
-    id SERIAL PRIMARY KEY,
-    session_id VARCHAR(128) NOT NULL,
-    user_id INTEGER NOT NULL,
-    ip_address VARCHAR(45) NOT NULL,
-    user_agent TEXT NOT NULL,
-    created_at INTEGER NOT NULL,
-    last_activity INTEGER NOT NULL,
-    is_active BOOLEAN DEFAULT TRUE
+id SERIAL PRIMARY KEY,
+session_id VARCHAR(128) NOT NULL,
+user_id INTEGER NOT NULL,
+ip_address VARCHAR(45) NOT NULL,
+user_agent TEXT NOT NULL,
+created_at INTEGER NOT NULL,
+last_activity INTEGER NOT NULL,
+is_active SMALLINT DEFAULT 1
 );
 COMMENT ON TABLE user_sessions IS 'Web interface user sessions';
 
 -- User traffic statistics
 CREATE TABLE User_stats (
-    id BIGSERIAL PRIMARY KEY,
-    router_id BIGINT DEFAULT 0,
-    auth_id BIGINT NOT NULL DEFAULT 0,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    byte_in BIGINT NOT NULL DEFAULT 0,
-    byte_out BIGINT NOT NULL DEFAULT 0
+id BIGSERIAL PRIMARY KEY,
+router_id BIGINT DEFAULT 0,
+auth_id BIGINT NOT NULL DEFAULT 0,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+byte_in BIGINT NOT NULL DEFAULT 0,
+byte_out BIGINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE User_stats IS 'User traffic statistics (aggregated)';
 
 -- Detailed user statistics
 CREATE TABLE User_stats_full (
-    id BIGSERIAL PRIMARY KEY,
-    router_id BIGINT DEFAULT 0,
-    auth_id BIGINT NOT NULL DEFAULT 0,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    byte_in BIGINT NOT NULL DEFAULT 0,
-    byte_out BIGINT NOT NULL DEFAULT 0,
-    pkt_in INTEGER,
-    pkt_out INTEGER,
-    step INTEGER NOT NULL DEFAULT 600
+id BIGSERIAL PRIMARY KEY,
+router_id BIGINT DEFAULT 0,
+auth_id BIGINT NOT NULL DEFAULT 0,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+byte_in BIGINT NOT NULL DEFAULT 0,
+byte_out BIGINT NOT NULL DEFAULT 0,
+pkt_in INTEGER,
+pkt_out INTEGER,
+step SMALLINT NOT NULL DEFAULT 600
 );
 COMMENT ON TABLE User_stats_full IS 'Detailed user traffic statistics';
 COMMENT ON COLUMN User_stats_full.step IS 'Statistics collection interval in seconds';
 
 -- Temporary variables
 CREATE TABLE variables (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(30) NOT NULL UNIQUE,
-    value VARCHAR(255),
-    clear_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id SERIAL PRIMARY KEY,
+name VARCHAR(30) NOT NULL UNIQUE,
+value VARCHAR(255),
+clear_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE variables IS 'Temporary system variables and locks';
 
 -- Device vendors
 CREATE TABLE vendors (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(40) NOT NULL
+id SERIAL PRIMARY KEY,
+name VARCHAR(40) NOT NULL
 );
 COMMENT ON TABLE vendors IS 'Network equipment vendors';
 
 -- System version
 CREATE TABLE version (
-    id INTEGER PRIMARY KEY DEFAULT 1,
-    version VARCHAR(10) NOT NULL DEFAULT '2.4.14'
+id INTEGER PRIMARY KEY DEFAULT 1,
+version VARCHAR(10) NOT NULL DEFAULT '2.4.14'
 );
 COMMENT ON TABLE version IS 'System version information';
 
 -- WAN interface statistics
 CREATE TABLE Wan_stats (
-    id SERIAL PRIMARY KEY,
-    time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    router_id INTEGER,
-    interface_id INTEGER,
-    "in" BIGINT NOT NULL DEFAULT 0,
-    "out" BIGINT NOT NULL DEFAULT 0,
-    forward_in BIGINT NOT NULL DEFAULT 0,
-    forward_out BIGINT NOT NULL DEFAULT 0
+id SERIAL PRIMARY KEY,
+time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+router_id INTEGER,
+interface_id INTEGER,
+"in" BIGINT NOT NULL DEFAULT 0,
+"out" BIGINT NOT NULL DEFAULT 0,
+forward_in BIGINT NOT NULL DEFAULT 0,
+forward_out BIGINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Wan_stats IS 'WAN interface traffic statistics';
 COMMENT ON COLUMN Wan_stats."in" IS 'Bytes received on WAN interface';
@@ -624,13 +624,13 @@ COMMENT ON COLUMN Wan_stats."out" IS 'Bytes transmitted on WAN interface';
 
 -- System activity log
 CREATE TABLE worklog (
-    id BIGSERIAL PRIMARY KEY,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    auth_id BIGINT NOT NULL DEFAULT 0,
-    customer VARCHAR(50) NOT NULL DEFAULT 'system',
-    ip VARCHAR(18) NOT NULL DEFAULT '127.0.0.1',
-    message TEXT NOT NULL,
-    level INTEGER NOT NULL DEFAULT 1
+id BIGSERIAL PRIMARY KEY,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+auth_id BIGINT NOT NULL DEFAULT 0,
+customer VARCHAR(50) NOT NULL DEFAULT 'system',
+ip VARCHAR(18) NOT NULL DEFAULT '127.0.0.1',
+message TEXT NOT NULL,
+level SMALLINT NOT NULL DEFAULT 1
 );
 COMMENT ON TABLE worklog IS 'System activity and audit log';
 COMMENT ON COLUMN worklog.level IS 'Log level: 1=info, 2=warning, 3=error, 4=debug';
@@ -638,7 +638,7 @@ COMMENT ON COLUMN worklog.level IS 'Log level: 1=info, 2=warning, 3=error, 4=deb
 -- Create indexes (same as original structure)
 CREATE INDEX idx_devices_ip ON devices(ip);
 CREATE INDEX idx_devices_device_type ON devices(device_type);
-CREATE INDEX idx_devices_active ON devices(active) WHERE active = TRUE;
+CREATE INDEX idx_devices_active ON devices(active) WHERE active = 1;
 
 CREATE INDEX idx_device_ports_device_id ON device_ports(device_id);
 CREATE INDEX idx_device_ports_port ON device_ports(port);
@@ -665,14 +665,14 @@ CREATE INDEX idx_traffic_detail_dst ON Traffic_detail(auth_id, timestamp, router
 CREATE INDEX idx_unknown_mac_timestamp ON Unknown_mac(timestamp, device_id, port_id, mac);
 
 CREATE INDEX idx_user_auth_main ON User_auth(id, user_id, ip_int, mac, ip, deleted);
-CREATE INDEX idx_user_auth_deleted ON User_auth(deleted) WHERE deleted = FALSE;
+CREATE INDEX idx_user_auth_deleted ON User_auth(deleted) WHERE deleted = 0;
 CREATE INDEX idx_user_auth_ou_id ON User_auth(ou_id);
 
 CREATE INDEX idx_user_list_main ON User_list(id, ou_id, enabled, blocked, deleted);
 
 CREATE INDEX idx_user_sessions_session_id ON user_sessions(session_id);
 CREATE INDEX idx_user_sessions_user_id ON user_sessions(user_id);
-CREATE INDEX idx_user_sessions_is_active ON user_sessions(is_active) WHERE is_active = TRUE;
+CREATE INDEX idx_user_sessions_is_active ON user_sessions(is_active) WHERE is_active = 1;
 
 CREATE INDEX idx_user_stats_timestamp ON User_stats(timestamp, auth_id, router_id);
 CREATE INDEX idx_user_stats_full_timestamp ON User_stats_full(timestamp, auth_id, router_id);
@@ -683,44 +683,3 @@ CREATE INDEX idx_worklog_customer ON worklog(customer, level, timestamp);
 CREATE INDEX idx_worklog_timestamp ON worklog(level, timestamp);
 CREATE INDEX idx_worklog_auth_id ON worklog(auth_id, level, timestamp);
 
--- Functions for IP address conversion
-CREATE OR REPLACE FUNCTION inet_to_bigint(ip_address INET)
-RETURNS BIGINT AS $$
-BEGIN
-    RETURN (
-        (split_part(host(ip_address), '.', 1)::BIGINT << 24) +
-        (split_part(host(ip_address), '.', 2)::BIGINT << 16) +
-        (split_part(host(ip_address), '.', 3)::BIGINT << 8) +
-        split_part(host(ip_address), '.', 4)::BIGINT
-    );
-END;
-$$ LANGUAGE plpgsql IMMUTABLE;
-
-CREATE OR REPLACE FUNCTION bigint_to_inet(ip_int BIGINT)
-RETURNS INET AS $$
-BEGIN
-    RETURN ((ip_int >> 24) & 255) || '.' ||
-           ((ip_int >> 16) & 255) || '.' ||
-           ((ip_int >> 8) & 255) || '.' ||
-           (ip_int & 255);
-END;
-$$ LANGUAGE plpgsql IMMUTABLE;
-
--- Trigger to automatically update ip_int when ip changes
-CREATE OR REPLACE FUNCTION update_ip_int()
-RETURNS TRIGGER AS $$
-BEGIN
-    IF NEW.ip IS NOT NULL AND (NEW.ip_int IS NULL OR OLD.ip != NEW.ip) THEN
-        NEW.ip_int := inet_to_bigint(NEW.ip::INET);
-    END IF;
-    RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-CREATE TRIGGER trigger_devices_ip_int 
-    BEFORE INSERT OR UPDATE ON devices 
-    FOR EACH ROW EXECUTE FUNCTION update_ip_int();
-
-CREATE TRIGGER trigger_user_auth_ip_int 
-    BEFORE INSERT OR UPDATE ON User_auth 
-    FOR EACH ROW EXECUTE FUNCTION update_ip_int();

+ 197 - 197
docs/databases/postgres/en/data.sql

@@ -21,37 +21,37 @@ ON CONFLICT (id) DO UPDATE SET
 -- Configuration options
 INSERT INTO config_options (id, option_name, "description.russian", "description.english", draft, uniq, type, default_value, min_value, max_value)
 VALUES
-(1, 'KB', 'Еденица измерения трафика - Килобайт (0) или кибибайт (1,default)', 'Traffic measurement unit - Kilobyte (1000b) or kibibyte (1024b,default)', false, true, 'bool', '1024', 0, 1),
-(3, 'dns server', 'ip-адрес DNS-сервера', 'DNS server ip address', false, true, 'text', '127.0.0.1', 0, 0),
-(5, 'dhcp server', 'ip-адрес DHCP-сервера', 'ip address of the DHCP server', false, true, 'text', '127.0.0.1', 0, 0),
-(9, 'default snmp version', 'Версия snmp по умолчанию. В настоящиймомент поддерживаются 1 и 2. Поддержка версии 3 в разработке.', 'The default version of snmp. Currently, 1 and 2 are supported. Support for version 3 is in development.', false, true, 'int', '2', 1, 3),
-(11, 'default snmp community', 'Read snmp community по умолчанию', 'Read snmp community by default', false, true, 'text', 'public', 0, 0),
-(21, 'admin email', 'E-mail администратора', 'Administrator e-mail', false, true, 'text', 'root', 0, 0),
-(22, 'add user from netflow', 'Создавать ли новые записи для неизвестных адресов из анализа трафика netflow. Не включать, если netflow снимает данные с маршрутизатора локальной сети', 'Whether to create new records for unknown addresses from netflow traffic analysis. Do not enable if netflow get data from the local network router', false, true, 'bool', '0', 0, 1),
-(23, 'save traffic detail', 'Сохранять ли детализацию трафика из netflow по ip-адресам пользователей', 'Whether to keep the details of traffic from netflow by ip addresses of users', false, true, 'bool', '1', 0, 1),
-(26, 'history detail traffic', 'Глубина хранения детализации в сутках. Установка значения больше 3-7 дней приведёт к разрастанию базы данных и увеличит время отображения детализации в интерфейсе администратора', 'Depth of detail storage in days. Setting a value greater than 3-7 days will cause the database to grow and increase the time about to display details in the admin interface', false, true, 'int', '3', 1, 7),
-(27, 'history dhcp lease', 'Глубина хранения аренды dhcp-сервера', 'Storage depth of the dhcp server lease', false, true, 'int', '1', 0, 0),
-(28, 'router_login', 'Логин для входа на сетевые устройства по умолчанию', 'Default login for network devices', false, true, 'text', 'admin', 0, 0),
-(29, 'router_password', 'Пароль по умолчанию на сетевые устройства', 'Default password for network devices', false, true, 'text', 'admin', 0, 0),
-(30, 'router_ssh_port', 'Порт ssh по умолчанию', 'SSH default port', false, true, 'int', '22', 22, 0),
-(32, 'org name', 'Название организации', 'Organization name', false, true, 'text', 'ORG', 0, 0),
-(33, 'office domain', 'Домен организации', 'Organization domain', false, true, 'text', 'local', 0, 0),
-(34, 'debug', 'Включить отладку', 'Enable debugging', false, true, 'bool', '0', 0, 1),
-(35, 'connections history, days', 'Время хранения истории мест подключения ip-адресов', 'Storage time of the history of connection locations of ip addresses', false, true, 'int', '90', 1, 365),
-(37, 'refresh access lists', 'Расположение скрипта управления контролем доступа для роутеров Mikrotik', 'Location of the access control script for Mikrotik routers', false, true, 'text', '/opt/Eye/scripts/sync_mikrotik.pl', 0, 0),
-(38, 'regenerate dhcp cconfig', 'Расположение скрипта управления конфигурацией dhcp-серверами', 'Location of the dhcp server configuration management script', false, true, 'text', '/opt/Eye/scripts/update-dnsmasq', 0, 0),
-(39, 'regenerate dns cconfig', 'Расположение скрипта управления dns-сервером', 'Location of the dns server management script', false, true, 'text', '/opt/Eye/scripts/update-dns', 0, 0),
-(40, 'regenerate nagios cconfig', 'Расположение скрипта конфигурирования Nagios', 'Location of the Nagios configuration script', false, true, 'text', '/etc/nagios/restart_nagios', 0, 0),
-(41, 'discovery network', 'Расположение скрипта сканирования сети', 'Location of the network scan script', false, true, 'text', '/opt/Eye/scripts/fetch_new_arp.pl', 0, 0),
-(44, 'Ignore hotspot dhcp log', 'Не писать лог событий dhcp-сервера хотспота. Имеет смысл вклчючать, поскольку время аренды в хот-споте как правило маленькое и в записях хот-спота становятся незаметны логи обычных пользователей', 'Do not write the event log of the hotspot dhcp server. It makes sense to include it, since the rental time in the hotspot is usually small and the logs of ordinary users become invisible in the hotspot records', false, true, 'bool', '1', 0, 1),
-(45, 'ignore update dhcp event', 'Не писать события обновления ip-адреса dhcp-сервера.', 'Do not write events for updating the IP address of the dhcp server.', false, true, 'bool', '0', 0, 1),
-(46, 'update hostname from dhcp', 'Обновлять имя хоста в DNS при получении адреса по DHCP', 'Update the hostname in DNS when receiving the address via DHCP', false, true, 'bool', '0', 0, 1),
-(47, 'history worklog', 'Глубина хранения VERBOSE логов работы в интерфейсе администратора', 'Depth of work VERBOSE logs storage in the admin interface', false, true, 'int', '90', 0, 1095),
-(48, 'history syslog', 'Глубина хранения логов работы syslog-сервера', 'Syslog server logs storage depth', false, true, 'int', '90', 0, 1095),
-(49, 'history traffic stats', 'Глубина хранения статистики трафикаюзеров', 'User traffic statistics storage depth', false, true, 'int', '365', 0, 0),
-(50, 'urgent sync access', 'Немедленное изменение списков доступа на роутере после правки записи пользователя', 'Immediate change of access lists on the router after editing the user record', false, true, 'bool', '0', 0, 1),
-(51, 'Email_alert', 'Отправлять e-mail уведомления', 'Send e-mail notifications', false, true, 'bool', '1', 0, 1),
-(52, 'Sender email', 'E-mail адрес, с которого рассылается почта', 'E-mail address from which mail is sent', false, true, 'text', 'root', 0, 0),
+(1, 'KB', 'Еденица измерения трафика - Килобайт (0) или кибибайт (1,default)', 'Traffic measurement unit - Kilobyte (1000b) or kibibyte (1024b,default)', 0, 1, 'bool', '1024', 0, 1),
+(3, 'dns server', 'ip-адрес DNS-сервера', 'DNS server ip address', 0, 1, 'text', '127.0.0.1', 0, 0),
+(5, 'dhcp server', 'ip-адрес DHCP-сервера', 'ip address of the DHCP server', 0, 1, 'text', '127.0.0.1', 0, 0),
+(9, 'default snmp version', 'Версия snmp по умолчанию. В настоящиймомент поддерживаются 1 и 2. Поддержка версии 3 в разработке.', 'The default version of snmp. Currently, 1 and 2 are supported. Support for version 3 is in development.', 0, 1, 'int', '2', 1, 3),
+(11, 'default snmp community', 'Read snmp community по умолчанию', 'Read snmp community by default', 0, 1, 'text', 'public', 0, 0),
+(21, 'admin email', 'E-mail администратора', 'Administrator e-mail', 0, 1, 'text', 'root', 0, 0),
+(22, 'add user from netflow', 'Создавать ли новые записи для неизвестных адресов из анализа трафика netflow. Не включать, если netflow снимает данные с маршрутизатора локальной сети', 'Whether to create new records for unknown addresses from netflow traffic analysis. Do not enable if netflow get data from the local network router', 0, 1, 'bool', '0', 0, 1),
+(23, 'save traffic detail', 'Сохранять ли детализацию трафика из netflow по ip-адресам пользователей', 'Whether to keep the details of traffic from netflow by ip addresses of users', 0, 1, 'bool', '1', 0, 1),
+(26, 'history detail traffic', 'Глубина хранения детализации в сутках. Установка значения больше 3-7 дней приведёт к разрастанию базы данных и увеличит время отображения детализации в интерфейсе администратора', 'Depth of detail storage in days. Setting a value greater than 3-7 days will cause the database to grow and increase the time about to display details in the admin interface', 0, 1, 'int', '3', 1, 7),
+(27, 'history dhcp lease', 'Глубина хранения аренды dhcp-сервера', 'Storage depth of the dhcp server lease', 0, 1, 'int', '1', 0, 0),
+(28, 'router_login', 'Логин для входа на сетевые устройства по умолчанию', 'Default login for network devices', 0, 1, 'text', 'admin', 0, 0),
+(29, 'router_password', 'Пароль по умолчанию на сетевые устройства', 'Default password for network devices', 0, 1, 'text', 'admin', 0, 0),
+(30, 'router_ssh_port', 'Порт ssh по умолчанию', 'SSH default port', 0, 1, 'int', '22', 22, 0),
+(32, 'org name', 'Название организации', 'Organization name', 0, 1, 'text', 'ORG', 0, 0),
+(33, 'office domain', 'Домен организации', 'Organization domain', 0, 1, 'text', 'local', 0, 0),
+(34, 'debug', 'Включить отладку', 'Enable debugging', 0, 1, 'bool', '0', 0, 1),
+(35, 'connections history, days', 'Время хранения истории мест подключения ip-адресов', 'Storage time of the history of connection locations of ip addresses', 0, 1, 'int', '90', 1, 365),
+(37, 'refresh access lists', 'Расположение скрипта управления контролем доступа для роутеров Mikrotik', 'Location of the access control script for Mikrotik routers', 0, 1, 'text', '/opt/Eye/scripts/sync_mikrotik.pl', 0, 0),
+(38, 'regenerate dhcp cconfig', 'Расположение скрипта управления конфигурацией dhcp-серверами', 'Location of the dhcp server configuration management script', 0, 1, 'text', '/opt/Eye/scripts/update-dnsmasq', 0, 0),
+(39, 'regenerate dns cconfig', 'Расположение скрипта управления dns-сервером', 'Location of the dns server management script', 0, 1, 'text', '/opt/Eye/scripts/update-dns', 0, 0),
+(40, 'regenerate nagios cconfig', 'Расположение скрипта конфигурирования Nagios', 'Location of the Nagios configuration script', 0, 1, 'text', '/etc/nagios/restart_nagios', 0, 0),
+(41, 'discovery network', 'Расположение скрипта сканирования сети', 'Location of the network scan script', 0, 1, 'text', '/opt/Eye/scripts/fetch_new_arp.pl', 0, 0),
+(44, 'Ignore hotspot dhcp log', 'Не писать лог событий dhcp-сервера хотспота. Имеет смысл вклчючать, поскольку время аренды в хот-споте как правило маленькое и в записях хот-спота становятся незаметны логи обычных пользователей', 'Do not write the event log of the hotspot dhcp server. It makes sense to include it, since the rental time in the hotspot is usually small and the logs of ordinary users become invisible in the hotspot records', 0, 1, 'bool', '1', 0, 1),
+(45, 'ignore update dhcp event', 'Не писать события обновления ip-адреса dhcp-сервера.', 'Do not write events for updating the IP address of the dhcp server.', 0, 1, 'bool', '0', 0, 1),
+(46, 'update hostname from dhcp', 'Обновлять имя хоста в DNS при получении адреса по DHCP', 'Update the hostname in DNS when receiving the address via DHCP', 0, 1, 'bool', '0', 0, 1),
+(47, 'history worklog', 'Глубина хранения VERBOSE логов работы в интерфейсе администратора', 'Depth of work VERBOSE logs storage in the admin interface', 0, 1, 'int', '90', 0, 1095),
+(48, 'history syslog', 'Глубина хранения логов работы syslog-сервера', 'Syslog server logs storage depth', 0, 1, 'int', '90', 0, 1095),
+(49, 'history traffic stats', 'Глубина хранения статистики трафикаюзеров', 'User traffic statistics storage depth', 0, 1, 'int', '365', 0, 0),
+(50, 'urgent sync access', 'Немедленное изменение списков доступа на роутере после правки записи пользователя', 'Immediate change of access lists on the router after editing the user record', 0, 1, 'bool', '0', 0, 1),
+(51, 'Email_alert', 'Отправлять e-mail уведомления', 'Send e-mail notifications', 0, 1, 'bool', '1', 0, 1),
+(52, 'Sender email', 'E-mail адрес, с которого рассылается почта', 'E-mail address from which mail is sent', 0, 1, 'text', 'root', 0, 0),
 (53, 'log level', 'Каждый уровень включает в себя предыдущий:
 0- ERROR - писать только ошибки
 1 - WARNING - писать предупреждения
@@ -60,27 +60,27 @@ VALUES
 0 - ERROR - write only errors
 1 - WARNING - write warnings
 2 - INFO - write informational
-3 - VERBOSE - write detailed information about the operations performed', false, true, 'int', '2', 0, 3),
-(54, 'enable_quotes', 'Включить обработку квот по трафику', 'Enable traffic quota processing', false, true, 'bool', '0', 0, 1),
-(55, 'netflow_step', 'Интервал сброса данных из коллектора netflow, минуты', 'Data reset interval from netflow collector, minutes', false, true, 'int', '1', 1, 10),
-(56, 'traffic_ipstat_history', 'Время хранения полной статистики по трафику для каждого ip-адреса в сутках. Таблица в 6 раз больше обычной часовой статистики. Врядли кому-то потребуется глубина хранения более месяца.', 'The storage time of complete traffic statistics for each ip address in days. The table is 6 times larger than the usual hourly statistic Hardly anyone will need a storage depth of more than a month.', false, true, 'int', '30', 0, 365),
-(57, 'nagios_url', 'Адрес сайта nagios', 'nagios site address', false, true, 'text', 'http://127.0.0.1/nagios', 0, 0),
-(58, 'cacti_url', 'Адрес сайта cacti', 'cacti site address', false, true, 'text', 'http://127.0.0.1/cacti', 0, 0),
-(59, 'torrus_url', 'Адрес сайта Torrus', 'Torrus website address', false, true, 'text', 'http://127.0.0.1/torrus/CollectorName/', 0, 0),
-(60, 'wiki_url', 'Адрес wiki', 'Wiki website address', false, true, 'text', 'http://127.0.0.1/wiki', 0, 0),
-(61, 'wiki_path', 'Путь к каталогу данных вики', 'Path to wiki data directory', false, true, 'text', '/var/www/foswiki/data/', 0, 0),
-(62, 'stat_url', 'Адрес этого сайта', 'Address of this site', false, true, 'text', 'http://127.0.0.1/stat', 0, 0),
-(63, 'wiki_web', 'Web for Wiki. Default - Main. http://example.local/Main/WebHome', 'Web for Wiki. Default - Main. http://example.local/Main/WebHome', false, true, 'text', 'Main', 0, 0),
-(64, 'auto_mac_rule', 'Создавать автоматическую привязку мак-адреса к юзеру. Т.е. все ip-адреса для найденного мака будут привязываться к одном и тому же юзеру.', 'Create an automatic binding of the mac address to the user. I.e. all ip addresses for the found mac will be bound to the same user.', false, true, 'bool', '0', 0, 1),
-(65, 'mikrotik_command_interface', 'Используемый способ конфигурирования (0 - cli для ROS 6, 1 - rest api для ROS 7)', 'Configuration method used (0 - cli for ROS 6, 1 - rest api for ROS 7)', true, true, 'int', '0', 0, 1),
-(66, 'mikrotik_rest_api_ssl', 'Использовать https для rest api', 'Use HTTPS for rest api', true, true, 'bool', '1', 0, 1),
-(67, 'mikrotik_rest_api_port', 'Порт вэб-интерфейса для rest api', 'Web interface port for rest API', true, true, 'int', '443', 0, 0),
-(68, 'config_mode', 'Режим конфигурирования. Скрипт опроса устройств не выполняется.', 'Configuration mode. The device polling script is not running.', false, true, 'bool', '0', 0, 1),
-(69, 'clean_empty_user', 'Автоматически удалять записи пользователей, не содержащие ip-адресов или автоматических привязок', 'Automatically delete user records that do not contain IP addresses or automatic bindings', false, true, 'bool', '0', 0, 1),
-(70, 'dns_server_type', 'Тип используемого dns-сервера: Windows, Bind. Если используется локальный dnsmasq - параметры dns-сервера указывать не надо.', 'The type of dns server used: Windows, Bind. If you are using a local dnsmasq, you do not need to specify the dns server parameters.', false, true, 'list;windows;bind', 'bind', 0, 0),
-(71, 'enable_dns_updates', 'Включить обновления DNS имен при изменении dns-имени в ip-записи', 'Enable DNS name updates when dns name changes in an ip record', false, true, 'bool', '0', 0, 1),
-(72, 'netflow_path', 'Каталог для хранения данных, полученных по netflow от маршрутизаторов', 'The directory for storing data received via netflow from routers', false, true, 'text', '/opt/Eye/netflow', 0, 0),
-(73, 'check_computer_exists', 'Проверять существование компьютера в домене перед обновлением DNS по DHCP запросу', 'Verify the existence of a computer in the domain before updating DNS by DHCP request', false, true, 'bool', '1', 0, 0)
+3 - VERBOSE - write detailed information about the operations performed', 0, 1, 'int', '2', 0, 3),
+(54, 'enable_quotes', 'Включить обработку квот по трафику', 'Enable traffic quota processing', 0, 1, 'bool', '0', 0, 1),
+(55, 'netflow_step', 'Интервал сброса данных из коллектора netflow, минуты', 'Data reset interval from netflow collector, minutes', 0, 1, 'int', '1', 1, 10),
+(56, 'traffic_ipstat_history', 'Время хранения полной статистики по трафику для каждого ip-адреса в сутках. Таблица в 6 раз больше обычной часовой статистики. Врядли кому-то потребуется глубина хранения более месяца.', 'The storage time of complete traffic statistics for each ip address in days. The table is 6 times larger than the usual hourly statistic Hardly anyone will need a storage depth of more than a month.', 0, 1, 'int', '30', 0, 365),
+(57, 'nagios_url', 'Адрес сайта nagios', 'nagios site address', 0, 1, 'text', 'http://127.0.0.1/nagios', 0, 0),
+(58, 'cacti_url', 'Адрес сайта cacti', 'cacti site address', 0, 1, 'text', 'http://127.0.0.1/cacti', 0, 0),
+(59, 'torrus_url', 'Адрес сайта Torrus', 'Torrus website address', 0, 1, 'text', 'http://127.0.0.1/torrus/CollectorName/', 0, 0),
+(60, 'wiki_url', 'Адрес wiki', 'Wiki website address', 0, 1, 'text', 'http://127.0.0.1/wiki', 0, 0),
+(61, 'wiki_path', 'Путь к каталогу данных вики', 'Path to wiki data directory', 0, 1, 'text', '/var/www/foswiki/data/', 0, 0),
+(62, 'stat_url', 'Адрес этого сайта', 'Address of this site', 0, 1, 'text', 'http://127.0.0.1/stat', 0, 0),
+(63, 'wiki_web', 'Web for Wiki. Default - Main. http://example.local/Main/WebHome', 'Web for Wiki. Default - Main. http://example.local/Main/WebHome', 0, 1, 'text', 'Main', 0, 0),
+(64, 'auto_mac_rule', 'Создавать автоматическую привязку мак-адреса к юзеру. Т.е. все ip-адреса для найденного мака будут привязываться к одном и тому же юзеру.', 'Create an automatic binding of the mac address to the user. I.e. all ip addresses for the found mac will be bound to the same user.', 0, 1, 'bool', '0', 0, 1),
+(65, 'mikrotik_command_interface', 'Используемый способ конфигурирования (0 - cli для ROS 6, 1 - rest api для ROS 7)', 'Configuration method used (0 - cli for ROS 6, 1 - rest api for ROS 7)', 1, 1, 'int', '0', 0, 1),
+(66, 'mikrotik_rest_api_ssl', 'Использовать https для rest api', 'Use HTTPS for rest api', 1, 1, 'bool', '1', 0, 1),
+(67, 'mikrotik_rest_api_port', 'Порт вэб-интерфейса для rest api', 'Web interface port for rest API', 1, 1, 'int', '443', 0, 0),
+(68, 'config_mode', 'Режим конфигурирования. Скрипт опроса устройств не выполняется.', 'Configuration mode. The device polling script is not running.', 0, 1, 'bool', '0', 0, 1),
+(69, 'clean_empty_user', 'Автоматически удалять записи пользователей, не содержащие ip-адресов или автоматических привязок', 'Automatically delete user records that do not contain IP addresses or automatic bindings', 0, 1, 'bool', '0', 0, 1),
+(70, 'dns_server_type', 'Тип используемого dns-сервера: Windows, Bind. Если используется локальный dnsmasq - параметры dns-сервера указывать не надо.', 'The type of dns server used: Windows, Bind. If you are using a local dnsmasq, you do not need to specify the dns server parameters.', 0, 1, 'list;windows;bind', 'bind', 0, 0),
+(71, 'enable_dns_updates', 'Включить обновления DNS имен при изменении dns-имени в ip-записи', 'Enable DNS name updates when dns name changes in an ip record', 0, 1, 'bool', '0', 0, 1),
+(72, 'netflow_path', 'Каталог для хранения данных, полученных по netflow от маршрутизаторов', 'The directory for storing data received via netflow from routers', 0, 1, 'text', '/opt/Eye/netflow', 0, 0),
+(73, 'check_computer_exists', 'Проверять существование компьютера в домене перед обновлением DNS по DHCP запросу', 'Verify the existence of a computer in the domain before updating DNS by DHCP request', 0, 1, 'bool', '1', 0, 0)
 ON CONFLICT (id) DO UPDATE SET
     option_name = EXCLUDED.option_name,
     "description.russian" = EXCLUDED."description.russian",
@@ -134,121 +134,121 @@ ON CONFLICT (id) DO UPDATE SET
 -- Device models
 INSERT INTO device_models (id, model_name, vendor_id, poe_in, poe_out, nagios_template)
 VALUES
-(1, '2011LS', 9, true, false, NULL),
-(2, '2011UAS-2HnD', 9, true, false, NULL),
-(3, 'AT-8000S', 8, false, false, NULL),
-(4, 'AT-8100S/48POE', 8, false, false, NULL),
-(5, 'AT-9000/28', 8, false, false, NULL),
-(6, 'AT-GS950/24', 8, false, false, NULL),
-(7, 'CCR1009-7G-1C-1S+', 9, false, false, NULL),
-(8, 'CCR1036-8G-2S+', 9, false, false, NULL),
-(10, 'CRS317-1G-16S+', 9, false, false, NULL),
-(11, 'CRS326-24S+2Q+', 9, false, false, NULL),
-(12, 'CRS328-24P-4S+', 9, true, false, NULL),
-(14, 'CRS328-4C-20S-4S+', 9, false, false, NULL),
-(15, 'DGS-3120-48TC', 7, false, false, NULL),
-(16, 'ES-2024', 4, false, false, NULL),
-(17, 'ES-2024A', 4, false, false, NULL),
-(18, 'ES-2108', 4, false, false, NULL),
-(19, 'ES-2108-G', 4, false, false, NULL),
-(20, 'ES-3124-4F', 4, false, false, NULL),
-(21, 'GS110TP', 10, false, true, NULL),
-(22, 'GS-4024', 4, false, false, NULL),
-(23, 'HP 1910', 15, false, false, NULL),
-(24, 'ISCOM2110A-MA', 5, false, false, NULL),
-(25, 'ISCOM2110EA-MA', 5, false, false, NULL),
-(26, 'ISCOM2126EA-MA', 5, false, false, NULL),
-(27, 'ISCOM2128EA-MA', 5, false, false, NULL),
-(28, 'Linux server', 1, false, false, ''),
-(29, 'MES2124F', 2, false, false, NULL),
-(30, 'MES2124MB', 2, false, false, NULL),
-(31, 'MES5248', 2, false, false, NULL),
-(32, 'RB2011UAS', 9, true, false, NULL),
-(33, 'RB3011UiAS', 9, true, false, NULL),
-(34, 'RB960PGS', 9, true, true, NULL),
-(35, 'RBD52G-5HacD2HnD', 9, true, false, NULL),
-(36, 'S2940-8G-v2', 6, false, false, NULL),
-(37, 'S2980G-24T', 6, false, false, NULL),
-(38, 'S3750G-24S-E', 6, false, false, NULL),
-(39, 'S5300-52P-LI-AC', 3, false, false, NULL),
-(40, 'S5320-52X-PWR-SI-AC', 3, false, false, NULL),
-(41, 'S5321-28X-SI-AC', 3, false, false, NULL),
-(42, 'S5321-52X-SI-AC', 3, false, false, NULL),
-(43, 'S6320-54C-EI-48S-AC', 3, false, false, NULL),
-(44, 'SNR-S2980G-24T', 6, false, false, NULL),
-(45, 'V1910-16G', 15, false, false, NULL),
-(46, 'V1910-24G-PoE', 15, false, false, NULL),
-(47, 'Windows server', 1, false, false, NULL),
-(48, 'WS-C2960G-24TC-L', 16, false, false, NULL),
-(49, 'WS-C3560G-24TS-S', 16, false, false, NULL),
-(50, 'x210-16GT', 8, false, false, NULL),
-(51, 'x210-24GT', 8, false, false, NULL),
-(52, 'x610-24Ts/X', 8, false, false, NULL),
-(53, 'x610-48Ts', 8, false, false, NULL),
-(54, 'XGS-4728', 4, false, false, NULL),
-(55, 'ZyWall 310', 4, false, false, NULL),
-(56, 'APC Smart-UPS_3000', 20, false, false, 'ups.cfg'),
-(57, 'APC Smart-UPS_5000', 20, false, false, 'ups.cfg'),
-(58, 'Schneider Smart-UPS_3000', 21, false, false, NULL),
-(59, 'SMG-1016M', 2, false, false, NULL),
-(60, 'EATON 9PX 1500i RT 2U', 64, false, false, NULL),
-(61, 'EATON 9PX3000i_RT_2U', 64, false, false, NULL),
-(62, 'EATON 9PX_6000i', 64, false, false, NULL),
-(63, 'EATON PW9130_3000', 64, false, false, NULL),
-(64, 'EATON PW9130_3000VA-R', 64, false, false, NULL),
-(65, 'Epson WF-5620 Series', 59, false, false, NULL),
-(66, 'Epson WF-8590 Series', 59, false, false, NULL),
-(67, 'HP Officejet-7000', 15, false, false, 'hp.cfg'),
-(68, 'OKI C610', 62, false, false, NULL),
-(69, 'OKI MB472', 62, false, false, NULL),
-(70, 'OKI MB491', 62, false, false, NULL),
-(71, 'OKI MC562', 62, false, false, NULL),
-(72, 'OKI MC573', 62, false, false, NULL),
-(73, 'OKI MC861', 62, false, false, NULL),
-(74, 'Panasonic KX-MB2000RU', 61, false, false, NULL),
-(75, 'PT-MZ10KE', 61, false, false, NULL),
-(76, 'PT-VX41', 61, false, false, NULL),
-(77, 'Rave 522AA', 33, false, false, NULL),
-(78, 'DZ570E', 61, false, false, NULL),
-(79, 'DZ6700', 61, false, false, NULL),
-(80, 'Rcq80', 61, false, false, NULL),
-(81, 'RZ12K', 61, false, false, NULL),
-(82, 'RZ660', 61, false, false, NULL),
-(83, 'RZ770', 61, false, false, NULL),
-(84, 'RZ970', 61, false, false, NULL),
-(85, 'XVR-5216', 66, false, false, NULL),
-(86, 'HWg-STE', 68, false, false, NULL),
-(87, 'Computer', 1, false, false, ''),
-(88, 'Mobile Phone', 1, false, false, NULL),
-(89, 'Switch', 1, false, false, NULL),
-(90, 'Projectiondesign F22', 34, false, false, NULL),
-(91, 'DS-I252', 36, false, false, NULL),
-(92, 'LTV-CNE-720-48', 37, false, false, NULL),
-(93, 'U-100', 38, false, false, NULL),
-(94, 'TAU-8', 2, false, false, NULL),
-(95, 'SIP-T21P E2', 39, false, false, NULL),
-(96, 'A510 IP', 40, false, false, NULL),
-(97, 'W60B', 39, false, false, NULL),
-(98, 'TAU-2M', 2, false, false, NULL),
-(99, 'PAP2T', 41, false, false, NULL),
-(100, 'VP-12', 2, false, false, NULL),
-(101, 'SIP-T23P', 39, false, false, NULL),
-(102, 'SPA-2102', 16, false, false, NULL),
-(103, 'RB760iGS', 9, true, false, NULL),
-(104, 'MES2324B', 2, false, false, NULL),
-(105, 'MES2324FB', 2, false, false, NULL),
-(106, 'MES2124P', 2, false, true, NULL),
-(107, 'MES2428P', 2, false, true, NULL),
-(108, 'Symmetra LX 16000', 20, false, false, 'symmetra.cfg'),
-(109, 'SNR-UPS-ONT20', 6, false, false, 'ups3.cfg'),
-(110, 'MES-3728', 4, false, false, NULL),
-(111, 'SNR-S5210G-24TX-UPS-R', 6, false, false, NULL),
-(112, 'SNR-S2985G-24TC', 6, false, false, NULL),
-(113, 'MES-5248', 2, false, false, NULL),
-(114, 'SNR-S5210G-24TX-POE', 6, false, true, NULL),
-(115, 'SNR-S5210G-24TX-UPS', 6, false, false, NULL),
-(116, 'SNR-S5210X-8F-UPS', 6, false, false, NULL),
-(117, 'SNR-S2982G-8T-UPS', 6, false, false, NULL)
+(1, '2011LS', 9, 1, 0, NULL),
+(2, '2011UAS-2HnD', 9, 1, 0, NULL),
+(3, 'AT-8000S', 8, 0, 0, NULL),
+(4, 'AT-8100S/48POE', 8, 0, 0, NULL),
+(5, 'AT-9000/28', 8, 0, 0, NULL),
+(6, 'AT-GS950/24', 8, 0, 0, NULL),
+(7, 'CCR1009-7G-1C-1S+', 9, 0, 0, NULL),
+(8, 'CCR1036-8G-2S+', 9, 0, 0, NULL),
+(10, 'CRS317-1G-16S+', 9, 0, 0, NULL),
+(11, 'CRS326-24S+2Q+', 9, 0, 0, NULL),
+(12, 'CRS328-24P-4S+', 9, 1, 0, NULL),
+(14, 'CRS328-4C-20S-4S+', 9, 0, 0, NULL),
+(15, 'DGS-3120-48TC', 7, 0, 0, NULL),
+(16, 'ES-2024', 4, 0, 0, NULL),
+(17, 'ES-2024A', 4, 0, 0, NULL),
+(18, 'ES-2108', 4, 0, 0, NULL),
+(19, 'ES-2108-G', 4, 0, 0, NULL),
+(20, 'ES-3124-4F', 4, 0, 0, NULL),
+(21, 'GS110TP', 10, 0, 1, NULL),
+(22, 'GS-4024', 4, 0, 0, NULL),
+(23, 'HP 1910', 15, 0, 0, NULL),
+(24, 'ISCOM2110A-MA', 5, 0, 0, NULL),
+(25, 'ISCOM2110EA-MA', 5, 0, 0, NULL),
+(26, 'ISCOM2126EA-MA', 5, 0, 0, NULL),
+(27, 'ISCOM2128EA-MA', 5, 0, 0, NULL),
+(28, 'Linux server', 1, 0, 0, ''),
+(29, 'MES2124F', 2, 0, 0, NULL),
+(30, 'MES2124MB', 2, 0, 0, NULL),
+(31, 'MES5248', 2, 0, 0, NULL),
+(32, 'RB2011UAS', 9, 1, 0, NULL),
+(33, 'RB3011UiAS', 9, 1, 0, NULL),
+(34, 'RB960PGS', 9, 1, 1, NULL),
+(35, 'RBD52G-5HacD2HnD', 9, 1, 0, NULL),
+(36, 'S2940-8G-v2', 6, 0, 0, NULL),
+(37, 'S2980G-24T', 6, 0, 0, NULL),
+(38, 'S3750G-24S-E', 6, 0, 0, NULL),
+(39, 'S5300-52P-LI-AC', 3, 0, 0, NULL),
+(40, 'S5320-52X-PWR-SI-AC', 3, 0, 0, NULL),
+(41, 'S5321-28X-SI-AC', 3, 0, 0, NULL),
+(42, 'S5321-52X-SI-AC', 3, 0, 0, NULL),
+(43, 'S6320-54C-EI-48S-AC', 3, 0, 0, NULL),
+(44, 'SNR-S2980G-24T', 6, 0, 0, NULL),
+(45, 'V1910-16G', 15, 0, 0, NULL),
+(46, 'V1910-24G-PoE', 15, 0, 0, NULL),
+(47, 'Windows server', 1, 0, 0, NULL),
+(48, 'WS-C2960G-24TC-L', 16, 0, 0, NULL),
+(49, 'WS-C3560G-24TS-S', 16, 0, 0, NULL),
+(50, 'x210-16GT', 8, 0, 0, NULL),
+(51, 'x210-24GT', 8, 0, 0, NULL),
+(52, 'x610-24Ts/X', 8, 0, 0, NULL),
+(53, 'x610-48Ts', 8, 0, 0, NULL),
+(54, 'XGS-4728', 4, 0, 0, NULL),
+(55, 'ZyWall 310', 4, 0, 0, NULL),
+(56, 'APC Smart-UPS_3000', 20, 0, 0, 'ups.cfg'),
+(57, 'APC Smart-UPS_5000', 20, 0, 0, 'ups.cfg'),
+(58, 'Schneider Smart-UPS_3000', 21, 0, 0, NULL),
+(59, 'SMG-1016M', 2, 0, 0, NULL),
+(60, 'EATON 9PX 1500i RT 2U', 64, 0, 0, NULL),
+(61, 'EATON 9PX3000i_RT_2U', 64, 0, 0, NULL),
+(62, 'EATON 9PX_6000i', 64, 0, 0, NULL),
+(63, 'EATON PW9130_3000', 64, 0, 0, NULL),
+(64, 'EATON PW9130_3000VA-R', 64, 0, 0, NULL),
+(65, 'Epson WF-5620 Series', 59, 0, 0, NULL),
+(66, 'Epson WF-8590 Series', 59, 0, 0, NULL),
+(67, 'HP Officejet-7000', 15, 0, 0, 'hp.cfg'),
+(68, 'OKI C610', 62, 0, 0, NULL),
+(69, 'OKI MB472', 62, 0, 0, NULL),
+(70, 'OKI MB491', 62, 0, 0, NULL),
+(71, 'OKI MC562', 62, 0, 0, NULL),
+(72, 'OKI MC573', 62, 0, 0, NULL),
+(73, 'OKI MC861', 62, 0, 0, NULL),
+(74, 'Panasonic KX-MB2000RU', 61, 0, 0, NULL),
+(75, 'PT-MZ10KE', 61, 0, 0, NULL),
+(76, 'PT-VX41', 61, 0, 0, NULL),
+(77, 'Rave 522AA', 33, 0, 0, NULL),
+(78, 'DZ570E', 61, 0, 0, NULL),
+(79, 'DZ6700', 61, 0, 0, NULL),
+(80, 'Rcq80', 61, 0, 0, NULL),
+(81, 'RZ12K', 61, 0, 0, NULL),
+(82, 'RZ660', 61, 0, 0, NULL),
+(83, 'RZ770', 61, 0, 0, NULL),
+(84, 'RZ970', 61, 0, 0, NULL),
+(85, 'XVR-5216', 66, 0, 0, NULL),
+(86, 'HWg-STE', 68, 0, 0, NULL),
+(87, 'Computer', 1, 0, 0, ''),
+(88, 'Mobile Phone', 1, 0, 0, NULL),
+(89, 'Switch', 1, 0, 0, NULL),
+(90, 'Projectiondesign F22', 34, 0, 0, NULL),
+(91, 'DS-I252', 36, 0, 0, NULL),
+(92, 'LTV-CNE-720-48', 37, 0, 0, NULL),
+(93, 'U-100', 38, 0, 0, NULL),
+(94, 'TAU-8', 2, 0, 0, NULL),
+(95, 'SIP-T21P E2', 39, 0, 0, NULL),
+(96, 'A510 IP', 40, 0, 0, NULL),
+(97, 'W60B', 39, 0, 0, NULL),
+(98, 'TAU-2M', 2, 0, 0, NULL),
+(99, 'PAP2T', 41, 0, 0, NULL),
+(100, 'VP-12', 2, 0, 0, NULL),
+(101, 'SIP-T23P', 39, 0, 0, NULL),
+(102, 'SPA-2102', 16, 0, 0, NULL),
+(103, 'RB760iGS', 9, 1, 0, NULL),
+(104, 'MES2324B', 2, 0, 0, NULL),
+(105, 'MES2324FB', 2, 0, 0, NULL),
+(106, 'MES2124P', 2, 0, 1, NULL),
+(107, 'MES2428P', 2, 0, 1, NULL),
+(108, 'Symmetra LX 16000', 20, 0, 0, 'symmetra.cfg'),
+(109, 'SNR-UPS-ONT20', 6, 0, 0, 'ups3.cfg'),
+(110, 'MES-3728', 4, 0, 0, NULL),
+(111, 'SNR-S5210G-24TX-UPS-R', 6, 0, 0, NULL),
+(112, 'SNR-S2985G-24TC', 6, 0, 0, NULL),
+(113, 'MES-5248', 2, 0, 0, NULL),
+(114, 'SNR-S5210G-24TX-POE', 6, 0, 1, NULL),
+(115, 'SNR-S5210G-24TX-UPS', 6, 0, 0, NULL),
+(116, 'SNR-S5210X-8F-UPS', 6, 0, 0, NULL),
+(117, 'SNR-S2982G-8T-UPS', 6, 0, 0, NULL)
 ON CONFLICT (id) DO UPDATE SET
     model_name = EXCLUDED.model_name,
     vendor_id = EXCLUDED.vendor_id,
@@ -290,20 +290,20 @@ ON CONFLICT (id) DO UPDATE SET
 -- Organizational Units
 INSERT INTO OU (id, ou_name, comment, default_users, default_hotspot, nagios_dir, nagios_host_use, nagios_ping, nagios_default_service, enabled, filter_group_id, queue_id, dynamic, life_duration, parent_id)
 VALUES
-(0, '!Any', NULL, false, false, '/etc/nagios/any', 'generic-host', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(1, 'Servers', NULL, false, false, NULL, NULL, true, NULL, 1, 1, 0, false, 24.00, NULL),
-(2, 'Administrators', NULL, false, false, NULL, NULL, true, NULL, 0, 0, 0, false, 24.00, NULL),
-(3, 'Users', NULL, false, false, NULL, NULL, true, NULL, 0, 0, 0, false, 24.00, NULL),
-(4, 'VOIP', NULL, false, false, 'voip', 'voip', true, NULL, 1, 4, 5, false, 24.00, NULL),
-(5, 'IPCAM', NULL, false, false, 'videocam', 'ip-cam', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(6, 'Printers', NULL, false, false, 'printers', 'printers', true, 'printer-service', 0, 0, 0, false, 24.00, NULL),
-(7, 'Switches', NULL, false, false, 'switches', 'switches', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(8, 'UPS', NULL, false, false, 'ups', 'ups', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(9, 'Security', NULL, false, false, 'security', 'security', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(10, 'Routers', NULL, false, false, 'routers', 'routers', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(11, 'WiFi AP', NULL, false, false, 'ap', 'ap', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(12, 'DHCP', NULL, true, false, NULL, NULL, true, NULL, 0, 0, 0, false, 24.00, NULL),
-(13, 'Guests', NULL, false, false, NULL, NULL, true, NULL, 1, 1, 4, true, 24.00, NULL)
+(0, '!Any', NULL, 0, 0, '/etc/nagios/any', 'generic-host', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(1, 'Servers', NULL, 0, 0, NULL, NULL, 1, NULL, 1, 1, 0, 0, 24.00, NULL),
+(2, 'Administrators', NULL, 0, 0, NULL, NULL, 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(3, 'Users', NULL, 0, 0, NULL, NULL, 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(4, 'VOIP', NULL, 0, 0, 'voip', 'voip', 1, NULL, 1, 4, 5, 0, 24.00, NULL),
+(5, 'IPCAM', NULL, 0, 0, 'videocam', 'ip-cam', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(6, 'Printers', NULL, 0, 0, 'printers', 'printers', 1, 'printer-service', 0, 0, 0, 0, 24.00, NULL),
+(7, 'Switches', NULL, 0, 0, 'switches', 'switches', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(8, 'UPS', NULL, 0, 0, 'ups', 'ups', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(9, 'Security', NULL, 0, 0, 'security', 'security', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(10, 'Routers', NULL, 0, 0, 'routers', 'routers', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(11, 'WiFi AP', NULL, 0, 0, 'ap', 'ap', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(12, 'DHCP', NULL, 1, 0, NULL, NULL, 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(13, 'Guests', NULL, 0, 0, NULL, NULL, 1, NULL, 1, 1, 4, 1, 24.00, NULL)
 ON CONFLICT (id) DO UPDATE SET
     ou_name = EXCLUDED.ou_name,
     comment = EXCLUDED.comment,
@@ -339,7 +339,7 @@ ON CONFLICT (id) DO UPDATE SET
 
 -- Network subnets
 INSERT INTO subnets (id, subnet, vlan_tag, ip_int_start, ip_int_stop, dhcp_start, dhcp_stop, dhcp_lease_time, gateway, office, hotspot, vpn, free, dhcp, static, dhcp_update_hostname, discovery, notify, comment)
-VALUES (1, '192.168.2.0/24', 2, 3232236032, 3232236287, 3232236132, 3232236182, 480, 3232236033, true, false, false, false, true, false, true, true, 7, 'LAN')
+VALUES (1, '192.168.2.0/24', 2, 3232236032, 3232236287, 3232236132, 3232236182, 480, 3232236033, 1, 0, 0, 0, 1, 0, 1, 1, 7, 'LAN')
 ON CONFLICT (id) DO UPDATE SET
     subnet = EXCLUDED.subnet,
     vlan_tag = EXCLUDED.vlan_tag,
@@ -468,21 +468,21 @@ ON CONFLICT (id) DO UPDATE SET
 -- Filter group assignments
 INSERT INTO Group_filters (id, group_id, filter_id, "order", action)
 VALUES
-(1, 2, 90, 1, true),
-(2, 2, 91, 2, true),
-(3, 2, 11, 3, true),
-(5, 2, 3, 4, true),
-(6, 2, 105, 5, true),
-(7, 2, 4, 6, true),
-(8, 2, 106, 7, true),
-(9, 2, 10, 8, true),
-(10, 2, 81, 9, true),
-(11, 2, 82, 10, true),
-(15, 2, 40, 11, true),
-(16, 2, 1, 12, true),
-(17, 2, 79, 13, true),
-(18, 2, 80, 14, true),
-(19, 1, 9, 1, true)
+(1, 2, 90, 1, 1),
+(2, 2, 91, 2, 1),
+(3, 2, 11, 3, 1),
+(5, 2, 3, 4, 1),
+(6, 2, 105, 5, 1),
+(7, 2, 4, 6, 1),
+(8, 2, 106, 7, 1),
+(9, 2, 10, 8, 1),
+(10, 2, 81, 9, 1),
+(11, 2, 82, 10, 1),
+(15, 2, 40, 11, 1),
+(16, 2, 1, 12, 1),
+(17, 2, 79, 13, 1),
+(18, 2, 80, 14, 1),
+(19, 1, 9, 1, 1)
 ON CONFLICT (id) DO UPDATE SET
     group_id = EXCLUDED.group_id,
     filter_id = EXCLUDED.filter_id,

+ 353 - 394
docs/databases/postgres/ru/create_db.sql

@@ -1,11 +1,11 @@
 -- Создаем базу данных с русской локалью
 CREATE DATABASE stat
-    WITH 
-    ENCODING = 'UTF8'
-    LC_COLLATE = 'ru_RU.UTF-8'
-    LC_CTYPE = 'ru_RU.UTF-8'
-    TEMPLATE = template0
-    CONNECTION LIMIT = -1;
+WITH
+ENCODING = 'UTF8'
+LC_COLLATE = 'ru_RU.UTF-8'
+LC_CTYPE = 'ru_RU.UTF-8'
+TEMPLATE = template0
+CONNECTION LIMIT = -1;
 
 \c stat;
 
@@ -16,10 +16,10 @@ CREATE EXTENSION IF NOT EXISTS ip4r;
 
 -- Access Control List
 CREATE TABLE acl (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(30) NOT NULL,
-    "description.english" VARCHAR(250) NOT NULL,
-    "description.russian" VARCHAR(250) NOT NULL
+id SERIAL PRIMARY KEY,
+name VARCHAR(30) NOT NULL,
+"description.english" VARCHAR(250) NOT NULL,
+"description.russian" VARCHAR(250) NOT NULL
 );
 COMMENT ON TABLE acl IS 'Список контроля доступа - роли и разрешения';
 COMMENT ON COLUMN acl."description.english" IS 'Описание на английском языке';
@@ -27,9 +27,9 @@ COMMENT ON COLUMN acl."description.russian" IS 'Описание на русск
 
 -- Кэш компьютеров из Active Directory
 CREATE TABLE ad_comp_cache (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(63) NOT NULL UNIQUE,
-    last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id SERIAL PRIMARY KEY,
+name VARCHAR(63) NOT NULL UNIQUE,
+last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE ad_comp_cache IS 'Кэш компьютеров из Active Directory';
 COMMENT ON COLUMN ad_comp_cache.name IS 'Имя компьютера в AD';
@@ -37,12 +37,12 @@ COMMENT ON COLUMN ad_comp_cache.last_found IS 'Время последнего 
 
 -- Правила аутентификации
 CREATE TABLE auth_rules (
-    id SERIAL PRIMARY KEY,
-    user_id INTEGER,
-    ou_id INTEGER,
-    type INTEGER NOT NULL,
-    rule VARCHAR(40) UNIQUE,
-    comment VARCHAR(250)
+id SERIAL PRIMARY KEY,
+user_id INTEGER,
+ou_id INTEGER,
+type SMALLINT NOT NULL,
+rule VARCHAR(40) UNIQUE,
+comment VARCHAR(250)
 );
 COMMENT ON TABLE auth_rules IS 'Правила аутентификации и авторизации пользователей';
 COMMENT ON COLUMN auth_rules.type IS 'Тип правила: 0=разрешить, 1=запретить, и т.д.';
@@ -50,33 +50,33 @@ COMMENT ON COLUMN auth_rules.rule IS 'Идентификатор правила
 
 -- Здания
 CREATE TABLE building (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(50) NOT NULL,
-    comment VARCHAR(250)
+id SERIAL PRIMARY KEY,
+name VARCHAR(50) NOT NULL,
+comment VARCHAR(250)
 );
 COMMENT ON TABLE building IS 'Физические здания/локации';
 COMMENT ON COLUMN building.name IS 'Название здания';
 
 -- Системная конфигурация
 CREATE TABLE config (
-    id SERIAL PRIMARY KEY,
-    option_id INTEGER,
-    value VARCHAR(250)
+id SERIAL PRIMARY KEY,
+option_id INTEGER,
+value VARCHAR(250)
 );
 COMMENT ON TABLE config IS 'Значения системной конфигурации';
 
 -- Опции конфигурации
 CREATE TABLE config_options (
-    id SERIAL PRIMARY KEY,
-    option_name VARCHAR(50) NOT NULL,
-    "description.russian" TEXT,
-    "description.english" TEXT,
-    draft BOOLEAN NOT NULL DEFAULT FALSE,
-    uniq BOOLEAN NOT NULL DEFAULT TRUE,
-    type VARCHAR(100) NOT NULL,
-    default_value VARCHAR(250),
-    min_value INTEGER NOT NULL DEFAULT 0,
-    max_value INTEGER NOT NULL DEFAULT 0
+id SERIAL PRIMARY KEY,
+option_name VARCHAR(50) NOT NULL,
+"description.russian" TEXT,
+"description.english" TEXT,
+draft SMALLINT NOT NULL DEFAULT 0,
+uniq SMALLINT NOT NULL DEFAULT 1,
+type VARCHAR(100) NOT NULL,
+default_value VARCHAR(250),
+min_value INTEGER NOT NULL DEFAULT 0,
+max_value INTEGER NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE config_options IS 'Доступные опции конфигурации';
 COMMENT ON COLUMN config_options.option_name IS 'Имя/ключ опции';
@@ -85,11 +85,11 @@ COMMENT ON COLUMN config_options.uniq IS 'Опция уникальна (еди
 
 -- Сетевые соединения
 CREATE TABLE connections (
-    id BIGSERIAL PRIMARY KEY,
-    device_id BIGINT NOT NULL,
-    port_id BIGINT NOT NULL,
-    auth_id BIGINT NOT NULL,
-    last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id BIGSERIAL PRIMARY KEY,
+device_id BIGINT NOT NULL,
+port_id BIGINT NOT NULL,
+auth_id BIGINT NOT NULL,
+last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE connections IS 'Текущие сетевые соединения (MAC-IP-устройство-порт)';
 COMMENT ON COLUMN connections.device_id IS 'ID сетевого устройства';
@@ -99,12 +99,12 @@ COMMENT ON COLUMN connections.last_found IS 'Время последней ак
 
 -- Пользователи системы
 CREATE TABLE Customers (
-    id SERIAL PRIMARY KEY,
-    Login VARCHAR(20),
-    comment VARCHAR(100),
-    password VARCHAR(255),
-    api_key VARCHAR(255),
-    rights SMALLINT NOT NULL DEFAULT 3
+id SERIAL PRIMARY KEY,
+Login VARCHAR(20),
+comment VARCHAR(100),
+password VARCHAR(255),
+api_key VARCHAR(255),
+rights SMALLINT NOT NULL DEFAULT 3
 );
 COMMENT ON TABLE Customers IS 'Пользователи/администраторы системы';
 COMMENT ON COLUMN Customers.Login IS 'Логин пользователя';
@@ -112,45 +112,45 @@ COMMENT ON COLUMN Customers.rights IS 'Уровень прав доступа: 0
 
 -- Сетевые устройства
 CREATE TABLE devices (
-    id SERIAL PRIMARY KEY,
-    device_type INTEGER NOT NULL DEFAULT 1,
-    device_model_id INTEGER DEFAULT 89,
-    firmware VARCHAR(100),
-    vendor_id INTEGER NOT NULL DEFAULT 1,
-    device_name VARCHAR(50),
-    building_id INTEGER NOT NULL DEFAULT 1,
-    ip INET,
-    ip_int BIGINT,
-    login VARCHAR(50),
-    password VARCHAR(255),
-    protocol SMALLINT NOT NULL DEFAULT 0,
-    control_port INTEGER NOT NULL DEFAULT 23,
-    port_count INTEGER NOT NULL DEFAULT 0,
-    SN VARCHAR(80),
-    comment VARCHAR(255),
-    snmp_version SMALLINT NOT NULL DEFAULT 0,
-    snmp3_auth_proto VARCHAR(10) NOT NULL DEFAULT 'sha512',
-    snmp3_priv_proto VARCHAR(10) NOT NULL DEFAULT 'aes128',
-    snmp3_user_rw VARCHAR(20),
-    snmp3_user_rw_password VARCHAR(20),
-    snmp3_user_ro VARCHAR(20),
-    snmp3_user_ro_password VARCHAR(20),
-    community VARCHAR(50) NOT NULL DEFAULT 'public',
-    rw_community VARCHAR(50) NOT NULL DEFAULT 'private',
-    fdb_snmp_index BOOLEAN NOT NULL DEFAULT FALSE,
-    discovery BOOLEAN NOT NULL DEFAULT TRUE,
-    netflow_save BOOLEAN NOT NULL DEFAULT FALSE,
-    user_acl BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios BOOLEAN NOT NULL DEFAULT FALSE,
-    active BOOLEAN NOT NULL DEFAULT TRUE,
-    nagios_status VARCHAR(10) NOT NULL DEFAULT 'UP',
-    queue_enabled BOOLEAN NOT NULL DEFAULT FALSE,
-    connected_user_only BOOLEAN NOT NULL DEFAULT TRUE,
-    user_id INTEGER,
-    deleted BOOLEAN NOT NULL DEFAULT FALSE,
-    discovery_locked BOOLEAN NOT NULL DEFAULT FALSE,
-    locked_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+id SERIAL PRIMARY KEY,
+device_type INTEGER NOT NULL DEFAULT 1,
+device_model_id INTEGER DEFAULT 89,
+firmware VARCHAR(100),
+vendor_id INTEGER NOT NULL DEFAULT 1,
+device_name VARCHAR(50),
+building_id INTEGER NOT NULL DEFAULT 1,
+ip INET,
+ip_int BIGINT,
+login VARCHAR(50),
+password VARCHAR(255),
+protocol SMALLINT NOT NULL DEFAULT 0,
+control_port INTEGER NOT NULL DEFAULT 23,
+port_count INTEGER NOT NULL DEFAULT 0,
+SN VARCHAR(80),
+comment VARCHAR(255),
+snmp_version SMALLINT NOT NULL DEFAULT 0,
+snmp3_auth_proto VARCHAR(10) NOT NULL DEFAULT 'sha512',
+snmp3_priv_proto VARCHAR(10) NOT NULL DEFAULT 'aes128',
+snmp3_user_rw VARCHAR(20),
+snmp3_user_rw_password VARCHAR(20),
+snmp3_user_ro VARCHAR(20),
+snmp3_user_ro_password VARCHAR(20),
+community VARCHAR(50) NOT NULL DEFAULT 'public',
+rw_community VARCHAR(50) NOT NULL DEFAULT 'private',
+fdb_snmp_index SMALLINT NOT NULL DEFAULT 0,
+discovery SMALLINT NOT NULL DEFAULT 1,
+netflow_save SMALLINT NOT NULL DEFAULT 0,
+user_acl SMALLINT NOT NULL DEFAULT 0,
+dhcp SMALLINT NOT NULL DEFAULT 0,
+nagios SMALLINT NOT NULL DEFAULT 0,
+active SMALLINT NOT NULL DEFAULT 1,
+nagios_status VARCHAR(10) NOT NULL DEFAULT 'UP',
+queue_enabled SMALLINT NOT NULL DEFAULT 0,
+connected_user_only SMALLINT NOT NULL DEFAULT 1,
+user_id INTEGER,
+deleted SMALLINT NOT NULL DEFAULT 0,
+discovery_locked SMALLINT NOT NULL DEFAULT 0,
+locked_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE devices IS 'Сетевые устройства (коммутаторы, маршрутизаторы и т.д.)';
 COMMENT ON COLUMN devices.device_type IS 'ID типа устройства';
@@ -161,31 +161,31 @@ COMMENT ON COLUMN devices.active IS 'Устройство активно и мо
 
 -- Экземпляры фильтров устройств
 CREATE TABLE device_filter_instances (
-    id SERIAL PRIMARY KEY,
-    instance_id INTEGER,
-    device_id INTEGER
+id SERIAL PRIMARY KEY,
+instance_id INTEGER,
+device_id INTEGER
 );
 COMMENT ON TABLE device_filter_instances IS 'Экземпляры фильтров, назначенные устройствам';
 
 -- L3 интерфейсы устройств
 CREATE TABLE device_l3_interfaces (
-    id SERIAL PRIMARY KEY,
-    device_id INTEGER,
-    snmpin INTEGER,
-    interface_type INTEGER NOT NULL DEFAULT 0,
-    name VARCHAR(100)
+id SERIAL PRIMARY KEY,
+device_id INTEGER,
+snmpin INTEGER,
+interface_type SMALLINT NOT NULL DEFAULT 0,
+name VARCHAR(100)
 );
 COMMENT ON TABLE device_l3_interfaces IS 'Интерфейсы 3 уровня на устройствах';
 COMMENT ON COLUMN device_l3_interfaces.interface_type IS 'Тип интерфейса: 0=неизвестно, 1=LAN, 2=WAN, 3=DMZ';
 
 -- Модели устройств
 CREATE TABLE device_models (
-    id SERIAL PRIMARY KEY,
-    model_name VARCHAR(200),
-    vendor_id INTEGER DEFAULT 1,
-    poe_in BOOLEAN NOT NULL DEFAULT FALSE,
-    poe_out BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios_template VARCHAR(200)
+id SERIAL PRIMARY KEY,
+model_name VARCHAR(200),
+vendor_id INTEGER DEFAULT 1,
+poe_in SMALLINT NOT NULL DEFAULT 0,
+poe_out SMALLINT NOT NULL DEFAULT 0,
+nagios_template VARCHAR(200)
 );
 COMMENT ON TABLE device_models IS 'Модели устройств и их характеристики';
 COMMENT ON COLUMN device_models.poe_in IS 'Поддерживает питание по Ethernet на входе';
@@ -193,23 +193,23 @@ COMMENT ON COLUMN device_models.poe_out IS 'Обеспечивает питан
 
 -- Порты устройств
 CREATE TABLE device_ports (
-    id BIGSERIAL PRIMARY KEY,
-    device_id INTEGER,
-    snmp_index INTEGER,
-    port INTEGER,
-    ifName VARCHAR(40),
-    port_name VARCHAR(40),
-    comment VARCHAR(50),
-    target_port_id INTEGER NOT NULL DEFAULT 0,
-    auth_id BIGINT,
-    last_mac_count INTEGER DEFAULT 0,
-    uplink BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios BOOLEAN NOT NULL DEFAULT FALSE,
-    skip BOOLEAN NOT NULL DEFAULT FALSE,
-    vlan INTEGER NOT NULL DEFAULT 1,
-    tagged_vlan VARCHAR(250),
-    untagged_vlan VARCHAR(250),
-    forbidden_vlan VARCHAR(250)
+id BIGSERIAL PRIMARY KEY,
+device_id INTEGER,
+snmp_index INTEGER,
+port INTEGER,
+ifName VARCHAR(40),
+port_name VARCHAR(40),
+comment VARCHAR(50),
+target_port_id INTEGER NOT NULL DEFAULT 0,
+auth_id BIGINT,
+last_mac_count INTEGER DEFAULT 0,
+uplink SMALLINT NOT NULL DEFAULT 0,
+nagios SMALLINT NOT NULL DEFAULT 0,
+skip SMALLINT NOT NULL DEFAULT 0,
+vlan INTEGER NOT NULL DEFAULT 1,
+tagged_vlan VARCHAR(250),
+untagged_vlan VARCHAR(250),
+forbidden_vlan VARCHAR(250)
 );
 COMMENT ON TABLE device_ports IS 'Порты/интерфейсы сетевых устройств';
 COMMENT ON COLUMN device_ports.port IS 'Номер физического порта';
@@ -218,9 +218,9 @@ COMMENT ON COLUMN device_ports.vlan IS 'VLAN по умолчанию/натив
 
 -- Типы устройств
 CREATE TABLE device_types (
-    id SERIAL PRIMARY KEY,
-    "name.russian" VARCHAR(50),
-    "name.english" VARCHAR(50)
+id SERIAL PRIMARY KEY,
+"name.russian" VARCHAR(50),
+"name.english" VARCHAR(50)
 );
 COMMENT ON TABLE device_types IS 'Классификация типов устройств';
 COMMENT ON COLUMN device_types."name.russian" IS 'Название типа устройства на русском';
@@ -228,17 +228,17 @@ COMMENT ON COLUMN device_types."name.english" IS 'Название типа ус
 
 -- Логи DHCP
 CREATE TABLE dhcp_log (
-    id BIGSERIAL PRIMARY KEY,
-    mac MACADDR NOT NULL,
-    ip_int BIGINT NOT NULL,
-    ip INET NOT NULL,
-    action VARCHAR(10) NOT NULL,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    auth_id BIGINT NOT NULL,
-    dhcp_hostname VARCHAR(250),
-    "circuit-id" VARCHAR(255),
-    "remote-id" VARCHAR(255),
-    "client-id" VARCHAR(250)
+id BIGSERIAL PRIMARY KEY,
+mac MACADDR NOT NULL,
+ip_int BIGINT NOT NULL,
+ip INET NOT NULL,
+action VARCHAR(10) NOT NULL,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+auth_id BIGINT NOT NULL,
+dhcp_hostname VARCHAR(250),
+"circuit-id" VARCHAR(255),
+"remote-id" VARCHAR(255),
+"client-id" VARCHAR(250)
 );
 COMMENT ON TABLE dhcp_log IS 'Логи транзакций DHCP сервера';
 COMMENT ON COLUMN dhcp_log.action IS 'Действие DHCP: DISCOVER, REQUEST, ACK, NAK, RELEASE';
@@ -246,32 +246,32 @@ COMMENT ON COLUMN dhcp_log."circuit-id" IS 'DHCP опция 82 circuit ID';
 
 -- Очередь DHCP
 CREATE TABLE dhcp_queue (
-    id BIGSERIAL PRIMARY KEY,
-    mac MACADDR NOT NULL,
-    ip INET NOT NULL,
-    action VARCHAR(10) NOT NULL,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    dhcp_hostname VARCHAR(250)
+id BIGSERIAL PRIMARY KEY,
+mac MACADDR NOT NULL,
+ip INET NOT NULL,
+action VARCHAR(10) NOT NULL,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+dhcp_hostname VARCHAR(250)
 );
 COMMENT ON TABLE dhcp_queue IS 'Очередь отложенных операций DHCP';
 
 -- DNS кэш
 CREATE TABLE dns_cache (
-    id BIGSERIAL PRIMARY KEY,
-    dns VARCHAR(250),
-    ip BIGINT,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id BIGSERIAL PRIMARY KEY,
+dns VARCHAR(250),
+ip BIGINT,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE dns_cache IS 'Кэш DNS разрешений';
 
 -- Очередь DNS
 CREATE TABLE dns_queue (
-    id SERIAL PRIMARY KEY,
-    auth_id INTEGER,
-    name_type VARCHAR(10) NOT NULL DEFAULT 'A',
-    name VARCHAR(200),
-    type VARCHAR(10) NOT NULL DEFAULT 'add',
-    value VARCHAR(100)
+id SERIAL PRIMARY KEY,
+auth_id INTEGER,
+name_type VARCHAR(10) NOT NULL DEFAULT 'A',
+name VARCHAR(200),
+type VARCHAR(10) NOT NULL DEFAULT 'add',
+value VARCHAR(100)
 );
 COMMENT ON TABLE dns_queue IS 'Очередь отложенных операций DNS';
 COMMENT ON COLUMN dns_queue.name_type IS 'Тип DNS записи: A, AAAA, PTR, CNAME';
@@ -279,22 +279,22 @@ COMMENT ON COLUMN dns_queue.type IS 'Тип операции: add, delete, updat
 
 -- Экземпляры фильтров
 CREATE TABLE filter_instances (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(50) UNIQUE,
-    comment VARCHAR(200)
+id SERIAL PRIMARY KEY,
+name VARCHAR(50) UNIQUE,
+comment VARCHAR(200)
 );
 COMMENT ON TABLE filter_instances IS 'Экземпляры политик фильтрации';
 
 -- Список правил фильтрации
 CREATE TABLE Filter_list (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(50),
-    comment VARCHAR(250),
-    proto VARCHAR(10),
-    dst TEXT,
-    dstport VARCHAR(20),
-    srcport VARCHAR(20),
-    type INTEGER NOT NULL DEFAULT 0
+id SERIAL PRIMARY KEY,
+name VARCHAR(50),
+comment VARCHAR(250),
+proto VARCHAR(10),
+dst TEXT,
+dstport VARCHAR(20),
+srcport VARCHAR(20),
+type SMALLINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Filter_list IS 'Правила firewall/фильтрации';
 COMMENT ON COLUMN Filter_list.proto IS 'Протокол: tcp, udp, icmp и т.д.';
@@ -303,43 +303,43 @@ COMMENT ON COLUMN Filter_list.type IS 'Тип правила: 0=разрешит
 
 -- Шлюзы подсетей
 CREATE TABLE gateway_subnets (
-    id SERIAL PRIMARY KEY,
-    device_id INTEGER,
-    subnet_id INTEGER
+id SERIAL PRIMARY KEY,
+device_id INTEGER,
+subnet_id INTEGER
 );
 COMMENT ON TABLE gateway_subnets IS 'Какие устройства являются шлюзами для каких подсетей';
 
 -- Назначения фильтров группам
 CREATE TABLE Group_filters (
-    id SERIAL PRIMARY KEY,
-    group_id INTEGER NOT NULL DEFAULT 0,
-    filter_id INTEGER NOT NULL DEFAULT 0,
-    "order" INTEGER NOT NULL DEFAULT 0,
-    action BOOLEAN NOT NULL DEFAULT FALSE
+id SERIAL PRIMARY KEY,
+group_id INTEGER NOT NULL DEFAULT 0,
+filter_id INTEGER NOT NULL DEFAULT 0,
+"order" INTEGER NOT NULL DEFAULT 0,
+action SMALLINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Group_filters IS 'Правила фильтрации, назначенные группам';
 COMMENT ON COLUMN Group_filters."order" IS 'Порядок обработки правил';
-COMMENT ON COLUMN Group_filters.action IS 'Действие: true=разрешить, false=запретить';
+COMMENT ON COLUMN Group_filters.action IS 'Действие: 1=разрешить, 0=запретить';
 
 -- Группы фильтров
 CREATE TABLE Group_list (
-    id SERIAL PRIMARY KEY,
-    instance_id INTEGER NOT NULL DEFAULT 1,
-    group_name VARCHAR(50),
-    comment VARCHAR(250)
+id SERIAL PRIMARY KEY,
+instance_id INTEGER NOT NULL DEFAULT 1,
+group_name VARCHAR(50),
+comment VARCHAR(250)
 );
 COMMENT ON TABLE Group_list IS 'Группы политик фильтрации';
 
 -- История MAC-адресов
 CREATE TABLE mac_history (
-    id BIGSERIAL PRIMARY KEY,
-    mac VARCHAR(12),
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    device_id BIGINT,
-    port_id BIGINT,
-    ip VARCHAR(16) NOT NULL DEFAULT '',
-    auth_id BIGINT,
-    dhcp_hostname VARCHAR(250)
+id BIGSERIAL PRIMARY KEY,
+mac VARCHAR(12),
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+device_id BIGINT,
+port_id BIGINT,
+ip VARCHAR(16) NOT NULL DEFAULT '',
+auth_id BIGINT,
+dhcp_hostname VARCHAR(250)
 );
 COMMENT ON TABLE mac_history IS 'История перемещений MAC-адресов';
 COMMENT ON COLUMN mac_history.mac IS 'MAC-адрес (12 шестнадцатеричных символов)';
@@ -347,31 +347,31 @@ COMMENT ON COLUMN mac_history.ip IS 'Последний использованн
 
 -- Производители MAC-адресов
 CREATE TABLE mac_vendors (
-    id SERIAL PRIMARY KEY,
-    oui VARCHAR(20),
-    companyName VARCHAR(255),
-    companyAddress VARCHAR(255)
+id SERIAL PRIMARY KEY,
+oui VARCHAR(20),
+companyName VARCHAR(255),
+companyAddress VARCHAR(255)
 );
 COMMENT ON TABLE mac_vendors IS 'База данных производителей по MAC-адресам';
 COMMENT ON COLUMN mac_vendors.oui IS 'Organizationally Unique Identifier (первые 6 символов MAC)';
 
 -- Организационные единицы
 CREATE TABLE OU (
-    id SERIAL PRIMARY KEY,
-    ou_name VARCHAR(40),
-    comment VARCHAR(250),
-    default_users BOOLEAN NOT NULL DEFAULT FALSE,
-    default_hotspot BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios_dir VARCHAR(255),
-    nagios_host_use VARCHAR(50),
-    nagios_ping BOOLEAN NOT NULL DEFAULT TRUE,
-    nagios_default_service VARCHAR(100),
-    enabled INTEGER NOT NULL DEFAULT 0,
-    filter_group_id INTEGER NOT NULL DEFAULT 0,
-    queue_id INTEGER NOT NULL DEFAULT 0,
-    dynamic BOOLEAN NOT NULL DEFAULT FALSE,
-    life_duration DECIMAL(10,2) NOT NULL DEFAULT 24.00,
-    parent_id INTEGER
+id SERIAL PRIMARY KEY,
+ou_name VARCHAR(40),
+comment VARCHAR(250),
+default_users SMALLINT NOT NULL DEFAULT 0,
+default_hotspot SMALLINT NOT NULL DEFAULT 0,
+nagios_dir VARCHAR(255),
+nagios_host_use VARCHAR(50),
+nagios_ping SMALLINT NOT NULL DEFAULT 1,
+nagios_default_service VARCHAR(100),
+enabled SMALLINT NOT NULL DEFAULT 0,
+filter_group_id INTEGER NOT NULL DEFAULT 0,
+queue_id INTEGER NOT NULL DEFAULT 0,
+dynamic SMALLINT NOT NULL DEFAULT 0,
+life_duration DECIMAL(10,2) NOT NULL DEFAULT 24.00,
+parent_id INTEGER
 );
 COMMENT ON TABLE OU IS 'Организационные единицы (отделы/группы)';
 COMMENT ON COLUMN OU.ou_name IS 'Имя/идентификатор OU';
@@ -379,10 +379,10 @@ COMMENT ON COLUMN OU.life_duration IS 'Время жизни по умолчан
 
 -- Очереди шейпинга трафика
 CREATE TABLE Queue_list (
-    id SERIAL PRIMARY KEY,
-    queue_name VARCHAR(20) NOT NULL,
-    Download INTEGER NOT NULL DEFAULT 0,
-    Upload INTEGER NOT NULL DEFAULT 0
+id SERIAL PRIMARY KEY,
+queue_name VARCHAR(20) NOT NULL,
+Download INTEGER NOT NULL DEFAULT 0,
+Upload INTEGER NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Queue_list IS 'Профили полосы пропускания для шейпинга трафика';
 COMMENT ON COLUMN Queue_list.Download IS 'Ограничение скорости скачивания в Кбит/с';
@@ -390,43 +390,43 @@ COMMENT ON COLUMN Queue_list.Upload IS 'Ограничение скорости
 
 -- Удаленные syslog сообщения
 CREATE TABLE remote_syslog (
-    id BIGSERIAL PRIMARY KEY,
-    date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    device_id BIGINT NOT NULL,
-    ip VARCHAR(15) NOT NULL,
-    message TEXT NOT NULL
+id BIGSERIAL PRIMARY KEY,
+date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+device_id BIGINT NOT NULL,
+ip VARCHAR(15) NOT NULL,
+message TEXT NOT NULL
 );
 COMMENT ON TABLE remote_syslog IS 'Syslog сообщения от сетевых устройств';
 
 -- PHP сессии
 CREATE TABLE sessions (
-    id VARCHAR(128) PRIMARY KEY,
-    data TEXT NOT NULL,
-    last_accessed INTEGER NOT NULL
+id VARCHAR(128) PRIMARY KEY,
+data TEXT NOT NULL,
+last_accessed INTEGER NOT NULL
 );
 COMMENT ON TABLE sessions IS 'Хранилище PHP сессий';
 
 -- Сетевые подсети
 CREATE TABLE subnets (
-    id SERIAL PRIMARY KEY,
-    subnet VARCHAR(18),
-    vlan_tag INTEGER NOT NULL DEFAULT 1,
-    ip_int_start BIGINT NOT NULL,
-    ip_int_stop BIGINT NOT NULL,
-    dhcp_start BIGINT NOT NULL DEFAULT 0,
-    dhcp_stop BIGINT NOT NULL DEFAULT 0,
-    dhcp_lease_time INTEGER NOT NULL DEFAULT 480,
-    gateway BIGINT NOT NULL DEFAULT 0,
-    office BOOLEAN NOT NULL DEFAULT TRUE,
-    hotspot BOOLEAN NOT NULL DEFAULT FALSE,
-    vpn BOOLEAN NOT NULL DEFAULT FALSE,
-    free BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp BOOLEAN NOT NULL DEFAULT TRUE,
-    static BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp_update_hostname BOOLEAN NOT NULL DEFAULT FALSE,
-    discovery BOOLEAN NOT NULL DEFAULT TRUE,
-    notify SMALLINT NOT NULL DEFAULT 7,
-    comment VARCHAR(250)
+id SERIAL PRIMARY KEY,
+subnet VARCHAR(18),
+vlan_tag INTEGER NOT NULL DEFAULT 1,
+ip_int_start BIGINT NOT NULL,
+ip_int_stop BIGINT NOT NULL,
+dhcp_start BIGINT NOT NULL DEFAULT 0,
+dhcp_stop BIGINT NOT NULL DEFAULT 0,
+dhcp_lease_time INTEGER NOT NULL DEFAULT 480,
+gateway BIGINT NOT NULL DEFAULT 0,
+office SMALLINT NOT NULL DEFAULT 1,
+hotspot SMALLINT NOT NULL DEFAULT 0,
+vpn SMALLINT NOT NULL DEFAULT 0,
+free SMALLINT NOT NULL DEFAULT 0,
+dhcp SMALLINT NOT NULL DEFAULT 1,
+static SMALLINT NOT NULL DEFAULT 0,
+dhcp_update_hostname SMALLINT NOT NULL DEFAULT 0,
+discovery SMALLINT NOT NULL DEFAULT 1,
+notify SMALLINT NOT NULL DEFAULT 7,
+comment VARCHAR(250)
 );
 COMMENT ON TABLE subnets IS 'Конфигурация сетевых подсетей';
 COMMENT ON COLUMN subnets.subnet IS 'Сеть в нотации CIDR';
@@ -437,17 +437,17 @@ COMMENT ON COLUMN subnets.notify IS 'Битовая маска для уведо
 
 -- Подробные логи трафика
 CREATE TABLE Traffic_detail (
-    id BIGSERIAL PRIMARY KEY,
-    auth_id BIGINT,
-    router_id INTEGER NOT NULL DEFAULT 0,
-    timestamp TIMESTAMP,
-    proto SMALLINT,
-    src_ip INTEGER NOT NULL,
-    dst_ip INTEGER NOT NULL,
-    src_port INTEGER NOT NULL,
-    dst_port INTEGER NOT NULL,
-    bytes BIGINT NOT NULL,
-    pkt INTEGER NOT NULL DEFAULT 0
+id BIGSERIAL PRIMARY KEY,
+auth_id BIGINT,
+router_id INTEGER NOT NULL DEFAULT 0,
+timestamp TIMESTAMP,
+proto SMALLINT,
+src_ip INTEGER NOT NULL,
+dst_ip INTEGER NOT NULL,
+src_port INTEGER NOT NULL,
+dst_port INTEGER NOT NULL,
+bytes BIGINT NOT NULL,
+pkt INTEGER NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Traffic_detail IS 'Подробные записи потоков трафика (NetFlow)';
 COMMENT ON COLUMN Traffic_detail.proto IS 'Номер IP протокола';
@@ -456,56 +456,56 @@ COMMENT ON COLUMN Traffic_detail.bytes IS 'Байтов переданно в э
 
 -- Неизвестные MAC-адреса
 CREATE TABLE Unknown_mac (
-    id BIGSERIAL PRIMARY KEY,
-    mac VARCHAR(12),
-    port_id BIGINT,
-    device_id INTEGER,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id BIGSERIAL PRIMARY KEY,
+mac VARCHAR(12),
+port_id BIGINT,
+device_id INTEGER,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE Unknown_mac IS 'Недавно обнаруженные неизвестные MAC-адреса';
 
 -- Записи авторизации пользователей
 CREATE TABLE User_auth (
-    id SERIAL PRIMARY KEY,
-    user_id BIGINT NOT NULL DEFAULT 0,
-    ou_id INTEGER,
-    ip VARCHAR(18) NOT NULL DEFAULT '',
-    ip_int BIGINT NOT NULL DEFAULT 0,
-    save_traf BOOLEAN NOT NULL DEFAULT FALSE,
-    enabled BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp BOOLEAN NOT NULL DEFAULT TRUE,
-    filter_group_id SMALLINT NOT NULL DEFAULT 0,
-    dynamic BOOLEAN NOT NULL DEFAULT FALSE,
-    eof TIMESTAMP,
-    deleted BOOLEAN NOT NULL DEFAULT FALSE,
-    comments VARCHAR(250),
-    dns_name VARCHAR(253),
-    dns_ptr_only BOOLEAN NOT NULL DEFAULT FALSE,
-    WikiName VARCHAR(250),
-    dhcp_acl TEXT,
-    queue_id INTEGER NOT NULL DEFAULT 0,
-    mac VARCHAR(20) NOT NULL DEFAULT '',
-    dhcp_action VARCHAR(10) NOT NULL DEFAULT '',
-    dhcp_option_set VARCHAR(50),
-    dhcp_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    dhcp_hostname VARCHAR(60),
-    last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    arp_found TIMESTAMP,
-    blocked BOOLEAN NOT NULL DEFAULT FALSE,
-    day_quota INTEGER NOT NULL DEFAULT 0,
-    month_quota INTEGER NOT NULL DEFAULT 0,
-    device_model_id INTEGER DEFAULT 87,
-    firmware VARCHAR(100),
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    "client-id" VARCHAR(250),
-    nagios BOOLEAN NOT NULL DEFAULT FALSE,
-    nagios_status VARCHAR(10) NOT NULL DEFAULT '',
-    nagios_handler VARCHAR(50) NOT NULL DEFAULT '',
-    link_check BOOLEAN NOT NULL DEFAULT FALSE,
-    changed BOOLEAN NOT NULL DEFAULT FALSE,
-    dhcp_changed INTEGER NOT NULL DEFAULT 0,
-    changed_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    created_by VARCHAR(10)
+id SERIAL PRIMARY KEY,
+user_id BIGINT NOT NULL DEFAULT 0,
+ou_id INTEGER,
+ip VARCHAR(18) NOT NULL DEFAULT '',
+ip_int BIGINT NOT NULL DEFAULT 0,
+save_traf SMALLINT NOT NULL DEFAULT 0,
+enabled SMALLINT NOT NULL DEFAULT 0,
+dhcp SMALLINT NOT NULL DEFAULT 1,
+filter_group_id SMALLINT NOT NULL DEFAULT 0,
+dynamic SMALLINT NOT NULL DEFAULT 0,
+eof TIMESTAMP,
+deleted SMALLINT NOT NULL DEFAULT 0,
+comments VARCHAR(250),
+dns_name VARCHAR(253),
+dns_ptr_only SMALLINT NOT NULL DEFAULT 0,
+WikiName VARCHAR(250),
+dhcp_acl TEXT,
+queue_id INTEGER NOT NULL DEFAULT 0,
+mac VARCHAR(20) NOT NULL DEFAULT '',
+dhcp_action VARCHAR(10) NOT NULL DEFAULT '',
+dhcp_option_set VARCHAR(50),
+dhcp_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+dhcp_hostname VARCHAR(60),
+last_found TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+arp_found TIMESTAMP,
+blocked SMALLINT NOT NULL DEFAULT 0,
+day_quota INTEGER NOT NULL DEFAULT 0,
+month_quota INTEGER NOT NULL DEFAULT 0,
+device_model_id INTEGER DEFAULT 87,
+firmware VARCHAR(100),
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+"client-id" VARCHAR(250),
+nagios SMALLINT NOT NULL DEFAULT 0,
+nagios_status VARCHAR(10) NOT NULL DEFAULT '',
+nagios_handler VARCHAR(50) NOT NULL DEFAULT '',
+link_check SMALLINT NOT NULL DEFAULT 0,
+changed SMALLINT NOT NULL DEFAULT 0,
+dhcp_changed SMALLINT NOT NULL DEFAULT 0,
+changed_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+created_by VARCHAR(10)
 );
 COMMENT ON TABLE User_auth IS 'Записи авторизации пользователей/устройств в сети';
 COMMENT ON COLUMN User_auth.enabled IS 'Эта авторизация активна';
@@ -515,30 +515,30 @@ COMMENT ON COLUMN User_auth.nagios IS 'Включить мониторинг Nag
 
 -- Алиасы авторизации пользователей
 CREATE TABLE User_auth_alias (
-    id SERIAL PRIMARY KEY,
-    auth_id INTEGER NOT NULL,
-    alias VARCHAR(100),
-    description VARCHAR(100),
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id SERIAL PRIMARY KEY,
+auth_id INTEGER NOT NULL,
+alias VARCHAR(100),
+description VARCHAR(100),
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE User_auth_alias IS 'Алиасы/DNS имена для записей авторизации';
 
 -- Список пользователей
 CREATE TABLE User_list (
-    id BIGSERIAL PRIMARY KEY,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    login VARCHAR(255),
-    fio VARCHAR(255),
-    enabled BOOLEAN NOT NULL DEFAULT TRUE,
-    blocked BOOLEAN NOT NULL DEFAULT FALSE,
-    deleted BOOLEAN NOT NULL DEFAULT FALSE,
-    ou_id INTEGER NOT NULL DEFAULT 0,
-    device_id INTEGER,
-    filter_group_id INTEGER NOT NULL DEFAULT 0,
-    queue_id INTEGER NOT NULL DEFAULT 0,
-    day_quota INTEGER NOT NULL DEFAULT 0,
-    month_quota INTEGER NOT NULL DEFAULT 0,
-    permanent BOOLEAN NOT NULL DEFAULT FALSE
+id BIGSERIAL PRIMARY KEY,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+login VARCHAR(255),
+fio VARCHAR(255),
+enabled SMALLINT NOT NULL DEFAULT 1,
+blocked SMALLINT NOT NULL DEFAULT 0,
+deleted SMALLINT NOT NULL DEFAULT 0,
+ou_id INTEGER NOT NULL DEFAULT 0,
+device_id INTEGER,
+filter_group_id INTEGER NOT NULL DEFAULT 0,
+queue_id INTEGER NOT NULL DEFAULT 0,
+day_quota INTEGER NOT NULL DEFAULT 0,
+month_quota INTEGER NOT NULL DEFAULT 0,
+permanent SMALLINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE User_list IS 'Учетные записи пользователей в системе';
 COMMENT ON COLUMN User_list.fio IS 'Фамилия Имя Отчество';
@@ -546,77 +546,77 @@ COMMENT ON COLUMN User_list.permanent IS 'Это постоянный польз
 
 -- Сессии пользователей (веб-интерфейс)
 CREATE TABLE user_sessions (
-    id SERIAL PRIMARY KEY,
-    session_id VARCHAR(128) NOT NULL,
-    user_id INTEGER NOT NULL,
-    ip_address VARCHAR(45) NOT NULL,
-    user_agent TEXT NOT NULL,
-    created_at INTEGER NOT NULL,
-    last_activity INTEGER NOT NULL,
-    is_active BOOLEAN DEFAULT TRUE
+id SERIAL PRIMARY KEY,
+session_id VARCHAR(128) NOT NULL,
+user_id INTEGER NOT NULL,
+ip_address VARCHAR(45) NOT NULL,
+user_agent TEXT NOT NULL,
+created_at INTEGER NOT NULL,
+last_activity INTEGER NOT NULL,
+is_active SMALLINT DEFAULT 1
 );
 COMMENT ON TABLE user_sessions IS 'Сессии пользователей веб-интерфейса';
 
 -- Статистика трафика пользователей
 CREATE TABLE User_stats (
-    id BIGSERIAL PRIMARY KEY,
-    router_id BIGINT DEFAULT 0,
-    auth_id BIGINT NOT NULL DEFAULT 0,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    byte_in BIGINT NOT NULL DEFAULT 0,
-    byte_out BIGINT NOT NULL DEFAULT 0
+id BIGSERIAL PRIMARY KEY,
+router_id BIGINT DEFAULT 0,
+auth_id BIGINT NOT NULL DEFAULT 0,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+byte_in BIGINT NOT NULL DEFAULT 0,
+byte_out BIGINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE User_stats IS 'Статистика трафика пользователей (агрегированная)';
 
 -- Подробная статистика пользователей
 CREATE TABLE User_stats_full (
-    id BIGSERIAL PRIMARY KEY,
-    router_id BIGINT DEFAULT 0,
-    auth_id BIGINT NOT NULL DEFAULT 0,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    byte_in BIGINT NOT NULL DEFAULT 0,
-    byte_out BIGINT NOT NULL DEFAULT 0,
-    pkt_in INTEGER,
-    pkt_out INTEGER,
-    step INTEGER NOT NULL DEFAULT 600
+id BIGSERIAL PRIMARY KEY,
+router_id BIGINT DEFAULT 0,
+auth_id BIGINT NOT NULL DEFAULT 0,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+byte_in BIGINT NOT NULL DEFAULT 0,
+byte_out BIGINT NOT NULL DEFAULT 0,
+pkt_in INTEGER,
+pkt_out INTEGER,
+step SMALLINT NOT NULL DEFAULT 600
 );
 COMMENT ON TABLE User_stats_full IS 'Подробная статистика трафика пользователей';
 COMMENT ON COLUMN User_stats_full.step IS 'Интервал сбора статистики в секундах';
 
 -- Временные переменные
 CREATE TABLE variables (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(30) NOT NULL UNIQUE,
-    value VARCHAR(255),
-    clear_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+id SERIAL PRIMARY KEY,
+name VARCHAR(30) NOT NULL UNIQUE,
+value VARCHAR(255),
+clear_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 COMMENT ON TABLE variables IS 'Временные системные переменные и блокировки';
 
 -- Производители устройств
 CREATE TABLE vendors (
-    id SERIAL PRIMARY KEY,
-    name VARCHAR(40) NOT NULL
+id SERIAL PRIMARY KEY,
+name VARCHAR(40) NOT NULL
 );
 COMMENT ON TABLE vendors IS 'Производители сетевого оборудования';
 
 -- Версия системы
 CREATE TABLE version (
-    id INTEGER PRIMARY KEY DEFAULT 1,
-    version VARCHAR(10) NOT NULL DEFAULT '2.4.14'
+id INTEGER PRIMARY KEY DEFAULT 1,
+version VARCHAR(10) NOT NULL DEFAULT '2.4.14'
 );
 COMMENT ON TABLE version IS 'Информация о версии системы';
 
 -- Статистика WAN интерфейсов
 CREATE TABLE Wan_stats (
-    id SERIAL PRIMARY KEY,
-    time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    router_id INTEGER,
-    interface_id INTEGER,
-    "in" BIGINT NOT NULL DEFAULT 0,
-    "out" BIGINT NOT NULL DEFAULT 0,
-    forward_in BIGINT NOT NULL DEFAULT 0,
-    forward_out BIGINT NOT NULL DEFAULT 0
+id SERIAL PRIMARY KEY,
+time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+router_id INTEGER,
+interface_id INTEGER,
+"in" BIGINT NOT NULL DEFAULT 0,
+"out" BIGINT NOT NULL DEFAULT 0,
+forward_in BIGINT NOT NULL DEFAULT 0,
+forward_out BIGINT NOT NULL DEFAULT 0
 );
 COMMENT ON TABLE Wan_stats IS 'Статистика трафика WAN интерфейсов';
 COMMENT ON COLUMN Wan_stats."in" IS 'Байтов получено на WAN интерфейсе';
@@ -624,13 +624,13 @@ COMMENT ON COLUMN Wan_stats."out" IS 'Байтов отправлено с WAN 
 
 -- Журнал активности системы
 CREATE TABLE worklog (
-    id BIGSERIAL PRIMARY KEY,
-    timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    auth_id BIGINT NOT NULL DEFAULT 0,
-    customer VARCHAR(50) NOT NULL DEFAULT 'system',
-    ip VARCHAR(18) NOT NULL DEFAULT '127.0.0.1',
-    message TEXT NOT NULL,
-    level INTEGER NOT NULL DEFAULT 1
+id BIGSERIAL PRIMARY KEY,
+timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+auth_id BIGINT NOT NULL DEFAULT 0,
+customer VARCHAR(50) NOT NULL DEFAULT 'system',
+ip VARCHAR(18) NOT NULL DEFAULT '127.0.0.1',
+message TEXT NOT NULL,
+level SMALLINT NOT NULL DEFAULT 1
 );
 COMMENT ON TABLE worklog IS 'Журнал активности и аудита системы';
 COMMENT ON COLUMN worklog.level IS 'Уровень логирования: 1=инфо, 2=предупреждение, 3=ошибка, 4=отладка';
@@ -638,7 +638,7 @@ COMMENT ON COLUMN worklog.level IS 'Уровень логирования: 1=и
 -- Индексы (такие же как в оригинальной структуре)
 CREATE INDEX idx_devices_ip ON devices(ip);
 CREATE INDEX idx_devices_device_type ON devices(device_type);
-CREATE INDEX idx_devices_active ON devices(active) WHERE active = TRUE;
+CREATE INDEX idx_devices_active ON devices(active) WHERE active = 1;
 
 CREATE INDEX idx_device_ports_device_id ON device_ports(device_id);
 CREATE INDEX idx_device_ports_port ON device_ports(port);
@@ -665,14 +665,14 @@ CREATE INDEX idx_traffic_detail_dst ON Traffic_detail(auth_id, timestamp, router
 CREATE INDEX idx_unknown_mac_timestamp ON Unknown_mac(timestamp, device_id, port_id, mac);
 
 CREATE INDEX idx_user_auth_main ON User_auth(id, user_id, ip_int, mac, ip, deleted);
-CREATE INDEX idx_user_auth_deleted ON User_auth(deleted) WHERE deleted = FALSE;
+CREATE INDEX idx_user_auth_deleted ON User_auth(deleted) WHERE deleted = 0;
 CREATE INDEX idx_user_auth_ou_id ON User_auth(ou_id);
 
 CREATE INDEX idx_user_list_main ON User_list(id, ou_id, enabled, blocked, deleted);
 
 CREATE INDEX idx_user_sessions_session_id ON user_sessions(session_id);
 CREATE INDEX idx_user_sessions_user_id ON user_sessions(user_id);
-CREATE INDEX idx_user_sessions_is_active ON user_sessions(is_active) WHERE is_active = TRUE;
+CREATE INDEX idx_user_sessions_is_active ON user_sessions(is_active) WHERE is_active = 1;
 
 CREATE INDEX idx_user_stats_timestamp ON User_stats(timestamp, auth_id, router_id);
 CREATE INDEX idx_user_stats_full_timestamp ON User_stats_full(timestamp, auth_id, router_id);
@@ -683,44 +683,3 @@ CREATE INDEX idx_worklog_customer ON worklog(customer, level, timestamp);
 CREATE INDEX idx_worklog_timestamp ON worklog(level, timestamp);
 CREATE INDEX idx_worklog_auth_id ON worklog(auth_id, level, timestamp);
 
--- Функции для конвертации IP-адресов
-CREATE OR REPLACE FUNCTION inet_to_bigint(ip_address INET)
-RETURNS BIGINT AS $$
-BEGIN
-    RETURN (
-        (split_part(host(ip_address), '.', 1)::BIGINT << 24) +
-        (split_part(host(ip_address), '.', 2)::BIGINT << 16) +
-        (split_part(host(ip_address), '.', 3)::BIGINT << 8) +
-        split_part(host(ip_address), '.', 4)::BIGINT
-    );
-END;
-$$ LANGUAGE plpgsql IMMUTABLE;
-
-CREATE OR REPLACE FUNCTION bigint_to_inet(ip_int BIGINT)
-RETURNS INET AS $$
-BEGIN
-    RETURN ((ip_int >> 24) & 255) || '.' ||
-           ((ip_int >> 16) & 255) || '.' ||
-           ((ip_int >> 8) & 255) || '.' ||
-           (ip_int & 255);
-END;
-$$ LANGUAGE plpgsql IMMUTABLE;
-
--- Триггер для автоматического обновления ip_int при изменении ip
-CREATE OR REPLACE FUNCTION update_ip_int()
-RETURNS TRIGGER AS $$
-BEGIN
-    IF NEW.ip IS NOT NULL AND (NEW.ip_int IS NULL OR OLD.ip != NEW.ip) THEN
-        NEW.ip_int := inet_to_bigint(NEW.ip::INET);
-    END IF;
-    RETURN NEW;
-END;
-$$ LANGUAGE plpgsql;
-
-CREATE TRIGGER trigger_devices_ip_int 
-    BEFORE INSERT OR UPDATE ON devices 
-    FOR EACH ROW EXECUTE FUNCTION update_ip_int();
-
-CREATE TRIGGER trigger_user_auth_ip_int 
-    BEFORE INSERT OR UPDATE ON User_auth 
-    FOR EACH ROW EXECUTE FUNCTION update_ip_int();

+ 197 - 197
docs/databases/postgres/ru/data.sql

@@ -21,58 +21,58 @@ ON CONFLICT (id) DO UPDATE SET
 -- Configuration options
 INSERT INTO config_options (id, option_name, "description.russian", "description.english", draft, uniq, type, default_value, min_value, max_value)
 VALUES
-(1, 'KB', 'Еденица измерения трафика - Килобайт (0) или кибибайт (1,default)', 'Traffic measurement unit - Kilobyte (1000b) or kibibyte (1024b,default)', false, true, 'bool', '1024', 0, 1),
-(3, 'dns server', 'ip-адрес DNS-сервера', 'DNS server ip address', false, true, 'text', '127.0.0.1', 0, 0),
-(5, 'dhcp server', 'ip-адрес DHCP-сервера', 'ip address of the DHCP server', false, true, 'text', '127.0.0.1', 0, 0),
-(9, 'default snmp version', 'Версия snmp по умолчанию. В настоящиймомент поддерживаются 1 и 2. Поддержка версии 3 в разработке.', 'The default version of snmp. Currently, 1 and 2 are supported. Support for version 3 is in development.', false, true, 'int', '2', 1, 3),
-(11, 'default snmp community', 'Read snmp community по умолчанию','Read snmp community by default', false, true, 'text', 'public', 0, 0),
-(21, 'admin email', 'E-mail администратора', 'Administrator e-mail', false, true, 'text', 'root', 0, 0),
-(22, 'add user from netflow', 'Создавать ли новые записи для неизвестных адресов из анализа трафика netflow. Не включать, если netflow снимает данные с маршрутизатора локальной сети', 'Whether to create new records for unknown addresses from netflow traffic analysis. Do not enable if netflow get data from the local network router', false, true, 'bool', '0', 0, 1),
-(23, 'save traffic detail', 'Сохранять ли детализацию трафика из netflow по ip-адресам пользователей', 'Whether to keep the details of traffic from netflow by ip addresses of users', false, true, 'bool', '1', 0, 1),
-(26, 'history detail traffic', 'Глубина хранения детализации в сутках. Установка значения больше 3-7 дней приведёт к разрастанию базы данных и увеличит время отображения детализации в интерфейсе администратора', 'Depth of detail storage in days. Setting a value greater than 3-7 days will cause the database to grow and increase the time about to display details in the admin interface', false, true, 'int', '3', 1, 7),
-(27, 'history dhcp lease', 'Глубина хранения аренды dhcp-сервера','Storage depth of the dhcp server lease', false, true, 'int', '1', 0, 0),
-(28, 'router_login', 'Логин для входа на сетевые устройства по умолчанию', 'Default login for network devices', false, true, 'text', 'admin', 0, 0),
-(29, 'router_password', 'Пароль по умолчанию на сетевые устройства', 'Default password for network devices', false, true, 'text', 'admin', 0, 0),
-(30, 'router_ssh_port', 'Порт ssh по умолчанию', 'SSH default port', false, true, 'int', '22', 22, 0),
-(32, 'org name', 'Название организации', 'Organization name', false, true, 'text', 'ORG', 0, 0),
-(33, 'office domain', 'Домен организации', 'Organization domain', false, true, 'text', 'local', 0, 0),
-(34, 'debug', 'Включить отладку', 'Enable debugging', false, true, 'bool', '0', 0, 1),
-(35, 'connections history, days', 'Время хранения истории мест подключения ip-адресов', 'Storage time of the history of connection locations of ip addresses', false, true, 'int', '90', 1, 365),
-(37, 'refresh access lists', 'Расположение скрипта управления контролем доступа для роутеров Mikrotik', 'Location of the access control script for Mikrotik routers', false, true, 'text', '/opt/Eye/scripts/sync_mikrotik.pl', 0, 0),
-(38, 'regenerate dhcp cconfig', 'Расположение скрипта управления конфигурацией dhcp-серверами', 'Location of the dhcp server configuration management script', false, true, 'text', '/opt/Eye/scripts/update-dnsmasq', 0, 0),
-(39, 'regenerate dns cconfig', 'Расположение скрипта управления dns-сервером', 'Location of the dns server management script', false, true, 'text', '/opt/Eye/scripts/update-dns', 0, 0),
-(40, 'regenerate nagios cconfig', 'Расположение скрипта конфигурирования Nagios', 'Location of the Nagios configuration script', false, true, 'text', '/etc/nagios/restart_nagios', 0, 0),
-(41, 'discovery network', 'Расположение скрипта сканирования сети', 'Location of the network scan script', false, true, 'text', '/opt/Eye/scripts/fetch_new_arp.pl', 0, 0),
-(44, 'Ignore hotspot dhcp log', 'Не писать лог событий dhcp-сервера хотспота. Имеет смысл вклчючать, поскольку время аренды в хот-споте как правило маленькое и в записях хот-спота становятся незаметны логи обычных пользователей', 'Do not write the event log of the hotspot dhcp server. It makes sense toinclude it, since the rental time in the hotspot is usually small and the logs of ordinary users become invisible in the hotspot records', false, true, 'bool', '1', 0, 1),
-(45, 'ignore update dhcp event', 'Не писать события обновления ip-адреса dhcp-сервера. ', 'Do not write events for updating the IP address of the dhcp server. ', false, true, 'bool', '0', 0, 1),
-(46, 'update hostname from dhcp', 'Обновлять имя хоста в DNS при получении адреса по DHCP', 'Update the hostname in DNS when receiving the address via DHCP', false, true, 'bool', '0', 0, 1),
-(47, 'history worklog', 'Глубина хранения VERBOSE логов работы в интерфейсе администратора', 'Depth of work VERBOSE logs storage in the admin interface', false, true, 'int', '90', 0, 1095),
-(48, 'history syslog', 'Глубина хранения логов работы syslog-сервера', 'Syslog server logs storage depth', false, true, 'int', '90', 0, 1095),
-(49, 'history traffic stats', 'Глубина хранения статистики трафикаюзеров', 'User traffic statistics storage depth', false, true, 'int', '365', 0, 0),
-(50, 'urgent sync access', 'Немедленное изменение списков доступа на роутере после правки записи пользователя', 'Immediate change of access lists on the router after editing the user record ', false, true, 'bool', '0', 0, 1),
-(51, 'Email_alert', 'Отправлять e-mail уведомления', 'Send e-mail notifications', false, true, 'bool', '1', 0, 1),
-(52, 'Sender email', 'E-mail адрес, с которого рассылается почта','E-mail address from which mail is sent', false, true, 'text', 'root', 0, 0),
-(53, 'log level', 'Каждый уровень включает в себя предыдущий:\r\n0- ERROR - писать только ошибки\r\n1 - WARNING - писать предупреждения\r\n2 - INFO - писать информационные сообщения\r\n3 - VERBOSE - писать подробную информацию о выполняемых операциях', 'Each level includes the previous one:\r\n0 - ERROR - write only errors\r\n1 - WARNING - write warnings\r\n2 - INFO - write informational\r\n3 - VERBOSE - write detailed information about the operations performed ', false, true, 'int', '2', 0, 3),
-(54, 'enable_quotes', 'Включить обработку квот по трафику', 'Enable traffic quota processing', false, true, 'bool', '0', 0, 1),
-(55, 'netflow_step', 'Интервал сброса данных из коллектора netflow, минуты', 'Data reset interval from netflow collector, minutes', false, true, 'int', '1', 1, 10),
-(56, 'traffic_ipstat_history', 'Время хранения полной статистики по трафику для каждого ip-адреса в сутках. Таблица в 6 раз больше обычной часовой статистики. Врядли кому-то потребуется глубина хранения более месяца.', 'The storage time of complete traffic statistics for each ip address in days. The table is 6 times larger than the usual hourly statistic Hardly anyone will need a storage depth of more than a month.', false, true, 'int', '30', 0, 365),
-(57, 'nagios_url', 'Адрес сайта nagios', 'nagios site address', false, true, 'text', 'http://127.0.0.1/nagios', 0, 0),
-(58, 'cacti_url', 'Адрес сайта cacti', 'cacti site address', false, true, 'text', 'http://127.0.0.1/cacti', 0, 0),
-(59, 'torrus_url', 'Адрес сайта Torrus', 'Torrus website address', false, true, 'text', 'http://127.0.0.1/torrus/CollectorName/', 0, 0),
-(60, 'wiki_url', 'Адрес wiki', 'Wiki website address', false, true, 'text', 'http://127.0.0.1/wiki', 0, 0),
-(61, 'wiki_path', 'Путь к каталогу данных вики', 'Path to wiki data directory', false, true, 'text', '/var/www/foswiki/data/', 0, 0),
-(62, 'stat_url', 'Адрес этого сайта', 'Address of this site', false, true, 'text', 'http://127.0.0.1/stat', 0, 0),
-(63, 'wiki_web', 'Web for Wiki. Default - Main. http://example.local/Main/WebHome', 'Web for Wiki. Default - Main. http://example.local/Main/WebHome', false, true, 'text', 'Main', 0, 0),
-(64, 'auto_mac_rule', 'Создавать автоматическую привязку мак-адреса к юзеру. Т.е. все ip-адреса для найденного мака будут привязываться к одном и тому же юзеру.', 'Create an automatic binding of the mac address to the user. I.e. all ip addresses for the found mac will be bound to the same user.', false, true, 'bool', '0', 0, 1),
-(65, 'mikrotik_command_interface', 'Используемый способ конфигурирования (0 - cli для ROS 6, 1 - rest api для ROS 7)', 'Configuration method used (0 - cli for ROS 6, 1 - rest api for ROS 7)', true, true, 'int', '0', 0, 1),
-(66, 'mikrotik_rest_api_ssl', 'Использовать https для rest api', 'Use HTTPS for rest api', true, true, 'bool', '1', 0, 1),
-(67, 'mikrotik_rest_api_port', 'Порт вэб-интерфейса для rest api','Web interface port for rest API', true, true, 'int', '443', 0, 0),
-(68, 'config_mode', 'Режим конфигурирования. Скрипт опроса устройств не выполняется.', 'Configuration mode. The device polling script is not running.', false, true, 'bool', '0', 0, 1),
-(69, 'clean_empty_user', 'Автоматически удалять записи пользователей, не содержащие ip-адресов или автоматических привязок', 'Automatically delete user records that do not contain IP addresses or automatic bindings', false, true, 'bool', '0', 0, 1),
-(70, 'dns_server_type', 'Тип используемого dns-сервера: Windows, Bind. Если используется локальный dnsmasq - параметры dns-сервера указывать не надо.', 'The type of dns server used: Windows, Bind. If you are using a local dnsmasq, you do not need to specify the dns server parameters.', false, true, 'list;windows;bind', 'bind', 0, 0),
-(71, 'enable_dns_updates', 'Включить обновления DNS имен при изменении dns-имени в ip-записи', 'Enable DNS name updates when dns name changes in an ip record', false, true, 'bool', '0', 0, 1),
-(72, 'netflow_path', 'Каталог для хранения данных, полученных по netflow от маршрутизаторов', 'The directory for storing data received via netflow from routers', false, true, 'text', '/opt/Eye/netflow', 0, 0),
-(73, 'check_computer_exists', 'Проверять существование компьютера в домене перед обновлением DNS по DHCP запросу', 'Verify the existence of a computer in the domain before updating DNS by DHCP request', false, true, 'bool', '1', 0, 0)
+(1, 'KB', 'Еденица измерения трафика - Килобайт (0) или кибибайт (1,default)', 'Traffic measurement unit - Kilobyte (1000b) or kibibyte (1024b,default)', 0, 1, 'bool', '1024', 0, 1),
+(3, 'dns server', 'ip-адрес DNS-сервера', 'DNS server ip address', 0, 1, 'text', '127.0.0.1', 0, 0),
+(5, 'dhcp server', 'ip-адрес DHCP-сервера', 'ip address of the DHCP server', 0, 1, 'text', '127.0.0.1', 0, 0),
+(9, 'default snmp version', 'Версия snmp по умолчанию. В настоящиймомент поддерживаются 1 и 2. Поддержка версии 3 в разработке.', 'The default version of snmp. Currently, 1 and 2 are supported. Support for version 3 is in development.', 0, 1, 'int', '2', 1, 3),
+(11, 'default snmp community', 'Read snmp community по умолчанию','Read snmp community by default', 0, 1, 'text', 'public', 0, 0),
+(21, 'admin email', 'E-mail администратора', 'Administrator e-mail', 0, 1, 'text', 'root', 0, 0),
+(22, 'add user from netflow', 'Создавать ли новые записи для неизвестных адресов из анализа трафика netflow. Не включать, если netflow снимает данные с маршрутизатора локальной сети', 'Whether to create new records for unknown addresses from netflow traffic analysis. Do not enable if netflow get data from the local network router', 0, 1, 'bool', '0', 0, 1),
+(23, 'save traffic detail', 'Сохранять ли детализацию трафика из netflow по ip-адресам пользователей', 'Whether to keep the details of traffic from netflow by ip addresses of users', 0, 1, 'bool', '1', 0, 1),
+(26, 'history detail traffic', 'Глубина хранения детализации в сутках. Установка значения больше 3-7 дней приведёт к разрастанию базы данных и увеличит время отображения детализации в интерфейсе администратора', 'Depth of detail storage in days. Setting a value greater than 3-7 days will cause the database to grow and increase the time about to display details in the admin interface', 0, 1, 'int', '3', 1, 7),
+(27, 'history dhcp lease', 'Глубина хранения аренды dhcp-сервера','Storage depth of the dhcp server lease', 0, 1, 'int', '1', 0, 0),
+(28, 'router_login', 'Логин для входа на сетевые устройства по умолчанию', 'Default login for network devices', 0, 1, 'text', 'admin', 0, 0),
+(29, 'router_password', 'Пароль по умолчанию на сетевые устройства', 'Default password for network devices', 0, 1, 'text', 'admin', 0, 0),
+(30, 'router_ssh_port', 'Порт ssh по умолчанию', 'SSH default port', 0, 1, 'int', '22', 22, 0),
+(32, 'org name', 'Название организации', 'Organization name', 0, 1, 'text', 'ORG', 0, 0),
+(33, 'office domain', 'Домен организации', 'Organization domain', 0, 1, 'text', 'local', 0, 0),
+(34, 'debug', 'Включить отладку', 'Enable debugging', 0, 1, 'bool', '0', 0, 1),
+(35, 'connections history, days', 'Время хранения истории мест подключения ip-адресов', 'Storage time of the history of connection locations of ip addresses', 0, 1, 'int', '90', 1, 365),
+(37, 'refresh access lists', 'Расположение скрипта управления контролем доступа для роутеров Mikrotik', 'Location of the access control script for Mikrotik routers', 0, 1, 'text', '/opt/Eye/scripts/sync_mikrotik.pl', 0, 0),
+(38, 'regenerate dhcp cconfig', 'Расположение скрипта управления конфигурацией dhcp-серверами', 'Location of the dhcp server configuration management script', 0, 1, 'text', '/opt/Eye/scripts/update-dnsmasq', 0, 0),
+(39, 'regenerate dns cconfig', 'Расположение скрипта управления dns-сервером', 'Location of the dns server management script', 0, 1, 'text', '/opt/Eye/scripts/update-dns', 0, 0),
+(40, 'regenerate nagios cconfig', 'Расположение скрипта конфигурирования Nagios', 'Location of the Nagios configuration script', 0, 1, 'text', '/etc/nagios/restart_nagios', 0, 0),
+(41, 'discovery network', 'Расположение скрипта сканирования сети', 'Location of the network scan script', 0, 1, 'text', '/opt/Eye/scripts/fetch_new_arp.pl', 0, 0),
+(44, 'Ignore hotspot dhcp log', 'Не писать лог событий dhcp-сервера хотспота. Имеет смысл вклчючать, поскольку время аренды в хот-споте как правило маленькое и в записях хот-спота становятся незаметны логи обычных пользователей', 'Do not write the event log of the hotspot dhcp server. It makes sense toinclude it, since the rental time in the hotspot is usually small and the logs of ordinary users become invisible in the hotspot records', 0, 1, 'bool', '1', 0, 1),
+(45, 'ignore update dhcp event', 'Не писать события обновления ip-адреса dhcp-сервера. ', 'Do not write events for updating the IP address of the dhcp server. ', 0, 1, 'bool', '0', 0, 1),
+(46, 'update hostname from dhcp', 'Обновлять имя хоста в DNS при получении адреса по DHCP', 'Update the hostname in DNS when receiving the address via DHCP', 0, 1, 'bool', '0', 0, 1),
+(47, 'history worklog', 'Глубина хранения VERBOSE логов работы в интерфейсе администратора', 'Depth of work VERBOSE logs storage in the admin interface', 0, 1, 'int', '90', 0, 1095),
+(48, 'history syslog', 'Глубина хранения логов работы syslog-сервера', 'Syslog server logs storage depth', 0, 1, 'int', '90', 0, 1095),
+(49, 'history traffic stats', 'Глубина хранения статистики трафикаюзеров', 'User traffic statistics storage depth', 0, 1, 'int', '365', 0, 0),
+(50, 'urgent sync access', 'Немедленное изменение списков доступа на роутере после правки записи пользователя', 'Immediate change of access lists on the router after editing the user record ', 0, 1, 'bool', '0', 0, 1),
+(51, 'Email_alert', 'Отправлять e-mail уведомления', 'Send e-mail notifications', 0, 1, 'bool', '1', 0, 1),
+(52, 'Sender email', 'E-mail адрес, с которого рассылается почта','E-mail address from which mail is sent', 0, 1, 'text', 'root', 0, 0),
+(53, 'log level', 'Каждый уровень включает в себя предыдущий:\r\n0- ERROR - писать только ошибки\r\n1 - WARNING - писать предупреждения\r\n2 - INFO - писать информационные сообщения\r\n3 - VERBOSE - писать подробную информацию о выполняемых операциях', 'Each level includes the previous one:\r\n0 - ERROR - write only errors\r\n1 - WARNING - write warnings\r\n2 - INFO - write informational\r\n3 - VERBOSE - write detailed information about the operations performed ', 0, 1, 'int', '2', 0, 3),
+(54, 'enable_quotes', 'Включить обработку квот по трафику', 'Enable traffic quota processing', 0, 1, 'bool', '0', 0, 1),
+(55, 'netflow_step', 'Интервал сброса данных из коллектора netflow, минуты', 'Data reset interval from netflow collector, minutes', 0, 1, 'int', '1', 1, 10),
+(56, 'traffic_ipstat_history', 'Время хранения полной статистики по трафику для каждого ip-адреса в сутках. Таблица в 6 раз больше обычной часовой статистики. Врядли кому-то потребуется глубина хранения более месяца.', 'The storage time of complete traffic statistics for each ip address in days. The table is 6 times larger than the usual hourly statistic Hardly anyone will need a storage depth of more than a month.', 0, 1, 'int', '30', 0, 365),
+(57, 'nagios_url', 'Адрес сайта nagios', 'nagios site address', 0, 1, 'text', 'http://127.0.0.1/nagios', 0, 0),
+(58, 'cacti_url', 'Адрес сайта cacti', 'cacti site address', 0, 1, 'text', 'http://127.0.0.1/cacti', 0, 0),
+(59, 'torrus_url', 'Адрес сайта Torrus', 'Torrus website address', 0, 1, 'text', 'http://127.0.0.1/torrus/CollectorName/', 0, 0),
+(60, 'wiki_url', 'Адрес wiki', 'Wiki website address', 0, 1, 'text', 'http://127.0.0.1/wiki', 0, 0),
+(61, 'wiki_path', 'Путь к каталогу данных вики', 'Path to wiki data directory', 0, 1, 'text', '/var/www/foswiki/data/', 0, 0),
+(62, 'stat_url', 'Адрес этого сайта', 'Address of this site', 0, 1, 'text', 'http://127.0.0.1/stat', 0, 0),
+(63, 'wiki_web', 'Web for Wiki. Default - Main. http://example.local/Main/WebHome', 'Web for Wiki. Default - Main. http://example.local/Main/WebHome', 0, 1, 'text', 'Main', 0, 0),
+(64, 'auto_mac_rule', 'Создавать автоматическую привязку мак-адреса к юзеру. Т.е. все ip-адреса для найденного мака будут привязываться к одном и тому же юзеру.', 'Create an automatic binding of the mac address to the user. I.e. all ip addresses for the found mac will be bound to the same user.', 0, 1, 'bool', '0', 0, 1),
+(65, 'mikrotik_command_interface', 'Используемый способ конфигурирования (0 - cli для ROS 6, 1 - rest api для ROS 7)', 'Configuration method used (0 - cli for ROS 6, 1 - rest api for ROS 7)', 1, 1, 'int', '0', 0, 1),
+(66, 'mikrotik_rest_api_ssl', 'Использовать https для rest api', 'Use HTTPS for rest api', 1, 1, 'bool', '1', 0, 1),
+(67, 'mikrotik_rest_api_port', 'Порт вэб-интерфейса для rest api','Web interface port for rest API', 1, 1, 'int', '443', 0, 0),
+(68, 'config_mode', 'Режим конфигурирования. Скрипт опроса устройств не выполняется.', 'Configuration mode. The device polling script is not running.', 0, 1, 'bool', '0', 0, 1),
+(69, 'clean_empty_user', 'Автоматически удалять записи пользователей, не содержащие ip-адресов или автоматических привязок', 'Automatically delete user records that do not contain IP addresses or automatic bindings', 0, 1, 'bool', '0', 0, 1),
+(70, 'dns_server_type', 'Тип используемого dns-сервера: Windows, Bind. Если используется локальный dnsmasq - параметры dns-сервера указывать не надо.', 'The type of dns server used: Windows, Bind. If you are using a local dnsmasq, you do not need to specify the dns server parameters.', 0, 1, 'list;windows;bind', 'bind', 0, 0),
+(71, 'enable_dns_updates', 'Включить обновления DNS имен при изменении dns-имени в ip-записи', 'Enable DNS name updates when dns name changes in an ip record', 0, 1, 'bool', '0', 0, 1),
+(72, 'netflow_path', 'Каталог для хранения данных, полученных по netflow от маршрутизаторов', 'The directory for storing data received via netflow from routers', 0, 1, 'text', '/opt/Eye/netflow', 0, 0),
+(73, 'check_computer_exists', 'Проверять существование компьютера в домене перед обновлением DNS по DHCP запросу', 'Verify the existence of a computer in the domain before updating DNS by DHCP request', 0, 1, 'bool', '1', 0, 0)
 ON CONFLICT (id) DO UPDATE SET
     option_name = EXCLUDED.option_name,
     "description.russian" = EXCLUDED."description.russian",
@@ -127,121 +127,121 @@ ON CONFLICT (id) DO UPDATE SET
 -- Device models
 INSERT INTO device_models (id, model_name, vendor_id, poe_in, poe_out, nagios_template)
 VALUES
-(1, '2011LS', 9, true, false, NULL),
-(2, '2011UAS-2HnD', 9, true, false, NULL),
-(3, 'AT-8000S', 8, false, false, NULL),
-(4, 'AT-8100S/48POE', 8, false, false, NULL),
-(5, 'AT-9000/28', 8, false, false, NULL),
-(6, 'AT-GS950/24', 8, false, false, NULL),
-(7, 'CCR1009-7G-1C-1S+', 9, false, false, NULL),
-(8, 'CCR1036-8G-2S+', 9, false, false, NULL),
-(10, 'CRS317-1G-16S+', 9, false, false, NULL),
-(11, 'CRS326-24S+2Q+', 9, false, false, NULL),
-(12, 'CRS328-24P-4S+', 9, true, false, NULL),
-(14, 'CRS328-4C-20S-4S+', 9, false, false, NULL),
-(15, 'DGS-3120-48TC', 7, false, false, NULL),
-(16, 'ES-2024', 4, false, false, NULL),
-(17, 'ES-2024A', 4, false, false, NULL),
-(18, 'ES-2108', 4, false, false, NULL),
-(19, 'ES-2108-G', 4, false, false, NULL),
-(20, 'ES-3124-4F', 4, false, false, NULL),
-(21, 'GS110TP', 10, false, true, NULL),
-(22, 'GS-4024', 4, false, false, NULL),
-(23, 'HP 1910', 15, false, false, NULL),
-(24, 'ISCOM2110A-MA', 5, false, false, NULL),
-(25, 'ISCOM2110EA-MA', 5, false, false, NULL),
-(26, 'ISCOM2126EA-MA', 5, false, false, NULL),
-(27, 'ISCOM2128EA-MA', 5, false, false, NULL),
-(28, 'Linux server', 1, false, false, ''),
-(29, 'MES2124F', 2, false, false, NULL),
-(30, 'MES2124MB', 2, false, false, NULL),
-(31, 'MES5248', 2, false, false, NULL),
-(32, 'RB2011UAS', 9, true, false, NULL),
-(33, 'RB3011UiAS', 9, true, false, NULL),
-(34, 'RB960PGS', 9, true, true, NULL),
-(35, 'RBD52G-5HacD2HnD', 9, true, false, NULL),
-(36, 'S2940-8G-v2', 6, false, false, NULL),
-(37, 'S2980G-24T', 6, false, false, NULL),
-(38, 'S3750G-24S-E', 6, false, false, NULL),
-(39, 'S5300-52P-LI-AC', 3, false, false, NULL),
-(40, 'S5320-52X-PWR-SI-AC', 3, false, false, NULL),
-(41, 'S5321-28X-SI-AC', 3, false, false, NULL),
-(42, 'S5321-52X-SI-AC', 3, false, false, NULL),
-(43, 'S6320-54C-EI-48S-AC', 3, false, false, NULL),
-(44, 'SNR-S2980G-24T', 6, false, false, NULL),
-(45, 'V1910-16G', 15, false, false, NULL),
-(46, 'V1910-24G-PoE', 15, false, false, NULL),
-(47, 'Windows server', 1, false, false, NULL),
-(48, 'WS-C2960G-24TC-L', 16, false, false, NULL),
-(49, 'WS-C3560G-24TS-S', 16, false, false, NULL),
-(50, 'x210-16GT', 8, false, false, NULL),
-(51, 'x210-24GT', 8, false, false, NULL),
-(52, 'x610-24Ts/X', 8, false, false, NULL),
-(53, 'x610-48Ts', 8, false, false, NULL),
-(54, 'XGS-4728', 4, false, false, NULL),
-(55, 'ZyWall 310', 4, false, false, NULL),
-(56, 'APC Smart-UPS_3000', 20, false, false, 'ups.cfg'),
-(57, 'APC Smart-UPS_5000', 20, false, false, 'ups.cfg'),
-(58, 'Schneider Smart-UPS_3000', 21, false, false, NULL),
-(59, 'SMG-1016M', 2, false, false, NULL),
-(60, 'EATON 9PX 1500i RT 2U', 64, false, false, NULL),
-(61, 'EATON 9PX3000i_RT_2U', 64, false, false, NULL),
-(62, 'EATON 9PX_6000i', 64, false, false, NULL),
-(63, 'EATON PW9130_3000', 64, false, false, NULL),
-(64, 'EATON PW9130_3000VA-R', 64, false, false, NULL),
-(65, 'Epson WF-5620 Series', 59, false, false, NULL),
-(66, 'Epson WF-8590 Series', 59, false, false, NULL),
-(67, 'HP Officejet-7000', 15, false, false, 'hp.cfg'),
-(68, 'OKI C610', 62, false, false, NULL),
-(69, 'OKI MB472', 62, false, false, NULL),
-(70, 'OKI MB491', 62, false, false, NULL),
-(71, 'OKI MC562', 62, false, false, NULL),
-(72, 'OKI MC573', 62, false, false, NULL),
-(73, 'OKI MC861', 62, false, false, NULL),
-(74, 'Panasonic KX-MB2000RU', 61, false, false, NULL),
-(75, 'PT-MZ10KE', 61, false, false, NULL),
-(76, 'PT-VX41', 61, false, false, NULL),
-(77, 'Rave 522AA', 33, false, false, NULL),
-(78, 'DZ570E', 61, false, false, NULL),
-(79, 'DZ6700', 61, false, false, NULL),
-(80, 'Rcq80', 61, false, false, NULL),
-(81, 'RZ12K', 61, false, false, NULL),
-(82, 'RZ660', 61, false, false, NULL),
-(83, 'RZ770', 61, false, false, NULL),
-(84, 'RZ970', 61, false, false, NULL),
-(85, 'XVR-5216', 66, false, false, NULL),
-(86, 'HWg-STE', 68, false, false, NULL),
-(87, 'Computer', 1, false, false, ''),
-(88, 'Mobile Phone', 1, false, false, NULL),
-(89, 'Switch', 1, false, false, NULL),
-(90, 'Projectiondesign F22', 34, false, false, NULL),
-(91, 'DS-I252', 36, false, false, NULL),
-(92, 'LTV-CNE-720-48', 37, false, false, NULL),
-(93, 'U-100', 38, false, false, NULL),
-(94, 'TAU-8', 2, false, false, NULL),
-(95, 'SIP-T21P E2', 39, false, false, NULL),
-(96, 'A510 IP', 40, false, false, NULL),
-(97, 'W60B', 39, false, false, NULL),
-(98, 'TAU-2M', 2, false, false, NULL),
-(99, 'PAP2T', 41, false, false, NULL),
-(100, 'VP-12', 2, false, false, NULL),
-(101, 'SIP-T23P', 39, false, false, NULL),
-(102, 'SPA-2102', 16, false, false, NULL),
-(103, 'RB760iGS', 9, true, false, NULL),
-(104, 'MES2324B', 2, false, false, NULL),
-(105, 'MES2324FB', 2, false, false, NULL),
-(106, 'MES2124P', 2, false, true, NULL),
-(107, 'MES2428P', 2, false, true, NULL),
-(108, 'Symmetra LX 16000', 20, false, false, 'symmetra.cfg'),
-(109, 'SNR-UPS-ONT20', 6, false, false, 'ups3.cfg'),
-(110, 'MES-3728', 4, false, false, NULL),
-(111, 'SNR-S5210G-24TX-UPS-R', 6, false, false, NULL),
-(112, 'SNR-S2985G-24TC', 6, false, false, NULL),
-(113, 'MES-5248', 2, false, false, NULL),
-(114, 'SNR-S5210G-24TX-POE', 6, false, true, NULL),
-(115, 'SNR-S5210G-24TX-UPS', 6, false, false, NULL),
-(116, 'SNR-S5210X-8F-UPS', 6, false, false, NULL),
-(117, 'SNR-S2982G-8T-UPS', 6, false, false, NULL)
+(1, '2011LS', 9, 1, 0, NULL),
+(2, '2011UAS-2HnD', 9, 1, 0, NULL),
+(3, 'AT-8000S', 8, 0, 0, NULL),
+(4, 'AT-8100S/48POE', 8, 0, 0, NULL),
+(5, 'AT-9000/28', 8, 0, 0, NULL),
+(6, 'AT-GS950/24', 8, 0, 0, NULL),
+(7, 'CCR1009-7G-1C-1S+', 9, 0, 0, NULL),
+(8, 'CCR1036-8G-2S+', 9, 0, 0, NULL),
+(10, 'CRS317-1G-16S+', 9, 0, 0, NULL),
+(11, 'CRS326-24S+2Q+', 9, 0, 0, NULL),
+(12, 'CRS328-24P-4S+', 9, 1, 0, NULL),
+(14, 'CRS328-4C-20S-4S+', 9, 0, 0, NULL),
+(15, 'DGS-3120-48TC', 7, 0, 0, NULL),
+(16, 'ES-2024', 4, 0, 0, NULL),
+(17, 'ES-2024A', 4, 0, 0, NULL),
+(18, 'ES-2108', 4, 0, 0, NULL),
+(19, 'ES-2108-G', 4, 0, 0, NULL),
+(20, 'ES-3124-4F', 4, 0, 0, NULL),
+(21, 'GS110TP', 10, 0, 1, NULL),
+(22, 'GS-4024', 4, 0, 0, NULL),
+(23, 'HP 1910', 15, 0, 0, NULL),
+(24, 'ISCOM2110A-MA', 5, 0, 0, NULL),
+(25, 'ISCOM2110EA-MA', 5, 0, 0, NULL),
+(26, 'ISCOM2126EA-MA', 5, 0, 0, NULL),
+(27, 'ISCOM2128EA-MA', 5, 0, 0, NULL),
+(28, 'Linux server', 1, 0, 0, ''),
+(29, 'MES2124F', 2, 0, 0, NULL),
+(30, 'MES2124MB', 2, 0, 0, NULL),
+(31, 'MES5248', 2, 0, 0, NULL),
+(32, 'RB2011UAS', 9, 1, 0, NULL),
+(33, 'RB3011UiAS', 9, 1, 0, NULL),
+(34, 'RB960PGS', 9, 1, 1, NULL),
+(35, 'RBD52G-5HacD2HnD', 9, 1, 0, NULL),
+(36, 'S2940-8G-v2', 6, 0, 0, NULL),
+(37, 'S2980G-24T', 6, 0, 0, NULL),
+(38, 'S3750G-24S-E', 6, 0, 0, NULL),
+(39, 'S5300-52P-LI-AC', 3, 0, 0, NULL),
+(40, 'S5320-52X-PWR-SI-AC', 3, 0, 0, NULL),
+(41, 'S5321-28X-SI-AC', 3, 0, 0, NULL),
+(42, 'S5321-52X-SI-AC', 3, 0, 0, NULL),
+(43, 'S6320-54C-EI-48S-AC', 3, 0, 0, NULL),
+(44, 'SNR-S2980G-24T', 6, 0, 0, NULL),
+(45, 'V1910-16G', 15, 0, 0, NULL),
+(46, 'V1910-24G-PoE', 15, 0, 0, NULL),
+(47, 'Windows server', 1, 0, 0, NULL),
+(48, 'WS-C2960G-24TC-L', 16, 0, 0, NULL),
+(49, 'WS-C3560G-24TS-S', 16, 0, 0, NULL),
+(50, 'x210-16GT', 8, 0, 0, NULL),
+(51, 'x210-24GT', 8, 0, 0, NULL),
+(52, 'x610-24Ts/X', 8, 0, 0, NULL),
+(53, 'x610-48Ts', 8, 0, 0, NULL),
+(54, 'XGS-4728', 4, 0, 0, NULL),
+(55, 'ZyWall 310', 4, 0, 0, NULL),
+(56, 'APC Smart-UPS_3000', 20, 0, 0, 'ups.cfg'),
+(57, 'APC Smart-UPS_5000', 20, 0, 0, 'ups.cfg'),
+(58, 'Schneider Smart-UPS_3000', 21, 0, 0, NULL),
+(59, 'SMG-1016M', 2, 0, 0, NULL),
+(60, 'EATON 9PX 1500i RT 2U', 64, 0, 0, NULL),
+(61, 'EATON 9PX3000i_RT_2U', 64, 0, 0, NULL),
+(62, 'EATON 9PX_6000i', 64, 0, 0, NULL),
+(63, 'EATON PW9130_3000', 64, 0, 0, NULL),
+(64, 'EATON PW9130_3000VA-R', 64, 0, 0, NULL),
+(65, 'Epson WF-5620 Series', 59, 0, 0, NULL),
+(66, 'Epson WF-8590 Series', 59, 0, 0, NULL),
+(67, 'HP Officejet-7000', 15, 0, 0, 'hp.cfg'),
+(68, 'OKI C610', 62, 0, 0, NULL),
+(69, 'OKI MB472', 62, 0, 0, NULL),
+(70, 'OKI MB491', 62, 0, 0, NULL),
+(71, 'OKI MC562', 62, 0, 0, NULL),
+(72, 'OKI MC573', 62, 0, 0, NULL),
+(73, 'OKI MC861', 62, 0, 0, NULL),
+(74, 'Panasonic KX-MB2000RU', 61, 0, 0, NULL),
+(75, 'PT-MZ10KE', 61, 0, 0, NULL),
+(76, 'PT-VX41', 61, 0, 0, NULL),
+(77, 'Rave 522AA', 33, 0, 0, NULL),
+(78, 'DZ570E', 61, 0, 0, NULL),
+(79, 'DZ6700', 61, 0, 0, NULL),
+(80, 'Rcq80', 61, 0, 0, NULL),
+(81, 'RZ12K', 61, 0, 0, NULL),
+(82, 'RZ660', 61, 0, 0, NULL),
+(83, 'RZ770', 61, 0, 0, NULL),
+(84, 'RZ970', 61, 0, 0, NULL),
+(85, 'XVR-5216', 66, 0, 0, NULL),
+(86, 'HWg-STE', 68, 0, 0, NULL),
+(87, 'Computer', 1, 0, 0, ''),
+(88, 'Mobile Phone', 1, 0, 0, NULL),
+(89, 'Switch', 1, 0, 0, NULL),
+(90, 'Projectiondesign F22', 34, 0, 0, NULL),
+(91, 'DS-I252', 36, 0, 0, NULL),
+(92, 'LTV-CNE-720-48', 37, 0, 0, NULL),
+(93, 'U-100', 38, 0, 0, NULL),
+(94, 'TAU-8', 2, 0, 0, NULL),
+(95, 'SIP-T21P E2', 39, 0, 0, NULL),
+(96, 'A510 IP', 40, 0, 0, NULL),
+(97, 'W60B', 39, 0, 0, NULL),
+(98, 'TAU-2M', 2, 0, 0, NULL),
+(99, 'PAP2T', 41, 0, 0, NULL),
+(100, 'VP-12', 2, 0, 0, NULL),
+(101, 'SIP-T23P', 39, 0, 0, NULL),
+(102, 'SPA-2102', 16, 0, 0, NULL),
+(103, 'RB760iGS', 9, 1, 0, NULL),
+(104, 'MES2324B', 2, 0, 0, NULL),
+(105, 'MES2324FB', 2, 0, 0, NULL),
+(106, 'MES2124P', 2, 0, 1, NULL),
+(107, 'MES2428P', 2, 0, 1, NULL),
+(108, 'Symmetra LX 16000', 20, 0, 0, 'symmetra.cfg'),
+(109, 'SNR-UPS-ONT20', 6, 0, 0, 'ups3.cfg'),
+(110, 'MES-3728', 4, 0, 0, NULL),
+(111, 'SNR-S5210G-24TX-UPS-R', 6, 0, 0, NULL),
+(112, 'SNR-S2985G-24TC', 6, 0, 0, NULL),
+(113, 'MES-5248', 2, 0, 0, NULL),
+(114, 'SNR-S5210G-24TX-POE', 6, 0, 1, NULL),
+(115, 'SNR-S5210G-24TX-UPS', 6, 0, 0, NULL),
+(116, 'SNR-S5210X-8F-UPS', 6, 0, 0, NULL),
+(117, 'SNR-S2982G-8T-UPS', 6, 0, 0, NULL)
 ON CONFLICT (id) DO UPDATE SET
     model_name = EXCLUDED.model_name,
     vendor_id = EXCLUDED.vendor_id,
@@ -283,20 +283,20 @@ ON CONFLICT (id) DO UPDATE SET
 -- Organizational Units (русские названия)
 INSERT INTO OU (id, ou_name, comment, default_users, default_hotspot, nagios_dir, nagios_host_use, nagios_ping, nagios_default_service, enabled, filter_group_id, queue_id, dynamic, life_duration, parent_id)
 VALUES
-(0, '!Всё', NULL, false, false, '/etc/nagios/any', 'generic-host', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(1, 'Сервера', NULL, false, false, NULL, NULL, true, NULL, 1, 1, 0, false, 24.00, NULL),
-(2, 'Администраторы', NULL, false, false, NULL, NULL, true, NULL, 0, 0, 0, false, 24.00, NULL),
-(3, 'Пользователи', NULL, false, false, NULL, NULL, true, NULL, 0, 0, 0, false, 24.00, NULL),
-(4, 'VOIP', NULL, false, false, 'voip', 'voip', true, NULL, 1, 4, 5, false, 24.00, NULL),
-(5, 'IPCAM', NULL, false, false, 'videocam', 'ip-cam', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(6, 'Принтеры', NULL, false, false, 'printers', 'printers', true, 'printer-service', 0, 0, 0, false, 24.00, NULL),
-(7, 'Свичи', NULL, false, false, 'switches', 'switches', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(8, 'UPS', NULL, false, false, 'ups', 'ups', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(9, 'Охрана', NULL, false, false, 'security', 'security', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(10, 'Роутеры', NULL, false, false, 'routers', 'routers', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(11, 'WiFi AP', NULL, false, false, 'ap', 'ap', true, NULL, 0, 0, 0, false, 24.00, NULL),
-(12, 'DHCP', NULL, true, false, NULL, NULL, true, NULL, 0, 0, 0, false, 24.00, NULL),
-(13, 'Гости', NULL, false, false, NULL, NULL, true, NULL, 1, 1, 4, true, 24.00, NULL)
+(0, '!Всё', NULL, 0, 0, '/etc/nagios/any', 'generic-host', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(1, 'Сервера', NULL, 0, 0, NULL, NULL, 1, NULL, 1, 1, 0, 0, 24.00, NULL),
+(2, 'Администраторы', NULL, 0, 0, NULL, NULL, 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(3, 'Пользователи', NULL, 0, 0, NULL, NULL, 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(4, 'VOIP', NULL, 0, 0, 'voip', 'voip', 1, NULL, 1, 4, 5, 0, 24.00, NULL),
+(5, 'IPCAM', NULL, 0, 0, 'videocam', 'ip-cam', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(6, 'Принтеры', NULL, 0, 0, 'printers', 'printers', 1, 'printer-service', 0, 0, 0, 0, 24.00, NULL),
+(7, 'Свичи', NULL, 0, 0, 'switches', 'switches', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(8, 'UPS', NULL, 0, 0, 'ups', 'ups', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(9, 'Охрана', NULL, 0, 0, 'security', 'security', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(10, 'Роутеры', NULL, 0, 0, 'routers', 'routers', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(11, 'WiFi AP', NULL, 0, 0, 'ap', 'ap', 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(12, 'DHCP', NULL, 1, 0, NULL, NULL, 1, NULL, 0, 0, 0, 0, 24.00, NULL),
+(13, 'Гости', NULL, 0, 0, NULL, NULL, 1, NULL, 1, 1, 4, 1, 24.00, NULL)
 ON CONFLICT (id) DO UPDATE SET
     ou_name = EXCLUDED.ou_name,
     comment = EXCLUDED.comment,
@@ -332,7 +332,7 @@ ON CONFLICT (id) DO UPDATE SET
 
 -- Network subnets
 INSERT INTO subnets (id, subnet, vlan_tag, ip_int_start, ip_int_stop, dhcp_start, dhcp_stop, dhcp_lease_time, gateway, office, hotspot, vpn, free, dhcp, static, dhcp_update_hostname, discovery, notify, comment)
-VALUES (1, '192.168.2.0/24', 2, 3232236032, 3232236287, 3232236132, 3232236182, 480, 3232236033, true, false, false, false, true, false, true, true, 7, 'LAN')
+VALUES (1, '192.168.2.0/24', 2, 3232236032, 3232236287, 3232236132, 3232236182, 480, 3232236033, 1, 0, 0, 0, 1, 0, 1, 1, 7, 'LAN')
 ON CONFLICT (id) DO UPDATE SET
     subnet = EXCLUDED.subnet,
     vlan_tag = EXCLUDED.vlan_tag,
@@ -461,21 +461,21 @@ ON CONFLICT (id) DO UPDATE SET
 -- Filter group assignments
 INSERT INTO Group_filters (id, group_id, filter_id, "order", action)
 VALUES
-(1, 2, 90, 1, true),
-(2, 2, 91, 2, true),
-(3, 2, 11, 3, true),
-(5, 2, 3, 4, true),
-(6, 2, 105, 5, true),
-(7, 2, 4, 6, true),
-(8, 2, 106, 7, true),
-(9, 2, 10, 8, true),
-(10, 2, 81, 9, true),
-(11, 2, 82, 10, true),
-(15, 2, 40, 11, true),
-(16, 2, 1, 12, true),
-(17, 2, 79, 13, true),
-(18, 2, 80, 14, true),
-(19, 1, 9, 1, true)
+(1, 2, 90, 1, 1),
+(2, 2, 91, 2, 1),
+(3, 2, 11, 3, 1),
+(5, 2, 3, 4, 1),
+(6, 2, 105, 5, 1),
+(7, 2, 4, 6, 1),
+(8, 2, 106, 7, 1),
+(9, 2, 10, 8, 1),
+(10, 2, 81, 9, 1),
+(11, 2, 82, 10, 1),
+(15, 2, 40, 11, 1),
+(16, 2, 1, 12, 1),
+(17, 2, 79, 13, 1),
+(18, 2, 80, 14, 1),
+(19, 1, 9, 1, 1)
 ON CONFLICT (id) DO UPDATE SET
     group_id = EXCLUDED.group_id,
     filter_id = EXCLUDED.filter_id,

+ 189 - 20
install-eye.sh

@@ -148,6 +148,82 @@ select_database_type() {
     esac
 }
 
+# Function for remote database configuration
+configure_remote_database() {
+    echo ""
+    echo "Remote Database Configuration"
+    echo "============================="
+    
+    select_database_type
+    
+    read -p "Database server IP address: " DB_HOST
+#    read -p "Database port [default]: " DB_PORT
+    read -p "Database name: " DB_NAME
+    read -p "Database username: " DB_USER
+    read -sp "Database password: " DB_PASS
+    echo ""
+    
+    # Set defaults if empty
+    [[ -z "$DB_PORT" ]] && DB_PORT="3306"
+    [[ "$DB_TYPE" == "postgresql" ]] && [[ "$DB_PORT" == "3306" ]] && DB_PORT="5432"
+    
+    echo "Database configuration saved:"
+    echo "  Type: $DB_TYPE"
+    echo "  Host: $DB_HOST:$DB_PORT"
+    echo "  Name: $DB_NAME"
+    echo "  User: $DB_USER"
+}
+
+# Function for installation type selection
+select_installation_type() {
+    echo "Select installation type:"
+    echo "1. Web interface + network backend"
+    echo "2. Web interface only"
+    echo "3. Network backend only"
+    echo ""
+    
+    read -p "Enter selection number [1]: " install_type
+    
+    case $install_type in
+        1)
+            INSTALL_TYPE="full"
+            echo "Selected: Web interface + network backend"
+            
+            # Ask about database
+            read -p "Install database locally? (y/n) [y]: " install_db
+            
+            if [[ -z "$install_db" || "$install_db" =~ ^[Yy]$ ]]; then
+                DB_INSTALL="local"
+                echo "Local database will be installed"
+                select_database_type
+            else
+                DB_INSTALL="remote"
+                echo "Remote database configuration"
+                configure_remote_database
+            fi
+            ;;
+        2)
+            INSTALL_TYPE="web"
+            echo "Selected: Web interface only"
+            DB_INSTALL="remote"
+            configure_remote_database
+            ;;
+        3)
+            INSTALL_TYPE="backend"
+            echo "Selected: Network backend only"
+            DB_INSTALL="remote"
+            configure_remote_database
+            ;;
+        *)
+            INSTALL_TYPE="full"
+            echo "Default selected: Web interface + network backend"
+            DB_INSTALL="local"
+            echo "Local database will be installed"
+            select_database_type
+            ;;
+    esac
+}
+
 # Install dependencies for ALT Linux
 install_deps_altlinux() {
     print_step "Installing dependencies for ALT Linux"
@@ -1406,8 +1482,17 @@ show_final_instructions() {
     echo ""
 }
 
-# Main function
-main() {
+# Final instructions
+show_final_upgrade() {
+    echo ""
+    echo -e "${GREEN}===========================================${NC}"
+    echo -e "${GREEN}      UPGRADE COMPLETED SUCCESSFULLY!      ${NC}"
+    echo -e "${GREEN}===========================================${NC}"
+    echo ""
+}
+
+# Install function
+eye_install() {
     clear
     echo -e "${GREEN}===========================================${NC}"
     echo -e "${GREEN}   Installing Eye Monitoring System       ${NC}"
@@ -1424,6 +1509,8 @@ main() {
     EYE_LANG_SHORT="en"
     SQL_DATA_FILE=
     SQL_CREATE_FILE=
+    INSTALL_TYPE="full"
+    DB_INSTALL="local"
 
     # Execute installation steps
     check_root
@@ -1446,34 +1533,116 @@ main() {
     show_final_instructions
 }
 
+# Upgrade function
+eye_upgrade() {
+    clear
+    echo -e "${GREEN}===========================================${NC}"
+    echo -e "${GREEN}       Update Eye Monitoring System        ${NC}"
+    echo -e "${GREEN}===========================================${NC}"
+    echo ""
+
+    check_root
+    detect_distro
+    update_system
+    install_packages
+    install_source_code
+    import_mac_database
+    show_final_upgrade
+}
+
+# Function to display help
+show_help() {
+    echo "Usage: $0 [options]"
+    echo ""
+    echo "Options:"
+    echo "  --help, -h     Show this help"
+    echo "  --upgrade, -u  Automatic upgrade"
+    echo "  --install, -i  Interactive install"
+    echo ""
+    echo "Supported distributions:"
+    echo "  - ALT Linux 11.1+"
+    echo "  - Debian 11+"
+    echo "  - Ubuntu 20.04+"
+    echo ""
+}
+
+# Function to check user existence
+check_user() {
+    id "eye" &>/dev/null
+    return $?
+}
+
+# Function to check directory existence
+check_directory() {
+    [ -d "/opt/Eye" ]
+    return $?
+}
+
 # Handle command line arguments
 case "$1" in
     --help|-h)
-        echo "Usage: $0 [options]"
-        echo ""
-        echo "Options:"
-        echo "  --help, -h     Show this help"
-        echo "  --auto         Automatic installation (minimal interaction)"
-        echo ""
-        echo "Supported distributions:"
-        echo "  - ALT Linux 11.1+"
-        echo "  - Debian 11+"
-        echo "  - Ubuntu 20.04+"
-        echo ""
+        show_help
         exit 0
         ;;
-    --auto)
-        # Mode with minimal interaction
-        print_warn "Automatic mode. All confirmations will be accepted as 'yes'"
-        export DEBIAN_FRONTEND=noninteractive
+    --upgrade|-u)
+        mode="upgrade"
+        echo "Mode set to: upgrade"
+        ;;
+    --install|-i)
+        mode="install"
+        echo "Mode set to: install"
+        ;;
+    *)
+        # autodetect mode
+        echo "Auto-detecting installation status..."
+        
+        if check_user; then
+            user_exists=true
+            echo "✓ User 'eye' exists"
+        else
+            user_exists=false
+            echo "✗ User 'eye' does not exist"
+        fi
+        
+        if check_directory; then
+            dir_exists=true
+            echo "✓ Directory /opt/Eye exists"
+        else
+            dir_exists=false
+            echo "✗ Directory /opt/Eye does not exist"
+        fi
+
+        if $user_exists && $dir_exists; then
+            mode="upgrade"
+            echo "Existing installation detected. Switching to upgrade mode."
+        else
+            mode="install"
+            echo "No existing installation found. Switching to install mode."
+        fi
+        ;;
+esac
+
+echo ""
+echo "Selected mode: $mode"
+
+# Main execution based on mode
+case "$mode" in
+    "upgrade")
+        echo "Starting upgrade process..."
+        # Start upgrade
+        eye_upgrade
+        ;;
+    "install")
+        echo "Starting installation process..."
+        # Start installation
+        eye_install
         ;;
     *)
-        # Interactive mode by default
+        echo "Error: Unknown mode '$mode'"
+        exit 1
         ;;
 esac
 
-# Start installation
-main "$@"
 
 # Exit with success code
 exit 0

+ 2 - 0
scripts/utils/oxidized/print_devices_oxi.pl

@@ -23,6 +23,8 @@ WHERE D.deleted = 0 and device_type<=2 ORDER BY building_name,ip");
 
 foreach my $device (@router_list) {
 next if (!$device->{password} or !$device->{login});
+next if (!$device->{ip});
+next if ($device->{protocol} eq '-1');
 $device = netdev_set_auth($device);
 my $oxi_model = 'dcnos';
 my $comware_cmdline = '';