All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v5] qga: Add `guest-get-timezone` command
@ 2017-03-23 11:39 Vinzenz 'evilissimo' Feenstra
  2017-03-23 11:39 ` Vinzenz 'evilissimo' Feenstra
  0 siblings, 1 reply; 6+ messages in thread
From: Vinzenz 'evilissimo' Feenstra @ 2017-03-23 11:39 UTC (permalink / raw)
  To: qemu-devel; +Cc: eblake, mdroth, sameeh, marcandre.lureau, Vinzenz Feenstra

From: Vinzenz Feenstra <vfeenstr@redhat.com>

Changes since v4:
- Corrected usage of the optional zone (Missing has_zone = true)
- Updated documentation string for offset in the schema
- Removed unnecessary checks
- Uses the current time to check for the interval, not 0
- Switched to UNIVERSAL time type, since that can't fail and is all that's
  needed

Vinzenz Feenstra (1):
  qga: Add `guest-get-timezone` command

 qga/commands.c       | 29 +++++++++++++++++++++++++++++
 qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH v5] qga: Add `guest-get-timezone` command
  2017-03-23 11:39 [Qemu-devel] [PATCH v5] qga: Add `guest-get-timezone` command Vinzenz 'evilissimo' Feenstra
@ 2017-03-23 11:39 ` Vinzenz 'evilissimo' Feenstra
  2017-04-04  6:57   ` Vinzenz Feenstra
                     ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Vinzenz 'evilissimo' Feenstra @ 2017-03-23 11:39 UTC (permalink / raw)
  To: qemu-devel; +Cc: eblake, mdroth, sameeh, marcandre.lureau, Vinzenz Feenstra

From: Vinzenz Feenstra <vfeenstr@redhat.com>

Adds a new command `guest-get-timezone` reporting the currently
configured timezone on the system. The information on what timezone is
currently is configured is useful in case of Windows VMs where the
offset of the hardware clock is required to have the same offset. This
can be used for management systems like `oVirt` to detect the timezone
difference and warn administrators of the misconfiguration.

Signed-off-by: Vinzenz Feenstra <vfeenstr@redhat.com>
---
 qga/commands.c       | 29 +++++++++++++++++++++++++++++
 qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)

diff --git a/qga/commands.c b/qga/commands.c
index 4d92946..3b5789c 100644
--- a/qga/commands.c
+++ b/qga/commands.c
@@ -499,3 +499,32 @@ int ga_parse_whence(GuestFileWhence *whence, Error **errp)
     error_setg(errp, "invalid whence code %"PRId64, whence->u.value);
     return -1;
 }
+
+GuestTimezone *qmp_guest_get_timezone(Error **errp)
+{
+    GuestTimezone *info = g_new0(GuestTimezone, 1);
+    GTimeZone *tz = g_time_zone_new_local();
+    if (tz == NULL) {
+        error_setg(errp, QERR_QGA_COMMAND_FAILED,
+                   "Couldn't retrieve local timezone");
+        goto error;
+    }
+
+    gint64 now = g_get_real_time() / G_USEC_PER_SEC;
+    gint32 intv = g_time_zone_find_interval(tz, G_TIME_TYPE_UNIVERSAL, now);
+    info->offset = g_time_zone_get_offset(tz, intv);
+    gchar const *name = g_time_zone_get_abbreviation(tz, intv);
+    if (name != NULL) {
+        info->has_zone = true;
+        info->zone = g_strdup(name);
+    }
+    g_time_zone_unref(tz);
+
+    return info;
+
+error:
+    g_time_zone_unref(tz);
+    g_free(info);
+    return NULL;
+}
+
diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
index a02dbf2..5183ea2 100644
--- a/qga/qapi-schema.json
+++ b/qga/qapi-schema.json
@@ -1042,3 +1042,29 @@
   'data':    { 'path': 'str', '*arg': ['str'], '*env': ['str'],
                '*input-data': 'str', '*capture-output': 'bool' },
   'returns': 'GuestExec' }
+
+
+##
+# @GuestTimezone:
+#
+# @zone:    Timezone name
+# @offset:  Offset to UTC in seconds, negative numbers for time zones west of
+#           GMT, positive numbers for east
+#
+# Since: 2.10
+##
+{ 'struct': 'GuestTimezone',
+  'data':   { '*zone': 'str', 'offset': 'int' } }
+
+
+##
+# @guest-get-timezone:
+#
+# Retrieves the timezone information from the guest.
+#
+# Returns: A GuestTimezone dictionary.
+#
+# Since: 2.10
+##
+{ 'command': 'guest-get-timezone',
+  'returns': 'GuestTimezone' }
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH v5] qga: Add `guest-get-timezone` command
  2017-03-23 11:39 ` Vinzenz 'evilissimo' Feenstra
@ 2017-04-04  6:57   ` Vinzenz Feenstra
  2017-04-04  9:42   ` Sameeh Jubran
  2017-04-18 23:19   ` Michael Roth
  2 siblings, 0 replies; 6+ messages in thread
From: Vinzenz Feenstra @ 2017-04-04  6:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: Eric Blake, Michael Roth, Sameeh Jubran, marcandre.lureau

Ping

> On Mar 23, 2017, at 12:39 PM, Vinzenz 'evilissimo' Feenstra <vfeenstr@redhat.com> wrote:
> 
> From: Vinzenz Feenstra <vfeenstr@redhat.com>
> 
> Adds a new command `guest-get-timezone` reporting the currently
> configured timezone on the system. The information on what timezone is
> currently is configured is useful in case of Windows VMs where the
> offset of the hardware clock is required to have the same offset. This
> can be used for management systems like `oVirt` to detect the timezone
> difference and warn administrators of the misconfiguration.
> 
> Signed-off-by: Vinzenz Feenstra <vfeenstr@redhat.com>
> ---
> qga/commands.c       | 29 +++++++++++++++++++++++++++++
> qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
> 2 files changed, 55 insertions(+)
> 
> diff --git a/qga/commands.c b/qga/commands.c
> index 4d92946..3b5789c 100644
> --- a/qga/commands.c
> +++ b/qga/commands.c
> @@ -499,3 +499,32 @@ int ga_parse_whence(GuestFileWhence *whence, Error **errp)
>     error_setg(errp, "invalid whence code %"PRId64, whence->u.value);
>     return -1;
> }
> +
> +GuestTimezone *qmp_guest_get_timezone(Error **errp)
> +{
> +    GuestTimezone *info = g_new0(GuestTimezone, 1);
> +    GTimeZone *tz = g_time_zone_new_local();
> +    if (tz == NULL) {
> +        error_setg(errp, QERR_QGA_COMMAND_FAILED,
> +                   "Couldn't retrieve local timezone");
> +        goto error;
> +    }
> +
> +    gint64 now = g_get_real_time() / G_USEC_PER_SEC;
> +    gint32 intv = g_time_zone_find_interval(tz, G_TIME_TYPE_UNIVERSAL, now);
> +    info->offset = g_time_zone_get_offset(tz, intv);
> +    gchar const *name = g_time_zone_get_abbreviation(tz, intv);
> +    if (name != NULL) {
> +        info->has_zone = true;
> +        info->zone = g_strdup(name);
> +    }
> +    g_time_zone_unref(tz);
> +
> +    return info;
> +
> +error:
> +    g_time_zone_unref(tz);
> +    g_free(info);
> +    return NULL;
> +}
> +
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index a02dbf2..5183ea2 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -1042,3 +1042,29 @@
>   'data':    { 'path': 'str', '*arg': ['str'], '*env': ['str'],
>                '*input-data': 'str', '*capture-output': 'bool' },
>   'returns': 'GuestExec' }
> +
> +
> +##
> +# @GuestTimezone:
> +#
> +# @zone:    Timezone name
> +# @offset:  Offset to UTC in seconds, negative numbers for time zones west of
> +#           GMT, positive numbers for east
> +#
> +# Since: 2.10
> +##
> +{ 'struct': 'GuestTimezone',
> +  'data':   { '*zone': 'str', 'offset': 'int' } }
> +
> +
> +##
> +# @guest-get-timezone:
> +#
> +# Retrieves the timezone information from the guest.
> +#
> +# Returns: A GuestTimezone dictionary.
> +#
> +# Since: 2.10
> +##
> +{ 'command': 'guest-get-timezone',
> +  'returns': 'GuestTimezone' }
> -- 
> 2.9.3
> 

--
Vinzenz Feenstra
Senior Software Developer
Red Hat Czech

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH v5] qga: Add `guest-get-timezone` command
  2017-03-23 11:39 ` Vinzenz 'evilissimo' Feenstra
  2017-04-04  6:57   ` Vinzenz Feenstra
@ 2017-04-04  9:42   ` Sameeh Jubran
  2017-04-11  9:10     ` Vinzenz Feenstra
  2017-04-18 23:19   ` Michael Roth
  2 siblings, 1 reply; 6+ messages in thread
From: Sameeh Jubran @ 2017-04-04  9:42 UTC (permalink / raw)
  To: Vinzenz 'evilissimo' Feenstra
  Cc: QEMU Developers, eblake, Michael Roth, Marc-André Lureau

I have tested the patch on Windows 2012 R2

Reviewed-by: Sameeh Jubran <sameeh@daynix.com>
Tested-by: Sameeh Jubran <sameeh@daynix.com>

On Thu, Mar 23, 2017 at 2:39 PM, Vinzenz 'evilissimo' Feenstra <
vfeenstr@redhat.com> wrote:

> From: Vinzenz Feenstra <vfeenstr@redhat.com>
>
> Adds a new command `guest-get-timezone` reporting the currently
> configured timezone on the system. The information on what timezone is
> currently is configured is useful in case of Windows VMs where the
> offset of the hardware clock is required to have the same offset. This
> can be used for management systems like `oVirt` to detect the timezone
> difference and warn administrators of the misconfiguration.
>
> Signed-off-by: Vinzenz Feenstra <vfeenstr@redhat.com>
> ---
>  qga/commands.c       | 29 +++++++++++++++++++++++++++++
>  qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
>  2 files changed, 55 insertions(+)
>
> diff --git a/qga/commands.c b/qga/commands.c
> index 4d92946..3b5789c 100644
> --- a/qga/commands.c
> +++ b/qga/commands.c
> @@ -499,3 +499,32 @@ int ga_parse_whence(GuestFileWhence *whence, Error
> **errp)
>      error_setg(errp, "invalid whence code %"PRId64, whence->u.value);
>      return -1;
>  }
> +
> +GuestTimezone *qmp_guest_get_timezone(Error **errp)
> +{
> +    GuestTimezone *info = g_new0(GuestTimezone, 1);
> +    GTimeZone *tz = g_time_zone_new_local();
> +    if (tz == NULL) {
> +        error_setg(errp, QERR_QGA_COMMAND_FAILED,
> +                   "Couldn't retrieve local timezone");
> +        goto error;
> +    }
> +
> +    gint64 now = g_get_real_time() / G_USEC_PER_SEC;
> +    gint32 intv = g_time_zone_find_interval(tz, G_TIME_TYPE_UNIVERSAL,
> now);
> +    info->offset = g_time_zone_get_offset(tz, intv);
> +    gchar const *name = g_time_zone_get_abbreviation(tz, intv);
> +    if (name != NULL) {
> +        info->has_zone = true;
> +        info->zone = g_strdup(name);
> +    }
> +    g_time_zone_unref(tz);
> +
> +    return info;
> +
> +error:
> +    g_time_zone_unref(tz);
> +    g_free(info);
> +    return NULL;
> +}
> +
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index a02dbf2..5183ea2 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -1042,3 +1042,29 @@
>    'data':    { 'path': 'str', '*arg': ['str'], '*env': ['str'],
>                 '*input-data': 'str', '*capture-output': 'bool' },
>    'returns': 'GuestExec' }
> +
> +
> +##
> +# @GuestTimezone:
> +#
> +# @zone:    Timezone name
> +# @offset:  Offset to UTC in seconds, negative numbers for time zones
> west of
> +#           GMT, positive numbers for east
> +#
> +# Since: 2.10
> +##
> +{ 'struct': 'GuestTimezone',
> +  'data':   { '*zone': 'str', 'offset': 'int' } }
> +
> +
> +##
> +# @guest-get-timezone:
> +#
> +# Retrieves the timezone information from the guest.
> +#
> +# Returns: A GuestTimezone dictionary.
> +#
> +# Since: 2.10
> +##
> +{ 'command': 'guest-get-timezone',
> +  'returns': 'GuestTimezone' }
> --
> 2.9.3
>
>


-- 
Respectfully,
*Sameeh Jubran*
*Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
*Software Engineer @ Daynix <http://www.daynix.com>.*

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH v5] qga: Add `guest-get-timezone` command
  2017-04-04  9:42   ` Sameeh Jubran
@ 2017-04-11  9:10     ` Vinzenz Feenstra
  0 siblings, 0 replies; 6+ messages in thread
From: Vinzenz Feenstra @ 2017-04-11  9:10 UTC (permalink / raw)
  To: Michael Roth, QEMU Developers
  Cc: Eric Blake, Marc-André Lureau, Sameeh Jubran

PING?


> On Apr 4, 2017, at 11:42 AM, Sameeh Jubran <sameeh@daynix.com> wrote:
> 
> I have tested the patch on Windows 2012 R2
> 
> Reviewed-by: Sameeh Jubran <sameeh@daynix.com <mailto:sameeh@daynix.com>>
> Tested-by: Sameeh Jubran <sameeh@daynix.com <mailto:sameeh@daynix.com>>
> 
> On Thu, Mar 23, 2017 at 2:39 PM, Vinzenz 'evilissimo' Feenstra <vfeenstr@redhat.com <mailto:vfeenstr@redhat.com>> wrote:
> From: Vinzenz Feenstra <vfeenstr@redhat.com <mailto:vfeenstr@redhat.com>>
> 
> Adds a new command `guest-get-timezone` reporting the currently
> configured timezone on the system. The information on what timezone is
> currently is configured is useful in case of Windows VMs where the
> offset of the hardware clock is required to have the same offset. This
> can be used for management systems like `oVirt` to detect the timezone
> difference and warn administrators of the misconfiguration.
> 
> Signed-off-by: Vinzenz Feenstra <vfeenstr@redhat.com <mailto:vfeenstr@redhat.com>>
> ---
>  qga/commands.c       | 29 +++++++++++++++++++++++++++++
>  qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
>  2 files changed, 55 insertions(+)
> 
> diff --git a/qga/commands.c b/qga/commands.c
> index 4d92946..3b5789c 100644
> --- a/qga/commands.c
> +++ b/qga/commands.c
> @@ -499,3 +499,32 @@ int ga_parse_whence(GuestFileWhence *whence, Error **errp)
>      error_setg(errp, "invalid whence code %"PRId64, whence->u.value);
>      return -1;
>  }
> +
> +GuestTimezone *qmp_guest_get_timezone(Error **errp)
> +{
> +    GuestTimezone *info = g_new0(GuestTimezone, 1);
> +    GTimeZone *tz = g_time_zone_new_local();
> +    if (tz == NULL) {
> +        error_setg(errp, QERR_QGA_COMMAND_FAILED,
> +                   "Couldn't retrieve local timezone");
> +        goto error;
> +    }
> +
> +    gint64 now = g_get_real_time() / G_USEC_PER_SEC;
> +    gint32 intv = g_time_zone_find_interval(tz, G_TIME_TYPE_UNIVERSAL, now);
> +    info->offset = g_time_zone_get_offset(tz, intv);
> +    gchar const *name = g_time_zone_get_abbreviation(tz, intv);
> +    if (name != NULL) {
> +        info->has_zone = true;
> +        info->zone = g_strdup(name);
> +    }
> +    g_time_zone_unref(tz);
> +
> +    return info;
> +
> +error:
> +    g_time_zone_unref(tz);
> +    g_free(info);
> +    return NULL;
> +}
> +
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index a02dbf2..5183ea2 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -1042,3 +1042,29 @@
>    'data':    { 'path': 'str', '*arg': ['str'], '*env': ['str'],
>                 '*input-data': 'str', '*capture-output': 'bool' },
>    'returns': 'GuestExec' }
> +
> +
> +##
> +# @GuestTimezone:
> +#
> +# @zone:    Timezone name
> +# @offset:  Offset to UTC in seconds, negative numbers for time zones west of
> +#           GMT, positive numbers for east
> +#
> +# Since: 2.10
> +##
> +{ 'struct': 'GuestTimezone',
> +  'data':   { '*zone': 'str', 'offset': 'int' } }
> +
> +
> +##
> +# @guest-get-timezone:
> +#
> +# Retrieves the timezone information from the guest.
> +#
> +# Returns: A GuestTimezone dictionary.
> +#
> +# Since: 2.10
> +##
> +{ 'command': 'guest-get-timezone',
> +  'returns': 'GuestTimezone' }
> --
> 2.9.3
> 
> 
> 
> 
> -- 
> Respectfully,
> Sameeh Jubran
> Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>
> Software Engineer @ Daynix <http://www.daynix.com/>.

--
Vinzenz Feenstra
Senior Software Developer
Red Hat Czech

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH v5] qga: Add `guest-get-timezone` command
  2017-03-23 11:39 ` Vinzenz 'evilissimo' Feenstra
  2017-04-04  6:57   ` Vinzenz Feenstra
  2017-04-04  9:42   ` Sameeh Jubran
@ 2017-04-18 23:19   ` Michael Roth
  2 siblings, 0 replies; 6+ messages in thread
From: Michael Roth @ 2017-04-18 23:19 UTC (permalink / raw)
  To: Vinzenz 'evilissimo' Feenstra, qemu-devel
  Cc: sameeh, marcandre.lureau

Quoting Vinzenz 'evilissimo' Feenstra (2017-03-23 06:39:13)
> From: Vinzenz Feenstra <vfeenstr@redhat.com>
> 
> Adds a new command `guest-get-timezone` reporting the currently
> configured timezone on the system. The information on what timezone is
> currently is configured is useful in case of Windows VMs where the
> offset of the hardware clock is required to have the same offset. This
> can be used for management systems like `oVirt` to detect the timezone
> difference and warn administrators of the misconfiguration.
> 
> Signed-off-by: Vinzenz Feenstra <vfeenstr@redhat.com>
> ---
>  qga/commands.c       | 29 +++++++++++++++++++++++++++++
>  qga/qapi-schema.json | 26 ++++++++++++++++++++++++++
>  2 files changed, 55 insertions(+)
> 
> diff --git a/qga/commands.c b/qga/commands.c
> index 4d92946..3b5789c 100644
> --- a/qga/commands.c
> +++ b/qga/commands.c
> @@ -499,3 +499,32 @@ int ga_parse_whence(GuestFileWhence *whence, Error **errp)
>      error_setg(errp, "invalid whence code %"PRId64, whence->u.value);
>      return -1;
>  }
> +
> +GuestTimezone *qmp_guest_get_timezone(Error **errp)
> +{
> +    GuestTimezone *info = g_new0(GuestTimezone, 1);
> +    GTimeZone *tz = g_time_zone_new_local();
> +    if (tz == NULL) {
> +        error_setg(errp, QERR_QGA_COMMAND_FAILED,
> +                   "Couldn't retrieve local timezone");
> +        goto error;
> +    }
> +
> +    gint64 now = g_get_real_time() / G_USEC_PER_SEC;
> +    gint32 intv = g_time_zone_find_interval(tz, G_TIME_TYPE_UNIVERSAL, now);
> +    info->offset = g_time_zone_get_offset(tz, intv);
> +    gchar const *name = g_time_zone_get_abbreviation(tz, intv);

Declarations should all go at the start of the block. Since it's a
trivial change and I was late in reviewing this I was planning on applying
and just fixing it up in my tree, but I just noticed a bigger issue:

Our minimum glib version is 2.22 for non-mingw builds, and 2.30 for
mingw, whereas the required versions for these functions are:

  g_time_zone_new_local         2.26
  g_get_real_time               2.28
  g_time_zone_find_interval     2.26
  g_time_zone_get_offset        2.26
  g_time_zone_get_abbreviation  2.26
  g_time_zone_unref             2.26

So assuming there's no simple alternative implementations for these, I think
what we need is a configure probe for glib >= 2.28 in order to enable this
interface for non-mingw builds, and to stub it out with QERR_UNSUPPORTED
errors otherwise.

> +    if (name != NULL) {
> +        info->has_zone = true;
> +        info->zone = g_strdup(name);
> +    }
> +    g_time_zone_unref(tz);
> +
> +    return info;
> +
> +error:
> +    g_time_zone_unref(tz);

Harmless, but since "error" label is only reachable when tz == NULL I think you
can drop this.

> +    g_free(info);
> +    return NULL;
> +}
> +
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index a02dbf2..5183ea2 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -1042,3 +1042,29 @@
>    'data':    { 'path': 'str', '*arg': ['str'], '*env': ['str'],
>                 '*input-data': 'str', '*capture-output': 'bool' },
>    'returns': 'GuestExec' }
> +
> +
> +##
> +# @GuestTimezone:
> +#
> +# @zone:    Timezone name
> +# @offset:  Offset to UTC in seconds, negative numbers for time zones west of
> +#           GMT, positive numbers for east
> +#
> +# Since: 2.10
> +##
> +{ 'struct': 'GuestTimezone',
> +  'data':   { '*zone': 'str', 'offset': 'int' } }
> +
> +
> +##
> +# @guest-get-timezone:
> +#
> +# Retrieves the timezone information from the guest.
> +#
> +# Returns: A GuestTimezone dictionary.
> +#
> +# Since: 2.10
> +##
> +{ 'command': 'guest-get-timezone',
> +  'returns': 'GuestTimezone' }
> -- 
> 2.9.3
> 
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-04-18 23:20 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-23 11:39 [Qemu-devel] [PATCH v5] qga: Add `guest-get-timezone` command Vinzenz 'evilissimo' Feenstra
2017-03-23 11:39 ` Vinzenz 'evilissimo' Feenstra
2017-04-04  6:57   ` Vinzenz Feenstra
2017-04-04  9:42   ` Sameeh Jubran
2017-04-11  9:10     ` Vinzenz Feenstra
2017-04-18 23:19   ` Michael Roth

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.