feat: add migration for normalizing agent node_id and node_cache table
This commit is contained in:
102
migrations/022_normalize_agent_node_id.sql
Normal file
102
migrations/022_normalize_agent_node_id.sql
Normal file
@@ -0,0 +1,102 @@
|
||||
-- Migration 022: Normalize Agent node_id to match Node Registry
|
||||
-- Приводимо node_id агентів до формату Node Registry
|
||||
|
||||
-- ============================================================================
|
||||
-- Нормалізація node_id
|
||||
-- ============================================================================
|
||||
|
||||
-- NODE1 → node-1-hetzner-gex44
|
||||
UPDATE agents
|
||||
SET node_id = 'node-1-hetzner-gex44'
|
||||
WHERE node_id = 'NODE1' OR node_id = 'node1' OR node_id = 'Node1';
|
||||
|
||||
-- NODE2 → node-2-macbook-m4max
|
||||
UPDATE agents
|
||||
SET node_id = 'node-2-macbook-m4max'
|
||||
WHERE node_id = 'NODE2' OR node_id = 'node2' OR node_id = 'Node2';
|
||||
|
||||
-- Перевірка
|
||||
SELECT node_id, COUNT(*) as count
|
||||
FROM agents
|
||||
WHERE node_id IS NOT NULL
|
||||
GROUP BY node_id
|
||||
ORDER BY count DESC;
|
||||
|
||||
-- ============================================================================
|
||||
-- Створюємо таблицю-кеш для нод в БД daarion
|
||||
-- (для швидкого JOIN без cross-database запитів)
|
||||
-- ============================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS node_cache (
|
||||
id SERIAL PRIMARY KEY,
|
||||
node_id TEXT NOT NULL UNIQUE,
|
||||
node_name TEXT NOT NULL,
|
||||
hostname TEXT,
|
||||
status TEXT DEFAULT 'offline',
|
||||
roles TEXT[] DEFAULT '{}',
|
||||
gpu JSONB DEFAULT NULL,
|
||||
environment TEXT DEFAULT 'production',
|
||||
last_sync TIMESTAMPTZ DEFAULT NOW(),
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_node_cache_node_id ON node_cache(node_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_node_cache_status ON node_cache(status);
|
||||
|
||||
COMMENT ON TABLE node_cache IS 'Кеш нод з Node Registry для швидкого JOIN з agents';
|
||||
|
||||
-- ============================================================================
|
||||
-- Початкові дані для node_cache
|
||||
-- ============================================================================
|
||||
|
||||
INSERT INTO node_cache (node_id, node_name, hostname, status, roles, environment)
|
||||
VALUES
|
||||
('node-1-hetzner-gex44', 'Hetzner GEX44 Production', '144.76.224.179', 'online',
|
||||
ARRAY['core', 'gateway', 'matrix', 'agents', 'gpu'], 'production'),
|
||||
('node-2-macbook-m4max', 'MacBook Pro M4 Max', '192.168.1.33', 'online',
|
||||
ARRAY['development', 'gpu', 'ai_runtime'], 'development')
|
||||
ON CONFLICT (node_id) DO UPDATE SET
|
||||
node_name = EXCLUDED.node_name,
|
||||
hostname = EXCLUDED.hostname,
|
||||
status = EXCLUDED.status,
|
||||
roles = EXCLUDED.roles,
|
||||
environment = EXCLUDED.environment,
|
||||
updated_at = NOW();
|
||||
|
||||
-- ============================================================================
|
||||
-- Тригер для оновлення updated_at
|
||||
-- ============================================================================
|
||||
|
||||
CREATE OR REPLACE FUNCTION update_node_cache_updated_at()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
DROP TRIGGER IF EXISTS trigger_update_node_cache_updated_at ON node_cache;
|
||||
CREATE TRIGGER trigger_update_node_cache_updated_at
|
||||
BEFORE UPDATE ON node_cache
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_node_cache_updated_at();
|
||||
|
||||
-- ============================================================================
|
||||
-- Перевірка результату
|
||||
-- ============================================================================
|
||||
|
||||
SELECT
|
||||
a.id,
|
||||
a.display_name,
|
||||
a.node_id,
|
||||
nc.node_name,
|
||||
nc.roles,
|
||||
nc.environment
|
||||
FROM agents a
|
||||
LEFT JOIN node_cache nc ON a.node_id = nc.node_id
|
||||
WHERE a.is_public = true
|
||||
LIMIT 10;
|
||||
|
||||
SELECT 'Migration 022 completed: Agent node_id normalized and node_cache created' AS result;
|
||||
|
||||
Reference in New Issue
Block a user