-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add admin docs for the windmill integration #12153
Merged
Merged
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
b2e8b3b
Add admin docs for the windmill integration
marcelklehr 690ac45
Admin docs for the windmill integration: Add notes about auth
marcelklehr 3246209
Admin docs: More additions to windmill docs
marcelklehr da7a914
Admin docs: More additions to windmill docs
marcelklehr ee4ce53
Apply suggestions from code review
marcelklehr 8091416
Update admin_manual/windmill_workflows/index.rst
marcelklehr d939cb4
Admin docs: More additions to windmill docs
marcelklehr 8364ffa
Admin docs: More additions to windmill docs
marcelklehr 129f81e
Admin docs: Make list of webhook events exhausitve
marcelklehr 3e4ad44
Admin docs: Make list of webhook events exhausitve
marcelklehr f9798b1
Admin docs: More additions for windmill and webhooks
marcelklehr File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,349 @@ | ||
================= | ||
Webhook Listeners | ||
================= | ||
|
||
.. _webhook_listeners: | ||
|
||
Nextcloud supports listening to internal events via webhooks. | ||
|
||
Installation | ||
------------ | ||
|
||
* Enable the ``webhook_listeners`` app that comes bundled with Nextcloud | ||
|
||
.. code-block:: bash | ||
|
||
occ app:enable webhook_listeners | ||
|
||
Listening to events | ||
------------------- | ||
|
||
You can use the OCS API to add webhooks for specific events: https://docs.nextcloud.com/server/latest/developer_manual/_static/openapi.html#/operations/webhook_listeners-webhooks-index | ||
|
||
Note: When authenticating with the OCS API to register webhooks the account you authenticate as must have administrator rights or delegated administrator rights. | ||
|
||
Filters | ||
~~~~~~~ | ||
|
||
When registering a webhook listener, you can specify a filter parameter. The value of this parameter must be a JSON object whose properties represent filter conditions. The ``{}`` is an empty query, meaning no specific criteria, so all events are matched. | ||
|
||
If you would like to match events fired by a specific user, you can pass ``{ "user.uid": "bob" }`` to match all events fired in the context of user ``"bob"``. | ||
|
||
If you would like to enforce multiple criteria, you can simply pass multiple properties ``{ "event.tableId": 42, "event.rowId": 3 }`` | ||
|
||
You can also use additional comparison operators (``$eq, $ne, $gt, $gte, $lt, $lte, $in, $nin``) as well as logical operators (``$and, $or, $not, $nor``). For example use ``{ "time" : { "$lt": 1711971024 } }`` to accept only events prior to April 1st 2024 and ``{ "time" : { "$not": { "$lt": 1711971024 } } }`` to accept events after April 1st 2024. | ||
|
||
Speeding up webhook dispatch | ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
This app uses background jobs to trigger the registered webhooks. Thus, by default, webhooks will be triggered only every 5 minutes, as the default cron interval is 5 minutes. | ||
To trigger webhooks earlier, you can set up a background job worker. The following command will launch a worker for the webhook call background job: | ||
|
||
.. code-block:: bash | ||
|
||
occ background-job:worker "OCA\\WebhookListeners\\BackgroundJobs\\WebhookCall" | ||
|
||
It is recommended to restart this worker once a day to make sure code changes are effective and avoid memory leaks, for example by registering it as a systemd service with a daily timer. | ||
|
||
Nextcloud Webhook Events | ||
------------------------ | ||
|
||
This is an exhaustive list of available events. It features the event ID and the available variables for filtering. | ||
|
||
* OCA\\Forms\\Events\\FormSubmittedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"form": array{ | ||
"id": int, | ||
"hash": string, | ||
"title": string, | ||
"description": string, | ||
"ownerId": string, | ||
"fileId": string|null, | ||
"fileFormat": string|null, | ||
"created": int, | ||
"access": int, | ||
"expires": int, | ||
"isAnonymous": bool, | ||
"submitMultiple": bool, | ||
"showExpiration": bool, | ||
"lastUpdated": int, | ||
"submissionMessage": string|null, | ||
"state": int, | ||
}, | ||
"submission": array{ | ||
"id": int, | ||
"formId": int, | ||
"userId": string, | ||
"timestamp": int, | ||
}, | ||
} | ||
} | ||
|
||
* OCA\\Tables\\Event\\RowAddedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"tableId": int, | ||
"rowId": int, | ||
"previousValues": null|array<int, mixed>, | ||
"values": null|array<int, mixed> | ||
} | ||
} | ||
|
||
* OCA\\Tables\\Event\\RowDeletedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"tableId": int, | ||
"rowId": int, | ||
"previousValues": null|array<int, mixed>, | ||
"values": null|array<int, mixed> | ||
} | ||
} | ||
|
||
* OCA\\Tables\\Event\\RowUpdatedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"tableId": int, | ||
"rowId": int, | ||
"previousValues": null|array<int, mixed>, | ||
"values": null|array<int, mixed> | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\BeforeNodeCreatedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\BeforeNodeTouchedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\BeforeNodeWrittenEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\BeforeNodeReadEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\BeforeNodeDeletedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\NodeCreatedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\NodeTouchedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\NodeWrittenEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\NodeReadEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\NodeDeletedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"node": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\NodeCopiedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"source": array{"id": string, "path": string} | ||
"target": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\NodeRestoredEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"source": array{"id": string, "path": string} | ||
"target": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\NodeRenamedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"source": array{"id": string, "path": string} | ||
"target": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\BeforeNodeCopiedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"source": array{"id": string, "path": string} | ||
"target": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\BeforeNodeRestoredEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"source": array{"id": string, "path": string} | ||
"target": array{"id": string, "path": string} | ||
} | ||
} | ||
|
||
* OCP\\Files\\Events\\Node\\BeforeNodeRenamedEvent | ||
|
||
.. code-block:: text | ||
|
||
array{ | ||
"user": array {"uid": string, "displayName": string}, | ||
"time": int, | ||
"event": array{ | ||
"class": string, | ||
"source": array{"id": string, "path": string} | ||
"target": array{"id": string, "path": string} | ||
} | ||
} |
Binary file added
BIN
+301 KB
admin_manual/windmill_workflows/images/windmill_approval_step_config.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+170 KB
admin_manual/windmill_workflows/images/windmill_initial_workspace_selection.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+184 KB
admin_manual/windmill_workflows/images/windmill_later_workspace_selection.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@marcelklehr could you please try to find a workaround for the failing spell check? This line causes red CI for all new PRs. Thanks