Ressource-Pool
Dieser Commit ist enthalten in:
321
v2_adminpanel/test_data_resources.sql
Normale Datei
321
v2_adminpanel/test_data_resources.sql
Normale Datei
@@ -0,0 +1,321 @@
|
||||
-- Test-Daten für Resource Pool System
|
||||
-- Generiert für AccountForger v2-Docker
|
||||
-- Stand: 2025-06-09
|
||||
|
||||
-- ====================================
|
||||
-- Test-Domains (500 Stück)
|
||||
-- ====================================
|
||||
|
||||
-- Verfügbare Domains
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, notes) VALUES
|
||||
('domain', 'example-shop-001.com', 'available', 'Premium Domain'),
|
||||
('domain', 'best-deals-online.net', 'available', 'E-Commerce Domain'),
|
||||
('domain', 'super-store-24.com', 'available', 'Shop Domain'),
|
||||
('domain', 'mega-market-place.org', 'available', 'Marketplace Domain'),
|
||||
('domain', 'discount-heaven.net', 'available', 'Discount Domain'),
|
||||
('domain', 'fashion-outlet-now.com', 'available', 'Fashion Domain'),
|
||||
('domain', 'tech-gadgets-pro.net', 'available', 'Tech Domain'),
|
||||
('domain', 'home-decor-style.com', 'available', 'Home Domain'),
|
||||
('domain', 'sports-gear-central.net', 'available', 'Sports Domain'),
|
||||
('domain', 'beauty-products-24.com', 'available', 'Beauty Domain');
|
||||
|
||||
-- Weitere Domains mit verschiedenen Patterns
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 11..400 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status)
|
||||
VALUES ('domain',
|
||||
CASE
|
||||
WHEN i % 5 = 0 THEN 'shop-' || i || '-online.com'
|
||||
WHEN i % 5 = 1 THEN 'store-' || i || '-pro.net'
|
||||
WHEN i % 5 = 2 THEN 'market-' || i || '-24.org'
|
||||
WHEN i % 5 = 3 THEN 'outlet-' || i || '-deals.com'
|
||||
ELSE 'commerce-' || i || '-now.net'
|
||||
END,
|
||||
'available');
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- Einige zugeteilte Domains (50 Stück)
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 401..450 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, allocated_to_license, status_changed_at, status_changed_by)
|
||||
VALUES ('domain',
|
||||
'allocated-domain-' || i || '.com',
|
||||
'allocated',
|
||||
(i % 10) + 1, -- Zuweisung zu Lizenzen 1-10
|
||||
NOW() - INTERVAL '30 days' * RANDOM(),
|
||||
'admin');
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- Domains in Quarantäne (50 Stück)
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 451..500 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, quarantine_reason, quarantine_until, notes)
|
||||
VALUES ('domain',
|
||||
'quarantine-domain-' || i || '.com',
|
||||
'quarantine',
|
||||
CASE i % 5
|
||||
WHEN 0 THEN 'abuse'
|
||||
WHEN 1 THEN 'defect'
|
||||
WHEN 2 THEN 'blacklisted'
|
||||
WHEN 3 THEN 'expired'
|
||||
ELSE 'review'
|
||||
END,
|
||||
NOW() + INTERVAL '7 days' + INTERVAL '1 day' * (i % 14),
|
||||
'Automatisch in Quarantäne versetzt');
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- ====================================
|
||||
-- Test IPv4-Adressen (200 Stück)
|
||||
-- ====================================
|
||||
|
||||
-- Verfügbare IPv4-Adressen
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 1..150 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, notes)
|
||||
VALUES ('ipv4',
|
||||
'192.168.' || (i / 256 + 1)::INT || '.' || (i % 256),
|
||||
'available',
|
||||
CASE
|
||||
WHEN i % 10 = 0 THEN 'Premium IP'
|
||||
WHEN i % 20 = 0 THEN 'Dedicated Server IP'
|
||||
ELSE 'Standard IP'
|
||||
END);
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- Zugeteilte IPv4-Adressen (30 Stück)
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 151..180 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, allocated_to_license, status_changed_at, status_changed_by)
|
||||
VALUES ('ipv4',
|
||||
'10.0.' || ((i-150) / 256)::INT || '.' || ((i-150) % 256),
|
||||
'allocated',
|
||||
((i-150) % 15) + 1,
|
||||
NOW() - INTERVAL '60 days' * RANDOM(),
|
||||
'system');
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- IPv4 in Quarantäne (20 Stück)
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 181..200 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, quarantine_reason, quarantine_until, notes)
|
||||
VALUES ('ipv4',
|
||||
'172.16.' || ((i-180) / 256)::INT || '.' || ((i-180) % 256),
|
||||
'quarantine',
|
||||
CASE (i-180) % 4
|
||||
WHEN 0 THEN 'blacklisted'
|
||||
WHEN 1 THEN 'abuse'
|
||||
WHEN 2 THEN 'maintenance'
|
||||
ELSE 'defect'
|
||||
END,
|
||||
NOW() + INTERVAL '3 days' + INTERVAL '1 day' * ((i-180) % 7),
|
||||
'IP wurde gemeldet oder ist in Wartung');
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- ====================================
|
||||
-- Test Telefonnummern (100 Stück)
|
||||
-- ====================================
|
||||
|
||||
-- Verfügbare Telefonnummern
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 1..70 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, notes)
|
||||
VALUES ('phone',
|
||||
'+49' || (1500000000 + i),
|
||||
'available',
|
||||
CASE
|
||||
WHEN i % 5 = 0 THEN 'Premium Nummer'
|
||||
WHEN i % 10 = 0 THEN 'Vanity Nummer'
|
||||
ELSE 'Standard Nummer'
|
||||
END);
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- Zugeteilte Telefonnummern (20 Stück)
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 71..90 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, allocated_to_license, status_changed_at, status_changed_by)
|
||||
VALUES ('phone',
|
||||
'+49' || (1600000000 + i),
|
||||
'allocated',
|
||||
((i-70) % 10) + 1,
|
||||
NOW() - INTERVAL '45 days' * RANDOM(),
|
||||
'admin');
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- Telefonnummern in Quarantäne (10 Stück)
|
||||
DO $$
|
||||
BEGIN
|
||||
FOR i IN 91..100 LOOP
|
||||
INSERT INTO resource_pools (resource_type, resource_value, status, quarantine_reason, quarantine_until, notes)
|
||||
VALUES ('phone',
|
||||
'+49' || (1700000000 + i),
|
||||
'quarantine',
|
||||
CASE (i-90) % 3
|
||||
WHEN 0 THEN 'expired'
|
||||
WHEN 1 THEN 'defect'
|
||||
ELSE 'review'
|
||||
END,
|
||||
NOW() + INTERVAL '5 days' + INTERVAL '1 day' * ((i-90) % 5),
|
||||
'Nummer wurde zurückgegeben oder ist defekt');
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- ====================================
|
||||
-- Resource History für einige Ressourcen
|
||||
-- ====================================
|
||||
|
||||
-- Historie für einige Domains
|
||||
INSERT INTO resource_history (resource_id, license_id, action, action_by, details, ip_address)
|
||||
SELECT
|
||||
id,
|
||||
allocated_to_license,
|
||||
'allocated',
|
||||
'system',
|
||||
'{"reason": "Neue Lizenz erstellt", "customer": "Test Customer"}'::jsonb,
|
||||
'192.168.1.100'
|
||||
FROM resource_pools
|
||||
WHERE status = 'allocated'
|
||||
AND resource_type = 'domain'
|
||||
LIMIT 10;
|
||||
|
||||
-- Historie für Quarantäne
|
||||
INSERT INTO resource_history (resource_id, action, action_by, details, ip_address)
|
||||
SELECT
|
||||
id,
|
||||
'quarantined',
|
||||
'admin',
|
||||
jsonb_build_object('reason', quarantine_reason, 'duration', '7 days'),
|
||||
'192.168.1.101'
|
||||
FROM resource_pools
|
||||
WHERE status = 'quarantine'
|
||||
LIMIT 20;
|
||||
|
||||
-- ====================================
|
||||
-- Resource Metrics für Performance-Tracking
|
||||
-- ====================================
|
||||
|
||||
-- Metriken für die letzten 30 Tage
|
||||
DO $$
|
||||
DECLARE
|
||||
resource_rec RECORD;
|
||||
days_back INT;
|
||||
BEGIN
|
||||
-- Für jede Ressource, die allocated ist
|
||||
FOR resource_rec IN
|
||||
SELECT id FROM resource_pools WHERE status = 'allocated' LIMIT 50
|
||||
LOOP
|
||||
-- Generiere Metriken für die letzten 30 Tage
|
||||
FOR days_back IN 0..29 LOOP
|
||||
INSERT INTO resource_metrics (
|
||||
resource_id,
|
||||
metric_date,
|
||||
usage_count,
|
||||
performance_score,
|
||||
cost,
|
||||
revenue,
|
||||
issues_count,
|
||||
availability_percent
|
||||
) VALUES (
|
||||
resource_rec.id,
|
||||
CURRENT_DATE - INTERVAL '1 day' * days_back,
|
||||
FLOOR(RANDOM() * 100 + 50), -- 50-150 Nutzungen
|
||||
ROUND((RANDOM() * 40 + 60)::numeric, 2), -- 60-100 Score
|
||||
ROUND((RANDOM() * 5 + 2)::numeric, 2), -- 2-7 EUR Kosten
|
||||
ROUND((RANDOM() * 20 + 10)::numeric, 2), -- 10-30 EUR Umsatz
|
||||
FLOOR(RANDOM() * 3), -- 0-2 Issues
|
||||
ROUND((RANDOM() * 5 + 95)::numeric, 2) -- 95-100% Verfügbarkeit
|
||||
) ON CONFLICT (resource_id, metric_date) DO NOTHING;
|
||||
END LOOP;
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- ====================================
|
||||
-- License Resources Zuordnungen
|
||||
-- ====================================
|
||||
|
||||
-- Verbinde einige bestehende Lizenzen mit Ressourcen
|
||||
DO $$
|
||||
DECLARE
|
||||
license_rec RECORD;
|
||||
domain_id INT;
|
||||
ipv4_id INT;
|
||||
phone_id INT;
|
||||
BEGIN
|
||||
-- Für die ersten 10 aktiven Lizenzen
|
||||
FOR license_rec IN
|
||||
SELECT id FROM licenses WHERE is_active = TRUE LIMIT 10
|
||||
LOOP
|
||||
-- Hole eine verfügbare Domain
|
||||
SELECT id INTO domain_id FROM resource_pools
|
||||
WHERE resource_type = 'domain' AND status = 'available'
|
||||
ORDER BY RANDOM() LIMIT 1;
|
||||
|
||||
IF domain_id IS NOT NULL THEN
|
||||
-- Weise die Domain zu
|
||||
UPDATE resource_pools
|
||||
SET status = 'allocated',
|
||||
allocated_to_license = license_rec.id,
|
||||
status_changed_at = NOW(),
|
||||
status_changed_by = 'migration'
|
||||
WHERE id = domain_id;
|
||||
|
||||
-- Erstelle Zuordnung
|
||||
INSERT INTO license_resources (license_id, resource_id, assigned_by)
|
||||
VALUES (license_rec.id, domain_id, 'migration');
|
||||
END IF;
|
||||
|
||||
-- Wiederhole für IPv4
|
||||
SELECT id INTO ipv4_id FROM resource_pools
|
||||
WHERE resource_type = 'ipv4' AND status = 'available'
|
||||
ORDER BY RANDOM() LIMIT 1;
|
||||
|
||||
IF ipv4_id IS NOT NULL THEN
|
||||
UPDATE resource_pools
|
||||
SET status = 'allocated',
|
||||
allocated_to_license = license_rec.id,
|
||||
status_changed_at = NOW(),
|
||||
status_changed_by = 'migration'
|
||||
WHERE id = ipv4_id;
|
||||
|
||||
INSERT INTO license_resources (license_id, resource_id, assigned_by)
|
||||
VALUES (license_rec.id, ipv4_id, 'migration');
|
||||
END IF;
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
-- Zusammenfassung ausgeben
|
||||
DO $$
|
||||
DECLARE
|
||||
domain_count INT;
|
||||
ipv4_count INT;
|
||||
phone_count INT;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO domain_count FROM resource_pools WHERE resource_type = 'domain';
|
||||
SELECT COUNT(*) INTO ipv4_count FROM resource_pools WHERE resource_type = 'ipv4';
|
||||
SELECT COUNT(*) INTO phone_count FROM resource_pools WHERE resource_type = 'phone';
|
||||
|
||||
RAISE NOTICE 'Test-Daten erfolgreich eingefügt:';
|
||||
RAISE NOTICE '- Domains: %', domain_count;
|
||||
RAISE NOTICE '- IPv4-Adressen: %', ipv4_count;
|
||||
RAISE NOTICE '- Telefonnummern: %', phone_count;
|
||||
RAISE NOTICE '';
|
||||
RAISE NOTICE 'Status-Verteilung:';
|
||||
RAISE NOTICE '- Verfügbar: % Ressourcen', (SELECT COUNT(*) FROM resource_pools WHERE status = 'available');
|
||||
RAISE NOTICE '- Zugeteilt: % Ressourcen', (SELECT COUNT(*) FROM resource_pools WHERE status = 'allocated');
|
||||
RAISE NOTICE '- Quarantäne: % Ressourcen', (SELECT COUNT(*) FROM resource_pools WHERE status = 'quarantine');
|
||||
END $$;
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren