vortex-cli 8.1.0__tar.gz → 8.2.0__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.
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/PKG-INFO +84 -15
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/README.md +83 -14
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/pyproject.toml +1 -1
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/cli.py +4 -1
- vortex_cli-8.2.0/vortex/commands/agenda.py +403 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/app.py +6 -4
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/execute.py +27 -6
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/object_.py +58 -26
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/main.py +25 -2
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/registry.py +5 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/webdesign.py +20 -5
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex_cli.egg-info/PKG-INFO +84 -15
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex_cli.egg-info/SOURCES.txt +1 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/LICENSE +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/setup.cfg +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/__init__.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/__main__.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/colour.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/__init__.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/clean.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/clone.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/code.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/compile.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/db.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/diff.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/docs.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/fetch.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/info.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/keyword.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/libs.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/log.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/pull.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/search.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/servers.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/use.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/commands/watch.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/constants.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/docs/Blackbook v2.md +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/docs/Blackbook.pdf +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/docs/index.html +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/docs/marked.min.js +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/git.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/lib/puakma-6.0.40.jar +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/libs.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/logging.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/models.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/output.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/schedule.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/server_options.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/soap.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/spinner.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/sync.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/util.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex/workspace.py +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex_cli.egg-info/dependency_links.txt +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex_cli.egg-info/entry_points.txt +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex_cli.egg-info/requires.txt +0 -0
- {vortex_cli-8.1.0 → vortex_cli-8.2.0}/vortex_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vortex_cli
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.2.0
|
|
4
4
|
Summary: Vortex CLI
|
|
5
5
|
Author-email: Jordan Amos <jordan.amos@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -106,6 +106,18 @@ While it is possible to use without it, this software has been purposefully desi
|
|
|
106
106
|
java_environment_name = JavaSE-17 ; Java Execution Environment name https://docs.osgi.org/reference/eenames.html
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
+
## Upgrading to 8.2
|
|
110
|
+
|
|
111
|
+
- **`object run` runs ACTIONs, and waits.** It calls the gateway's new `POST run` (gateway
|
|
112
|
+
`AppVersion` 0.1.4 or later) instead of sending `tell agenda run` to the console, and
|
|
113
|
+
reports how long the action took, its reply and any exception (see
|
|
114
|
+
[Running an action](#running-an-action)). An older gateway refuses it with `NOT_EXPOSED`.
|
|
115
|
+
It no longer accepts a SCHEDULED_ACTION.
|
|
116
|
+
- **`vortex agenda`** lists the scheduled actions AGENDA has loaded and queues one with
|
|
117
|
+
`agenda run`, refusing the cases where AGENDA would silently do nothing (see
|
|
118
|
+
[The agenda](#the-agenda)). It replaces both `object run` on a scheduled action and
|
|
119
|
+
`vortex execute tell agenda run ...`.
|
|
120
|
+
|
|
109
121
|
## Upgrading to 8.1
|
|
110
122
|
|
|
111
123
|
8.1 does two things. It replaces `vortex config` with plain top-level commands that read
|
|
@@ -127,7 +139,7 @@ errors (exit 2).
|
|
|
127
139
|
| `config --set-password` | `keyring set vortex-cli:<server> <username>` |
|
|
128
140
|
| `config --sample` | `server get` (every option it reads) |
|
|
129
141
|
| `execute --show-schedule` / `--refresh-agenda` / `--flush-cache` | `execute schedule` / `refresh-agenda` / `flush-cache` |
|
|
130
|
-
| `execute --refresh-design N` | `
|
|
142
|
+
| `execute --refresh-design N` | `execute refresh-design N` or `app refresh N` |
|
|
131
143
|
| `execute --run PATH` | `object run ID --app-id N` |
|
|
132
144
|
| `status [--show-permissions] [--json]` | `vortex [-s NAME] [--show-permissions] [--json]` (no command) - plus the CLI version and the workspace |
|
|
133
145
|
| `vortex` with no command (the workspace path) | the live status of the default server: `vortex-cli` and `workspace` first, then the server (`vortex --path` prints just the path) |
|
|
@@ -271,7 +283,7 @@ vortex app update APP_ID [--name --group --description --inherit-from --templa
|
|
|
271
283
|
[--param NAME=VALUE ...] [--remove-param NAME ...]
|
|
272
284
|
vortex app export APP_ID... [--out-dir --exclude-source --timeout]
|
|
273
285
|
vortex app import FILE.pmx --name N --group G
|
|
274
|
-
vortex app refresh-design
|
|
286
|
+
vortex app refresh APP_ID (alias: refresh-design)
|
|
275
287
|
|
|
276
288
|
── object ───────────────────────────────────────────────────────────────────
|
|
277
289
|
vortex object get ID --app-id ID [--show-source --show-data] [--json]
|
|
@@ -289,7 +301,7 @@ vortex object list [QUERY] [--app-id ID [--local]] [--strict --inherits-from|-
|
|
|
289
301
|
--ids-only --show-params --type T...] [--json]
|
|
290
302
|
vortex object grep PATTERN [--app-id ID] [--output-paths|--output-apps]
|
|
291
303
|
[--include-resources|--type T...] [--json]
|
|
292
|
-
vortex object run ID --app-id ID
|
|
304
|
+
vortex object run ID --app-id ID [--output] [--json]
|
|
293
305
|
vortex object delete ID... --app-id ID [--yes]
|
|
294
306
|
|
|
295
307
|
── keyword ──────────────────────────────────────────────────────────────────
|
|
@@ -315,6 +327,10 @@ vortex db update-column DB TABLE COLUMN --app-id ID [--name --type --size --desc
|
|
|
315
327
|
--cascade-delete|--no-cascade-delete]
|
|
316
328
|
vortex db delete-column DB TABLE COLUMN --app-id ID [--yes]
|
|
317
329
|
|
|
330
|
+
── agenda ───────────────────────────────────────────────────────────────────
|
|
331
|
+
vortex agenda [list] [--app-id ID] [--json]
|
|
332
|
+
vortex agenda run ID --app-id ID [--param KEY=VALUE ...] [--refresh --force] [--json]
|
|
333
|
+
|
|
318
334
|
── Workspace ────────────────────────────────────────────────────────────────
|
|
319
335
|
vortex ls [app list filters] [--json] = app list --local
|
|
320
336
|
vortex clone APP... [--group --reclone --all --get-resources --open-urls --timeout]
|
|
@@ -329,7 +345,8 @@ vortex code [--refresh [--reset]] [-s]
|
|
|
329
345
|
vortex [-s NAME] [--show-permissions] [--json] (the server's live status)
|
|
330
346
|
vortex --path (the workspace path)
|
|
331
347
|
vortex log [-n --source -m --errors-only|--debug-only|--info-only -k -d] [--json]
|
|
332
|
-
vortex execute CMD... | flush-cache | refresh-agenda |
|
|
348
|
+
vortex execute CMD... | flush-cache | refresh-agenda | refresh-design APP_ID | schedule
|
|
349
|
+
[--json] (alias: ex)
|
|
333
350
|
vortex server list [--json]
|
|
334
351
|
vortex server get [NAME] [--json]
|
|
335
352
|
vortex server use NAME (or: vortex use NAME)
|
|
@@ -406,27 +423,45 @@ and application write, so a manual cache flush is never required after one.
|
|
|
406
423
|
|
|
407
424
|
`vortex execute CMD...` (or `ex`) sends any console command - the gateway's `POST console`,
|
|
408
425
|
which needs `GatewaySystem`, or the SOAP console without the gateway. The words are joined,
|
|
409
|
-
so no quoting is needed.
|
|
426
|
+
so no quoting is needed. These names are shortcuts that send the exact strings the server's
|
|
410
427
|
addins match:
|
|
411
428
|
|
|
412
429
|
| Shortcut | Sends | Effect |
|
|
413
430
|
|---|---|---|
|
|
414
|
-
| `schedule` | `tell agenda schedule` | lists every scheduled action and its next run |
|
|
431
|
+
| `schedule` | `tell agenda schedule` | lists every scheduled action and its next run (raw text; `vortex agenda` parses it) |
|
|
415
432
|
| `refresh-agenda` | `tell agenda refresh` | AGENDA rereads every schedule now |
|
|
433
|
+
| `refresh-design APP_ID` | `tell agenda run /<webdesign_path>/RefreshDesign?&AppID=N` | rebuilds the application's design from its template, as `app refresh` does (a clone is then out of date) |
|
|
416
434
|
| `flush-cache` | `tell http cache flush` | clears the design cache and all action class loaders |
|
|
417
435
|
|
|
418
436
|
`tell http flush cache` is **not** a valid command: the HTTP addin only matches
|
|
419
437
|
`cache flush`, and anything else does nothing, silently. Use `flush-cache`.
|
|
420
438
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
439
|
+
`vortex app refresh APP_ID` also lives with its noun: it sends
|
|
440
|
+
`tell agenda run /<webdesign_path>/RefreshDesign?&AppID=N`, which rebuilds the design from its
|
|
441
|
+
template (a clone is then out of date).
|
|
442
|
+
|
|
443
|
+
### Running an action
|
|
444
|
+
|
|
445
|
+
`vortex object run ID --app-id N` runs an ACTION now, as your identity, and waits for it:
|
|
446
|
+
the gateway's `POST run` (`GatewaySystem`) loads the action's class, executes it and replies
|
|
447
|
+
with how long it took, its redirect, content type and reply size. `--output` also prints the
|
|
448
|
+
action's reply (its buffer, as text). An action that throws exits 1 with `ACTION_FAILED` and
|
|
449
|
+
the exception; a path with no compiled ACTION is `NOT_FOUND`.
|
|
450
|
+
|
|
451
|
+
- **ACTIONs only.** A SCHEDULED_ACTION (or any other type) is `WRONG_TYPE`. Scheduled
|
|
452
|
+
actions are queued with AGENDA: `vortex agenda run ID --app-id N` ([The agenda](#the-agenda)).
|
|
453
|
+
- **No client connection.** The action's `getOutputStream()` is null, as under AGENDA, so it
|
|
454
|
+
must buffer its reply (`write`/`setBuffer`); one that streams unconditionally fails with
|
|
455
|
+
the NullPointerException as its result.
|
|
456
|
+
- **Synchronous.** The CLI waits up to 300 s. Behind Cloudflare (prod) the request is cut
|
|
457
|
+
at about 100 s; the action still finishes on the server - check `vortex log`.
|
|
458
|
+
- **Gateway required.** It needs a gateway with the `run` route; an older gateway refuses with
|
|
459
|
+
`NOT_EXPOSED`. Earlier versions of `object run` sent `tell agenda run`, which only reached
|
|
460
|
+
scheduled actions on AGENDA's list and did nothing, silently, for an ACTION.
|
|
427
461
|
|
|
428
462
|
The 8.0 flags (`--show-schedule`, `--refresh-agenda`, `--flush-cache`, `--refresh-design`,
|
|
429
|
-
`--run`) were removed in 8.1.
|
|
463
|
+
`--run`) were removed in 8.1. `app refresh` was `app refresh-design` in 8.1.0; the old
|
|
464
|
+
name still works.
|
|
430
465
|
|
|
431
466
|
### Local clones stay in sync
|
|
432
467
|
|
|
@@ -449,7 +484,7 @@ prints the command to re-sync (`vortex clone APP_ID -s SERVER`).
|
|
|
449
484
|
| `object copy` | the target application's clone |
|
|
450
485
|
| `keyword set` / `delete` | the clone's stored keywords |
|
|
451
486
|
| `compile` | writes `zbin/`; `--upload` stores the uploaded blobs |
|
|
452
|
-
| `execute
|
|
487
|
+
| `app refresh` / `execute refresh-design` | none - prints that the clone is out of date |
|
|
453
488
|
| `app create` / `import` / `export`, all `db` commands | none |
|
|
454
489
|
|
|
455
490
|
A clone stores the design objects, the application's details (with its description), its
|
|
@@ -570,6 +605,40 @@ vortex object get 7901 --app-id 62 # the parsed schedule
|
|
|
570
605
|
starts; if that lands between the command's read and write, the old `LastRun` is written
|
|
571
606
|
back and the action may run one interval early.
|
|
572
607
|
|
|
608
|
+
### The agenda
|
|
609
|
+
|
|
610
|
+
AGENDA has no API beyond its console commands, so `vortex agenda` sends them through the same
|
|
611
|
+
console route as `vortex execute` (the gateway's `POST console`, `GatewaySystem`, or the SOAP
|
|
612
|
+
console without the gateway) and parses the text they answer.
|
|
613
|
+
|
|
614
|
+
```
|
|
615
|
+
vortex agenda -s dev # = agenda list
|
|
616
|
+
vortex agenda list --app-id 9 -s dev
|
|
617
|
+
vortex agenda run 7825 --app-id 60 -s dev [--param AppID=12] [--refresh] [--force]
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
- **`list`** - `tell agenda schedule`: every scheduled action AGENDA has **loaded**, by next
|
|
621
|
+
run (server time), with the waitlist and AGENDA's counts (running, waitlisted, scheduled,
|
|
622
|
+
max at once). An action with empty `Options` is loaded as *on demand only*. Not listed: an
|
|
623
|
+
action with `Schedule=N`, one in a disabled application or an application with scheduled
|
|
624
|
+
actions disabled, and one created or renamed since AGENDA's last refresh (every 15
|
|
625
|
+
minutes). AGENDA says how many actions are running, never which.
|
|
626
|
+
- **`run`** - queues a SCHEDULED_ACTION: `tell agenda run /group/app.pma/Name[?&KEY=VALUE...]`.
|
|
627
|
+
It runs as the system session when one of AGENDA's slots is free; its result is only in
|
|
628
|
+
`vortex log`. AGENDA answers that command with nothing, whatever it did, so `run` checks
|
|
629
|
+
first and sends nothing when AGENDA would not run it:
|
|
630
|
+
- `NOT_ON_AGENDA` - the action has `Schedule=N` (give it a schedule first), or it is not on
|
|
631
|
+
the loaded list. `--refresh` sends `tell agenda refresh` and checks again (for an action
|
|
632
|
+
created or renamed in the last 15 minutes).
|
|
633
|
+
- `ALREADY_QUEUED` - it is already waitlisted; AGENDA would skip it.
|
|
634
|
+
- `PREFIX_COLLISION` - AGENDA matches the path by prefix and queues it once per matching
|
|
635
|
+
item, so `.../SyncAll` would also match an item `.../Sync` and run twice. `--force` sends
|
|
636
|
+
it anyway.
|
|
637
|
+
- `WRONG_TYPE` - not a SCHEDULED_ACTION (an ACTION is run with `vortex object run`).
|
|
638
|
+
- A queued run moves the action's next scheduled run (AGENDA resets it), and it can't be
|
|
639
|
+
stopped from here (`vortex execute tell agenda stop /group/app.pma/Name` asks the action to
|
|
640
|
+
quit; it has to check for that itself).
|
|
641
|
+
|
|
573
642
|
### Keyword values and secrets
|
|
574
643
|
|
|
575
644
|
Keywords are an application's live configuration, and in practice they hold credentials in
|
|
@@ -62,6 +62,18 @@ While it is possible to use without it, this software has been purposefully desi
|
|
|
62
62
|
java_environment_name = JavaSE-17 ; Java Execution Environment name https://docs.osgi.org/reference/eenames.html
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
+
## Upgrading to 8.2
|
|
66
|
+
|
|
67
|
+
- **`object run` runs ACTIONs, and waits.** It calls the gateway's new `POST run` (gateway
|
|
68
|
+
`AppVersion` 0.1.4 or later) instead of sending `tell agenda run` to the console, and
|
|
69
|
+
reports how long the action took, its reply and any exception (see
|
|
70
|
+
[Running an action](#running-an-action)). An older gateway refuses it with `NOT_EXPOSED`.
|
|
71
|
+
It no longer accepts a SCHEDULED_ACTION.
|
|
72
|
+
- **`vortex agenda`** lists the scheduled actions AGENDA has loaded and queues one with
|
|
73
|
+
`agenda run`, refusing the cases where AGENDA would silently do nothing (see
|
|
74
|
+
[The agenda](#the-agenda)). It replaces both `object run` on a scheduled action and
|
|
75
|
+
`vortex execute tell agenda run ...`.
|
|
76
|
+
|
|
65
77
|
## Upgrading to 8.1
|
|
66
78
|
|
|
67
79
|
8.1 does two things. It replaces `vortex config` with plain top-level commands that read
|
|
@@ -83,7 +95,7 @@ errors (exit 2).
|
|
|
83
95
|
| `config --set-password` | `keyring set vortex-cli:<server> <username>` |
|
|
84
96
|
| `config --sample` | `server get` (every option it reads) |
|
|
85
97
|
| `execute --show-schedule` / `--refresh-agenda` / `--flush-cache` | `execute schedule` / `refresh-agenda` / `flush-cache` |
|
|
86
|
-
| `execute --refresh-design N` | `
|
|
98
|
+
| `execute --refresh-design N` | `execute refresh-design N` or `app refresh N` |
|
|
87
99
|
| `execute --run PATH` | `object run ID --app-id N` |
|
|
88
100
|
| `status [--show-permissions] [--json]` | `vortex [-s NAME] [--show-permissions] [--json]` (no command) - plus the CLI version and the workspace |
|
|
89
101
|
| `vortex` with no command (the workspace path) | the live status of the default server: `vortex-cli` and `workspace` first, then the server (`vortex --path` prints just the path) |
|
|
@@ -227,7 +239,7 @@ vortex app update APP_ID [--name --group --description --inherit-from --templa
|
|
|
227
239
|
[--param NAME=VALUE ...] [--remove-param NAME ...]
|
|
228
240
|
vortex app export APP_ID... [--out-dir --exclude-source --timeout]
|
|
229
241
|
vortex app import FILE.pmx --name N --group G
|
|
230
|
-
vortex app refresh-design
|
|
242
|
+
vortex app refresh APP_ID (alias: refresh-design)
|
|
231
243
|
|
|
232
244
|
── object ───────────────────────────────────────────────────────────────────
|
|
233
245
|
vortex object get ID --app-id ID [--show-source --show-data] [--json]
|
|
@@ -245,7 +257,7 @@ vortex object list [QUERY] [--app-id ID [--local]] [--strict --inherits-from|-
|
|
|
245
257
|
--ids-only --show-params --type T...] [--json]
|
|
246
258
|
vortex object grep PATTERN [--app-id ID] [--output-paths|--output-apps]
|
|
247
259
|
[--include-resources|--type T...] [--json]
|
|
248
|
-
vortex object run ID --app-id ID
|
|
260
|
+
vortex object run ID --app-id ID [--output] [--json]
|
|
249
261
|
vortex object delete ID... --app-id ID [--yes]
|
|
250
262
|
|
|
251
263
|
── keyword ──────────────────────────────────────────────────────────────────
|
|
@@ -271,6 +283,10 @@ vortex db update-column DB TABLE COLUMN --app-id ID [--name --type --size --desc
|
|
|
271
283
|
--cascade-delete|--no-cascade-delete]
|
|
272
284
|
vortex db delete-column DB TABLE COLUMN --app-id ID [--yes]
|
|
273
285
|
|
|
286
|
+
── agenda ───────────────────────────────────────────────────────────────────
|
|
287
|
+
vortex agenda [list] [--app-id ID] [--json]
|
|
288
|
+
vortex agenda run ID --app-id ID [--param KEY=VALUE ...] [--refresh --force] [--json]
|
|
289
|
+
|
|
274
290
|
── Workspace ────────────────────────────────────────────────────────────────
|
|
275
291
|
vortex ls [app list filters] [--json] = app list --local
|
|
276
292
|
vortex clone APP... [--group --reclone --all --get-resources --open-urls --timeout]
|
|
@@ -285,7 +301,8 @@ vortex code [--refresh [--reset]] [-s]
|
|
|
285
301
|
vortex [-s NAME] [--show-permissions] [--json] (the server's live status)
|
|
286
302
|
vortex --path (the workspace path)
|
|
287
303
|
vortex log [-n --source -m --errors-only|--debug-only|--info-only -k -d] [--json]
|
|
288
|
-
vortex execute CMD... | flush-cache | refresh-agenda |
|
|
304
|
+
vortex execute CMD... | flush-cache | refresh-agenda | refresh-design APP_ID | schedule
|
|
305
|
+
[--json] (alias: ex)
|
|
289
306
|
vortex server list [--json]
|
|
290
307
|
vortex server get [NAME] [--json]
|
|
291
308
|
vortex server use NAME (or: vortex use NAME)
|
|
@@ -362,27 +379,45 @@ and application write, so a manual cache flush is never required after one.
|
|
|
362
379
|
|
|
363
380
|
`vortex execute CMD...` (or `ex`) sends any console command - the gateway's `POST console`,
|
|
364
381
|
which needs `GatewaySystem`, or the SOAP console without the gateway. The words are joined,
|
|
365
|
-
so no quoting is needed.
|
|
382
|
+
so no quoting is needed. These names are shortcuts that send the exact strings the server's
|
|
366
383
|
addins match:
|
|
367
384
|
|
|
368
385
|
| Shortcut | Sends | Effect |
|
|
369
386
|
|---|---|---|
|
|
370
|
-
| `schedule` | `tell agenda schedule` | lists every scheduled action and its next run |
|
|
387
|
+
| `schedule` | `tell agenda schedule` | lists every scheduled action and its next run (raw text; `vortex agenda` parses it) |
|
|
371
388
|
| `refresh-agenda` | `tell agenda refresh` | AGENDA rereads every schedule now |
|
|
389
|
+
| `refresh-design APP_ID` | `tell agenda run /<webdesign_path>/RefreshDesign?&AppID=N` | rebuilds the application's design from its template, as `app refresh` does (a clone is then out of date) |
|
|
372
390
|
| `flush-cache` | `tell http cache flush` | clears the design cache and all action class loaders |
|
|
373
391
|
|
|
374
392
|
`tell http flush cache` is **not** a valid command: the HTTP addin only matches
|
|
375
393
|
`cache flush`, and anything else does nothing, silently. Use `flush-cache`.
|
|
376
394
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
395
|
+
`vortex app refresh APP_ID` also lives with its noun: it sends
|
|
396
|
+
`tell agenda run /<webdesign_path>/RefreshDesign?&AppID=N`, which rebuilds the design from its
|
|
397
|
+
template (a clone is then out of date).
|
|
398
|
+
|
|
399
|
+
### Running an action
|
|
400
|
+
|
|
401
|
+
`vortex object run ID --app-id N` runs an ACTION now, as your identity, and waits for it:
|
|
402
|
+
the gateway's `POST run` (`GatewaySystem`) loads the action's class, executes it and replies
|
|
403
|
+
with how long it took, its redirect, content type and reply size. `--output` also prints the
|
|
404
|
+
action's reply (its buffer, as text). An action that throws exits 1 with `ACTION_FAILED` and
|
|
405
|
+
the exception; a path with no compiled ACTION is `NOT_FOUND`.
|
|
406
|
+
|
|
407
|
+
- **ACTIONs only.** A SCHEDULED_ACTION (or any other type) is `WRONG_TYPE`. Scheduled
|
|
408
|
+
actions are queued with AGENDA: `vortex agenda run ID --app-id N` ([The agenda](#the-agenda)).
|
|
409
|
+
- **No client connection.** The action's `getOutputStream()` is null, as under AGENDA, so it
|
|
410
|
+
must buffer its reply (`write`/`setBuffer`); one that streams unconditionally fails with
|
|
411
|
+
the NullPointerException as its result.
|
|
412
|
+
- **Synchronous.** The CLI waits up to 300 s. Behind Cloudflare (prod) the request is cut
|
|
413
|
+
at about 100 s; the action still finishes on the server - check `vortex log`.
|
|
414
|
+
- **Gateway required.** It needs a gateway with the `run` route; an older gateway refuses with
|
|
415
|
+
`NOT_EXPOSED`. Earlier versions of `object run` sent `tell agenda run`, which only reached
|
|
416
|
+
scheduled actions on AGENDA's list and did nothing, silently, for an ACTION.
|
|
383
417
|
|
|
384
418
|
The 8.0 flags (`--show-schedule`, `--refresh-agenda`, `--flush-cache`, `--refresh-design`,
|
|
385
|
-
`--run`) were removed in 8.1.
|
|
419
|
+
`--run`) were removed in 8.1. `app refresh` was `app refresh-design` in 8.1.0; the old
|
|
420
|
+
name still works.
|
|
386
421
|
|
|
387
422
|
### Local clones stay in sync
|
|
388
423
|
|
|
@@ -405,7 +440,7 @@ prints the command to re-sync (`vortex clone APP_ID -s SERVER`).
|
|
|
405
440
|
| `object copy` | the target application's clone |
|
|
406
441
|
| `keyword set` / `delete` | the clone's stored keywords |
|
|
407
442
|
| `compile` | writes `zbin/`; `--upload` stores the uploaded blobs |
|
|
408
|
-
| `execute
|
|
443
|
+
| `app refresh` / `execute refresh-design` | none - prints that the clone is out of date |
|
|
409
444
|
| `app create` / `import` / `export`, all `db` commands | none |
|
|
410
445
|
|
|
411
446
|
A clone stores the design objects, the application's details (with its description), its
|
|
@@ -526,6 +561,40 @@ vortex object get 7901 --app-id 62 # the parsed schedule
|
|
|
526
561
|
starts; if that lands between the command's read and write, the old `LastRun` is written
|
|
527
562
|
back and the action may run one interval early.
|
|
528
563
|
|
|
564
|
+
### The agenda
|
|
565
|
+
|
|
566
|
+
AGENDA has no API beyond its console commands, so `vortex agenda` sends them through the same
|
|
567
|
+
console route as `vortex execute` (the gateway's `POST console`, `GatewaySystem`, or the SOAP
|
|
568
|
+
console without the gateway) and parses the text they answer.
|
|
569
|
+
|
|
570
|
+
```
|
|
571
|
+
vortex agenda -s dev # = agenda list
|
|
572
|
+
vortex agenda list --app-id 9 -s dev
|
|
573
|
+
vortex agenda run 7825 --app-id 60 -s dev [--param AppID=12] [--refresh] [--force]
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
- **`list`** - `tell agenda schedule`: every scheduled action AGENDA has **loaded**, by next
|
|
577
|
+
run (server time), with the waitlist and AGENDA's counts (running, waitlisted, scheduled,
|
|
578
|
+
max at once). An action with empty `Options` is loaded as *on demand only*. Not listed: an
|
|
579
|
+
action with `Schedule=N`, one in a disabled application or an application with scheduled
|
|
580
|
+
actions disabled, and one created or renamed since AGENDA's last refresh (every 15
|
|
581
|
+
minutes). AGENDA says how many actions are running, never which.
|
|
582
|
+
- **`run`** - queues a SCHEDULED_ACTION: `tell agenda run /group/app.pma/Name[?&KEY=VALUE...]`.
|
|
583
|
+
It runs as the system session when one of AGENDA's slots is free; its result is only in
|
|
584
|
+
`vortex log`. AGENDA answers that command with nothing, whatever it did, so `run` checks
|
|
585
|
+
first and sends nothing when AGENDA would not run it:
|
|
586
|
+
- `NOT_ON_AGENDA` - the action has `Schedule=N` (give it a schedule first), or it is not on
|
|
587
|
+
the loaded list. `--refresh` sends `tell agenda refresh` and checks again (for an action
|
|
588
|
+
created or renamed in the last 15 minutes).
|
|
589
|
+
- `ALREADY_QUEUED` - it is already waitlisted; AGENDA would skip it.
|
|
590
|
+
- `PREFIX_COLLISION` - AGENDA matches the path by prefix and queues it once per matching
|
|
591
|
+
item, so `.../SyncAll` would also match an item `.../Sync` and run twice. `--force` sends
|
|
592
|
+
it anyway.
|
|
593
|
+
- `WRONG_TYPE` - not a SCHEDULED_ACTION (an ACTION is run with `vortex object run`).
|
|
594
|
+
- A queued run moves the action's next scheduled run (AGENDA resets it), and it can't be
|
|
595
|
+
stopped from here (`vortex execute tell agenda stop /group/app.pma/Name` asks the action to
|
|
596
|
+
quit; it has to check for that itself).
|
|
597
|
+
|
|
529
598
|
### Keyword values and secrets
|
|
530
599
|
|
|
531
600
|
Keywords are an application's live configuration, and in practice they hold credentials in
|
|
@@ -562,6 +562,9 @@ _EXECUTE_SHORTCUTS_HELP = """\
|
|
|
562
562
|
Shortcuts (each sends the exact string the server's addins match):
|
|
563
563
|
flush-cache | tell http cache flush ('tell http flush cache' does nothing)
|
|
564
564
|
refresh-agenda | tell agenda refresh: AGENDA rereads every schedule now
|
|
565
|
+
refresh-design APP_ID | tell agenda run /<webdesign_path>/RefreshDesign?&AppID=N:
|
|
566
|
+
| rebuild the application's design from its template
|
|
567
|
+
| (same as 'vortex app refresh APP_ID')
|
|
565
568
|
schedule | tell agenda schedule: every scheduled action and its next run
|
|
566
569
|
|
|
567
570
|
Console commands:
|
|
@@ -576,7 +579,7 @@ def add_execute_parser(
|
|
|
576
579
|
aliases=("ex",),
|
|
577
580
|
help=(
|
|
578
581
|
"Send a console command to the server (or a shortcut: flush-cache, "
|
|
579
|
-
"refresh-agenda, schedule)"
|
|
582
|
+
"refresh-agenda, refresh-design APP_ID, schedule)"
|
|
580
583
|
),
|
|
581
584
|
description=_EXECUTE_SHORTCUTS_HELP + _EXECUTE_PARSER_DESCRIPTION,
|
|
582
585
|
formatter_class=RawDescriptionHelpFormatter,
|