all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Lukas Wagner <l.wagner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager v5 08/16] api: notification: add API for getting known metadata fields/values
Date: Mon, 15 Apr 2024 10:26:06 +0200	[thread overview]
Message-ID: <20240415082614.2515677-9-l.wagner@proxmox.com> (raw)
In-Reply-To: <20240415082614.2515677-1-l.wagner@proxmox.com>

This new API route returns known notification metadata fields and
a list of known possible values. This will be used by the UI to
provide suggestions when adding/modifying match rules.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 PVE/API2/Cluster/Notifications.pm | 152 ++++++++++++++++++++++++++++++
 1 file changed, 152 insertions(+)

diff --git a/PVE/API2/Cluster/Notifications.pm b/PVE/API2/Cluster/Notifications.pm
index 68fdda2a..16548bec 100644
--- a/PVE/API2/Cluster/Notifications.pm
+++ b/PVE/API2/Cluster/Notifications.pm
@@ -79,12 +79,164 @@ __PACKAGE__->register_method ({
 	    { name => 'endpoints' },
 	    { name => 'matchers' },
 	    { name => 'targets' },
+	    { name => 'fields' },
+	    { name => 'values' },
 	];
 
 	return $result;
     }
 });
 
+__PACKAGE__->register_method ({
+    name => 'get_fields',
+    path => 'fields',
+    method => 'GET',
+    description => 'Returns known notification metadata fields and their known values',
+    permissions => {
+	check => ['or',
+	    ['perm', '/mapping/notifications', ['Mapping.Modify']],
+	    ['perm', '/mapping/notifications', ['Mapping.Audit']],
+	],
+    },
+    protected => 1,
+    parameters => {
+	additionalProperties => 0,
+	properties => {},
+    },
+    returns => {
+	type => 'array',
+	items => {
+	    type => 'object',
+	    properties => {
+		name => {
+		    description => 'Name of the field.',
+		    type => 'string',
+		},
+	    },
+	},
+	links => [ { rel => 'child', href => '{name}' } ],
+    },
+    code => sub {
+	# TODO: Adapt this API handler once we have a 'notification registry'
+
+	my $result = [
+	    { name => 'type' },
+	    { name => 'hostname' },
+	    { name => 'backup-job' },
+	    { name => 'replication-job' },
+	];
+
+	return $result;
+    }
+});
+
+__PACKAGE__->register_method ({
+    name => 'get_field_values',
+    path => 'values',
+    method => 'GET',
+    description => 'Returns known notification metadata fields and their known values',
+    permissions => {
+	check => ['or',
+	    ['perm', '/mapping/notifications', ['Mapping.Modify']],
+	    ['perm', '/mapping/notifications', ['Mapping.Audit']],
+	],
+    },
+    protected => 1,
+    parameters => {
+	additionalProperties => 0,
+    },
+    returns => {
+	type => 'array',
+	items => {
+	    type => 'object',
+	    properties => {
+		'value' => {
+		    description => 'Notification metadata value known by the system.',
+		    type => 'string'
+		},
+		'comment' => {
+		    description => 'Additional comment for this value.',
+		    type => 'string',
+		    optional => 1,
+		},
+		'field' => {
+		    description => 'Field this value belongs to.',
+		    type => 'string',
+		    optional => 1,
+		},
+		'internal' => {
+		    description => 'Set if "value" was generated by the system and can'
+		       . ' safely be used as base for translations.',
+		    type => 'boolean',
+		    optional => 1,
+		},
+	    },
+	},
+    },
+    code => sub {
+	# TODO: Adapt this API handler once we have a 'notification registry'
+	my $rpcenv = PVE::RPCEnvironment::get();
+	my $user = $rpcenv->get_user();
+
+	my $values = [
+	    {
+		value => 'package-updates',
+		internal => 1,
+		field => 'type',
+	    },
+	    {
+		value => 'fencing',
+		internal => 1,
+		field => 'type',
+	    },
+	    {
+		value => 'replication',
+		internal => 1,
+		field => 'type',
+	    },
+	    {
+		value => 'vzdump',
+		internal => 1,
+		field => 'type',
+	    },
+	    {
+		value => 'system-mail',
+		internal => 1,
+		field => 'type',
+	    },
+	];
+
+	# Here we need a manual permission check.
+	if ($rpcenv->check($user, "/", ["Sys.Audit"], 1)) {
+	    for my $backup_job (@{PVE::API2::Backup->index({})}) {
+		push @$values, {
+		    value => $backup_job->{id},
+		    comment => $backup_job->{comment},
+		    field => 'backup-job'
+		};
+	    }
+	}
+	# The API call returns only returns jobs for which the user
+	# has adequate permissions.
+	for my $sync_job (@{PVE::API2::ReplicationConfig->index({})}) {
+	    push @$values, {
+		value => $sync_job->{id},
+		comment => $sync_job->{comment},
+		field => 'replication-job'
+	    };
+	}
+
+	for my $node (@{PVE::Cluster::get_nodelist()}) {
+	    push @$values, {
+		value => $node,
+		field => 'hostname',
+	    }
+	}
+
+	return $values;
+    }
+});
+
 __PACKAGE__->register_method ({
     name => 'endpoints_index',
     path => 'endpoints',
-- 
2.39.2





  parent reply	other threads:[~2024-04-15  8:26 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-15  8:25 [pve-devel] [PATCH docs/manager/widget-toolkit v5 00/16] notifications: notification metadata matching improvements Lukas Wagner
2024-04-15  8:25 ` [pve-devel] [PATCH manager v5 01/16] api: notifications: add 'smtp' to target index Lukas Wagner
2024-04-19 10:47   ` [pve-devel] applied: " Fiona Ebner
2024-04-15  8:26 ` [pve-devel] [PATCH manager v5 02/16] api: jobs: vzdump: pass job 'id' parameter Lukas Wagner
2024-04-19 11:53   ` Fiona Ebner
2024-04-15  8:26 ` [pve-devel] [PATCH manager v5 03/16] ui: dc: backup: send 'id' property when starting a backup job manually Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH manager v5 04/16] ui: dc: backup: allow to set custom job id in advanced settings Lukas Wagner
2024-04-19 10:22   ` Fiona Ebner
2024-04-19 10:31   ` Fiona Ebner
2024-04-19 12:23     ` Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH manager v5 05/16] api: replication: add 'replication-job' to notification metadata Lukas Wagner
2024-04-19 12:02   ` Fiona Ebner
2024-04-19 12:22     ` Lukas Wagner
2024-04-19 13:11       ` Fiona Ebner
2024-04-19 13:15         ` Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH manager v5 06/16] vzdump: apt: notification: do not include domain in 'hostname' field Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH manager v5 07/16] api: replication: include 'hostname' field for notifications Lukas Wagner
2024-04-15  8:26 ` Lukas Wagner [this message]
2024-04-19 12:59   ` [pve-devel] [PATCH manager v5 08/16] api: notification: add API for getting known metadata fields/values Fiona Ebner
2024-04-19 13:45   ` Fiona Ebner
2024-04-19 14:01     ` Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH manager v5 09/16] ui: utils: add overrides for translatable notification fields/values Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH widget-toolkit v5 10/16] notification: matcher: match-field: show known fields/values Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH widget-toolkit v5 11/16] notification: matcher: move match-field formulas to local viewModel Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH widget-toolkit v5 12/16] notification: matcher: move match-calendar fields to panel Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH widget-toolkit v5 13/16] notification: matcher: move match-severity " Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH docs v5 14/16] notification: clarify that 'hostname' does not include the domain Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH docs v5 15/16] notifications: describe new notification metadata fields Lukas Wagner
2024-04-15  8:26 ` [pve-devel] [PATCH docs v5 16/16] notifications: match-field 'exact'-mode can now match multiple values 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=20240415082614.2515677-9-l.wagner@proxmox.com \
    --to=l.wagner@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal