public inbox for pmg-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Stoiko Ivanov <s.ivanov@proxmox.com>
To: Mira Limbeck <m.limbeck@proxmox.com>
Cc: pmg-devel@lists.proxmox.com
Subject: [pmg-devel] applied-series: [PATCH log-tracker 1/2] add compatibility with API/Tracking Center
Date: Wed, 28 Jun 2023 12:06:51 +0200	[thread overview]
Message-ID: <20230628120651.21cff008@rosa.proxmox.com> (raw)
In-Reply-To: <20230628085429.324086-1-m.limbeck@proxmox.com>

Thanks for addressing the issue so quickly and far cleaner than my RFC!
Thanks also for the testing!

quickly verified that it looks good on my test-system and applied with
Dominik's R-b, T-b

small nit I just realized after pushing - a mention of rfc3339/new
syslogformat parsing in the commit subject or message would have been good.


On Wed, 28 Jun 2023 10:54:28 +0200
Mira Limbeck <m.limbeck@proxmox.com> wrote:

> The API assumes the timestamps to be in the local timezone rather than
> UTC. It then subtracts the timezone offset leading to wrong values when
> timestamps are in UTC, but timezone is not.
> 
> For compatibility, add the local timezone to those timestamps.
> 
> Signed-off-by: Mira Limbeck <m.limbeck@proxmox.com>
> ---
>  src/main.rs | 43 ++++++++++++++++++++++++++++++++-----------
>  1 file changed, 32 insertions(+), 11 deletions(-)
> 
> diff --git a/src/main.rs b/src/main.rs
> index e7bffd8..e55f17b 100644
> --- a/src/main.rs
> +++ b/src/main.rs
> @@ -1737,6 +1737,8 @@ struct Parser {
>      string_match: bool,
>  
>      lines: u64,
> +
> +    timezone_offset: time_t,
>  }
>  
>  impl Parser {
> @@ -1762,6 +1764,7 @@ impl Parser {
>              ctime: 0,
>              string_match: false,
>              lines: 0,
> +            timezone_offset: ltime.tm_gmtoff,
>          })
>      }
>  
> @@ -1836,7 +1839,12 @@ impl Parser {
>              let line = &buffer[0..size - 1];
>              let complete_line = line;
>  
> -            let (time, line) = match parse_time(line, self.current_year, self.current_month) {
> +            let (time, line) = match parse_time(
> +                line,
> +                self.current_year,
> +                self.current_month,
> +                self.timezone_offset,
> +            ) {
>                  Some(t) => t,
>                  None => continue,
>              };
> @@ -1920,9 +1928,12 @@ impl Parser {
>                          if size == 0 {
>                              return count;
>                          }
> -                        if let Some((time, _)) =
> -                            parse_time(&buffer[0..size], self.current_year, self.current_month)
> -                        {
> +                        if let Some((time, _)) = parse_time(
> +                            &buffer[0..size],
> +                            self.current_year,
> +                            self.current_month,
> +                            self.timezone_offset,
> +                        ) {
>                              // found the earliest file in the time frame
>                              if time < self.options.start {
>                                  break;
> @@ -1937,9 +1948,12 @@ impl Parser {
>                          if size == 0 {
>                              return count;
>                          }
> -                        if let Some((time, _)) =
> -                            parse_time(&buffer[0..size], self.current_year, self.current_month)
> -                        {
> +                        if let Some((time, _)) = parse_time(
> +                            &buffer[0..size],
> +                            self.current_year,
> +                            self.current_month,
> +                            self.timezone_offset,
> +                        ) {
>                              if time < self.options.start {
>                                  break;
>                              }
> @@ -2235,11 +2249,17 @@ fn parse_number(data: &[u8], max_digits: usize) -> Option<(usize, &[u8])> {
>  }
>  
>  /// Parse time. Returns a tuple of (parsed_time, remaining_text) or None.
> -fn parse_time(data: &'_ [u8], cur_year: i64, cur_month: i64) -> Option<(time_t, &'_ [u8])> {
> -    parse_time_with_year(data).or_else(|| parse_time_no_year(data, cur_year, cur_month))
> +fn parse_time(
> +    data: &'_ [u8],
> +    cur_year: i64,
> +    cur_month: i64,
> +    timezone_offset: time_t,
> +) -> Option<(time_t, &'_ [u8])> {
> +    parse_time_with_year(data, timezone_offset)
> +        .or_else(|| parse_time_no_year(data, cur_year, cur_month))
>  }
>  
> -fn parse_time_with_year(data: &'_ [u8]) -> Option<(time_t, &'_ [u8])> {
> +fn parse_time_with_year(data: &'_ [u8], timezone_offset: time_t) -> Option<(time_t, &'_ [u8])> {
>      let mut timestamp_buffer = [0u8; 25];
>  
>      let count = data.iter().take_while(|b| **b != b' ').count();
> @@ -2266,7 +2286,8 @@ fn parse_time_with_year(data: &'_ [u8]) -> Option<(time_t, &'_ [u8])> {
>      match proxmox_time::parse_rfc3339(unsafe {
>          std::str::from_utf8_unchecked(&timestamp_buffer[0..timestamp_len])
>      }) {
> -        Ok(ltime) => Some((ltime, data)),
> +        // TODO handle timezone offset in old code path instead
> +        Ok(ltime) => Some((ltime + timezone_offset, data)),
>          Err(_err) => None,
>      }
>  }





      parent reply	other threads:[~2023-06-28 10:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-28  8:54 [pmg-devel] " Mira Limbeck
2023-06-28  8:54 ` [pmg-devel] [PATCH log-tracker 2/2] tests: update to match the compatibility changes Mira Limbeck
2023-06-28  9:38 ` [pmg-devel] [PATCH log-tracker 1/2] add compatibility with API/Tracking Center Dominik Csapak
2023-06-28 10:06 ` Stoiko Ivanov [this message]

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=20230628120651.21cff008@rosa.proxmox.com \
    --to=s.ivanov@proxmox.com \
    --cc=m.limbeck@proxmox.com \
    --cc=pmg-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