You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by gi...@apache.org on 2022/03/27 12:16:22 UTC

[dolphinscheduler-website] branch asf-site updated: Automated deployment: 1d1242ec1c9807506019c836fcd3a376a93b8b54

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 4ddf6e8  Automated deployment: 1d1242ec1c9807506019c836fcd3a376a93b8b54
4ddf6e8 is described below

commit 4ddf6e8658e3862d8202dfaf16b6f0821880fe5c
Author: github-actions[bot] <gi...@users.noreply.github.com>
AuthorDate: Sun Mar 27 12:16:17 2022 +0000

    Automated deployment: 1d1242ec1c9807506019c836fcd3a376a93b8b54
---
 en-us/docs/dev/user_doc/guide/alert/telegram.html  |   6 ++++++
 en-us/docs/dev/user_doc/guide/alert/telegram.json  |   2 +-
 .../core/process_definition.html                   |  22 ++++++++------------
 .../_modules/pydolphinscheduler/side/project.html  |   2 +-
 python/_modules/pydolphinscheduler/side/user.html  |  21 +++++++++++++------
 python/api.html                                    |  23 +++++++++++++++++++--
 python/genindex.html                               |   2 ++
 python/objects.inv                                 | Bin 5188 -> 5192 bytes
 python/searchindex.js                              |   2 +-
 zh-cn/docs/dev/user_doc/guide/alert/telegram.html  |   6 ++++++
 zh-cn/docs/dev/user_doc/guide/alert/telegram.json  |   2 +-
 11 files changed, 63 insertions(+), 25 deletions(-)

diff --git a/en-us/docs/dev/user_doc/guide/alert/telegram.html b/en-us/docs/dev/user_doc/guide/alert/telegram.html
index 1eab012..364f3e1 100644
--- a/en-us/docs/dev/user_doc/guide/alert/telegram.html
+++ b/en-us/docs/dev/user_doc/guide/alert/telegram.html
@@ -62,6 +62,12 @@ The following shows the <code>Telegram</code> configuration example:</p>
 </blockquote>
 </li>
 </ul>
