mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-06 17:15:38 -08:00
@@ -58,6 +58,7 @@ http://<server>:<GRAPHQL_PORT>/
|
|||||||
* [Devices Collection](API_DEVICES.md) – Bulk operations on multiple devices
|
* [Devices Collection](API_DEVICES.md) – Bulk operations on multiple devices
|
||||||
* [Events](API_EVENTS.md) – Device event logging and management
|
* [Events](API_EVENTS.md) – Device event logging and management
|
||||||
* [Sessions](API_SESSIONS.md) – Connection sessions and history
|
* [Sessions](API_SESSIONS.md) – Connection sessions and history
|
||||||
|
* [Settings](API_SETTINGS.md) – Settings
|
||||||
* [Metrics](API_METRICS.md) – Prometheus metrics and per-device status
|
* [Metrics](API_METRICS.md) – Prometheus metrics and per-device status
|
||||||
* [Network Tools](API_NETTOOLS.md) – Utilities like Wake-on-LAN, traceroute, nslookup, nmap, and internet info
|
* [Network Tools](API_NETTOOLS.md) – Utilities like Wake-on-LAN, traceroute, nslookup, nmap, and internet info
|
||||||
* [Online History](API_ONLINEHISTORY.md) – Online/offline device records
|
* [Online History](API_ONLINEHISTORY.md) – Online/offline device records
|
||||||
|
|||||||
@@ -55,6 +55,18 @@ SELECT * FROM Devices;
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/dbquery/read" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"rawSql": "U0VMRUNUICogRlJPTSBERVZJQ0VT"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 2. `POST /dbquery/update` (safer than `/dbquery/write`)
|
### 2. `POST /dbquery/update` (safer than `/dbquery/write`)
|
||||||
@@ -79,6 +91,22 @@ Update rows in a table by `columnName` + `id`. `/dbquery/update` is parameterize
|
|||||||
{ "success": true, "updated_count": 1 }
|
{ "success": true, "updated_count": 1 }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/dbquery/update" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"columnName": "devMac",
|
||||||
|
"id": ["AA:BB:CC:DD:EE:FF"],
|
||||||
|
"dbtable": "Devices",
|
||||||
|
"columns": ["devName", "devOwner"],
|
||||||
|
"values": ["Laptop", "Alice"]
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 3. `POST /dbquery/write`
|
### 3. `POST /dbquery/write`
|
||||||
@@ -91,7 +119,6 @@ Execute a **write query** (`INSERT`, `UPDATE`, `DELETE`).
|
|||||||
{
|
{
|
||||||
"rawSql": "SU5TRVJUIElOVE8gRGV2aWNlcyAoZGV2TWFjLCBkZXYgTmFtZSwgZGV2Rmlyc3RDb25uZWN0aW9uLCBkZXZMYXN0Q29ubmVjdGlvbiwgZGV2TGFzdElQKSBWQUxVRVMgKCc2QTpCQjo0Qzo1RDo2RTonLCAnVGVzdERldmljZScsICcyMDI1LTA4LTMwIDEyOjAwOjAwJywgJzIwMjUtMDgtMzAgMTI6MDA6MDAnLCAnMTAuMC4wLjEwJyk="
|
"rawSql": "SU5TRVJUIElOVE8gRGV2aWNlcyAoZGV2TWFjLCBkZXYgTmFtZSwgZGV2Rmlyc3RDb25uZWN0aW9uLCBkZXZMYXN0Q29ubmVjdGlvbiwgZGV2TGFzdElQKSBWQUxVRVMgKCc2QTpCQjo0Qzo1RDo2RTonLCAnVGVzdERldmljZScsICcyMDI1LTA4LTMwIDEyOjAwOjAwJywgJzIwMjUtMDgtMzAgMTI6MDA6MDAnLCAnMTAuMC4wLjEwJyk="
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Decoded SQL:
|
Decoded SQL:
|
||||||
@@ -99,7 +126,6 @@ Decoded SQL:
|
|||||||
```sql
|
```sql
|
||||||
INSERT INTO Devices (devMac, devName, devFirstConnection, devLastConnection, devLastIP)
|
INSERT INTO Devices (devMac, devName, devFirstConnection, devLastConnection, devLastIP)
|
||||||
VALUES ('6A:BB:4C:5D:6E', 'TestDevice', '2025-08-30 12:00:00', '2025-08-30 12:00:00', '10.0.0.10');
|
VALUES ('6A:BB:4C:5D:6E', 'TestDevice', '2025-08-30 12:00:00', '2025-08-30 12:00:00', '10.0.0.10');
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Response
|
#### Response
|
||||||
@@ -108,6 +134,17 @@ VALUES ('6A:BB:4C:5D:6E', 'TestDevice', '2025-08-30 12:00:00', '2025-08-30 12:00
|
|||||||
{ "success": true, "affected_rows": 1 }
|
{ "success": true, "affected_rows": 1 }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/dbquery/write" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"rawSql": "SU5TRVJUIElOVE8gRGV2aWNlcyAoZGV2TWFjLCBkZXYgTmFtZSwgZGV2Rmlyc3RDb25uZWN0aW9uLCBkZXZMYXN0Q29ubmVjdGlvbiwgZGV2TGFzdElQKSBWQUxVRVMgKCc2QTpCQjo0Qzo1RDo2RTonLCAnVGVzdERldmljZScsICcyMDI1LTA4LTMwIDEyOjAwOjAwJywgJzIwMjUtMDgtMzAgMTI6MDA6MDAnLCAnMTAuMC4wLjEwJyk="
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -131,11 +168,16 @@ Delete rows in a table by `columnName` + `id`.
|
|||||||
{ "success": true, "deleted_count": 1 }
|
{ "success": true, "deleted_count": 1 }
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
#### `curl` Example
|
||||||
|
|
||||||
## Notes & Best Practices
|
```bash
|
||||||
|
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/dbquery/delete" \
|
||||||
* All queries must be **base64 encoded** when passed as `rawSql`.
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
* `update` and `delete` endpoints use **structured parameters** to prevent SQL injection.
|
-H "Accept: application/json" \
|
||||||
* Avoid large or complex queries in `read` — paginate results instead.
|
-H "Content-Type: application/json" \
|
||||||
* Always validate queries in a safe environment before running them via API.
|
-d '{
|
||||||
|
"columnName": "devMac",
|
||||||
|
"id": ["AA:BB:CC:DD:EE:FF"],
|
||||||
|
"dbtable": "Devices"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|||||||
@@ -28,6 +28,24 @@ Track and manage device connection sessions. Sessions record when a device conne
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/sessions/create" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"mac": "AA:BB:CC:DD:EE:FF",
|
||||||
|
"ip": "192.168.1.10",
|
||||||
|
"start_time": "2025-08-01T10:00:00",
|
||||||
|
"end_time": "2025-08-01T12:00:00",
|
||||||
|
"event_type_conn": "Connected",
|
||||||
|
"event_type_disc": "Disconnected"
|
||||||
|
}'
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Delete Sessions
|
### Delete Sessions
|
||||||
@@ -51,6 +69,18 @@ Track and manage device connection sessions. Sessions record when a device conne
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X DELETE "http://<server_ip>:<GRAPHQL_PORT>/sessions/delete" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"mac": "AA:BB:CC:DD:EE:FF"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### List Sessions
|
### List Sessions
|
||||||
@@ -86,7 +116,13 @@ Track and manage device connection sessions. Sessions record when a device conne
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X GET "http://<server_ip>:<GRAPHQL_PORT>/sessions/list?mac=AA:BB:CC:DD:EE:FF&start_date=2025-08-01&end_date=2025-08-21" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json"
|
||||||
|
```
|
||||||
---
|
---
|
||||||
|
|
||||||
### Calendar View of Sessions
|
### Calendar View of Sessions
|
||||||
@@ -123,6 +159,14 @@ Track and manage device connection sessions. Sessions record when a device conne
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X GET "http://<server_ip>:<GRAPHQL_PORT>/sessions/calendar?start=2025-08-01&end=2025-08-21" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json"
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Device Sessions
|
### Device Sessions
|
||||||
@@ -158,6 +202,14 @@ Track and manage device connection sessions. Sessions record when a device conne
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X GET "http://<server_ip>:<GRAPHQL_PORT>/sessions/AA:BB:CC:DD:EE:FF?period=7%20days" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json"
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Session Events Summary
|
### Session Events Summary
|
||||||
@@ -179,3 +231,10 @@ Track and manage device connection sessions. Sessions record when a device conne
|
|||||||
**Response:**
|
**Response:**
|
||||||
Returns a list of events or sessions with formatted connection, disconnection, duration, and IP information.
|
Returns a list of events or sessions with formatted connection, disconnection, duration, and IP information.
|
||||||
|
|
||||||
|
#### `curl` Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X GET "http://<server_ip>:<GRAPHQL_PORT>/sessions/session-events?type=all&period=7%20days" \
|
||||||
|
-H "Authorization: Bearer <API_TOKEN>" \
|
||||||
|
-H "Accept: application/json"
|
||||||
|
```
|
||||||
92
docs/API_SETTINGS.md
Executable file
92
docs/API_SETTINGS.md
Executable file
@@ -0,0 +1,92 @@
|
|||||||
|
# Settings API Endpoints
|
||||||
|
|
||||||
|
Retrieve application settings stored in the configuration system. This endpoint is useful for quickly fetching individual settings such as `API_TOKEN` or `TIMEZONE`.
|
||||||
|
|
||||||
|
For bulk or structured access (all settings, schema details, or filtering), use the [GraphQL API Endpoint](API_GRAPHQL.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Get a Setting
|
||||||
|
|
||||||
|
* **GET** `/settings/<key>` → Retrieve the value of a specific setting
|
||||||
|
|
||||||
|
**Path Parameter:**
|
||||||
|
|
||||||
|
* `key` → The setting key to retrieve (e.g., `API_TOKEN`, `TIMEZONE`)
|
||||||
|
|
||||||
|
**Authorization:**
|
||||||
|
Requires a valid API token in the `Authorization` header.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `curl` Example (Success)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl 'http://<server_ip>:<GRAPHQL_PORT>/settings/API_TOKEN' \
|
||||||
|
-H 'Authorization: Bearer <API_TOKEN>' \
|
||||||
|
-H 'Accept: application/json'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Response:**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"value": "my-secret-token"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `curl` Example (Invalid Key)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl 'http://<server_ip>:<GRAPHQL_PORT>/settings/DOES_NOT_EXIST' \
|
||||||
|
-H 'Authorization: Bearer <API_TOKEN>' \
|
||||||
|
-H 'Accept: application/json'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Response:**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `curl` Example (Unauthorized)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl 'http://<server_ip>:<GRAPHQL_PORT>/settings/API_TOKEN' \
|
||||||
|
-H 'Accept: application/json'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Response:**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"error": "Forbidden"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
* This endpoint is optimized for **direct retrieval of a single setting**.
|
||||||
|
* For **complex retrieval scenarios** (listing all settings, retrieving schema metadata like `setName`, `setDescription`, `setType`, or checking if a setting is overridden by environment variables), use the **GraphQL Settings Query**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl 'http://<server_ip>:<GRAPHQL_PORT>/graphql' \
|
||||||
|
-X POST \
|
||||||
|
-H 'Authorization: Bearer <API_TOKEN>' \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
--data '{
|
||||||
|
"query": "query GetSettings { settings { settings { setKey setName setDescription setType setOptions setGroup setValue setEvents setOverriddenByEnv } count } }"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [GraphQL API Endpoint](API_GRAPHQL.md) for more details.
|
||||||
@@ -130,15 +130,5 @@ Most code changes can be tested without rebuilding the container. When working o
|
|||||||
- Plugin functionality.
|
- Plugin functionality.
|
||||||
- Error log inspection.
|
- Error log inspection.
|
||||||
|
|
||||||
### Unit Tests
|
> [!NOTE]
|
||||||
|
> Always run all available tests as per the [Testing documentation](API_TESTS.md).
|
||||||
>[!WARNING]
|
|
||||||
> Please note these test modify data in the database.
|
|
||||||
|
|
||||||
1. See the `/test` directory for available test cases. These are not exhaustive but cover the main API endpoints.
|
|
||||||
2. To run a test case, SSH into the container:
|
|
||||||
`sudo docker exec -it netalertx /bin/bash`
|
|
||||||
3. Inside the container, install pytest (if not already installed):
|
|
||||||
`pip install pytest`
|
|
||||||
4. Run a specific test case:
|
|
||||||
`pytest /app/test/TESTFILE.py`
|
|
||||||
@@ -79,10 +79,10 @@ nav:
|
|||||||
- Icon and Type guessing: DEVICE_HEURISTICS.md
|
- Icon and Type guessing: DEVICE_HEURISTICS.md
|
||||||
- API:
|
- API:
|
||||||
- Overview: API.md
|
- Overview: API.md
|
||||||
- OLD API Overview: API_OLD.md
|
|
||||||
- Devices Collection: API_DEVICES.md
|
- Devices Collection: API_DEVICES.md
|
||||||
- Device: API_DEVICE.md
|
- Device: API_DEVICE.md
|
||||||
- Sessions: API_SESSIONS.md
|
- Sessions: API_SESSIONS.md
|
||||||
|
- Settings: API_SETTINGS.md
|
||||||
- Events: API_EVENTS.md
|
- Events: API_EVENTS.md
|
||||||
- Metrics: API_METRICS.md
|
- Metrics: API_METRICS.md
|
||||||
- Net Tools: API_NETTOOLS.md
|
- Net Tools: API_NETTOOLS.md
|
||||||
@@ -91,6 +91,7 @@ nav:
|
|||||||
- GraphQL: API_GRAPHQL.md
|
- GraphQL: API_GRAPHQL.md
|
||||||
- DB query: API_DBQUERY.md
|
- DB query: API_DBQUERY.md
|
||||||
- Tests: API_TESTS.md
|
- Tests: API_TESTS.md
|
||||||
|
- SUPERSEDED OLD API Overview: API_OLD.md
|
||||||
- Integrations:
|
- Integrations:
|
||||||
- Webhook Secret: WEBHOOK_SECRET.md
|
- Webhook Secret: WEBHOOK_SECRET.md
|
||||||
- Helper scripts: HELPER_SCRIPTS.md
|
- Helper scripts: HELPER_SCRIPTS.md
|
||||||
|
|||||||
Reference in New Issue
Block a user