Files
HellreigN/backend/internal/storage/migrations.go
T
d3m0k1d d79e9dd829
ci-agent / build (push) Failing after 5m27s
fix: interpretaor_id on scripts
2026-04-05 06:25:00 +03:00

378 lines
10 KiB
Go

package storage
const CreateSqlite = `
CREATE TABLE IF NOT EXISTS tokens (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
last_name TEXT NOT NULL,
login TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
token TEXT NOT NULL UNIQUE,
permission_view BOOL NOT NULL,
permission_manage_agent BOOL NOT NULL,
permission_admin BOOL NOT NULL,
is_active BOOL NOT NULL DEFAULT 0
);
`
// AddIsActiveColumn adds is_active column to tokens table if it doesn't exist.
// This is a migration for existing databases that don't have this column.
const AddIsActiveColumn = `
ALTER TABLE tokens ADD COLUMN is_active BOOL NOT NULL DEFAULT 0
`
const CreateRegistrationTokensTable = `
CREATE TABLE IF NOT EXISTS registration_tokens (
id INTEGER PRIMARY KEY AUTOINCREMENT,
token TEXT NOT NULL UNIQUE,
label TEXT NOT NULL,
used BOOL NOT NULL DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
used_at DATETIME
);
`
const CreateJobsTable = `
CREATE TABLE IF NOT EXISTS jobs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
agent_id TEXT NOT NULL,
command TEXT NOT NULL,
stdin TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
status INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
`
const CreateScriptInterpretersTable = `
CREATE TABLE IF NOT EXISTS script_interpreters (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
label TEXT NOT NULL,
argv TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
`
const CreateScriptsTable = `
CREATE TABLE IF NOT EXISTS scripts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
path TEXT NOT NULL UNIQUE,
content TEXT NOT NULL DEFAULT '',
interpreter_id INTEGER NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (interpreter_id) REFERENCES script_interpreters(id)
);
`
const CreateLogsTable = `
CREATE TABLE IF NOT EXISTS logs (
timestamp DateTime64(3) DEFAULT now(),
level LowCardinality(String),
service LowCardinality(String),
agent LowCardinality(String),
message String
) ENGINE = MergeTree()
ORDER BY (timestamp, level, service, agent)
TTL timestamp + INTERVAL 30 DAY
SETTINGS index_granularity = 8192
`
// SeedDefaultScripts inserts the bash interpreter and default diagnostic scripts.
// Uses INSERT OR IGNORE to avoid duplicates on subsequent runs.
const SeedDefaultScripts = `
-- Create bash interpreter with id=2
INSERT OR IGNORE INTO script_interpreters (id, name, label, argv) VALUES
(2, 'bash', 'Bash Shell', '["/bin/bash"]');
-- Insert default scripts bound to bash interpreter (id=2)
INSERT OR IGNORE INTO scripts (path, content, interpreter_id) VALUES
('default/system_info.sh', '#!/bin/bash
# Скрипт сбора базовой информации о системе: hostname, IP-адреса, сетевые интерфейсы, версия ОС
echo "=== SYSTEM INFORMATION ==="
echo ""
# Hostname
echo "--- Hostname ---"
hostname 2>/dev/null || echo "hostname command failed"
echo ""
# OS Version
echo "--- OS Version ---"
if [ -f /etc/os-release ]; then
cat /etc/os-release
elif [ -f /etc/redhat-release ]; then
cat /etc/redhat-release
elif command -v uname >/dev/null 2>&1; then
uname -a
else
echo "Unable to determine OS version"
fi
echo ""
# Network Interfaces
echo "--- Network Interfaces ---"
if command -v ip >/dev/null 2>&1; then
ip addr show 2>/dev/null
elif command -v ifconfig >/dev/null 2>&1; then
ifconfig -a 2>/dev/null
else
echo "Neither ip nor ifconfig available"
fi
echo ""
# IP Addresses (summary)
echo "--- IP Addresses Summary ---"
if command -v ip >/dev/null 2>&1; then
ip -brief addr show 2>/dev/null || ip addr show | grep "inet " | awk ''{print $2, $4}''
elif command -v ifconfig >/dev/null 2>&1; then
ifconfig | grep "inet " | awk ''{print $2}''
else
echo "Unable to retrieve IP addresses"
fi
echo ""
# Default Gateway
echo "--- Default Gateway ---"
if command -v ip >/dev/null 2>&1; then
ip route show default 2>/dev/null | head -5
elif command -v route >/dev/null 2>&1; then
route -n | grep "^0.0.0.0"
else
echo "Unable to determine default gateway"
fi
echo ""
# DNS Configuration
echo "--- DNS Configuration ---"
if [ -f /etc/resolv.conf ]; then
cat /etc/resolv.conf
else
echo "/etc/resolv.conf not found"
fi
echo ""
echo "=== END SYSTEM INFORMATION ==="', 2),
('default/services_scan.sh', '#!/bin/bash
# Скрипт сканирования доступных сервисов и портов на машине
echo "=== SERVICES AND PORTS SCAN ==="
echo ""
# Listening ports
echo "--- Listening Ports ---"
if command -v ss >/dev/null 2>&1; then
echo "Using ss:"
ss -tulnp 2>/dev/null
elif command -v netstat >/dev/null 2>&1; then
echo "Using netstat:"
netstat -tulnp 2>/dev/null
else
echo "Neither ss nor netstat available"
fi
echo ""
# Common services check
echo "--- Common Services Check ---"
COMMON_PORTS="22 80 443 3306 5432 6379 8080 8443 27017 9200"
for port in $COMMON_PORTS; do
if command -v ss >/dev/null 2>&1; then
if ss -tuln | grep -q ":${port} "; then
echo "Port ${port}: LISTENING"
fi
elif command -v netstat >/dev/null 2>&1; then
if netstat -tuln | grep -q ":${port} "; then
echo "Port ${port}: LISTENING"
fi
fi
done
echo ""
# Running services
echo "--- Running Services (systemd) ---"
if command -v systemctl >/dev/null 2>&1; then
systemctl list-units --type=service --state=running --no-pager 2>/dev/null | head -30
else
echo "systemctl not available"
echo "--- Running processes (top 20) ---"
ps aux --sort=-%mem 2>/dev/null | head -20 || ps aux | head -20
fi
echo ""
# Docker containers (if available)
echo "--- Docker Containers ---"
if command -v docker >/dev/null 2>&1; then
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null || echo "Docker command failed"
else
echo "Docker not installed"
fi
echo ""
echo "=== END SERVICES AND PORTS SCAN ==="', 2),
('default/diagnostics.sh', '#!/bin/bash
# Скрипт выполнения базовых диагностических команд
echo "=== DIAGNOSTIC COMMANDS ==="
echo ""
# Uptime
echo "--- Uptime ---"
uptime 2>/dev/null || echo "uptime command failed"
echo ""
# Load average
echo "--- Load Average ---"
cat /proc/loadavg 2>/dev/null || echo "/proc/loadavg not available"
echo ""
# Memory usage
echo "--- Memory Usage ---"
if command -v free >/dev/null 2>&1; then
free -h 2>/dev/null
elif [ -f /proc/meminfo ]; then
head -10 /proc/meminfo
else
echo "Unable to retrieve memory info"
fi
echo ""
# Disk usage
echo "--- Disk Usage ---"
df -h 2>/dev/null || echo "df command failed"
echo ""
# CPU info
echo "--- CPU Info ---"
if [ -f /proc/cpuinfo ]; then
echo "CPU cores: $(grep -c ^processor /proc/cpuinfo 2>/dev/null || echo ''unknown'')"
grep "model name" /proc/cpuinfo 2>/dev/null | head -1 || echo "CPU model unknown"
else
echo "/proc/cpuinfo not available"
fi
echo ""
# Top processes by CPU
echo "--- Top 10 Processes by CPU ---"
ps aux --sort=-%cpu 2>/dev/null | head -11 || ps aux | head -11
echo ""
# Network connectivity check
echo "--- Network Connectivity ---"
echo "Pinging 8.8.8.8..."
ping -c 2 -W 2 8.8.8.8 2>/dev/null || echo "Ping to 8.8.8.8 failed"
echo ""
echo "Pinging 1.1.1.1..."
ping -c 2 -W 2 1.1.1.1 2>/dev/null || echo "Ping to 1.1.1.1 failed"
echo ""
# Last reboots
echo "--- Last Reboots (last 5) ---"
last reboot 2>/dev/null | head -5 || echo "Unable to get reboot history"
echo ""
# Systemd failed services
echo "--- Failed Systemd Services ---"
if command -v systemctl >/dev/null 2>&1; then
systemctl list-units --state=failed --no-pager 2>/dev/null | head -10 || echo "No failed services or systemctl unavailable"
else
echo "systemctl not available"
fi
echo ""
echo "=== END DIAGNOSTIC COMMANDS ==="', 2),
('default/network_info.sh', '#!/bin/bash
# Скрипт сбора базовой сетевой информации
echo "=== NETWORK INFORMATION ==="
echo ""
# Network interfaces with IPs
echo "--- Network Interfaces ---"
if command -v ip >/dev/null 2>&1; then
ip addr show 2>/dev/null
elif command -v ifconfig >/dev/null 2>&1; then
ifconfig -a 2>/dev/null
else
echo "Unable to retrieve network interface info"
fi
echo ""
# Routing table
echo "--- Routing Table ---"
if command -v ip >/dev/null 2>&1; then
ip route show 2>/dev/null
elif command -v route >/dev/null 2>&1; then
route -n 2>/dev/null
else
echo "Unable to retrieve routing table"
fi
echo ""
# ARP table
echo "--- ARP Table ---"
if command -v ip >/dev/null 2>&1; then
ip neigh show 2>/dev/null
elif command -v arp >/dev/null 2>&1; then
arp -an 2>/dev/null
else
echo "Unable to retrieve ARP table"
fi
echo ""
# DNS resolution test
echo "--- DNS Resolution Test ---"
echo "Resolving google.com..."
if command -v nslookup >/dev/null 2>&1; then
nslookup google.com 2>/dev/null | head -10
elif command -v dig >/dev/null 2>&1; then
dig google.com +short 2>/dev/null
elif command -v host >/dev/null 2>&1; then
host google.com 2>/dev/null | head -5
elif command -v getent >/dev/null 2>&1; then
getent hosts google.com 2>/dev/null
else
echo "No DNS tools available"
fi
echo ""
# Active connections
echo "--- Active Connections (ESTABLISHED) ---"
if command -v ss >/dev/null 2>&1; then
ss -tnp state established 2>/dev/null | head -20
elif command -v netstat >/dev/null 2>&1; then
netstat -tnp 2>/dev/null | grep ESTABLISHED | head -20
else
echo "Unable to retrieve active connections"
fi
echo ""
# Firewall rules (if accessible)
echo "--- Firewall Rules ---"
if command -v iptables >/dev/null 2>&1; then
iptables -L -n 2>/dev/null | head -30 || echo "iptables: permission denied or error"
else
echo "iptables not available"
fi
echo ""
# Network namespaces (if applicable)
echo "--- Network Namespaces ---"
if command -v ip >/dev/null 2>&1; then
ip netns list 2>/dev/null || echo "No network namespaces or permission denied"
else
echo "ip command not available"
fi
echo ""
echo "=== END NETWORK INFORMATION ==="', 2);
`