trying to rework database migrations
This commit is contained in:
204
migrations.old/20260202000001_add_sensor_runtimes.sql
Normal file
204
migrations.old/20260202000001_add_sensor_runtimes.sql
Normal file
@@ -0,0 +1,204 @@
|
||||
-- Migration: Add Sensor Runtimes
|
||||
-- Description: Adds common sensor runtimes (Python, Node.js, Shell, Native) with verification metadata
|
||||
-- Version: 20260202000001
|
||||
|
||||
-- ============================================================================
|
||||
-- SENSOR RUNTIMES
|
||||
-- ============================================================================
|
||||
|
||||
-- Insert Python sensor runtime
|
||||
INSERT INTO runtime (ref, pack, pack_ref, description, runtime_type, name, distributions, installation)
|
||||
VALUES (
|
||||
'core.sensor.python',
|
||||
(SELECT id FROM pack WHERE ref = 'core'),
|
||||
'core',
|
||||
'Python 3 sensor runtime with automatic environment management',
|
||||
'sensor',
|
||||
'Python',
|
||||
jsonb_build_object(
|
||||
'verification', jsonb_build_object(
|
||||
'commands', jsonb_build_array(
|
||||
jsonb_build_object(
|
||||
'binary', 'python3',
|
||||
'args', jsonb_build_array('--version'),
|
||||
'exit_code', 0,
|
||||
'pattern', 'Python 3\.',
|
||||
'priority', 1
|
||||
),
|
||||
jsonb_build_object(
|
||||
'binary', 'python',
|
||||
'args', jsonb_build_array('--version'),
|
||||
'exit_code', 0,
|
||||
'pattern', 'Python 3\.',
|
||||
'priority', 2
|
||||
)
|
||||
)
|
||||
),
|
||||
'min_version', '3.8',
|
||||
'recommended_version', '3.11'
|
||||
),
|
||||
jsonb_build_object(
|
||||
'package_managers', jsonb_build_array('pip', 'pipenv', 'poetry'),
|
||||
'virtual_env_support', true
|
||||
)
|
||||
)
|
||||
ON CONFLICT (ref) DO UPDATE SET
|
||||
distributions = EXCLUDED.distributions,
|
||||
installation = EXCLUDED.installation,
|
||||
updated = NOW();
|
||||
|
||||
-- Insert Node.js sensor runtime
|
||||
INSERT INTO runtime (ref, pack, pack_ref, description, runtime_type, name, distributions, installation)
|
||||
VALUES (
|
||||
'core.sensor.nodejs',
|
||||
(SELECT id FROM pack WHERE ref = 'core'),
|
||||
'core',
|
||||
'Node.js sensor runtime for JavaScript-based sensors',
|
||||
'sensor',
|
||||
'Node.js',
|
||||
jsonb_build_object(
|
||||
'verification', jsonb_build_object(
|
||||
'commands', jsonb_build_array(
|
||||
jsonb_build_object(
|
||||
'binary', 'node',
|
||||
'args', jsonb_build_array('--version'),
|
||||
'exit_code', 0,
|
||||
'pattern', 'v\d+\.\d+\.\d+',
|
||||
'priority', 1
|
||||
)
|
||||
)
|
||||
),
|
||||
'min_version', '16.0.0',
|
||||
'recommended_version', '20.0.0'
|
||||
),
|
||||
jsonb_build_object(
|
||||
'package_managers', jsonb_build_array('npm', 'yarn', 'pnpm'),
|
||||
'module_support', true
|
||||
)
|
||||
)
|
||||
ON CONFLICT (ref) DO UPDATE SET
|
||||
distributions = EXCLUDED.distributions,
|
||||
installation = EXCLUDED.installation,
|
||||
updated = NOW();
|
||||
|
||||
-- Insert Shell sensor runtime
|
||||
INSERT INTO runtime (ref, pack, pack_ref, description, runtime_type, name, distributions, installation)
|
||||
VALUES (
|
||||
'core.sensor.shell',
|
||||
(SELECT id FROM pack WHERE ref = 'core'),
|
||||
'core',
|
||||
'Shell (bash/sh) sensor runtime - always available',
|
||||
'sensor',
|
||||
'Shell',
|
||||
jsonb_build_object(
|
||||
'verification', jsonb_build_object(
|
||||
'commands', jsonb_build_array(
|
||||
jsonb_build_object(
|
||||
'binary', 'sh',
|
||||
'args', jsonb_build_array('--version'),
|
||||
'exit_code', 0,
|
||||
'optional', true,
|
||||
'priority', 1
|
||||
),
|
||||
jsonb_build_object(
|
||||
'binary', 'bash',
|
||||
'args', jsonb_build_array('--version'),
|
||||
'exit_code', 0,
|
||||
'optional', true,
|
||||
'priority', 2
|
||||
)
|
||||
),
|
||||
'always_available', true
|
||||
)
|
||||
),
|
||||
jsonb_build_object(
|
||||
'interpreters', jsonb_build_array('sh', 'bash', 'dash'),
|
||||
'portable', true
|
||||
)
|
||||
)
|
||||
ON CONFLICT (ref) DO UPDATE SET
|
||||
distributions = EXCLUDED.distributions,
|
||||
installation = EXCLUDED.installation,
|
||||
updated = NOW();
|
||||
|
||||
-- Insert Native sensor runtime
|
||||
INSERT INTO runtime (ref, pack, pack_ref, description, runtime_type, name, distributions, installation)
|
||||
VALUES (
|
||||
'core.sensor.native',
|
||||
(SELECT id FROM pack WHERE ref = 'core'),
|
||||
'core',
|
||||
'Native compiled sensor runtime (Rust, Go, C, etc.) - always available',
|
||||
'sensor',
|
||||
'Native',
|
||||
jsonb_build_object(
|
||||
'verification', jsonb_build_object(
|
||||
'always_available', true,
|
||||
'check_required', false
|
||||
),
|
||||
'languages', jsonb_build_array('rust', 'go', 'c', 'c++')
|
||||
),
|
||||
jsonb_build_object(
|
||||
'build_required', false,
|
||||
'system_native', true
|
||||
)
|
||||
)
|
||||
ON CONFLICT (ref) DO UPDATE SET
|
||||
distributions = EXCLUDED.distributions,
|
||||
installation = EXCLUDED.installation,
|
||||
updated = NOW();
|
||||
|
||||
-- Update existing builtin sensor runtime with verification metadata
|
||||
UPDATE runtime
|
||||
SET distributions = jsonb_build_object(
|
||||
'verification', jsonb_build_object(
|
||||
'always_available', true,
|
||||
'check_required', false
|
||||
),
|
||||
'type', 'builtin'
|
||||
),
|
||||
installation = jsonb_build_object(
|
||||
'method', 'builtin',
|
||||
'included_with_service', true
|
||||
),
|
||||
updated = NOW()
|
||||
WHERE ref = 'core.sensor.builtin';
|
||||
|
||||
-- Add comments
|
||||
COMMENT ON COLUMN runtime.distributions IS 'Runtime distribution metadata including verification commands, version requirements, and capabilities';
|
||||
COMMENT ON COLUMN runtime.installation IS 'Installation requirements and instructions including package managers and setup steps';
|
||||
|
||||
-- Create index for efficient runtime verification queries
|
||||
CREATE INDEX IF NOT EXISTS idx_runtime_type_sensor ON runtime(runtime_type) WHERE runtime_type = 'sensor';
|
||||
|
||||
-- Verification metadata structure documentation
|
||||
/*
|
||||
VERIFICATION METADATA STRUCTURE:
|
||||
|
||||
distributions->verification = {
|
||||
"commands": [ // Array of verification commands to try (in priority order)
|
||||
{
|
||||
"binary": "python3", // Binary name to execute
|
||||
"args": ["--version"], // Arguments to pass
|
||||
"exit_code": 0, // Expected exit code (0 = success)
|
||||
"pattern": "Python 3\.", // Optional regex pattern to match in output
|
||||
"priority": 1, // Lower = higher priority (try first)
|
||||
"optional": false // If true, failure doesn't mean runtime unavailable
|
||||
}
|
||||
],
|
||||
"always_available": false, // If true, skip verification (shell, native)
|
||||
"check_required": true // If false, assume available without checking
|
||||
}
|
||||
|
||||
USAGE EXAMPLE:
|
||||
|
||||
To verify Python runtime availability:
|
||||
1. Query: SELECT distributions->'verification'->'commands' FROM runtime WHERE ref = 'core.sensor.python'
|
||||
2. Parse commands array
|
||||
3. Try each command in priority order
|
||||
4. If any command succeeds with expected exit_code and matches pattern (if provided), runtime is available
|
||||
5. If all commands fail, runtime is not available
|
||||
|
||||
For always_available runtimes (shell, native):
|
||||
1. Check distributions->'verification'->'always_available'
|
||||
2. If true, skip verification and report as available
|
||||
*/
|
||||
Reference in New Issue
Block a user