Skip to content

Commit

Permalink
small corrections in serializations and error handling #1 #2
Browse files Browse the repository at this point in the history
  • Loading branch information
hcwinsemius committed Jan 17, 2025
1 parent d090320 commit 3468c6d
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 75 deletions.
31 changes: 2 additions & 29 deletions dashboard/src/views/device.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 || '',
});
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -212,34 +213,6 @@ const Device = () => {
setMessageType("");
}}
/>

{/* <hr/> */}
{/* <table className='table table-striped table-bordered table-hover'> */}
{/* <thead> */}
{/* <tr> */}
{/* <th>Name</th> */}
{/* <th>OS</th> */}
{/* <th>Processor</th> */}
{/* <th>Memory [GB]</th> */}
{/* <th>Status</th> */}
{/* <th>Form status</th> */}
{/* <th>Version</th> */}
{/* <th>Message</th> */}
{/* </tr> */}
{/* </thead> */}
{/* <tbody> */}
{/* <tr key={device.id}> */}
{/* <td>{device.name}</td> */}
{/* <td>{device.operating_system}</td> */}
{/* <td>{device.processor}</td> */}
{/* <td>{device.memory}</td> */}
{/* <td>{device.status}</td> */}
{/* <td>{device.form_status}</td> */}
{/* <td>{device.nodeorc_version}</td> */}
{/* <td>{device.message}</td> */}
{/* </tr> */}
{/* </tbody> */}
{/* </table> */}
</div>

);
Expand Down
46 changes: 26 additions & 20 deletions dashboard/src/views/diskManagement.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const DiskManagement = () => {
home_folder: '',
min_free_space: '',
critical_space: '',
frequency: '',
frequency: ''
});

const fetchDiskManagement = async () => {
Expand Down Expand Up @@ -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}`);
}
Expand All @@ -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);
Expand All @@ -77,6 +82,15 @@ const DiskManagement = () => {
return (
<div className='container'>
Change your disk management settings.
<Message
message={message}
messageType={messageType}
clearMessage={() => {
setMessage("");
setMessageType("");
}}
/>

<hr/>
<form onSubmit={handleFormSubmit}>
<div className='mb-3 mt-3'>
Expand Down Expand Up @@ -121,14 +135,6 @@ const DiskManagement = () => {
</div>

</form>
<Message
message={message}
messageType={messageType}
clearMessage={() => {
setMessage("");
setMessageType("");
}}
/>
</div>

);
Expand Down
12 changes: 7 additions & 5 deletions dashboard/src/views/waterLevel.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
Expand Down Expand Up @@ -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!");
Expand All @@ -85,6 +86,7 @@ const WaterLevel = () => {
script: ''
});
} catch (err) {
console.log(err);
setMessage(err.response.data);
setMessageType("error")
}
Expand Down
35 changes: 19 additions & 16 deletions nodeorc_api/routers/water_level.py
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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)
10 changes: 5 additions & 5 deletions nodeorc_api/schemas/water_level.py
Original file line number Diff line number Diff line change
Expand Up @@ -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, <value>'")
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, <value>'")


class WaterLevelResponse(WaterLevelBase):
Expand Down

0 comments on commit 3468c6d

Please sign in to comment.