gulp-cli 1.1.8__tar.gz → 1.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gulp_cli-1.1.8/src/gulp_cli.egg-info → gulp_cli-1.1.10}/PKG-INFO +2 -2
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/README.md +1 -1
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/command-reference.md +6 -60
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/examples.md +5 -10
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/getting-started.md +3 -3
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/resource-management.md +0 -52
- gulp_cli-1.1.10/docs/stdout-markers.md +125 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/_version.py +3 -3
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/ingest.py +256 -211
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/plugin.py +0 -68
- {gulp_cli-1.1.8 → gulp_cli-1.1.10/src/gulp_cli.egg-info}/PKG-INFO +2 -2
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/SOURCES.txt +1 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/scm_file_list.json +1 -0
- gulp_cli-1.1.10/src/gulp_cli.egg-info/scm_version.json +8 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_ingest_paths_file.py +37 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_ingest_wait_log.py +87 -11
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_zip_create.py +26 -0
- gulp_cli-1.1.8/src/gulp_cli.egg-info/scm_version.json +0 -8
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/.github/workflows/portable-bundles.yml +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/.github/workflows/python-package.yml +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/.gitignore +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/GULP_DUAL_LICENSE.txt +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/LICENSE.AGPL-3.0.txt +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/LICENSE.md +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/extensions.md +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/portable.md +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/docs/troubleshooting-cli.md +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/gulp-cli.spec +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/portable/launch-linux.sh +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/portable/launch-macos.sh +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/portable/launch-windows.bat +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/pyproject.toml +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/setup.cfg +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/__init__.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/__main__.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/cli.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/client.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/__init__.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/acl.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/auth.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/collab.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/context.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/db.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/enhance_map.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/enrich.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/glyph.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/mapping.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/operations.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/query.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/source.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/stats.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/storage.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/user_group.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/users.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/commands/utility.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/config.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extension/__init__.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extension/query_sigma_zip.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extension/story.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extension_helpers.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/extensions.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/output.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/utils.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli/version.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/dependency_links.txt +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/entry_points.txt +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/requires.txt +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/src/gulp_cli.egg-info/top_level.txt +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_enrich_live.py +0 -0
- {gulp_cli-1.1.8 → gulp_cli-1.1.10}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gulp-cli
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.10
|
|
4
4
|
Summary: Command-line client for gULP
|
|
5
5
|
Author-email: Mentat <info@mentat.is>
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -22,7 +22,7 @@ Dynamic: license-file
|
|
|
22
22
|
## ✨ What can you do?
|
|
23
23
|
|
|
24
24
|
- 🔐 **Authentication** — secure login with token persistence
|
|
25
|
-
- 📥 **Ingestion** — ingest files (single/batch/wildcard),
|
|
25
|
+
- 📥 **Ingestion** — ingest files (single/batch/wildcard), optionally compressed before upload, with concurrent uploads
|
|
26
26
|
- 🔍 **Querying** — raw OpenSearch queries, Sigma rules, external plugins
|
|
27
27
|
- 🏷️ **Enrichment** — enrich documents, tag/untag, update fields
|
|
28
28
|
- 👥 **User Management** — create users, manage permissions (admin only)
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## ✨ What can you do?
|
|
6
6
|
|
|
7
7
|
- 🔐 **Authentication** — secure login with token persistence
|
|
8
|
-
- 📥 **Ingestion** — ingest files (single/batch/wildcard),
|
|
8
|
+
- 📥 **Ingestion** — ingest files (single/batch/wildcard), optionally compressed before upload, with concurrent uploads
|
|
9
9
|
- 🔍 **Querying** — raw OpenSearch queries, Sigma rules, external plugins
|
|
10
10
|
- 🏷️ **Enrichment** — enrich documents, tag/untag, update fields
|
|
11
11
|
- 👥 **User Management** — create users, manage permissions (admin only)
|
|
@@ -461,7 +461,7 @@ gulp-cli ingest file OPERATION_ID PLUGIN [FILE...] [OPTIONS]
|
|
|
461
461
|
**Options:**
|
|
462
462
|
|
|
463
463
|
- `--context TEXT` — Context for ingestion, specify a name to create a new context if it doesn't exist, or an existing `context_id` (default: `sdk_context`)
|
|
464
|
-
- `--plugin-params TEXT` — JSON string with plugin parameters
|
|
464
|
+
- `--plugin-params TEXT` — JSON string with plugin parameters. When it includes `"compressed": true`, gulp-cli bzip2-compresses each input file before upload and the backend decompresses it before plugin ingestion.
|
|
465
465
|
- `--flt TEXT` — JSON object for `GulpIngestionFilter`
|
|
466
466
|
- `--paths-file PATH` — Text file with one file or glob pattern per line. When set, positional `FILE` arguments are optional and ignored if also provided.
|
|
467
467
|
- `--reset-operation` — Delete and recreate the operation before ingest starts
|
|
@@ -493,6 +493,9 @@ gulp-cli ingest file my_op win_evtx --paths-file /tmp/file_paths.txt
|
|
|
493
493
|
# With plugin parameters
|
|
494
494
|
gulp-cli ingest file my_op csv file.csv --plugin-params '{"delimiter":";","encoding":"utf-8"}'
|
|
495
495
|
|
|
496
|
+
# Compress before upload and let the backend decompress before ingestion
|
|
497
|
+
gulp-cli ingest file my_op win_evtx /path/to/System.evtx --plugin-params '{"compressed": true}'
|
|
498
|
+
|
|
496
499
|
# Preview mode (no ingestion persisted)
|
|
497
500
|
gulp-cli ingest file my_op win_evtx /path/to/System.evtx --preview
|
|
498
501
|
|
|
@@ -521,7 +524,7 @@ gulp-cli ingest file-to-source SOURCE_ID [FILE...] [OPTIONS]
|
|
|
521
524
|
**Options:**
|
|
522
525
|
|
|
523
526
|
- `--plugin TEXT` — Override the plugin associated with the source (requires `--plugin-params`)
|
|
524
|
-
- `--plugin-params TEXT` — JSON object for plugin_params (overrides source defaults; required when `--plugin` is set, `{}` is allowed)
|
|
527
|
+
- `--plugin-params TEXT` — JSON object for plugin_params (overrides source defaults; required when `--plugin` is set, `{}` is allowed). When it includes `"compressed": true`, gulp-cli bzip2-compresses each input file before upload and the backend decompresses it before plugin ingestion.
|
|
525
528
|
- `--flt TEXT` — JSON object for GulpIngestionFilter
|
|
526
529
|
- `--paths-file PATH` — Text file with one file or glob pattern per line. When set, positional `FILE` arguments are optional and ignored if also provided.
|
|
527
530
|
- `--wait` — Wait for completion with progress
|
|
@@ -536,38 +539,7 @@ gulp-cli ingest file-to-source source123 /new/System.evtx --wait
|
|
|
536
539
|
gulp-cli ingest file-to-source source123 '/new/*.evtx'
|
|
537
540
|
gulp-cli ingest file-to-source source123 --paths-file /tmp/file_paths.txt
|
|
538
541
|
gulp-cli ingest file-to-source source123 /new/events.json --plugin json --plugin-params '{"mapping_parameters": {}}'
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
---
|
|
542
|
-
|
|
543
|
-
#### `zip`
|
|
544
|
-
|
|
545
|
-
Ingest from a ZIP archive.
|
|
546
|
-
|
|
547
|
-
> TO BE DEPRECATED...
|
|
548
|
-
|
|
549
|
-
```bash
|
|
550
|
-
gulp-cli ingest zip OPERATION_ID ZIP_FILE [OPTIONS]
|
|
551
|
-
```
|
|
552
|
-
|
|
553
|
-
**Arguments:**
|
|
554
|
-
|
|
555
|
-
- `OPERATION_ID` — Target operation
|
|
556
|
-
- `ZIP_FILE` — Path to ZIP file containing a `metadata.json` in the root, describing the content as specified in gulp's `ingest_zip` docs.
|
|
557
|
-
|
|
558
|
-
**Options:**
|
|
559
|
-
|
|
560
|
-
- `--context TEXT` — Context for ingestion, specify a name to create a new context if it doesn't exist, or an existing `context_id` (default: `sdk_context`)
|
|
561
|
-
- `--flt TEXT` — JSON object for `GulpIngestionFilter`
|
|
562
|
-
- `--create-operation` — Create operation automatically when it does not exist
|
|
563
|
-
- `--wait` — Wait for completion
|
|
564
|
-
- `--timeout INTEGER` — Timeout in seconds for `--wait` mode
|
|
565
|
-
|
|
566
|
-
**Examples:**
|
|
567
|
-
|
|
568
|
-
```bash
|
|
569
|
-
gulp-cli ingest zip my_op /data/evidence.zip --wait
|
|
570
|
-
gulp-cli ingest zip my_op /data/evidence.zip --create-operation
|
|
542
|
+
gulp-cli ingest file-to-source source123 /new/System.evtx --plugin win_evtx --plugin-params '{"compressed": true}'
|
|
571
543
|
```
|
|
572
544
|
|
|
573
545
|
---
|
|
@@ -2330,32 +2302,6 @@ gulp-cli plugin list-ui [OPTIONS]
|
|
|
2330
2302
|
|
|
2331
2303
|
---
|
|
2332
2304
|
|
|
2333
|
-
#### `plugin upload`
|
|
2334
|
-
|
|
2335
|
-
Upload a new plugin.
|
|
2336
|
-
|
|
2337
|
-
```bash
|
|
2338
|
-
gulp-cli plugin upload PLUGIN_FILE [OPTIONS]
|
|
2339
|
-
```
|
|
2340
|
-
|
|
2341
|
-
#### `plugin download`
|
|
2342
|
-
|
|
2343
|
-
Download a plugin.
|
|
2344
|
-
|
|
2345
|
-
```bash
|
|
2346
|
-
gulp-cli plugin download FILENAME OUTPUT_PATH [OPTIONS]
|
|
2347
|
-
```
|
|
2348
|
-
|
|
2349
|
-
#### `plugin delete`
|
|
2350
|
-
|
|
2351
|
-
Delete a plugin.
|
|
2352
|
-
|
|
2353
|
-
```bash
|
|
2354
|
-
gulp-cli plugin delete FILENAME [OPTIONS]
|
|
2355
|
-
```
|
|
2356
|
-
|
|
2357
|
-
---
|
|
2358
|
-
|
|
2359
2305
|
#### `mapping list`
|
|
2360
2306
|
|
|
2361
2307
|
List all mapping files.
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- [CSV Data Ingestion with Custom Parameters](#csv-data-ingestion-with-custom-parameters)
|
|
9
9
|
- [JSON Logs Ingestion](#json-logs-ingestion)
|
|
10
10
|
- [Add More Evidence to Existing Source](#add-more-evidence-to-existing-source)
|
|
11
|
-
- [
|
|
11
|
+
- [Compressed File Ingestion](#compressed-file-ingestion)
|
|
12
12
|
- [Create ZIP Archive from Paths and Masks](#create-zip-archive-from-paths-and-masks)
|
|
13
13
|
- [Raw Payload Ingestion](#raw-payload-ingestion)
|
|
14
14
|
- [Request Stats Monitoring Workflows](#request-stats-monitoring-workflows)
|
|
@@ -205,14 +205,12 @@ gulp-cli ingest file-to-source data-2026-001 /additional/evidence.evtx --wait
|
|
|
205
205
|
gulp-cli ingest file-to-source data-2026-001 '/additional/*.evtx' --wait
|
|
206
206
|
```
|
|
207
207
|
|
|
208
|
-
###
|
|
208
|
+
### Compressed File Ingestion
|
|
209
209
|
|
|
210
210
|
```bash
|
|
211
|
-
#
|
|
212
|
-
gulp-cli ingest
|
|
213
|
-
|
|
214
|
-
# Auto-create operation when missing
|
|
215
|
-
gulp-cli ingest zip incident-001 /evidence/evidence.zip --create-operation
|
|
211
|
+
# Compress files with bzip2 before upload; the backend decompresses before ingestion
|
|
212
|
+
gulp-cli ingest file incident-001 win_evtx /evidence/System.evtx \
|
|
213
|
+
--plugin-params '{"compressed": true}' --wait
|
|
216
214
|
```
|
|
217
215
|
|
|
218
216
|
### Create ZIP Archive from Paths and Masks
|
|
@@ -233,9 +231,6 @@ $CASE_ROOT/linux/**/*.log
|
|
|
233
231
|
EOF
|
|
234
232
|
|
|
235
233
|
gulp-cli ingest zip-create '$CASE_ROOT/evidence.zip' --paths-file /tmp/evidence_paths.txt --overwrite
|
|
236
|
-
|
|
237
|
-
# Then ingest the generated ZIP
|
|
238
|
-
gulp-cli ingest zip incident-001 '$CASE_ROOT/evidence.zip' --wait
|
|
239
234
|
```
|
|
240
235
|
|
|
241
236
|
### Raw Payload Ingestion
|
|
@@ -207,11 +207,11 @@ This shows a real-time progress bar while documents are being ingested. Per-file
|
|
|
207
207
|
gulp-cli ingest file-to-source existing-source-id /gulp/samples/win_evtx/Security.evtx --wait
|
|
208
208
|
```
|
|
209
209
|
|
|
210
|
-
###
|
|
210
|
+
### Compressed / Raw Data
|
|
211
211
|
|
|
212
212
|
```bash
|
|
213
|
-
#
|
|
214
|
-
gulp-cli ingest
|
|
213
|
+
# Compress locally with bzip2 before upload; the backend decompresses before ingestion
|
|
214
|
+
gulp-cli ingest file my_investigation win_evtx /path/to/System.evtx --plugin-params '{"compressed": true}' --wait
|
|
215
215
|
|
|
216
216
|
# Raw payload ingestion from a file
|
|
217
217
|
gulp-cli ingest raw my_investigation --data-file /tmp/raw_chunk.json --last --wait
|
|
@@ -196,58 +196,6 @@ List available UI plugins:
|
|
|
196
196
|
gulp plugin list-ui
|
|
197
197
|
```
|
|
198
198
|
|
|
199
|
-
### Upload Plugin
|
|
200
|
-
|
|
201
|
-
Upload a custom plugin:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
# Upload as default plugin
|
|
205
|
-
gulp plugin upload /path/to/my_plugin.py
|
|
206
|
-
|
|
207
|
-
# Upload as extension plugin
|
|
208
|
-
gulp plugin upload /path/to/my_extension.py --type extension
|
|
209
|
-
|
|
210
|
-
# Upload as UI plugin
|
|
211
|
-
gulp plugin upload /path/to/my_ui_plugin.py --type ui
|
|
212
|
-
|
|
213
|
-
# Fail if already exists
|
|
214
|
-
gulp plugin upload /path/to/my_plugin.py --fail-if-exists
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
Response includes the file path where the plugin was saved on the server.
|
|
218
|
-
|
|
219
|
-
### Download Plugin
|
|
220
|
-
|
|
221
|
-
Download a plugin from the server:
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
# Download default plugin
|
|
225
|
-
gulp plugin download win_evtx.py /local/path/win_evtx.py
|
|
226
|
-
|
|
227
|
-
# Download extension plugin
|
|
228
|
-
gulp plugin download my_extension.py /path/to/save --type extension
|
|
229
|
-
|
|
230
|
-
# Download UI plugin
|
|
231
|
-
gulp plugin download my_ui.py /path/to/save --type ui
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### Delete Plugin
|
|
235
|
-
|
|
236
|
-
Delete a plugin from the server:
|
|
237
|
-
|
|
238
|
-
```bash
|
|
239
|
-
# Delete default plugin
|
|
240
|
-
gulp plugin delete my_plugin.py
|
|
241
|
-
|
|
242
|
-
# Delete extension plugin
|
|
243
|
-
gulp plugin delete my_extension.py --type extension
|
|
244
|
-
|
|
245
|
-
# Delete UI plugin
|
|
246
|
-
gulp plugin delete my_ui.py --type ui
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
199
|
## Mapping File Management
|
|
252
200
|
|
|
253
201
|
Mapping files define data transformations and field mappings for ingestion plugins.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Stdout Markers Cheat Sheet
|
|
2
|
+
|
|
3
|
+
Marker lines are emitted as one unwrapped stdout line:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
GULP_MARKER: [MARKER_NAME] | {"json": "payload"}
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Parser rule: match lines starting with `GULP_MARKER: `, split once on ` | `, then JSON-decode the right side.
|
|
10
|
+
|
|
11
|
+
## Ingest `--wait-log`
|
|
12
|
+
|
|
13
|
+
These markers are emitted by `ingest file --wait-log`, `ingest file-to-source --wait-log`, and `ingest raw --wait-log`.
|
|
14
|
+
|
|
15
|
+
### `[MARKER_INGEST_SOURCE_DONE_RECEIVED]`
|
|
16
|
+
|
|
17
|
+
Emitted when the backend sends `INGEST_SOURCE_DONE`.
|
|
18
|
+
|
|
19
|
+
Payload:
|
|
20
|
+
- `req_id`: backend request id.
|
|
21
|
+
- `file`: display label for the file/request.
|
|
22
|
+
- `status`: status from the source-done packet or current state.
|
|
23
|
+
- `ingested`: accumulated ingested record count.
|
|
24
|
+
- `skipped`: accumulated skipped record count.
|
|
25
|
+
- `failed`: accumulated failed record count.
|
|
26
|
+
- `errors`: extracted backend errors, usually an array of strings.
|
|
27
|
+
|
|
28
|
+
### `[MARKER_ONGOING_STATS_RECEIVED]`
|
|
29
|
+
|
|
30
|
+
Emitted for `STATS_CREATE` or `STATS_UPDATE` while status is not `done`, `failed`, or `canceled`.
|
|
31
|
+
|
|
32
|
+
Payload:
|
|
33
|
+
- `req_id`: backend request id.
|
|
34
|
+
- `file`: display label for the file/request.
|
|
35
|
+
- `event`: websocket event name, usually `STATS_CREATE` or `STATS_UPDATE`.
|
|
36
|
+
- `status`: current stats status.
|
|
37
|
+
- `ingested`: current authoritative ingested count.
|
|
38
|
+
- `skipped`: current authoritative skipped count.
|
|
39
|
+
- `failed`: current authoritative failed count.
|
|
40
|
+
- `pct`: ingest percentage when provided by the backend, otherwise `null`.
|
|
41
|
+
- `errors`: extracted backend errors, usually an array of strings.
|
|
42
|
+
|
|
43
|
+
### `[MARKER_DONE_STATS_RECEIVED]`
|
|
44
|
+
|
|
45
|
+
Emitted for `STATS_CREATE` or `STATS_UPDATE` when status is `done`.
|
|
46
|
+
|
|
47
|
+
Payload: same fields as `[MARKER_ONGOING_STATS_RECEIVED]`.
|
|
48
|
+
|
|
49
|
+
### `[MARKER_FAILED_STATS_RECEIVED]`
|
|
50
|
+
|
|
51
|
+
Emitted for `STATS_CREATE` or `STATS_UPDATE` when status is `failed` or `canceled`.
|
|
52
|
+
|
|
53
|
+
Also emitted after a backend websocket `ERROR` packet.
|
|
54
|
+
|
|
55
|
+
Payload:
|
|
56
|
+
- From stats packets: same fields as `[MARKER_ONGOING_STATS_RECEIVED]`.
|
|
57
|
+
- From `ERROR` packets: `req_id`, `file`, `event`, `status`, `ingested`, `skipped`, `failed`, `errors`.
|
|
58
|
+
|
|
59
|
+
### `[MARKER_BACKEND_EXCEPTION_REPORTED]`
|
|
60
|
+
|
|
61
|
+
Emitted when the backend sends websocket `ERROR`.
|
|
62
|
+
|
|
63
|
+
Payload:
|
|
64
|
+
- `req_id`: backend request id.
|
|
65
|
+
- `file`: display label for the file/request.
|
|
66
|
+
- `event`: websocket event name, `ERROR`.
|
|
67
|
+
- `status`: always set to `failed` by the CLI for this request.
|
|
68
|
+
- `errors`: extracted backend errors, usually an array of strings.
|
|
69
|
+
|
|
70
|
+
### `[MARKER_INGESTION_FINISHED]`
|
|
71
|
+
|
|
72
|
+
Emitted once after wait-log completion, before the final CLI result JSON/table output.
|
|
73
|
+
|
|
74
|
+
Payload:
|
|
75
|
+
- `requests_total`: number of request results.
|
|
76
|
+
- `requests_done`: count with status `done`.
|
|
77
|
+
- `requests_failed`: count with status `failed`.
|
|
78
|
+
- `requests_canceled`: count with status `canceled`.
|
|
79
|
+
- `requests_timeout`: count with status `timeout`.
|
|
80
|
+
- `ingested`: accumulated ingested record count.
|
|
81
|
+
- `skipped`: accumulated skipped record count.
|
|
82
|
+
- `failed`: accumulated failed record count.
|
|
83
|
+
|
|
84
|
+
## `ingest zip-create`
|
|
85
|
+
|
|
86
|
+
These markers are emitted by local ZIP creation.
|
|
87
|
+
|
|
88
|
+
### `[MARKER_FILE_ADDED_TO_ZIP]`
|
|
89
|
+
|
|
90
|
+
Emitted after each ZIP entry is written.
|
|
91
|
+
|
|
92
|
+
Payload:
|
|
93
|
+
- `zip`: requested output ZIP path.
|
|
94
|
+
- `entry`: ZIP entry name.
|
|
95
|
+
- `source`: source filesystem path for the entry.
|
|
96
|
+
- `file_size`: uncompressed entry size in bytes.
|
|
97
|
+
- `compress_size`: compressed entry size in bytes.
|
|
98
|
+
- `current`: 1-based count of entries added so far.
|
|
99
|
+
- `total`: total entries planned for the ZIP.
|
|
100
|
+
- `percent`: integer progress percentage.
|
|
101
|
+
|
|
102
|
+
### `[MARKER_ZIP_CREATED_SUCCESSFULLY]`
|
|
103
|
+
|
|
104
|
+
Emitted once after the ZIP or multipart ZIP volumes are published.
|
|
105
|
+
|
|
106
|
+
Payload:
|
|
107
|
+
- `zip_files`: array of created archive paths.
|
|
108
|
+
- `files_archived`: number of source files archived. Directory entries are not counted here.
|
|
109
|
+
- `entries_archived`: number of ZIP entries archived, including directory entries.
|
|
110
|
+
|
|
111
|
+
### `[MARKER_ZIP_CREATE_ERROR]`
|
|
112
|
+
|
|
113
|
+
Emitted when ZIP creation hits a validation, scan, write, or publish error.
|
|
114
|
+
|
|
115
|
+
Payload variants:
|
|
116
|
+
- Scan/write skip errors: `path`, `zip`, `error`.
|
|
117
|
+
- Top-level `zip-create` command errors: `zip`, `error`.
|
|
118
|
+
|
|
119
|
+
### `[MARKER_OTHER_ERROR]`
|
|
120
|
+
|
|
121
|
+
Emitted with top-level `zip-create` command exceptions after `[MARKER_ZIP_CREATE_ERROR]`.
|
|
122
|
+
|
|
123
|
+
Payload:
|
|
124
|
+
- `command`: currently `zip-create`.
|
|
125
|
+
- `error`: exception text.
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.1.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 1,
|
|
21
|
+
__version__ = version = '1.1.10'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 1, 10)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g015adf27b'
|