public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: "Max Carrara" <m.carrara@proxmox.com>
To: "Lukas Wagner" <l.wagner@proxmox.com>,
	"Proxmox VE development discussion" <pve-devel@lists.proxmox.com>,
	"Proxmox Backup Server development discussion"
	<pbs-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [pbs-devel] [PATCH manager v2 07/12] api: add routes for webhook notification endpoints
Date: Mon, 22 Jul 2024 11:50:57 +0200	[thread overview]
Message-ID: <D2VZ3QT294RL.2P96JUSP6FNM8@proxmox.com> (raw)
In-Reply-To: <b1779060-cf93-407b-81d1-bd773150b4a5@proxmox.com>

On Mon Jul 22, 2024 at 9:37 AM CEST, Lukas Wagner wrote:
>
>
> On  2024-07-17 17:36, Max Carrara wrote:
> > On Fri Jul 12, 2024 at 1:27 PM CEST, Lukas Wagner wrote:
> >> These just call the API implementation via the perl-rs bindings.
> >>
> >> Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
> >> ---
> >>  PVE/API2/Cluster/Notifications.pm | 263 +++++++++++++++++++++++++++++-
> >>  1 file changed, 262 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/PVE/API2/Cluster/Notifications.pm b/PVE/API2/Cluster/Notifications.pm
> >> index 10b611c9..eae2d436 100644
> >> --- a/PVE/API2/Cluster/Notifications.pm
> >> +++ b/PVE/API2/Cluster/Notifications.pm
> >> @@ -108,6 +108,7 @@ __PACKAGE__->register_method ({
> >>  	    { name => 'gotify' },
> >>  	    { name => 'sendmail' },
> >>  	    { name => 'smtp' },
> >> +	    { name => 'webhook' },
> >>  	];
> >>  
> >>  	return $result;
> >> @@ -144,7 +145,7 @@ __PACKAGE__->register_method ({
> >>  		'type' => {
> >>  		    description => 'Type of the target.',
> >>  		    type  => 'string',
> >> -		    enum => [qw(sendmail gotify smtp)],
> >> +		    enum => [qw(sendmail gotify smtp webhook)],
> >>  		},
> >>  		'comment' => {
> >>  		    description => 'Comment',
> >> @@ -1094,6 +1095,266 @@ __PACKAGE__->register_method ({
> >>      }
> >>  });
> >>  
> >> +my $webhook_properties = {
> >> +    name => {
> >> +	description => 'The name of the endpoint.',
> >> +	type => 'string',
> >> +	format => 'pve-configid',
> >> +    },
> >> +    url => {
> >> +	description => 'Server URL',
> >> +	type => 'string',
> >> +    },
> >> +    method => {
> >> +	description => 'HTTP method',
> >> +	type => 'string',
> >> +	enum => [qw(post put get)],
> >> +    },
> >> +    header => {
> >> +	description => 'HTTP headers to set. These have to be formatted as'
> >> +	  . ' a property string in the format name=<name>,value=<base64 of value>',
> >> +	type => 'array',
> >> +	items => {
> >> +	    type => 'string',
> >> +	},
> >> +	optional => 1,
> >> +    },
> >> +    body => {
> >> +	description => 'HTTP body, base64 encoded',
> >> +	type => 'string',
> >> +	optional => 1,
> >> +    },
> >> +    secret => {
> >> +	description => 'Secrets to set. These have to be formatted as'
> >> +	  . ' a property string in the format name=<name>,value=<base64 of value>',
> >> +	type => 'array',
> >> +	items => {
> >> +	    type => 'string',
> >> +	},
> >> +	optional => 1,
> >> +    },
> >> +    comment => {
> >> +	description => 'Comment',
> >> +	type => 'string',
> >> +	optional => 1,
> >> +    },
> >> +    disable => {
> >> +	description => 'Disable this target',
> >> +	type => 'boolean',
> >> +	optional => 1,
> >> +	default => 0,
> >> +    },
> >> +};
> >> +
> >> +__PACKAGE__->register_method ({
> >> +    name => 'get_webhook_endpoints',
> >> +    path => 'endpoints/webhook',
> >> +    method => 'GET',
> >> +    description => 'Returns a list of all webhook endpoints',
> >> +    protected => 1,
> >> +    permissions => {
> >> +	check => ['perm', '/mapping/notifications', ['Mapping.Modify']],
> >> +	check => ['perm', '/mapping/notifications', ['Mapping.Audit']],
> >> +    },
> >> +    parameters => {
> >> +	additionalProperties => 0,
> >> +	properties => {},
> >> +    },
> >> +    returns => {
> >> +	type => 'array',
> >> +	items => {
> >> +	    type => 'object',
> >> +	    properties => {
> >> +		%$webhook_properties,
> > 
> > Would prefer `$webhook_properties->%*` here (postfix dereferencing) -
> > even though not explicitly stated in our style guide, we use that kind
> > of syntax for calling subroutines behind a reference, e.g.
> > `$foo->($arg)` instead of `&$foo($arg)`.
> > 
>
> I kinda prefer the brevity of the prefix variant in this case. Are there
> any pitfalls/problems with the prefix that I'm not aware of? If not, I'd prefer
> to keep this as is, I used the syntax in many other spots in this file ;)

I personally have no hard feelings if you keep it tbh. Postfix
dereference is mainly useful if you have e.g. a nested hash (or rather,
makes more sense) because of how the code is usually read. For example,

    %$foo->{bar}->{baz}

vs

    $foo->{bar}->{baz}->%*

I'd argue that the main benefit is that it's easier to read for people
who aren't as familiar with Perl, but before this gets too bikesheddy,
I'm personally fine if you keep it as-is for simple cases like the above
:P


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


  reply	other threads:[~2024-07-22  9:50 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-12 11:27 [pve-devel] [RFC many v2 00/12] notifications: add support for webhook endpoints Lukas Wagner
2024-07-12 11:27 ` [pve-devel] [PATCH proxmox v2 01/12] notify: implement webhook targets Lukas Wagner
2024-07-17 15:35   ` [pve-devel] [pbs-devel] " Max Carrara
2024-07-22  7:30     ` Lukas Wagner
2024-07-22  9:41       ` Max Carrara
2024-07-12 11:27 ` [pve-devel] [PATCH proxmox v2 02/12] notify: add api for " Lukas Wagner
2024-07-17 15:35   ` Max Carrara
2024-07-22  7:32     ` Lukas Wagner
2024-07-12 11:27 ` [pve-devel] [PATCH proxmox-perl-rs v2 03/12] common: notify: add bindings for webhook API routes Lukas Wagner
2024-07-17 15:35   ` Max Carrara
2024-07-12 11:27 ` [pve-devel] [PATCH proxmox-perl-rs v2 04/12] common: notify: add bindings for get_targets Lukas Wagner
2024-07-17 15:36   ` [pve-devel] [pbs-devel] " Max Carrara
2024-07-12 11:27 ` [pve-devel] [PATCH widget-toolkit v2 05/12] notification: add UI for adding/updating webhook targets Lukas Wagner
2024-07-12 11:27 ` [pve-devel] [PATCH manager v2 06/12] api: notifications: use get_targets impl from proxmox-notify Lukas Wagner
2024-07-12 11:27 ` [pve-devel] [PATCH manager v2 07/12] api: add routes for webhook notification endpoints Lukas Wagner
2024-07-17 15:36   ` [pve-devel] [pbs-devel] " Max Carrara
2024-07-22  7:37     ` Lukas Wagner
2024-07-22  9:50       ` Max Carrara [this message]
2024-07-22 13:56         ` Thomas Lamprecht
2024-07-12 11:27 ` [pve-devel] [PATCH proxmox-backup v2 09/12] api: notification: add API routes for webhook targets Lukas Wagner
2024-07-12 11:27 ` [pve-devel] [PATCH proxmox-backup v2 10/12] ui: utils: enable webhook edit window Lukas Wagner
2024-07-12 11:27 ` [pve-devel] [PATCH proxmox-mail-forward v2 12/12] bump proxmox-notify dependency Lukas Wagner
2024-07-17 15:34 ` [pve-devel] [RFC many v2 00/12] notifications: add support for webhook endpoints Max Carrara
2024-07-22  7:50   ` Lukas Wagner
2024-07-22 12:10 ` Stefan Hanreich
2024-07-22 12:29   ` Lukas Wagner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=D2VZ3QT294RL.2P96JUSP6FNM8@proxmox.com \
    --to=m.carrara@proxmox.com \
    --cc=l.wagner@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal