all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Dominik Csapak <d.csapak@proxmox.com>
Cc: pbs-devel@lists.proxmox.com
Subject: Re: [pbs-devel] [PATCH proxmox-backup v8 1/7] pbs-api-types: add metrics api types
Date: Thu, 9 Jun 2022 14:35:50 +0200	[thread overview]
Message-ID: <20220609123550.6obwgixv4dfd6s3j@wobu-vie.proxmox.com> (raw)
In-Reply-To: <20220608122238.3490889-2-d.csapak@proxmox.com>

Just minor notes.

On Wed, Jun 08, 2022 at 02:22:32PM +0200, Dominik Csapak wrote:
> InfluxDbUdp and InfluxDbHttp for now
> 
> introduces schemas for host:port and https urls
> 
> Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
> ---
>  pbs-api-types/src/lib.rs     |  17 +++++
>  pbs-api-types/src/metrics.rs | 138 +++++++++++++++++++++++++++++++++++
>  2 files changed, 155 insertions(+)
>  create mode 100644 pbs-api-types/src/metrics.rs
> 
> diff --git a/pbs-api-types/src/lib.rs b/pbs-api-types/src/lib.rs
> index d9c8cee1..70c9ec45 100644
> --- a/pbs-api-types/src/lib.rs
> +++ b/pbs-api-types/src/lib.rs
> @@ -120,6 +120,9 @@ pub use traffic_control::*;
>  mod zfs;
>  pub use zfs::*;
>  
> +mod metrics;
> +pub use metrics::*;
> +
>  #[rustfmt::skip]
>  #[macro_use]
>  mod local_macros {
> @@ -131,6 +134,7 @@ mod local_macros {
>      macro_rules! DNS_ALIAS_NAME {
>          () => (concat!(r"(?:(?:", DNS_ALIAS_LABEL!() , r"\.)*", DNS_ALIAS_LABEL!(), ")"))
>      }
> +    macro_rules! PORT_REGEX_STR { () => (r"(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])") }
>  }
>  
>  const_regex! {
> @@ -144,6 +148,8 @@ const_regex! {
>      pub DNS_NAME_REGEX =  concat!(r"^", DNS_NAME!(), r"$");
>      pub DNS_ALIAS_REGEX =  concat!(r"^", DNS_ALIAS_NAME!(), r"$");
>      pub DNS_NAME_OR_IP_REGEX = concat!(r"^(?:", DNS_NAME!(), "|",  IPRE!(), r")$");
> +    pub HOST_PORT_REGEX = concat!(r"^(?:", DNS_NAME!(), "|", IPRE_BRACKET!(), "):", PORT_REGEX_STR!() ,"$");
> +    pub HTTP_URL_REGEX = concat!(r"^https?://(?:(?:(?:", DNS_NAME!(), "|", IPRE_BRACKET!(), ")(?::", PORT_REGEX_STR!() ,")?)|", IPV6RE!(),")(?:/[^\x00-\x1F\x7F]*)?$");

🥴

This is fine, but...

Okay so, a lot of our types make use of regexes for the sake of being
documented at least badly.
But I do believe that http urls are known well-enough that we could just
as well use a verify-function here instead (which, yes, will not show
up at all in any of our generated documentation, but hey... it's a URL)

But then again that's probably true for a few more types.

Anyway, I don't mind keeping this, I just don't like the sight of it.
No need to actually change this in a v2.

(...)
> diff --git a/pbs-api-types/src/metrics.rs b/pbs-api-types/src/metrics.rs
> new file mode 100644
> index 00000000..239d6c80
> --- /dev/null
> +++ b/pbs-api-types/src/metrics.rs
> @@ -0,0 +1,138 @@
> +use serde::{Deserialize, Serialize};
> +
> +use crate::{
> +    HOST_PORT_SCHEMA, HTTP_URL_SCHEMA, PROXMOX_SAFE_ID_FORMAT, SINGLE_LINE_COMMENT_SCHEMA,
> +};
> +use proxmox_schema::{api, Schema, StringSchema, Updater};
> +
> +pub const METRIC_SERVER_ID_SCHEMA: Schema = StringSchema::new("Metrics Server ID.")
> +    .format(&PROXMOX_SAFE_ID_FORMAT)
> +    .min_length(3)
> +    .max_length(32)
> +    .schema();
> +
> +pub const INFLUXDB_BUCKET_SCHEMA: Schema = StringSchema::new("InfluxDB Bucket.")
> +    .format(&PROXMOX_SAFE_ID_FORMAT)
> +    .min_length(3)
> +    .max_length(32)
> +    .default("proxmox")
> +    .schema();
> +
> +pub const INFLUXDB_ORGANIZATION_SCHEMA: Schema = StringSchema::new("InfluxDB Organization.")
> +    .format(&PROXMOX_SAFE_ID_FORMAT)
> +    .min_length(3)
> +    .max_length(32)
> +    .default("proxmox")
> +    .schema();
> +
> +#[api(
> +    properties: {
> +        name: {
> +            schema: METRIC_SERVER_ID_SCHEMA,
> +        },
> +        enable: {
> +            type: bool,
> +            optional: true,
> +            default: true,
> +        },
> +        host: {
> +            schema: HOST_PORT_SCHEMA,
> +        },
> +        mtu: {
> +            type: u16,
> +            optional: true,
> +            default: 1500,
> +        },
> +        comment: {
> +            optional: true,
> +            schema: SINGLE_LINE_COMMENT_SCHEMA,
> +        },
> +    },
> +)]
> +#[derive(Serialize, Deserialize, Updater)]
> +#[serde(rename_all = "kebab-case")]
> +/// InfluxDB Server (UDP)
> +pub struct InfluxDbUdp {
> +    #[updater(skip)]
> +    pub name: String,
> +    #[serde(skip_serializing_if = "Option::is_none")]
> +    /// Enables or disables the metrics server
> +    pub enable: Option<bool>,

Since the last api-macro update you could also skip the `Option` part
here by using a `skip_serializing_if = "is_true"` and replacing the
Updater's serde attribute via
`#[updater(serde(skip_serializing_if = "Option::is_none"))]`

(see `PruneJobConfig.disable`)

That way we have `enable: 0` to disable it, and "no enable attribute
present" for it to be enabled.




  reply	other threads:[~2022-06-09 12:35 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-08 12:22 [pbs-devel] [PATCH proxmox-backup v8 0/7] add metrics server capability Dominik Csapak
2022-06-08 12:22 ` [pbs-devel] [PATCH proxmox-backup v8 1/7] pbs-api-types: add metrics api types Dominik Csapak
2022-06-09 12:35   ` Wolfgang Bumiller [this message]
2022-06-08 12:22 ` [pbs-devel] [PATCH proxmox-backup v8 2/7] pbs-config: add metrics config class Dominik Csapak
2022-06-10  6:26   ` Wolfgang Bumiller
2022-06-08 12:22 ` [pbs-devel] [PATCH proxmox-backup v8 3/7] backup-proxy: decouple stats gathering from rrd update Dominik Csapak
2022-06-08 12:22 ` [pbs-devel] [PATCH proxmox-backup v8 4/7] proxmox-backup-proxy: send metrics to configured metrics server Dominik Csapak
2022-06-08 12:22 ` [pbs-devel] [PATCH proxmox-backup v8 5/7] api: add metricserver endpoints Dominik Csapak
2022-06-08 12:22 ` [pbs-devel] [PATCH proxmox-backup v8 6/7] ui: add window/InfluxDbEdit Dominik Csapak
2022-06-08 12:22 ` [pbs-devel] [PATCH proxmox-backup v8 7/7] ui: add MetricServerView and use it Dominik Csapak

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=20220609123550.6obwgixv4dfd6s3j@wobu-vie.proxmox.com \
    --to=w.bumiller@proxmox.com \
    --cc=d.csapak@proxmox.com \
    --cc=pbs-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