diff --git a/dashboard/src/views/device.jsx b/dashboard/src/views/device.jsx index b29e10b..cddda15 100644 --- a/dashboard/src/views/device.jsx +++ b/dashboard/src/views/device.jsx @@ -65,7 +65,7 @@ const Device = () => { processor: device.processor || '', memory: device.memory || '', status: device.status, - form_status: device.form_status || '', + form_status: device.form_status, nodeorc_version: device.nodeorc_version || '', message: device.message || '', }); @@ -98,6 +98,7 @@ const Device = () => { const handleFormSubmit = async (event) => { try { event.preventDefault(); + console.log(formData); const response = await api.post('/device/', formData); if (!response.status === 200) { const errorData = await response.json() @@ -212,34 +213,6 @@ const Device = () => { setMessageType(""); }} /> - -{/*
*/} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/* */} -{/*
NameOSProcessorMemory [GB]StatusForm statusVersionMessage
{device.name}{device.operating_system}{device.processor}{device.memory}{device.status}{device.form_status}{device.nodeorc_version}{device.message}
*/} ); diff --git a/dashboard/src/views/diskManagement.jsx b/dashboard/src/views/diskManagement.jsx index 9f4a6c9..5a9ab10 100644 --- a/dashboard/src/views/diskManagement.jsx +++ b/dashboard/src/views/diskManagement.jsx @@ -12,7 +12,7 @@ const DiskManagement = () => { home_folder: '', min_free_space: '', critical_space: '', - frequency: '', + frequency: '' }); const fetchDiskManagement = async () => { @@ -46,11 +46,19 @@ const DiskManagement = () => { }; const handleFormSubmit = async (event) => { event.preventDefault(); + console.log(formData); + // Dynamically filter only fields with non-empty values + const filteredData = Object.fromEntries( + Object.entries(formData).filter(([key, value]) => value !== '' && value !== null) + ); + + console.log(filteredData); // get rid of created_at field as this must be autocompleted try { - delete formData.created_at; - const response = await api.post('/disk_management/', formData); - if (response.status === 500) { + delete filteredData.created_at; + const response = await api.post('/disk_management/', filteredData); + console.log(response); + if (!response.status === 200) { const errorData = await response.json() throw new Error(errorData.message || `Invalid form data. Status Code: ${response.status}`); } @@ -60,14 +68,11 @@ const DiskManagement = () => { fetchDiskManagement(); // set the form data to new device settings setFormData({ - name: '', - operating_system: '', - processor: '', - memory: '', - status: '', - form_status: '', - nodeorc_version: '', - message: '' + created_at: '', + home_folder: '', + min_free_space: '', + critical_space: '', + frequency: '', }); } catch (err) { setMessage(err.response.data); @@ -77,6 +82,15 @@ const DiskManagement = () => { return (
Change your disk management settings. + { + setMessage(""); + setMessageType(""); + }} + /> +
@@ -121,14 +135,6 @@ const DiskManagement = () => {
- { - setMessage(""); - setMessageType(""); - }} - />
); diff --git a/dashboard/src/views/waterLevel.jsx b/dashboard/src/views/waterLevel.jsx index 62d5a36..674bd57 100644 --- a/dashboard/src/views/waterLevel.jsx +++ b/dashboard/src/views/waterLevel.jsx @@ -30,11 +30,11 @@ const WaterLevel = () => { } setFormData({ created_at: waterLevel.created_at || '', - datetime_fmt: waterLevel.datetime_fmt || '', - file_template: waterLevel.file_template || '', - frequency: waterLevel.frequency || '', - script_type: waterLevel.script_type || '', - script: waterLevel.script || '' + datetime_fmt: waterLevel.datetime_fmt, + file_template: waterLevel.file_template, + frequency: waterLevel.frequency || null, + script_type: waterLevel.script_type || null, + script: waterLevel.script }); } }, [waterLevel]); @@ -69,6 +69,7 @@ const WaterLevel = () => { const response = await api.post('/water_level/', formData); if (response.status === 500) { const errorData = await response.json() + console.log(response); throw new Error(errorData.message || `Invalid form data. Status Code: ${response.status}`); } setMessage("Water level settings updated successfully!"); @@ -85,6 +86,7 @@ const WaterLevel = () => { script: '' }); } catch (err) { + console.log(err); setMessage(err.response.data); setMessageType("error") } diff --git a/nodeorc_api/routers/water_level.py b/nodeorc_api/routers/water_level.py index 19e0c29..8c12525 100644 --- a/nodeorc_api/routers/water_level.py +++ b/nodeorc_api/routers/water_level.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter, Depends +from fastapi import APIRouter, Depends, Response from nodeorc.db import Session, WaterLevelSettings from typing import List, Union @@ -17,18 +17,21 @@ async def get_device(db: Session = Depends(get_db)): @router.post("/", response_model=WaterLevelResponse, status_code=201, description="Update water level configuration") async def update_device(water_level_settings: WaterLevelCreate, db: Session = Depends(get_db)): # Check if there is already a device - existing_wl_settings = crud.water_level.get(db) - if existing_wl_settings: - # Update the existing record's fields - for key, value in water_level_settings.model_dump(exclude_none=True).items(): - setattr(existing_wl_settings, key, value) - db.commit() - db.refresh(existing_wl_settings) # Refresh to get the updated fields - return existing_wl_settings - else: - # Create a new device record if none exists - new_wl_settings = WaterLevelSettings(**water_level_settings.model_dump(exclude_none=True, exclude={"id"})) - db.add(new_wl_settings) - db.commit() - db.refresh(new_wl_settings) - return new_wl_settings + try: + existing_wl_settings = crud.water_level.get(db) + if existing_wl_settings: + # Update the existing record's fields + for key, value in water_level_settings.model_dump(exclude_none=True).items(): + setattr(existing_wl_settings, key, value) + db.commit() + db.refresh(existing_wl_settings) # Refresh to get the updated fields + return existing_wl_settings + else: + # Create a new device record if none exists + new_wl_settings = WaterLevelSettings(**water_level_settings.model_dump(exclude_none=True, exclude={"id"})) + db.add(new_wl_settings) + db.commit() + db.refresh(new_wl_settings) + return new_wl_settings + except Exception as e: + return Response(f"Error: {e}", status_code=500) diff --git a/nodeorc_api/schemas/water_level.py b/nodeorc_api/schemas/water_level.py index 7e088c7..58b2273 100644 --- a/nodeorc_api/schemas/water_level.py +++ b/nodeorc_api/schemas/water_level.py @@ -7,11 +7,11 @@ # Pydantic model for responses class WaterLevelBase(BaseModel): - datetime_fmt: str = Field(description="Datestring format used in files containing water level data.") - file_template: str = Field(description="File name template for water level data files. May contain {%Y%m%d} to accomodate several files for different dates.") - frequency: float = Field(description="Frequency [s] for checking for new water levels using the script.") - script_type: ScriptType = Field(description="Script type provided for checking water levels. Can be 'python' or 'bash'.") - script: str = Field(description="Content of the script to be executed to retrieve water levels. Script must print a water level value to screen (stdout) in the form '%Y-%m-%dT%H:%M:%SZ, '") + datetime_fmt: Optional[str] = Field(default=None, description="Datestring format used in files containing water level data.") + file_template: Optional[str] = Field(default=None, description="File name template for water level data files. May contain {%Y%m%d} to accomodate several files for different dates.") + frequency: Optional[float] = Field(default=None, description="Frequency [s] for checking for new water levels using the script.") + script_type: Optional[ScriptType] = Field(default=None, description="Script type provided for checking water levels. Can be 'python' or 'bash'.") + script: Optional[str] = Field(default=None, description="Content of the script to be executed to retrieve water levels. Script must print a water level value to screen (stdout) in the form '%Y-%m-%dT%H:%M:%SZ, '") class WaterLevelResponse(WaterLevelBase):