public inbox for [email protected]help / color / mirror / Atom feed
[pgAdmin][RM6794]: Provide functionality to disable/enable rules 4+ messages / 2 participants [nested] [flat]
* [pgAdmin][RM6794]: Provide functionality to disable/enable rules @ 2021-10-11 14:07 Pradip Parkale <[email protected]> 0 siblings, 1 reply; 4+ messages in thread From: Pradip Parkale @ 2021-10-11 14:07 UTC (permalink / raw) To: pgadmin-hackers Hi Hackers, Please find the updated patch for #6794 Provide functionality to disable/enable rules. This patch also includes the fix for #6870 Unable to delete server group if first server group has shared server. -- Thanks & Regards, Pradip Parkale Software Engineer | EnterpriseDB Corporation Attachments: [application/octet-stream] RM6794.patch (12.4K, 3-RM6794.patch) download | inline diff: diff --git a/web/pgadmin/browser/server_groups/__init__.py b/web/pgadmin/browser/server_groups/__init__.py index 561772636..1cedc9c5d 100644 --- a/web/pgadmin/browser/server_groups/__init__.py +++ b/web/pgadmin/browser/server_groups/__init__.py @@ -177,7 +177,7 @@ class ServerGroupView(NodeView): # if server group id is 1 we won't delete it. sg = groups.first() - shared_servers = Server.query.filter_by(servergroup_id=sg.id, + shared_servers = Server.query.filter_by(servergroup_id=gid, shared=True).all() if shared_servers: return make_json_response( diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py index 75a91c6b3..4c078043d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py @@ -249,7 +249,7 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare): rset['rows'][0]['oid'], tid, rset['rows'][0]['name'], - icon="icon-rule" + icon="icon-rule" if rset['rows'][0]['enabled'] else "icon-rule-bad" ) return make_json_response( @@ -276,7 +276,7 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare): row['oid'], tid, row['name'], - icon="icon-rule" + icon="icon-rule" if row['enabled'] else "icon-rule-bad" )) return make_json_response( @@ -385,7 +385,9 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare): rid, tid, name, - icon="icon-%s" % self.node_type + icon="icon-%s" % self.node_type if 'enabled' in data and + data['enabled'] + else "icon-%s-bad" % self.node_type ) ) except Exception as e: diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/img/rule-bad.svg b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/img/rule-bad.svg new file mode 100644 index 000000000..a1b4aef87 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/img/rule-bad.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#FEE07B;stroke:#DDA91D;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;} + .st1{fill:none;stroke:#DDA91D;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;} + .st2{fill:#D0021B;} +</style> +<g> + <g id="_8"> + <rect x="2.4" y="5" class="st0" width="11.1" height="6"/> + <line class="st1" x1="10.9" y1="5.4" x2="10.9" y2="8.9"/> + <line class="st1" x1="6.9" y1="5.4" x2="6.9" y2="8.9"/> + <line class="st1" x1="8.9" y1="5.4" x2="8.9" y2="7.9"/> + <line class="st1" x1="4.9" y1="5.4" x2="4.9" y2="7.9"/> + </g> + <path class="st2" d="M14,5.1l1-1c0.3-0.3,0.3-0.8,0-1.1s-0.8-0.3-1.1,0l-1,1l-1-1c-0.3-0.3-0.8-0.3-1.1,0s-0.3,0.8,0,1.1l1,1l-1,1 + c-0.3,0.3-0.3,0.8,0,1.1c0.1,0.1,0.3,0.2,0.5,0.2s0.6-0.1,0.7-0.3l1-1l1,1c0.1,0.1,0.3,0.2,0.5,0.2s0.4,0,0.5-0.2 + c0.3-0.3,0.3-0.8,0-1.1L14,5.1z"/> +</g> +</svg> diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js index 48f055b41..db29fedbf 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js @@ -12,8 +12,8 @@ import RuleSchema from './rule.ui'; define('pgadmin.node.rule', [ 'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'sources/pgadmin', 'pgadmin.browser', 'pgadmin.backform', - 'pgadmin.node.schema.dir/schema_child_tree_node', -], function(gettext, url_for, $, _, pgAdmin, pgBrowser, Backform, SchemaChildTreeNode) { + 'pgadmin.node.schema.dir/schema_child_tree_node', 'pgadmin.alertifyjs', +], function(gettext, url_for, $, _, pgAdmin, pgBrowser, Backform, SchemaChildTreeNode, alertify) { /** Create and add a rule collection into nodes @@ -112,8 +112,93 @@ define('pgadmin.node.rule', [ icon: 'wcTabIcon icon-rule', data: {action: 'create', check: true}, enable: 'canCreate', }, + { + name: 'enable_rule', node: 'rule', module: this, + applies: ['object', 'context'], callback: 'enable_rule', + category: 'connect', priority: 3, label: gettext('Enable rule'), + icon: 'fa fa-check', enable: 'canCreate_with_rule_enable', + },{ + name: 'disable_rule', node: 'rule', module: this, + applies: ['object', 'context'], callback: 'disable_rule', + category: 'drop', priority: 3, label: gettext('Disable rule'), + icon: 'fa fa-times', enable: 'canCreate_with_rule_disable' + } ]); }, + callbacks: { + /* Enable rule */ + enable_rule: function(args) { + var input = args || {}, + obj = this, + t = pgBrowser.tree, + i = input.item || t.selected(), + d = i ? t.itemData(i) : undefined; + + if (!d) + return false; + + var data = d; + $.ajax({ + url: obj.generate_url(i, 'obj' , d, true), + type:'PUT', + data: {'enabled' : 'true'}, + dataType: 'json', + }) + .done(function() { + alertify.success('Rule updated.'); + t.removeIcon(i); + data.icon = 'icon-rule'; + t.addIcon(i, {icon: data.icon}); + t.unload(i); + t.setInode(false); + t.deselect(i); + // Fetch updated data from server + setTimeout(function() { + t.select(i); + }, 10); + }) + .fail(function(xhr, status, error) { + alertify.pgRespErrorNotify(xhr, error); + t.unload(i); + }); + }, + /* Disable rule */ + disable_rule: function(args) { + var input = args || {}, + obj = this, + t = pgBrowser.tree, + i = input.item || t.selected(), + d = i ? t.itemData(i) : undefined; + + if (!d) + return false; + + var data = d; + $.ajax({ + url: obj.generate_url(i, 'obj' , d, true), + type:'PUT', + data: {'enabled' : 'false'}, + dataType: 'json', + }) + .done(function() { + alertify.success('Rule updated'); + t.removeIcon(i); + data.icon = 'icon-rule-bad'; + t.addIcon(i, {icon: data.icon}); + t.unload(i); + t.setInode(false); + t.deselect(i); + // Fetch updated data from server + setTimeout(function() { + t.select(i); + }, 10); + }) + .fail(function(xhr, status, error) { + alertify.pgRespErrorNotify(xhr, error, gettext('Disable rule failed')); + t.unload(i); + }); + }, + }, getSchema: function(treeNodeInfo, itemNodeData) { return new RuleSchema( { @@ -216,6 +301,26 @@ define('pgadmin.node.rule', [ }, + canCreate_with_rule_enable: function(itemData, item, data) { + var treeData = pgBrowser.tree.getTreeNodeHierarchy(item); + if ('view' in treeData) { + return false; + } + + return itemData.icon === 'icon-rule-bad' && + this.canCreate.apply(this,[itemData, item, data]); + }, + // Check to whether rule is enable ? + canCreate_with_rule_disable: function(itemData, item, data) { + var treeData = pgBrowser.tree.getTreeNodeHierarchy(item); + if ('view' in treeData) { + return false; + } + + return itemData.icon === 'icon-rule' && + this.canCreate.apply(itemData, item, data); + }, + }); } diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.ui.js index 777de8b17..80a33778f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.ui.js @@ -66,6 +66,11 @@ export default class RuleSchema extends BaseUISchema { state.view = obj.fieldOptions.nodeData.label; }, }, + { + id: 'enabled', label: gettext('Enabled?'), + type: 'switch', mode: ['properties', 'edit'], + group: gettext('Definition'), + }, { id: 'event', label: gettext('Event'), control: 'select2', group: gettext('Definition'), type: 'select', @@ -94,10 +99,6 @@ export default class RuleSchema extends BaseUISchema { id: 'system_rule', label: gettext('System rule?'), type: 'switch', mode: ['properties'], }, - { - id: 'enabled', label: gettext('Enabled?'), - type: 'switch', mode: ['properties'], - }, { id: 'comment', label: gettext('Comment'), cell: 'text', type: 'multiline', }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/css/rule.css b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/css/rule.css index 0d7339cf8..63f4ecbce 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/css/rule.css +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/css/rule.css @@ -7,3 +7,14 @@ vertical-align: middle; height: 1.3em; } + + +.icon-rule-bad{ + background-image: url('{{ url_for('NODE-rule.static', filename='img/rule-bad.svg') }}') !important; + border-radius: 10px; + background-size: 20px !important; + background-repeat: no-repeat; + align-content: center; + vertical-align: middle; + height: 1.3em; +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/nodes.sql index 67ddae002..2019197a1 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/nodes.sql @@ -1,6 +1,7 @@ SELECT rw.oid AS oid, - rw.rulename AS name + rw.rulename AS name, + CASE WHEN rw.ev_enabled != 'D' THEN True ELSE False END AS enabled FROM pg_catalog.pg_rewrite rw WHERE diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql index e033af7b8..81c961d8f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql @@ -35,3 +35,7 @@ CREATE OR REPLACE RULE {{ conn|qtIdent(rule_name) }} AS {% set old_comment = o_data.comment|default('', true) %} {% if (data.comment is defined and (data.comment != old_comment)) %} COMMENT ON RULE {{ conn|qtIdent(rule_name) }} ON {{ conn|qtIdent(o_data.schema, o_data.view) }} IS {{ data.comment|qtLiteral }};{% endif %} + +{% if data.enabled is defined and o_data.enabled != data.enabled %} +ALTER TABLE {{ conn|qtIdent(o_data.schema, o_data.view) }} {% if (data.enabled in ['false', False]) %}DISABLE{% endif %}{% if (data.enabled in ['true', True]) %}ENABLE{% endif %} RULE {{ conn|qtIdent(o_data.name) }}; +{% endif %} ^ permalink raw reply [nested|flat] 4+ messages in thread
* Re: [pgAdmin][RM6794]: Provide functionality to disable/enable rules @ 2021-10-12 12:07 Akshay Joshi <[email protected]> parent: Pradip Parkale <[email protected]> 0 siblings, 1 reply; 4+ messages in thread From: Akshay Joshi @ 2021-10-12 12:07 UTC (permalink / raw) To: Pradip Parkale <[email protected]>; +Cc: pgadmin-hackers Hi Pradip You forgot to implement the following: ENABLE REPLICA RULE rewrite_rule_name ENABLE ALWAYS RULE rewrite_rule_name It is just like a trigger, you need to get the drop-down in edit mode. Please update the documentation and screenshot as well. On Mon, Oct 11, 2021 at 7:37 PM Pradip Parkale < [email protected]> wrote: > Hi Hackers, > > Please find the updated patch for #6794 Provide functionality to > disable/enable rules. > > This patch also includes the fix for #6870 Unable to delete server group > if first server group has shared server. > > -- > Thanks & Regards, > Pradip Parkale > Software Engineer | EnterpriseDB Corporation > -- *Thanks & Regards* *Akshay Joshi* *pgAdmin Hacker | Principal Software Architect* *EDB Postgres <http://edbpostgres.com>* *Mobile: +91 976-788-8246* ^ permalink raw reply [nested|flat] 4+ messages in thread
* Re: [pgAdmin][RM6794]: Provide functionality to disable/enable rules @ 2021-10-13 11:20 Pradip Parkale <[email protected]> parent: Akshay Joshi <[email protected]> 0 siblings, 1 reply; 4+ messages in thread From: Pradip Parkale @ 2021-10-13 11:20 UTC (permalink / raw) To: Akshay Joshi <[email protected]>; +Cc: pgadmin-hackers Hi Akshay, Please find the updated patch. On Tue, Oct 12, 2021 at 5:37 PM Akshay Joshi <[email protected]> wrote: > Hi Pradip > > You forgot to implement the following: > ENABLE REPLICA RULE rewrite_rule_name > ENABLE ALWAYS RULE rewrite_rule_name > Fixed. > > It is just like a trigger, you need to get the drop-down in edit mode. > Please update the documentation and screenshot as well. > Fixed. > > > On Mon, Oct 11, 2021 at 7:37 PM Pradip Parkale < > [email protected]> wrote: > >> Hi Hackers, >> >> Please find the updated patch for #6794 Provide functionality to >> disable/enable rules. >> >> This patch also includes the fix for #6870 Unable to delete server group >> if first server group has shared server. >> >> -- >> Thanks & Regards, >> Pradip Parkale >> Software Engineer | EnterpriseDB Corporation >> > > > -- > *Thanks & Regards* > *Akshay Joshi* > *pgAdmin Hacker | Principal Software Architect* > *EDB Postgres <http://edbpostgres.com>* > > *Mobile: +91 976-788-8246* > -- Thanks & Regards, Pradip Parkale Software Engineer | EnterpriseDB Corporation Attachments: [application/octet-stream] RM6794_v2.patch (78.2K, 3-RM6794_v2.patch) download | inline diff: diff --git a/docs/en_US/images/rule_definition_enabled.png b/docs/en_US/images/rule_definition_enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6764d8eda21927848c4a0cc41ee25c35b37314cb GIT binary patch literal 55235 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 Fe*r!X-^Ks{ literal 0 HcmV?d00001 diff --git a/docs/en_US/rule_dialog.rst b/docs/en_US/rule_dialog.rst index 2baebe662..152107cfe 100644 --- a/docs/en_US/rule_dialog.rst +++ b/docs/en_US/rule_dialog.rst @@ -37,6 +37,13 @@ Use the fields in the *Definition* tab to write parameters: executed instead of the original command; if Do Instead specifies *No*, the rule will be invoked in addition to the original command. +.. image:: images/rule_definition_enabled.png + :alt: Trigger enabled in dialog tab + :align: center + +* *Rule enabled* field is available in rule dialog once the rule is created. + You can select one of the four options available. + Click the *Condition* tab to continue. .. image:: images/rule_condition.png diff --git a/web/pgadmin/browser/server_groups/__init__.py b/web/pgadmin/browser/server_groups/__init__.py index 561772636..1cedc9c5d 100644 --- a/web/pgadmin/browser/server_groups/__init__.py +++ b/web/pgadmin/browser/server_groups/__init__.py @@ -177,7 +177,7 @@ class ServerGroupView(NodeView): # if server group id is 1 we won't delete it. sg = groups.first() - shared_servers = Server.query.filter_by(servergroup_id=sg.id, + shared_servers = Server.query.filter_by(servergroup_id=gid, shared=True).all() if shared_servers: return make_json_response( diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py index 75a91c6b3..9a01eed4f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py @@ -249,7 +249,8 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare): rset['rows'][0]['oid'], tid, rset['rows'][0]['name'], - icon="icon-rule" + icon="icon-rule" if + rset['rows'][0]['is_enable_rule'] == 'D' else "icon-rule-bad" ) return make_json_response( @@ -276,7 +277,9 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare): row['oid'], tid, row['name'], - icon="icon-rule" + icon="icon-rule-bad" + if 'is_enable_rule' in row and + row['is_enable_rule'] == 'D' else "icon-rule" )) return make_json_response( @@ -385,7 +388,10 @@ class RuleView(PGChildNodeView, SchemaDiffObjectCompare): rid, tid, name, - icon="icon-%s" % self.node_type + icon="icon-%s-bad" % self.node_type + if 'is_enable_rule' in data and + data['is_enable_rule'] == 'D' + else "icon-%s" % self.node_type ) ) except Exception as e: diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/img/rule-bad.svg b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/img/rule-bad.svg new file mode 100644 index 000000000..a1b4aef87 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/img/rule-bad.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#FEE07B;stroke:#DDA91D;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;} + .st1{fill:none;stroke:#DDA91D;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;} + .st2{fill:#D0021B;} +</style> +<g> + <g id="_8"> + <rect x="2.4" y="5" class="st0" width="11.1" height="6"/> + <line class="st1" x1="10.9" y1="5.4" x2="10.9" y2="8.9"/> + <line class="st1" x1="6.9" y1="5.4" x2="6.9" y2="8.9"/> + <line class="st1" x1="8.9" y1="5.4" x2="8.9" y2="7.9"/> + <line class="st1" x1="4.9" y1="5.4" x2="4.9" y2="7.9"/> + </g> + <path class="st2" d="M14,5.1l1-1c0.3-0.3,0.3-0.8,0-1.1s-0.8-0.3-1.1,0l-1,1l-1-1c-0.3-0.3-0.8-0.3-1.1,0s-0.3,0.8,0,1.1l1,1l-1,1 + c-0.3,0.3-0.3,0.8,0,1.1c0.1,0.1,0.3,0.2,0.5,0.2s0.6-0.1,0.7-0.3l1-1l1,1c0.1,0.1,0.3,0.2,0.5,0.2s0.4,0,0.5-0.2 + c0.3-0.3,0.3-0.8,0-1.1L14,5.1z"/> +</g> +</svg> diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js index 48f055b41..915189591 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js @@ -12,8 +12,8 @@ import RuleSchema from './rule.ui'; define('pgadmin.node.rule', [ 'sources/gettext', 'sources/url_for', 'jquery', 'underscore', 'sources/pgadmin', 'pgadmin.browser', 'pgadmin.backform', - 'pgadmin.node.schema.dir/schema_child_tree_node', -], function(gettext, url_for, $, _, pgAdmin, pgBrowser, Backform, SchemaChildTreeNode) { + 'pgadmin.node.schema.dir/schema_child_tree_node', 'pgadmin.alertifyjs', +], function(gettext, url_for, $, _, pgAdmin, pgBrowser, Backform, SchemaChildTreeNode, alertify) { /** Create and add a rule collection into nodes @@ -112,8 +112,93 @@ define('pgadmin.node.rule', [ icon: 'wcTabIcon icon-rule', data: {action: 'create', check: true}, enable: 'canCreate', }, + { + name: 'enable_rule', node: 'rule', module: this, + applies: ['object', 'context'], callback: 'enable_rule', + category: 'connect', priority: 3, label: gettext('Enable rule'), + icon: 'fa fa-check', enable: 'canCreate_with_rule_enable', + },{ + name: 'disable_rule', node: 'rule', module: this, + applies: ['object', 'context'], callback: 'disable_rule', + category: 'drop', priority: 3, label: gettext('Disable rule'), + icon: 'fa fa-times', enable: 'canCreate_with_rule_disable' + } ]); }, + callbacks: { + /* Enable rule */ + enable_rule: function(args) { + var input = args || {}, + obj = this, + t = pgBrowser.tree, + i = input.item || t.selected(), + d = i ? t.itemData(i) : undefined; + + if (!d) + return false; + + var data = d; + $.ajax({ + url: obj.generate_url(i, 'obj' , d, true), + type:'PUT', + data: {'is_enable_rule' : 'O'}, + dataType: 'json', + }) + .done(function() { + alertify.success('Rule updated.'); + t.removeIcon(i); + data.icon = 'icon-rule'; + t.addIcon(i, {icon: data.icon}); + t.unload(i); + t.setInode(false); + t.deselect(i); + // Fetch updated data from server + setTimeout(function() { + t.select(i); + }, 10); + }) + .fail(function(xhr, status, error) { + alertify.pgRespErrorNotify(xhr, error); + t.unload(i); + }); + }, + /* Disable rule */ + disable_rule: function(args) { + var input = args || {}, + obj = this, + t = pgBrowser.tree, + i = input.item || t.selected(), + d = i ? t.itemData(i) : undefined; + + if (!d) + return false; + + var data = d; + $.ajax({ + url: obj.generate_url(i, 'obj' , d, true), + type:'PUT', + data: {'is_enable_rule' : 'D'}, + dataType: 'json', + }) + .done(function() { + alertify.success('Rule updated'); + t.removeIcon(i); + data.icon = 'icon-rule-bad'; + t.addIcon(i, {icon: data.icon}); + t.unload(i); + t.setInode(false); + t.deselect(i); + // Fetch updated data from server + setTimeout(function() { + t.select(i); + }, 10); + }) + .fail(function(xhr, status, error) { + alertify.pgRespErrorNotify(xhr, error, gettext('Disable rule failed')); + t.unload(i); + }); + }, + }, getSchema: function(treeNodeInfo, itemNodeData) { return new RuleSchema( { @@ -216,6 +301,26 @@ define('pgadmin.node.rule', [ }, + canCreate_with_rule_enable: function(itemData, item, data) { + var treeData = pgBrowser.tree.getTreeNodeHierarchy(item); + if ('view' in treeData) { + return false; + } + + return itemData.icon === 'icon-rule-bad' && + this.canCreate.apply(this,[itemData, item, data]); + }, + // Check to whether rule is enable ? + canCreate_with_rule_disable: function(itemData, item, data) { + var treeData = pgBrowser.tree.getTreeNodeHierarchy(item); + if ('view' in treeData) { + return false; + } + + return itemData.icon === 'icon-rule' && + this.canCreate.apply(itemData, item, data); + }, + }); } diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.ui.js index 777de8b17..c15e82ef1 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.ui.js @@ -66,6 +66,24 @@ export default class RuleSchema extends BaseUISchema { state.view = obj.fieldOptions.nodeData.label; }, }, + { + id: 'is_enable_rule', label: gettext('Rule enabled?'), + mode: ['edit', 'properties'], group: gettext('Definition'), + type: 'select', + disabled: () => { + if('catalog' in obj.fieldOptions.nodeInfo || 'view' in obj.fieldOptions.nodeInfo) { + return true; + } + return false; + }, + options: [ + {label: gettext('Enable'), value: 'O'}, + {label: gettext('Enable Replica'), value: 'R'}, + {label: gettext('Enable Always'), value: 'A'}, + {label: gettext('Disable'), value: 'D'}, + ], + controlProps: { allowClear: false }, + }, { id: 'event', label: gettext('Event'), control: 'select2', group: gettext('Definition'), type: 'select', @@ -94,10 +112,6 @@ export default class RuleSchema extends BaseUISchema { id: 'system_rule', label: gettext('System rule?'), type: 'switch', mode: ['properties'], }, - { - id: 'enabled', label: gettext('Enabled?'), - type: 'switch', mode: ['properties'], - }, { id: 'comment', label: gettext('Comment'), cell: 'text', type: 'multiline', }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/css/rule.css b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/css/rule.css index 0d7339cf8..63f4ecbce 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/css/rule.css +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/css/rule.css @@ -7,3 +7,14 @@ vertical-align: middle; height: 1.3em; } + + +.icon-rule-bad{ + background-image: url('{{ url_for('NODE-rule.static', filename='img/rule-bad.svg') }}') !important; + border-radius: 10px; + background-size: 20px !important; + background-repeat: no-repeat; + align-content: center; + vertical-align: middle; + height: 1.3em; +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/nodes.sql index 67ddae002..343b40bcf 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/nodes.sql @@ -1,6 +1,9 @@ SELECT rw.oid AS oid, - rw.rulename AS name + rw.rulename AS name, + CASE WHEN rw.ev_enabled != 'D' THEN True ELSE False END AS enabled, + rw.ev_enabled AS is_enable_rule + FROM pg_catalog.pg_rewrite rw WHERE diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/properties.sql index c983896b0..8f238bb8e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/properties.sql @@ -12,6 +12,7 @@ SELECT {# ===== Check whether it is system rule or not ===== #} CASE WHEN rw.rulename = '_RETURN' THEN True ELSE False END AS system_rule, CASE WHEN rw.ev_enabled != 'D' THEN True ELSE False END AS enabled, + rw.ev_enabled AS is_enable_rule, pg_catalog.pg_get_ruledef(rw.oid) AS definition FROM pg_catalog.pg_rewrite rw diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql index e033af7b8..90a94e2a8 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/rules/sql/update.sql @@ -35,3 +35,13 @@ CREATE OR REPLACE RULE {{ conn|qtIdent(rule_name) }} AS {% set old_comment = o_data.comment|default('', true) %} {% if (data.comment is defined and (data.comment != old_comment)) %} COMMENT ON RULE {{ conn|qtIdent(rule_name) }} ON {{ conn|qtIdent(o_data.schema, o_data.view) }} IS {{ data.comment|qtLiteral }};{% endif %} + +{% if data.enabled is defined and o_data.enabled != data.enabled %} +ALTER TABLE {{ conn|qtIdent(o_data.schema, o_data.view) }} {% if (data.enabled in ['false', False]) %}DISABLE{% endif %}{% if (data.enabled in ['true', True]) %}ENABLE{% endif %} RULE {{ conn|qtIdent(o_data.name) }}; +{% endif %} + +{% if data.is_enable_rule is defined and o_data.is_enable_rule != data.is_enable_rule %} +{% set enable_map = {'R':'ENABLE REPLICA', 'A':'ENABLE ALWAYS', 'O':'ENABLE', 'D':'DISABLE'} %} +ALTER TABLE {{ conn|qtIdent(o_data.schema, o_data.view) }} + {{ enable_map[data.is_enable_rule] }} RULE {{ conn|qtIdent(o_data.name) }}; +{% endif %} ^ permalink raw reply [nested|flat] 4+ messages in thread
* Re: [pgAdmin][RM6794]: Provide functionality to disable/enable rules @ 2021-10-14 06:17 Akshay Joshi <[email protected]> parent: Pradip Parkale <[email protected]> 0 siblings, 0 replies; 4+ messages in thread From: Akshay Joshi @ 2021-10-14 06:17 UTC (permalink / raw) To: Pradip Parkale <[email protected]>; +Cc: pgadmin-hackers Thanks, the patch applied. On Wed, Oct 13, 2021 at 4:50 PM Pradip Parkale < [email protected]> wrote: > Hi Akshay, > > Please find the updated patch. > > On Tue, Oct 12, 2021 at 5:37 PM Akshay Joshi < > [email protected]> wrote: > >> Hi Pradip >> >> You forgot to implement the following: >> ENABLE REPLICA RULE rewrite_rule_name >> ENABLE ALWAYS RULE rewrite_rule_name >> > Fixed. > >> >> It is just like a trigger, you need to get the drop-down in edit mode. >> Please update the documentation and screenshot as well. >> > Fixed. > >> >> >> On Mon, Oct 11, 2021 at 7:37 PM Pradip Parkale < >> [email protected]> wrote: >> >>> Hi Hackers, >>> >>> Please find the updated patch for #6794 Provide functionality to >>> disable/enable rules. >>> >>> This patch also includes the fix for #6870 Unable to delete server group >>> if first server group has shared server. >>> >>> -- >>> Thanks & Regards, >>> Pradip Parkale >>> Software Engineer | EnterpriseDB Corporation >>> >> >> >> -- >> *Thanks & Regards* >> *Akshay Joshi* >> *pgAdmin Hacker | Principal Software Architect* >> *EDB Postgres <http://edbpostgres.com>* >> >> *Mobile: +91 976-788-8246* >> > > > -- > Thanks & Regards, > Pradip Parkale > Software Engineer | EnterpriseDB Corporation > -- *Thanks & Regards* *Akshay Joshi* *pgAdmin Hacker | Principal Software Architect* *EDB Postgres <http://edbpostgres.com>* *Mobile: +91 976-788-8246* ^ permalink raw reply [nested|flat] 4+ messages in thread
end of thread, other threads:[~2021-10-14 06:17 UTC | newest] Thread overview: 4+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2021-10-11 14:07 [pgAdmin][RM6794]: Provide functionality to disable/enable rules Pradip Parkale <[email protected]> 2021-10-12 12:07 ` Akshay Joshi <[email protected]> 2021-10-13 11:20 ` Pradip Parkale <[email protected]> 2021-10-14 06:17 ` Akshay Joshi <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox