From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 8D4EF68CFF for ; Fri, 15 Jan 2021 10:46:49 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 89B4622DD1 for ; Fri, 15 Jan 2021 10:46:49 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id DD75C22DBF for ; Fri, 15 Jan 2021 10:46:47 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 97019441E4 for ; Fri, 15 Jan 2021 10:46:47 +0100 (CET) From: Stoiko Ivanov To: pmg-devel@lists.proxmox.com Date: Fri, 15 Jan 2021 10:46:24 +0100 Message-Id: <20210115094626.25440-5-s.ivanov@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210115094626.25440-1-s.ivanov@proxmox.com> References: <20210115094626.25440-1-s.ivanov@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.066 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_FILL_THIS_FORM_SHORT 0.01 Fill in a short form with personal information URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [statistics.pm] Subject: [pmg-devel] [PATCH pmg-api 4/5] api: statistics: make email a parameter X-BeenThere: pmg-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Mail Gateway development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jan 2021 09:46:49 -0000 This patch adds additional endpoints for the detailed contact, sender and receiver statistics. instead of passing the e-mail address as path component it is taken as explicit parameter. the idea follows a similar change for the user blocklists in e8d909c11faeb5a4f84f39ef50e0eaf8ea65046d sadly the path-prefix without pattern (/contact, /sender, /receiver) is already used (for the list of e-mail addresses), thus the alternative paths /contacts, /senders/, /receivers are introduced to maintain backward compatibility. The new api calls allow the statistics to be displayed for addresses containing '/' in their localpart, once this is permitted in our api schema. Signed-off-by: Stoiko Ivanov --- src/PMG/API2/Statistics.pm | 137 ++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 3 deletions(-) diff --git a/src/PMG/API2/Statistics.pm b/src/PMG/API2/Statistics.pm index ffddbbe..e09d746 100644 --- a/src/PMG/API2/Statistics.pm +++ b/src/PMG/API2/Statistics.pm @@ -44,6 +44,7 @@ __PACKAGE__->register_method ({ return [ { name => "contact" }, + { name => "contacts" }, { name => "domains" }, { name => "mail" }, { name => "mailcount" }, @@ -52,8 +53,10 @@ __PACKAGE__->register_method ({ { name => "maildistribution" }, { name => "spamscores" }, { name => "sender" }, + { name => "senders" }, { name => "rblcount" }, { name => "receiver" }, + { name => "receivers" }, { name => "virus" }, ]; }}); @@ -312,11 +315,54 @@ sub get_detail_statistics { return $res; } +__PACKAGE__->register_method ({ + name => 'contactdetails_base', + path => 'contacts', + method => 'GET', + description => "Detailed Contact Statistics.", + permissions => { check => [ 'admin', 'qmanager', 'audit'] }, + parameters => { + additionalProperties => 0, + properties => $default_properties->({ + contact => get_standard_option('pmg-email-address', { + description => "Contact email address.", + }), + filter => { + description => "Sender address filter.", + type => 'string', + maxLength => 512, + optional => 1, + }, + orderby => $api_properties->{orderby}, + }), + }, + returns => { + type => 'array', + items => { + type => "object", + properties => { + %detail_return_properties, + sender => { + description => "Sender email.", + type => 'string', + }, + }, + }, + }, + code => sub { + my ($param) = @_; + + return get_detail_statistics('contact', $param); + }}); + + +# FIXME: remove for PMG 7.0 - addresses can contain stuff like '/' which breaks +# API path resolution, thus we replaced it by above "un-templated" call __PACKAGE__->register_method ({ name => 'contactdetails', path => 'contact/{contact}', method => 'GET', - description => "Detailed Contact Statistics.", + description => "Detailed Contact Statistics. DEPRECATED: use /statistics/contacts instead.", permissions => { check => [ 'admin', 'qmanager', 'audit'] }, parameters => { additionalProperties => 0, @@ -416,11 +462,54 @@ __PACKAGE__->register_method ({ return $res; }}); +__PACKAGE__->register_method ({ + name => 'senderdetails_base', + path => 'senders', + method => 'GET', + description => "Detailed Sender Statistics.", + permissions => { check => [ 'admin', 'qmanager', 'audit'] }, + parameters => { + additionalProperties => 0, + properties => $default_properties->({ + sender => get_standard_option('pmg-email-address', { + description => "Sender email address.", + }), + filter => { + description => "Receiver address filter.", + type => 'string', + maxLength => 512, + optional => 1, + }, + orderby => $api_properties->{orderby}, + }), + }, + returns => { + type => 'array', + items => { + type => "object", + properties => { + %detail_return_properties, + receiver => { + description => "Receiver email.", + type => 'string', + }, + }, + }, + }, + code => sub { + my ($param) = @_; + + return get_detail_statistics('sender', $param); + }}); + + +# FIXME: remove for PMG 7.0 - addresses can contain stuff like '/' which breaks +# API path resolution, thus we replaced it by above "un-templated" call __PACKAGE__->register_method ({ name => 'senderdetails', path => 'sender/{sender}', method => 'GET', - description => "Detailed Sender Statistics.", + description => "Detailed Sender Statistics. DEPRECATED: use /statistics/senders instead.", permissions => { check => [ 'admin', 'qmanager', 'audit'] }, parameters => { additionalProperties => 0, @@ -528,11 +617,53 @@ __PACKAGE__->register_method ({ return $res; }}); +__PACKAGE__->register_method ({ + name => 'receiverdetails_base', + path => 'receivers', + method => 'GET', + description => "Detailed Receiver Statistics.", + permissions => { check => [ 'admin', 'qmanager', 'audit'] }, + parameters => { + additionalProperties => 0, + properties => $default_properties->({ + receiver => get_standard_option('pmg-email-address', { + description => "Receiver email address.", + }), + filter => { + description => "Sender address filter.", + type => 'string', + maxLength => 512, + optional => 1, + }, + orderby => $api_properties->{orderby}, + }), + }, + returns => { + type => 'array', + items => { + type => "object", + properties => { + %detail_return_properties, + sender => { + description => "Sender email.", + type => 'string', + }, + }, + }, + }, + code => sub { + my ($param) = @_; + + return get_detail_statistics('receiver', $param); + }}); + +# FIXME: remove for PMG 7.0 - addresses can contain stuff like '/' which breaks +# API path resolution, thus we replaced it by above "un-templated" call __PACKAGE__->register_method ({ name => 'receiverdetails', path => 'receiver/{receiver}', method => 'GET', - description => "Detailed Receiver Statistics.", + description => "Detailed Receiver Statistics. DEPRECATED: use /statistics/receivers instead.", permissions => { check => [ 'admin', 'qmanager', 'audit'] }, parameters => { additionalProperties => 0, -- 2.20.1