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("");
}}
/>
-
-{/*
*/}
-{/* */}
-{/* */}
-{/* */}
-{/* Name | */}
-{/* OS | */}
-{/* Processor | */}
-{/* Memory [GB] | */}
-{/* Status | */}
-{/* Form status | */}
-{/* Version | */}
-{/* Message | */}
-{/*
*/}
-{/* */}
-{/* */}
-{/* */}
-{/* {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("");
+ }}
+ />
+
- {
- 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):