+<p><strong>NOTICE</strong>:The webhook needs to be able to receive and use the same JSON body of HTTP POST that DolphinScheduler constructs and the following shows the JSON body:</p>
+<pre><code class="language-json">{
+    <span class="hljs-attr">&quot;text&quot;</span>: <span class="hljs-string">&quot;[{\&quot;projectId\&quot;:1,\&quot;projectName\&quot;:\&quot;p1\&quot;,\&quot;owner\&quot;:\&quot;admin\&quot;,\&quot;processId\&quot;:35,\&quot;processDefinitionCode\&quot;:4928367293568,\&quot;processName\&quot;:\&quot;s11-3-20220324084708668\&quot;,\&quot;taskCode\&quot;:4928359068928,\&quot;taskName\&quot;:\&quot;s1\&quot;,\&quot;taskType\&quot;:\&quot;SHELL\&quot;,\&quot;taskState\&quot;:\&quot;FAIL [...]
+    <span class="hljs-attr">&quot;chat_id&quot;</span>: <span class="hljs-string">&quot;chat id number&quot;</span>
+}
+</code></pre>
 <p>References:</p>
 <ul>
 <li><a href="https://core.telegram.org/bots">Telegram Application Bot Guide</a></li>
diff --git a/en-us/docs/dev/user_doc/guide/alert/telegram.json b/en-us/docs/dev/user_doc/guide/alert/telegram.json
index 2f3d009..39bc60e 100644
--- a/en-us/docs/dev/user_doc/guide/alert/telegram.json
+++ b/en-us/docs/dev/user_doc/guide/alert/telegram.json
@@ -1,6 +1,6 @@
 {
   "filename": "telegram.md",
-  "__html": "<h1>Telegram</h1>\n<p>If you need <code>Telegram</code> to alert, create an alert instance in the alert instance management, and choose the <code>Telegram</code> plugin.\nThe following shows the <code>Telegram</code> configuration example:</p>\n<p><img src=\"/img/alert/telegram-plugin.png\" alt=\"telegram-plugin\"></p>\n<h2>Parameter Configuration</h2>\n<ul>\n<li>WebHook:\n<blockquote>\n<p>The WebHook of Telegram when use robot to send message</p>\n</blockquote>\n</li>\n<li> [...]
+  "__html": "<h1>Telegram</h1>\n<p>If you need <code>Telegram</code> to alert, create an alert instance in the alert instance management, and choose the <code>Telegram</code> plugin.\nThe following shows the <code>Telegram</code> configuration example:</p>\n<p><img src=\"/img/alert/telegram-plugin.png\" alt=\"telegram-plugin\"></p>\n<h2>Parameter Configuration</h2>\n<ul>\n<li>WebHook:\n<blockquote>\n<p>The WebHook of Telegram when use robot to send message</p>\n</blockquote>\n</li>\n<li> [...]
   "link": "/dist/en-us/docs/dev/user_doc/guide/alert/telegram.html",
   "meta": {}
 }
\ No newline at end of file
diff --git a/python/_modules/pydolphinscheduler/core/process_definition.html b/python/_modules/pydolphinscheduler/core/process_definition.html
index 94e97b2..113d59e 100644
--- a/python/_modules/pydolphinscheduler/core/process_definition.html
+++ b/python/_modules/pydolphinscheduler/core/process_definition.html
@@ -125,6 +125,14 @@
     <span class="sd">&quot;&quot;&quot;process definition object, will define process definition attribute, task, relation.</span>
 
 <span class="sd">    TODO: maybe we should rename this class, currently use DS object name.</span>
+
+<span class="sd">    :param user: The user for current process definition. Will create a new one if it do not exists. If your</span>
+<span class="sd">        parameter ``project`` already exists but project&#39;s create do not belongs to ``user``, will grant</span>
+<span class="sd">        ``project`` to ``user`` automatically.</span>
+<span class="sd">    :param project: The project for current process definition. You could see the workflow in this project</span>
+<span class="sd">        thought Web UI after it :func:`submit` or :func:`run`. It will create a new project belongs to</span>
+<span class="sd">        ``user`` if it does not exists. And when ``project`` exists but project&#39;s create do not belongs</span>
+<span class="sd">        to ``user``, will grant `project` to ``user`` automatically.</span>
 <span class="sd">    &quot;&quot;&quot;</span>
 
     <span class="c1"># key attribute for identify ProcessDefinition object</span>
@@ -161,7 +169,6 @@
         <span class="n">user</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">WORKFLOW_USER</span><span class="p">,</span>
         <span class="n">project</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">WORKFLOW_PROJECT</span><span class="p">,</span>
         <span class="n">tenant</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">WORKFLOW_TENANT</span><span class="p">,</span>
-        <span class="n">queue</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">WORKFLOW_QUEUE</span><span class="p">,</span>
         <span class="n">worker_group</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">WORKFLOW_WORKER_GROUP</span><span class="p">,</span>
         <span class="n">timeout</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
         <span class="n">release_state</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">ProcessDefinitionReleaseState</span><span class="o">.</span><span class="n">ONLINE</span><span class="p">,</span>
@@ -175,7 +182,6 @@
         <span class="bp">self</span><span class="o">.</span><span class="n">_user</span> <span class="o">=</span> <span class="n">user</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_project</span> <span class="o">=</span> <span class="n">project</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">_tenant</span> <span class="o">=</span> <span class="n">tenant</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span> <span class="o">=</span> <span class="n">queue</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">worker_group</span> <span class="o">=</span> <span class="n">worker_group</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">timeout</span> <span class="o">=</span> <span class="n">timeout</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">release_state</span> <span class="o">=</span> <span class="n">release_state</span>
@@ -218,15 +224,7 @@
 
 <span class="sd">        For now we just get from python side but not from java gateway side, so it may not correct.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
-        <span class="k">return</span> <span class="n">User</span><span class="p">(</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">,</span>
-            <span class="n">configuration</span><span class="o">.</span><span class="n">USER_PASSWORD</span><span class="p">,</span>
-            <span class="n">configuration</span><span class="o">.</span><span class="n">USER_EMAIL</span><span class="p">,</span>
-            <span class="n">configuration</span><span class="o">.</span><span class="n">USER_PHONE</span><span class="p">,</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">_tenant</span><span class="p">,</span>
-            <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">,</span>
-            <span class="n">configuration</span><span class="o">.</span><span class="n">USER_STATE</span><span class="p">,</span>
-        <span class="p">)</span>
+        <span class="k">return</span> <span class="n">User</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">,</span> <span class="n">tenant</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_tenant</span><span class="p">)</span>
 
 <div class="viewcode-block" id="ProcessDefinition._parse_datetime"><a class="viewcode-back" href="../../../api.html#pydolphinscheduler.core.ProcessDefinition._parse_datetime">[docs]</a>    <span class="nd">@staticmethod</span>
     <span class="k">def</span> <span class="nf">_parse_datetime</span><span class="p">(</span><span class="n">val</span><span class="p">:</span> <span class="n">Any</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span class="p">:</span>
@@ -401,8 +399,6 @@
 <span class="sd">        :class:`pydolphinscheduler.constants.ProcessDefinitionDefault`.</span>
 <span class="sd">        &quot;&quot;&quot;</span>
         <span class="c1"># TODO used metaclass for more pythonic</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">tenant</span><span class="o">.</span><span class="n">create_if_not_exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">)</span>
-        <span class="c1"># model User have to create after Tenant created</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">create_if_not_exists</span><span class="p">()</span>
         <span class="c1"># Project model need User object exists</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">project</span><span class="o">.</span><span class="n">create_if_not_exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_user</span><span class="p">)</span></div>
diff --git a/python/_modules/pydolphinscheduler/side/project.html b/python/_modules/pydolphinscheduler/side/project.html
index 41b855f..b158946 100644
--- a/python/_modules/pydolphinscheduler/side/project.html
+++ b/python/_modules/pydolphinscheduler/side/project.html
@@ -107,7 +107,7 @@
 <div class="viewcode-block" id="Project.create_if_not_exists"><a class="viewcode-back" href="../../../api.html#pydolphinscheduler.side.Project.create_if_not_exists">[docs]</a>    <span class="k">def</span> <span class="nf">create_if_not_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="n">configuration</span><span class="o">.</span><span class="n">USER_NAME</span><span class="p">)</spa [...]
         <span class="sd">&quot;&quot;&quot;Create Project if not exists.&quot;&quot;&quot;</span>
         <span class="n">gateway</span> <span class="o">=</span> <span class="n">launch_gateway</span><span class="p">()</span>
-        <span class="n">gateway</span><span class="o">.</span><span class="n">entry_point</span><span class="o">.</span><span class="n">createProject</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">)</span></div></div>
+        <span class="n">gateway</span><span class="o">.</span><span class="n">entry_point</span><span class="o">.</span><span class="n">createOrGrantProject</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">)</span></div></div>
         <span class="c1"># TODO recover result checker</span>
         <span class="c1"># gateway_result_checker(result, None)</span>
 </pre></div>
diff --git a/python/_modules/pydolphinscheduler/side/user.html b/python/_modules/pydolphinscheduler/side/user.html
index e20d6fa..36a39bf 100644
--- a/python/_modules/pydolphinscheduler/side/user.html
+++ b/python/_modules/pydolphinscheduler/side/user.html
@@ -89,8 +89,10 @@
 
 <span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Optional</span>
 
+<span class="kn">from</span> <span class="nn">pydolphinscheduler.core</span> <span class="kn">import</span> <span class="n">configuration</span>
 <span class="kn">from</span> <span class="nn">pydolphinscheduler.core.base_side</span> <span class="kn">import</span> <span class="n">BaseSide</span>
 <span class="kn">from</span> <span class="nn">pydolphinscheduler.java_gateway</span> <span class="kn">import</span> <span class="n">launch_gateway</span>
+<span class="kn">from</span> <span class="nn">pydolphinscheduler.side.tenant</span> <span class="kn">import</span> <span class="n">Tenant</span>
 
 
 <div class="viewcode-block" id="User"><a class="viewcode-back" href="../../../api.html#pydolphinscheduler.side.User">[docs]</a><span class="k">class</span> <span class="nc">User</span><span class="p">(</span><span class="n">BaseSide</span><span class="p">):</span>
@@ -109,12 +111,12 @@
     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
         <span class="bp">self</span><span class="p">,</span>
         <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-        <span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-        <span class="n">email</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-        <span class="n">phone</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-        <span class="n">tenant</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-        <span class="n">queue</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-        <span class="n">status</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
+        <span class="n">password</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">USER_PASSWORD</span><span class="p">,</span>
+        <span class="n">email</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">USER_EMAIL</span><span class="p">,</span>
+        <span class="n">phone</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">USER_PHONE</span><span class="p">,</span>
+        <span class="n">tenant</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">WORKFLOW_TENANT</span><span class="p">,</span>
+        <span class="n">queue</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">WORKFLOW_QUEUE</span><span class="p">,</span>
+        <span class="n">status</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="n">configuration</span><span class="o">.</span><span class="n">USER_STATE</span><span class="p">,</span>
     <span class="p">):</span>
         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="n">password</span>
@@ -124,8 +126,15 @@
         <span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="n">queue</span>
         <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span>
 
+<div class="viewcode-block" id="User.create_tenant_if_not_exists"><a class="viewcode-back" href="../../../api.html#pydolphinscheduler.side.User.create_tenant_if_not_exists">[docs]</a>    <span class="k">def</span> <span class="nf">create_tenant_if_not_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="sd">&quot;&quot;&quot;Create tenant object.&quot;&quot;&quot;</span>
+        <span class="n">tenant</span> <span class="o">=</span> <span class="n">Tenant</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">tenant</span><span class="p">,</span> <span class="n">queue</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span>
+        <span class="n">tenant</span><span class="o">.</span><span class="n">create_if_not_exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="p">)</span></div>
+
 <div class="viewcode-block" id="User.create_if_not_exists"><a class="viewcode-back" href="../../../api.html#pydolphinscheduler.side.User.create_if_not_exists">[docs]</a>    <span class="k">def</span> <span class="nf">create_if_not_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
         <span class="sd">&quot;&quot;&quot;Create User if not exists.&quot;&quot;&quot;</span>
