This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new cc527523fa Allow users to inform timezones on APIs that have the date 
parameter (#7032)
cc527523fa is described below

commit cc527523fa71d7a8580e2d9e57f75f94a172312d
Author: João Jandre <[email protected]>
AuthorDate: Mon Jan 9 12:50:55 2023 -0300

    Allow users to inform timezones on APIs that have the date parameter (#7032)
    
    Co-authored-by: dahn <[email protected]>
---
 .../java/org/apache/cloudstack/api/BaseCmd.java    |  2 +-
 .../api/command/user/job/ListAsyncJobsCmd.java     |  2 +-
 .../com/cloud/api/dispatch/ParamProcessWorker.java | 57 ++++++++++++----------
 ui/src/components/view/StatsTab.vue                | 41 ++--------------
 4 files changed, 37 insertions(+), 65 deletions(-)

diff --git a/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java 
b/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java
index 23354454e3..e431f63557 100644
--- a/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/BaseCmd.java
@@ -103,7 +103,7 @@ public abstract class BaseCmd {
         GET, POST, PUT, DELETE
     }
     public static enum CommandType {
-        BOOLEAN, DATE, FLOAT, DOUBLE, INTEGER, SHORT, LIST, LONG, OBJECT, MAP, 
STRING, TZDATE, UUID
+        BOOLEAN, DATE, FLOAT, DOUBLE, INTEGER, SHORT, LIST, LONG, OBJECT, MAP, 
STRING, UUID
     }
 
     private Object _responseObject;
diff --git 
a/api/src/main/java/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java
 
b/api/src/main/java/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java
index 3f035d45ae..d2574ff442 100644
--- 
a/api/src/main/java/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java
+++ 
b/api/src/main/java/org/apache/cloudstack/api/command/user/job/ListAsyncJobsCmd.java
@@ -33,7 +33,7 @@ public class ListAsyncJobsCmd extends 
BaseListAccountResourcesCmd {
     //////////////// API parameters /////////////////////
     /////////////////////////////////////////////////////
 
-    @Parameter(name = ApiConstants.START_DATE, type = CommandType.TZDATE, 
description = "The start date of the async job (use format 
\"yyyy-MM-dd'T'HH:mm:ss'+'SSSS\")")
+    @Parameter(name = ApiConstants.START_DATE, type = CommandType.DATE, 
description = "The start date of the async job (use format 
\"yyyy-MM-dd'T'HH:mm:ss'+'SSSS\")")
     private Date startDate;
 
     /////////////////////////////////////////////////////
diff --git 
a/server/src/main/java/com/cloud/api/dispatch/ParamProcessWorker.java 
b/server/src/main/java/com/cloud/api/dispatch/ParamProcessWorker.java
index c23933438b..9f07db4b03 100644
--- a/server/src/main/java/com/cloud/api/dispatch/ParamProcessWorker.java
+++ b/server/src/main/java/com/cloud/api/dispatch/ParamProcessWorker.java
@@ -63,8 +63,10 @@ import com.cloud.utils.exception.CloudRuntimeException;
 public class ParamProcessWorker implements DispatchWorker {
 
     private static final Logger s_logger = 
Logger.getLogger(ParamProcessWorker.class.getName());
-    public final DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
-    public final DateFormat newInputFormat = new SimpleDateFormat("yyyy-MM-dd 
HH:mm:ss");
+    private static final String inputFormatString = "yyyy-MM-dd";
+    private static final String newInputFormatString = "yyyy-MM-dd HH:mm:ss";
+    public static final DateFormat inputFormat = new 
SimpleDateFormat(inputFormatString);
+    public static final DateFormat newInputFormat = new 
SimpleDateFormat(newInputFormatString);
 
     @Inject
     protected AccountManager _accountMgr;
@@ -333,26 +335,7 @@ public class ParamProcessWorker implements DispatchWorker {
                 field.set(cmdObj, Boolean.valueOf(paramObj.toString()));
                 break;
             case DATE:
-                // This piece of code is for maintaining backward compatibility
-                // and support both the date formats(Bug 9724)
-                final boolean isObjInNewDateFormat = 
isObjInNewDateFormat(paramObj.toString());
-                if (isObjInNewDateFormat) {
-                    final DateFormat newFormat = newInputFormat;
-                    synchronized (newFormat) {
-                        field.set(cmdObj, 
newFormat.parse(paramObj.toString()));
-                    }
-                } else {
-                    final DateFormat format = inputFormat;
-                    synchronized (format) {
-                        Date date = format.parse(paramObj.toString());
-                        if (field.getName().equals("startDate")) {
-                            date = messageDate(date, 0, 0, 0);
-                        } else if (field.getName().equals("endDate")) {
-                            date = messageDate(date, 23, 59, 59);
-                        }
-                        field.set(cmdObj, date);
-                    }
-                }
+                parseAndSetDate(field, cmdObj, paramObj);
                 break;
             case FLOAT:
                 // Assuming that the parameters have been checked for required 
before now,
@@ -428,9 +411,6 @@ public class ParamProcessWorker implements DispatchWorker {
                     }
                 }
                 break;
-            case TZDATE:
-                field.set(cmdObj, 
DateUtil.parseTZDateString(paramObj.toString()));
-                break;
             case MAP:
             default:
                 field.set(cmdObj, paramObj);
@@ -442,6 +422,33 @@ public class ParamProcessWorker implements DispatchWorker {
                     " is not accessible]");
         }
     }
+    private void parseAndSetDate(Field field, BaseCmd cmdObj, Object paramObj) 
throws IllegalAccessException, ParseException {
+        try {
+            field.set(cmdObj, DateUtil.parseTZDateString(paramObj.toString()));
+            return;
+        } catch (ParseException parseException) {
+            s_logger.debug(String.format("Could not parse date [%s] with 
timezone parser, trying to parse without timezone.", paramObj));
+        }
+        if (isObjInNewDateFormat(paramObj.toString())) {
+            s_logger.debug(String.format("Parsing date [%s] using the [%s] 
format.", paramObj, newInputFormatString));
+            final DateFormat newFormat = newInputFormat;
+            synchronized (newFormat) {
+                field.set(cmdObj, newFormat.parse(paramObj.toString()));
+            }
+        } else {
+            s_logger.debug(String.format("Parsing date [%s] using the [%s] 
format.", paramObj, inputFormatString));
+            final DateFormat format = inputFormat;
+            synchronized (format) {
+                Date date = format.parse(paramObj.toString());
+                if (field.getName().equals("startDate")) {
+                    date = messageDate(date, 0, 0, 0);
+                } else if (field.getName().equals("endDate")) {
+                    date = messageDate(date, 23, 59, 59);
+                }
+                field.set(cmdObj, date);
+            }
+        }
+    }
 
     private boolean isObjInNewDateFormat(final String string) {
         final Matcher matcher = BaseCmd.newInputDateFormat.matcher(string);
diff --git a/ui/src/components/view/StatsTab.vue 
b/ui/src/components/view/StatsTab.vue
index 613868c8be..45026c0ff1 100644
--- a/ui/src/components/view/StatsTab.vue
+++ b/ui/src/components/view/StatsTab.vue
@@ -289,26 +289,12 @@ export default {
   mounted () {
     this.fetchData()
   },
-  computed: {
-    usebrowsertimezone: function () {
-      return this.$store.getters.usebrowsertimezone
-    }
-  },
   watch: {
     resource: function (newItem) {
       if (!newItem || !newItem.id) {
         return
       }
       this.fetchData()
-    },
-    usebrowsertimezone: function () {
-      if (this.startDate) {
-        this.startDate = this.onToggleUseBrowserTimezone(new 
Date(this.startDate))
-      }
-      if (this.endDate) {
-        this.endDate = this.onToggleUseBrowserTimezone(new Date(this.endDate))
-      }
-      this.fetchData()
     }
   },
   methods: {
@@ -355,32 +341,11 @@ export default {
     },
     getStartDate () {
       var now = new Date()
-      if (!this.$store.getters.usebrowsertimezone) {
-        var dateInUTC = new Date(now.getTime() + now.getTimezoneOffset() * 
60000)
-        return dateInUTC.setHours(dateInUTC.getHours() - 1)
-      }
       now.setHours(now.getHours() - 1)
       return now
     },
     getEndDate () {
-      var now = new Date()
-      if (this.$store.getters.usebrowsertimezone) {
-        return now
-      }
-      return new Date(now.getTime() + now.getTimezoneOffset() * 60000)
-    },
-    onToggleUseBrowserTimezone (date) {
-      if (this.$store.getters.usebrowsertimezone) {
-        return this.$toLocalDate(date)
-      }
-      return new Date(date.getTime() + date.getTimezoneOffset() * 60000)
-    },
-    convertAndFormatDateAppropriately (date) {
-      if (this.$store.getters.usebrowsertimezone) {
-        var dateInUTC = new Date(date).toISOString().split('T')
-        return dateInUTC[0] + ' ' + dateInUTC[1].split('-')[0].split('.')[0]
-      }
-      return moment(date).format('YYYY-MM-DD HH:mm:ss')
+      return new Date()
     },
     fetchData () {
       this.loaded = false
@@ -388,10 +353,10 @@ export default {
       this.formatPeriod()
       var params = { id: this.resource.id }
       if (this.startDate) {
-        params.startDate = 
this.convertAndFormatDateAppropriately(this.startDate)
+        params.startDate = moment(this.startDate).format()
       }
       if (this.endDate) {
-        params.endDate = this.convertAndFormatDateAppropriately(this.endDate)
+        params.endDate = moment(this.endDate).format()
       }
       api('listVirtualMachinesUsageHistory', params).then(response => {
         this.handleStatsResponse(response)

Reply via email to