Files
windmill/openflow.openapi.yaml
pyranota d6d4756b7a feat: Allow setProgress and getProgress from within the script (#4400)
* Allow setting progress explicitly from script body.

This feature exposes:
 * `getProgress`
 * `setProgress`
 * `incProgress`

API in TypeScript client (python is coming soon).

NOTE: Progress cannot be out of range 0..100 and cannot decrease.

With exposed APIs there is also UI changes, so progress can be shown for individual jobs as well.

For optimization reasons, jobs start to ask for progress only after N-seconds of execution.

* feat: Add `shell.nix`

If you dont have anything but nix, dont worry, run nix-shell in root, or activate with direnv and get all needed dependencies

NOTE: You will still need docker

* feat: Add `dev.nu` to typescript client

Little helper function, allowing developer to work on ts client easier.

To use:
  `./dev.nu watch`

Now add import of windmill in body of your script and `//nobundle` on top of the file

Edit ts client in your favourite editor and hit save. Script will do the rest.

* Cleanup files

* Fix: Failed to deserialize query string: missing field `get_progress`

* perf: Implement non-naive polling mechanism for getting job progress

* Add independant delay for getProgress

Problem in `TestJobLoader`:

There should be 2 delays:

    One until we find our first progress (every 5s)
    Once we found our first progress, we can do it every second

* nit: Use `query_scalar!` instead of `query_as`

* Fix: Sql error, no rows returned by a query that expected to return at least one row

* refactor: Remove global CSS for JobProgressBar

* Change UI for progress of flow subjobs

* Replace `Step 1` with `Running` in ProgressBar for individual jobs

* Remove `incProgress`

incProgress is not very usefull and error-prone

* perf: Set metric only for jobs that are actually using it

(https://github.com/windmill-labs/windmill/pull/4373#discussion_r1759843773)

* Offload registering progress from clients to server

* Add `jobId?` argument to typescript-client's `setProgress` and `getProgress`

Allows to set progress of other jobs and flows,
if jobId specified, than flow id will be inferred automatically.

Could be used by SDK.

* Add `Error::MetricNotFound` for better error handling

* Fix: Make `JobProgressBar` display in red when failed

* Add persistant progress bar

Now you can reload the page after job is done and progress will be still there

* Allow succeeded individual job's progress bar stick to 100%

* Add python support 

* nit: Remove usage of undefined variable in python-client

* Add `async` in ts client (for error handling)

* nit(frontend): Remove unused import

* Dont load JobProgressBar when it is not needed

* nit: npm check fix

* cargo sqlx prepare

* fix sqlx

---------

Co-authored-by: Ruben Fiszel <ruben@rubenfiszel.com>
2024-09-18 01:16:19 +02:00

541 lines
12 KiB
YAML

openapi: "3.0.3"
info:
version: 1.395.0
title: OpenFlow Spec
contact:
name: Ruben Fiszel
email: ruben@windmill.dev
url: https://windmill.dev
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
paths: {}
externalDocs:
description: documentation portal
url: https://windmill.dev
components:
schemas:
OpenFlow:
type: object
properties:
summary:
type: string
description:
type: string
value:
$ref: "#/components/schemas/FlowValue"
schema:
type: object
required:
- summary
- value
FlowValue:
type: object
properties:
modules:
type: array
items:
$ref: "#/components/schemas/FlowModule"
failure_module:
$ref: "#/components/schemas/FlowModule"
same_worker:
type: boolean
concurrent_limit:
type: number
concurrency_key:
type: string
concurrency_time_window_s:
type: number
skip_expr:
type: string
cache_ttl:
type: number
priority:
type: number
early_return:
type: string
required:
- modules
Retry:
type: object
properties:
constant:
type: object
properties:
attempts:
type: integer
seconds:
type: integer
exponential:
type: object
properties:
attempts:
type: integer
multiplier:
type: integer
seconds:
type: integer
random_factor:
type: integer
minimum: 0
maximum: 100
FlowModule:
type: object
properties:
id:
type: string
value:
$ref: "#/components/schemas/FlowModuleValue"
stop_after_if:
type: object
properties:
skip_if_stopped:
type: boolean
expr:
type: string
required:
- expr
stop_after_all_iters_if:
type: object
properties:
skip_if_stopped:
type: boolean
expr:
type: string
required:
- expr
sleep:
$ref: "#/components/schemas/InputTransform"
cache_ttl:
type: number
timeout:
type: number
delete_after_use:
type: boolean
summary:
type: string
mock:
type: object
properties:
enabled:
type: boolean
return_value: {}
suspend:
type: object
properties:
required_events:
type: integer
timeout:
type: integer
resume_form:
type: object
properties:
schema:
type: object
user_auth_required:
type: boolean
user_groups_required:
$ref: "#/components/schemas/InputTransform"
self_approval_disabled:
type: boolean
hide_cancel:
type: boolean
continue_on_disapprove_timeout:
type: boolean
priority:
type: number
continue_on_error:
type: boolean
retry:
$ref: "#/components/schemas/Retry"
required:
- value
- id
InputTransform:
oneOf:
- $ref: "#/components/schemas/StaticTransform"
- $ref: "#/components/schemas/JavascriptTransform"
discriminator:
propertyName: type
mapping:
static: "#/components/schemas/StaticTransform"
javascript: "#/components/schemas/JavascriptTransform"
StaticTransform:
type: object
properties:
value: {}
type:
type: string
enum:
- javascript
required:
- expr
- type
JavascriptTransform:
type: object
properties:
expr:
type: string
type:
type: string
enum:
- javascript
required:
- expr
- type
FlowModuleValue:
oneOf:
- $ref: "#/components/schemas/RawScript"
- $ref: "#/components/schemas/PathScript"
- $ref: "#/components/schemas/PathFlow"
- $ref: "#/components/schemas/ForloopFlow"
- $ref: "#/components/schemas/WhileloopFlow"
- $ref: "#/components/schemas/BranchOne"
- $ref: "#/components/schemas/BranchAll"
- $ref: "#/components/schemas/Identity"
discriminator:
propertyName: type
mapping:
rawscript: "#/components/schemas/RawScript"
script: "#/components/schemas/PathScript"
flow: "#/components/schemas/PathFlow"
forloopflow: "#/components/schemas/ForloopFlow"
whileloopflow: "#/components/schemas/WhileloopFlow"
branchone: "#/components/schemas/BranchOne"
branchall: "#/components/schemas/BranchAll"
identity: "#/components/schemas/Identity"
RawScript:
type: object
properties:
# to be made required once migration is over
input_transforms:
type: object
additionalProperties:
$ref: "#/components/schemas/InputTransform"
content:
type: string
language:
type: string
enum:
- deno
- bun
- python3
- go
- bash
- powershell
- postgresql
- mysql
- bigquery
- snowflake
- mssql
- graphql
- nativets
- php
path:
type: string
lock:
type: string
type:
type: string
enum:
- rawscript
tag:
type: string
concurrent_limit:
type: number
concurrency_time_window_s:
type: number
custom_concurrency_key:
type: string
required:
- type
- content
- language
- input_transforms
PathScript:
type: object
properties:
input_transforms:
type: object
additionalProperties:
$ref: "#/components/schemas/InputTransform"
path:
type: string
hash:
type: string
type:
type: string
enum:
- script
tag_override:
type: string
required:
- type
- path
- input_transforms
PathFlow:
type: object
properties:
input_transforms:
type: object
additionalProperties:
$ref: "#/components/schemas/InputTransform"
path:
type: string
type:
type: string
enum:
- flow
required:
- type
- path
- input_transforms
ForloopFlow:
type: object
properties:
modules:
type: array
items:
$ref: "#/components/schemas/FlowModule"
iterator:
$ref: "#/components/schemas/InputTransform"
skip_failures:
type: boolean
type:
type: string
enum:
- forloopflow
parallel:
type: boolean
parallelism:
type: integer
required:
- modules
- iterator
- skip_failures
- type
WhileloopFlow:
type: object
properties:
modules:
type: array
items:
$ref: "#/components/schemas/FlowModule"
skip_failures:
type: boolean
type:
type: string
enum:
- forloopflow
parallel:
type: boolean
parallelism:
type: integer
required:
- modules
- skip_failures
- type
BranchOne:
type: object
properties:
branches:
type: array
items:
type: object
properties:
summary:
type: string
expr:
type: string
modules:
type: array
items:
$ref: "#/components/schemas/FlowModule"
required:
- modules
- expr
default:
type: array
items:
$ref: "#/components/schemas/FlowModule"
required: [modules]
type:
type: string
enum:
- branchone
required:
- branches
- default
- type
BranchAll:
type: object
properties:
branches:
type: array
items:
type: object
properties:
summary:
type: string
skip_failure:
type: boolean
modules:
type: array
items:
$ref: "#/components/schemas/FlowModule"
required:
- modules
- expr
type:
type: string
enum:
- branchall
parallel:
type: boolean
required:
- branches
- type
Identity:
type: object
properties:
type:
type: string
enum:
- identity
flow:
type: boolean
required:
- type
FlowStatus:
type: object
properties:
step:
type: integer
modules:
type: array
items:
$ref: "#/components/schemas/FlowStatusModule"
user_states:
additionalProperties: true
failure_module:
allOf:
- $ref: "#/components/schemas/FlowStatusModule"
- type: object
properties:
parent_module:
type: string
retry:
type: object
properties:
fail_count:
type: integer
failed_jobs:
type: array
items:
type: string
format: uuid
required:
- step
- modules
- failure_module
FlowStatusModule:
type: object
properties:
type:
type: string
enum:
- WaitingForPriorSteps
- WaitingForEvents
- WaitingForExecutor
- InProgress
- Success
- Failure
id:
type: string
job:
type: string
format: uuid
count:
type: integer
progress:
type: integer
iterator:
type: object
properties:
index:
type: integer
itered:
type: array
items: {}
args: {}
flow_jobs:
type: array
items:
type: string
flow_jobs_success:
type: array
items:
type: boolean
branch_chosen:
type: object
properties:
type:
type: string
enum: [branch, default]
branch:
type: integer
required:
- type
branchall:
type: object
properties:
branch:
type: integer
len:
type: integer
required:
- branch
- len
approvers:
type: array
items:
type: object
properties:
resume_id:
type: integer
approver:
type: string
required:
- resume_id
- approver
failed_retries:
type: array
items:
type: string
format: uuid
required: [type]