+        <span class="c1"># Should make sure queue already exists.</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">create_tenant_if_not_exists</span><span class="p">()</span>
         <span class="n">gateway</span> <span class="o">=</span> <span class="n">launch_gateway</span><span class="p">()</span>
         <span class="n">gateway</span><span class="o">.</span><span class="n">entry_point</span><span class="o">.</span><span class="n">createUser</span><span class="p">(</span>
             <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
diff --git a/python/api.html b/python/api.html
index 6bfe76e..c100949 100644
--- a/python/api.html
+++ b/python/api.html
@@ -174,10 +174,23 @@ In either case, this is followed by: for k in F:  D[k] = F[k]</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="pydolphinscheduler.core.ProcessDefinition">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pydolphinscheduler.core.</span></span><span class="sig-name descname"><span class="pre">ProcessDefinition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em> [...]
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pydolphinscheduler.core.</span></span><span class="sig-name descname"><span class="pre">ProcessDefinition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em> [...]
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">pydolphinscheduler.core.base.Base</span></code></p>
 <p>process definition object, will define process definition attribute, task, relation.</p>
 <p>TODO: maybe we should rename this class, currently use DS object name.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>user</strong> – The user for current process definition. Will create a new one if it do not exists. If your
+parameter <code class="docutils literal notranslate"><span class="pre">project</span></code> already exists but project’s create do not belongs to <code class="docutils literal notranslate"><span class="pre">user</span></code>, will grant
+<code class="docutils literal notranslate"><span class="pre">project</span></code> to <code class="docutils literal notranslate"><span class="pre">user</span></code> automatically.</p></li>
+<li><p><strong>project</strong> – The project for current process definition. You could see the workflow in this project
+thought Web UI after it <a class="reference internal" href="#pydolphinscheduler.core.ProcessDefinition.submit" title="pydolphinscheduler.core.ProcessDefinition.submit"><code class="xref py py-func docutils literal notranslate"><span class="pre">submit()</span></code></a> or <a class="reference internal" href="#pydolphinscheduler.core.ProcessDefinition.run" title="pydolphinscheduler.core.ProcessDefinition.run"><code class="xref py py-func docutils literal notranslate"><span class="pre">ru [...]
+<code class="docutils literal notranslate"><span class="pre">user</span></code> if it does not exists. And when <code class="docutils literal notranslate"><span class="pre">project</span></code> exists but project’s create do not belongs
+to <code class="docutils literal notranslate"><span class="pre">user</span></code>, will grant <cite>project</cite> to <code class="docutils literal notranslate"><span class="pre">user</span></code> automatically.</p></li>
+</ul>
+</dd>
+</dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="pydolphinscheduler.core.ProcessDefinition._ensure_side_model_exists">
 <span class="sig-name descname"><span class="pre">_ensure_side_model_exists</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pydolphinscheduler/core/process_definition.html#ProcessDefinition._ensure_side_model_exists"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#pydolphinscheduler.core.ProcessDefinition._ensure_side_model_exists" title="Permalink to this defini [...]
@@ -588,7 +601,7 @@ object tries to communicate with Java gateway server.</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="pydolphinscheduler.side.User">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pydolphinscheduler.side.</span></span><span class="sig-name descname"><span class="pre">User</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class=" [...]
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">pydolphinscheduler.side.</span></span><span class="sig-name descname"><span class="pre">User</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class=" [...]
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">pydolphinscheduler.core.base_side.BaseSide</span></code></p>
 <p>DolphinScheduler User object.</p>
 <dl class="py method">
@@ -598,6 +611,12 @@ object tries to communicate with Java gateway server.</p>
 </dd></dl>
 
 <dl class="py method">
+<dt class="sig sig-object py" id="pydolphinscheduler.side.User.create_tenant_if_not_exists">
+<span class="sig-name descname"><span class="pre">create_tenant_if_not_exists</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="reference internal" href="_modules/pydolphinscheduler/side/user.html#User.create_tenant_if_not_exists"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a  [...]
+<dd><p>Create tenant object.</p>
+</dd></dl>
+
+<dl class="py method">
 <dt class="sig sig-object py" id="pydolphinscheduler.side.User.get_define">
 <span class="sig-name descname"><span class="pre">get_define</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">camel_attr</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em><span class="si [...]
 <dd><p>Get object definition attribute communicate to Java gateway server.</p>
diff --git a/python/genindex.html b/python/genindex.html
index cb0a428..ba964e7 100644
--- a/python/genindex.html
+++ b/python/genindex.html
@@ -687,6 +687,8 @@
         <li><a href="api.html#pydolphinscheduler.side.WorkerGroup.create_if_not_exists">(pydolphinscheduler.side.WorkerGroup class method)</a>
 </li>
       </ul></li>
+      <li><a href="api.html#pydolphinscheduler.side.User.create_tenant_if_not_exists">create_tenant_if_not_exists() (pydolphinscheduler.side.User method)</a>
+</li>
       <li><a href="tasks/dependent.html#pydolphinscheduler.tasks.dependent.DependentDate.CURRENT_HOUR">CURRENT_HOUR (pydolphinscheduler.tasks.dependent.DependentDate attribute)</a>
 </li>
       <li><a href="api.html#pydolphinscheduler.tasks.DataX.CUSTOM_CONFIG">CUSTOM_CONFIG (pydolphinscheduler.tasks.DataX attribute)</a>
diff --git a/python/objects.inv b/python/objects.inv
index 5be27af..59b336f 100644
Binary files a/python/objects.inv and b/python/objects.inv differ
diff --git a/python/searchindex.js b/python/searchindex.js
index 19a35a6..eef093f 100644
--- a/python/searchindex.js
+++ b/python/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["api","cli","concept","index","start","tasks/condition","tasks/datax","tasks/dependent","tasks/flink","tasks/http","tasks/index","tasks/map_reduce","tasks/procedure","tasks/python","tasks/shell","tasks/spark","tasks/sql","tasks/sub_process","tasks/switch","tutorial"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphi [...]
\ No newline at end of file
+Search.setIndex({docnames:["api","cli","concept","index","start","tasks/condition","tasks/datax","tasks/dependent","tasks/flink","tasks/http","tasks/index","tasks/map_reduce","tasks/procedure","tasks/python","tasks/shell","tasks/spark","tasks/sql","tasks/sub_process","tasks/switch","tutorial"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphi [...]
\ No newline at end of file
diff --git a/zh-cn/docs/dev/user_doc/guide/alert/telegram.html b/zh-cn/docs/dev/user_doc/guide/alert/telegram.html
index 16c1561..64ca993 100644
--- a/zh-cn/docs/dev/user_doc/guide/alert/telegram.html
+++ b/zh-cn/docs/dev/user_doc/guide/alert/telegram.html
@@ -62,6 +62,12 @@
 </blockquote>
 </li>
 </ul>
+<p><strong>注意</strong>:用户配置的WebHook需要能够接收和使用与DolphinScheduler构造的HTTP POST请求BODY相同的结构,JSON结构如下:</p>
+<pre><code class="language-json">{
+    <span class="hljs-attr">&quot;text&quot;</span>: <span class="hljs-string">&quot;[{\&quot;projectId\&quot;:1,\&quot;projectName\&quot;:\&quot;p1\&quot;,\&quot;owner\&quot;:\&quot;admin\&quot;,\&quot;processId\&quot;:35,\&quot;processDefinitionCode\&quot;:4928367293568,\&quot;processName\&quot;:\&quot;s11-3-20220324084708668\&quot;,\&quot;taskCode\&quot;:4928359068928,\&quot;taskName\&quot;:\&quot;s1\&quot;,\&quot;taskType\&quot;:\&quot;SHELL\&quot;,\&quot;taskState\&quot;:\&quot;FAIL [...]
+    <span class="hljs-attr">&quot;chat_id&quot;</span>: <span class="hljs-string">&quot;chat id number&quot;</span>
+}
+</code></pre>
 <p><a href="https://core.telegram.org/bots">Telegram 如何申请机器人,如何创建频道</a>
 <a href="https://core.telegram.org/bots/api">Telegram 机器人开发文档</a>
 <a href="https://core.telegram.org/bots/api#sendmessage">Telegram SendMessage 接口文档</a></p>
diff --git a/zh-cn/docs/dev/user_doc/guide/alert/telegram.json b/zh-cn/docs/dev/user_doc/guide/alert/telegram.json
index 6f5a4c7..5285d2b 100644
--- a/zh-cn/docs/dev/user_doc/guide/alert/telegram.json
+++ b/zh-cn/docs/dev/user_doc/guide/alert/telegram.json
@@ -1,6 +1,6 @@
 {
   "filename": "telegram.md",
-  "__html": "<h1>Telegram</h1>\n<p>如果您需要使用<code>Telegram</code>进行告警,请在告警实例管理模块创建告警实例,选择<code>Telegram</code>插件。</p>\n<p><code>Telegram</code>的配置样例如下:</p>\n<p><img src=\"/img/alert/telegram-plugin.png\" alt=\"telegram-plugin\"></p>\n<p>参数配置:</p>\n<ul>\n<li>WebHook:\n<blockquote>\n<p>使用 Telegram 的机器人,发送消息的WebHook。</p>\n</blockquote>\n</li>\n<li>botToken\n<blockquote>\n<p>创建 Telegram 的机器人,获取的访问令牌。</p>\n</blockquote>\n</li>\n<li>chatId\n<blockquote>\n<p>订阅的 Telegram 频道</p>\n</blockquote>\n</ [...]
+  "__html": "<h1>Telegram</h1>\n<p>如果您需要使用<code>Telegram</code>进行告警,请在告警实例管理模块创建告警实例,选择<code>Telegram</code>插件。</p>\n<p><code>Telegram</code>的配置样例如下:</p>\n<p><img src=\"/img/alert/telegram-plugin.png\" alt=\"telegram-plugin\"></p>\n<p>参数配置:</p>\n<ul>\n<li>WebHook:\n<blockquote>\n<p>使用 Telegram 的机器人,发送消息的WebHook。</p>\n</blockquote>\n</li>\n<li>botToken\n<blockquote>\n<p>创建 Telegram 的机器人,获取的访问令牌。</p>\n</blockquote>\n</li>\n<li>chatId\n<blockquote>\n<p>订阅的 Telegram 频道</p>\n</blockquote>\n</ [...]
   "link": "/dist/zh-cn/docs/dev/user_doc/guide/alert/telegram.html",
   "meta": {}
 }
\ No newline at end of file