update(metal): preload data

This commit is contained in:
Aleksandr Tcitlionok
2024-12-06 06:36:57 +00:00
parent 3ef8b2a4a8
commit f22781e04b
3 changed files with 815 additions and 2 deletions

292
app/data/metal.json Normal file
View File

@@ -0,0 +1,292 @@
[
{
"name": "akita",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "chiba",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "ehime",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "fukuoka",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "kanagawa",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "kumamoto",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "okayama",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "okinawa",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "osaka",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "saitama",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "osaka",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "saitama",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "shizuoka",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "yamagata",
"location": "Tokyo",
"vendor": "Minisforum MS-01",
"cpu": 24,
"memory": "32GB",
"storage": "1TB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "adatara",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "arashima",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "asahi",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "aso",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "azuma",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "daisen",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "horoshiri",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "nantai",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "kirishima",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "ontake",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "rausu",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "rishiri",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "shari",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "yotei",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
},
{
"name": "zao",
"location": "Tokyo",
"vendor": "OrangePi 5 ARM",
"cpu": 8,
"memory": "16GB",
"storage": "128GB",
"time_on_duty": 1000,
"initial_cost": 1000.0
}
]

456
app/data/vm.json Normal file
View File

@@ -0,0 +1,456 @@
[
{
"name": "cax-41-1",
"location": "Helsinki",
"cpu": 16,
"memory": "32GB",
"storage": "320GB SSD",
"type": "cax-2xlarge"
},
{
"name": "cax-41-2",
"location": "Helsinki",
"cpu": 16,
"memory": "32GB",
"storage": "320GB SSD",
"type": "cax-2xlarge"
},
{
"name": "ccx-63",
"location": "Germany",
"cpu": 48,
"memory": "192GB",
"storage": "960GB SSD",
"type": "cx-6xlarge"
},
{
"name": "cpx-41-1",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-2",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-3",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-4",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-5",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-6",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-7",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-8",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-9",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cpx-41-10",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "240GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-22-1",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-2",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-3",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-4",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-5",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-6",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-7",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-8",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-9",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-22-10",
"location": "Helsinki",
"cpu": 2,
"memory": "4GB",
"storage": "40GB SSD",
"type": "cx-medium"
},
{
"name": "cx-42-1",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-2",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-3",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-4",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-5",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-6",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-7",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-8",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-9",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-10",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-11",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB SSD",
"type": "cx-xlarge"
},
{
"name": "cx-42-gawa-1",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-2",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-3",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-4",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-5",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-6",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-7",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-8",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-9",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-gawa-10",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-1",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-2",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-3",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-4",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-5",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-6",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-7",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-8",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-9",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-42-yama-10",
"location": "Helsinki",
"cpu": 8,
"memory": "16GB",
"storage": "160GB"
},
{
"name": "cx-52-1",
"location": "Helsinki",
"cpu": 16,
"memory": "32GB",
"storage": "320GB"
},
{
"name": "cx-52-2",
"location": "Helsinki",
"cpu": 16,
"memory": "32GB",
"storage": "320GB"
},
{
"name": "cx-52-3",
"location": "Helsinki",
"cpu": 16,
"memory": "32GB",
"storage": "320GB"
},
{
"name": "cx-52-4",
"location": "Helsinki",
"cpu": 16,
"memory": "32GB",
"storage": "320GB"
},
{
"name": "cx-52-5",
"location": "Helsinki",
"cpu": 16,
"memory": "32GB",
"storage": "320GB"
},
{
"name": "cx-52-6",
"location": "Helsinki",
"cpu": 16,
"memory": "32GB",
"storage": "320GB"
}
]

View File

@@ -1,12 +1,77 @@
import json
import os
import logging
from fastapi import FastAPI from fastapi import FastAPI
from database import init_db from database import init_db, insert_metal_node, insert_virtual_machine
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from routes import metal, vm, k8s, export, think from routes import metal, vm, k8s, export, think
from pydantic import BaseModel, ValidationError
class MetalNode(BaseModel):
name: str
location: str
vendor: str
cpu: int
memory: str
storage: str
time_on_duty: int
initial_cost: float
class VirtualMachine(BaseModel):
name: str
location: str
cpu: int
memory: str
storage: str
vm_type: str
app = FastAPI() app = FastAPI()
METAL_JSON = "data/metal.json"
VM_JSON = "data/vm.json"
logger = logging.getLogger("uvicorn")
@app.on_event("startup")
async def startup_event():
init_db() init_db()
if os.path.exists(METAL_JSON):
with open(METAL_JSON, "r") as file:
metal_nodes = json.load(file)
for node in metal_nodes:
try:
validated_node = MetalNode(**node)
insert_metal_node(
name=validated_node.name,
location=validated_node.location,
vendor=validated_node.vendor,
cpu=validated_node.cpu,
memory=validated_node.memory,
storage=validated_node.storage,
time_on_duty=validated_node.time_on_duty,
initial_cost=validated_node.initial_cost
)
except ValidationError as e:
logger.error(f"Invalid metal node data: {e}")
if os.path.exists(VM_JSON):
with open(VM_JSON, "r") as file:
vms = json.load(file)
for vm in vms:
try:
validated_vm = VirtualMachine(**vm)
insert_virtual_machine(
name=validated_vm.name,
location=validated_vm.location,
cpu=validated_vm.cpu,
memory=validated_vm.memory,
storage=validated_vm.storage,
vm_type=validated_vm.vm_type
)
except ValidationError as e:
logger.error(f"Invalid VM data: {e}")
# Include routes # Include routes
app.include_router(metal.router) app.include_router(metal.router)
app.include_router(vm.router) app.include_router(vm.router)