From 3113efc918c0a5b3366905c5d793605ddce3592f Mon Sep 17 00:00:00 2001 From: Stephen Fox Date: Fri, 2 Jun 2023 13:54:42 -0400 Subject: [PATCH] Add support for Grafana 8.4 org preferences and default timezone --- CHANGELOG.md | 1 + configuration.structure.yml | 6 + gradle.properties | 4 +- .../attribute/GrafanaOrgAttribute.java | 3 +- .../rest/GrafanaDataSourceInvocator.java | 33 ++-- .../driver/rest/GrafanaOrgInvocator.java | 164 +++++++++++++----- .../base/grafana/model/GrafanaHealth.java | 39 +++++ .../connid/base/grafana/model/GrafanaOrg.java | 11 ++ .../grafana/model/GrafanaOrgPreferences.java | 30 +++- .../response/GrafanaDashboardResponse.java | 6 +- .../GrafanaOrgPreferencesResponse.java | 74 -------- .../model/response/GrafanaSearchResponse.java | 6 +- .../connid/base/grafana/Messages.properties | 3 + 13 files changed, 229 insertions(+), 151 deletions(-) create mode 100644 src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaHealth.java delete mode 100644 src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaOrgPreferencesResponse.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 153f8d5..9f88a23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # connector-grafana ## Change Log ++ **1.7.10** - Changed Org preference update to add the homeDashboardId to support Grafana 8.X. Added default timezone option in configuration + **1.7.9** - Fixed unmatched curly brace when logging org preference update failure + **1.7.8** - Set the Grafana loki password as confidential and not required + **1.7.6** - Set Home Dashboard Organization Preference when a datasource is created, updated, or read and not set diff --git a/configuration.structure.yml b/configuration.structure.yml index cb8ba1c..4cc3c5e 100644 --- a/configuration.structure.yml +++ b/configuration.structure.yml @@ -22,6 +22,12 @@ custom: default: 'Viewer' display: 'defaultOrgRole.display' help: 'defaultOrgRole.help' + defaultTimeZone: + type: string + order: 110 + default: 'UTC' + display: 'defaultTimeZone.display' + help: 'defaultTimeZone.help' updateDashBoards: type: boolean order: 150 diff --git a/gradle.properties b/gradle.properties index 7676fef..f6fd844 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ -project_version=1.7.9 +project_version=1.7.10 base_connector_version=3.0.3 config_plugin_version=3.0.3 test_connector_version=3.0.1 -local_build_version=1049 \ No newline at end of file +local_build_version=1050 \ No newline at end of file diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/attribute/GrafanaOrgAttribute.java b/src/main/java/com/exclamationlabs/connid/base/grafana/attribute/GrafanaOrgAttribute.java index 80ba602..a30ef00 100644 --- a/src/main/java/com/exclamationlabs/connid/base/grafana/attribute/GrafanaOrgAttribute.java +++ b/src/main/java/com/exclamationlabs/connid/base/grafana/attribute/GrafanaOrgAttribute.java @@ -12,5 +12,6 @@ public enum GrafanaOrgAttribute state, uuid, zipCode, - homeDashboardUID + homeDashboardUID, + homeDashboardId } diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/driver/rest/GrafanaDataSourceInvocator.java b/src/main/java/com/exclamationlabs/connid/base/grafana/driver/rest/GrafanaDataSourceInvocator.java index 7210f8d..6f718ca 100644 --- a/src/main/java/com/exclamationlabs/connid/base/grafana/driver/rest/GrafanaDataSourceInvocator.java +++ b/src/main/java/com/exclamationlabs/connid/base/grafana/driver/rest/GrafanaDataSourceInvocator.java @@ -52,9 +52,9 @@ public static String[] decomposeID(String composed) * @param dashboard The dashboard raw JSON with datasource uid already embedded * @return Dashboard uid */ - public String createDashboard(GrafanaDriver driver, String orgId, String dashboard) + public GrafanaDashboardResponse createDashboard(GrafanaDriver driver, String orgId, String dashboard) { - String dashboardUID = null; + GrafanaDashboardResponse dashboardInfo = null; RestResponseData rd; Map headers = driver.getAdminHeaders(); headers.put(ORG_HEADER, String.valueOf(orgId)); @@ -63,11 +63,12 @@ public String createDashboard(GrafanaDriver driver, String orgId, String dashboa GrafanaDashboardResponse.class, dashboard, headers); + if ( rd != null && rd.getResponseObject() != null ) { - dashboardUID = rd.getResponseObject().getUid(); + dashboardInfo = rd.getResponseObject(); } - return dashboardUID ; + return dashboardInfo ; } @Override public String create(GrafanaDriver driver, GrafanaDataSource dataSource) throws ConnectorException @@ -164,7 +165,7 @@ public String create(GrafanaDriver driver, GrafanaDataSource dataSource) throws // dashboard templete try { - String dashboardUID = null; + GrafanaDashboardResponse dashboardInfo = null; if ( driver.getConfiguration().getUpdateDashBoards() != null && driver.getConfiguration().getUpdateDashBoards() && driver.getConfiguration().getDashboardTemplate() != null @@ -173,12 +174,13 @@ public String create(GrafanaDriver driver, GrafanaDataSource dataSource) throws String template = driver.getConfiguration().getDashboardTemplate(); template = template.replace("", createInfo.getDatasource().getUid()); template = template.replace("__DataSourceUID__", createInfo.getDatasource().getUid()); - dashboardUID = createDashboard(driver, String.valueOf(createInfo.getDatasource().getOrgId()), template); - if ( dashboardUID != null && dashboardUID.trim().length() > 0 ) + dashboardInfo = createDashboard(driver, String.valueOf(createInfo.getDatasource().getOrgId()), template); + if ( dashboardInfo != null ) { - GrafanaOrgPreferences preferences = new GrafanaOrgPreferences(); - preferences.setHomeDashboardUID(dashboardUID); - GrafanaOrgInvocator.updateOrganizationPreferences(driver, createInfo.getDatasource().getOrgId(), preferences); + GrafanaOrgPreferences current = GrafanaOrgInvocator.getOrganizationPreferences(driver, dataSource.getOrgId()); + GrafanaOrgPreferences preferences = GrafanaOrgInvocator.setOrganizationPreferences(driver, + current, dashboardInfo.getId(), dashboardInfo.getUid()); + GrafanaOrgInvocator.updateOrganizationPreferences(driver, dataSource.getOrgId(), preferences); } } } @@ -345,12 +347,13 @@ else if ( actual.getSecureJsonData() != null && actual.getSecureJsonData().size( String template = driver.getConfiguration().getDashboardTemplate(); template = template.replace("", dataSource.getUid()); template = template.replace("__DataSourceUID__", dataSource.getUid()); - String dashboardUID = createDashboard(driver, String.valueOf(dataSource.getOrgId()), template); - if ( dashboardUID != null && dashboardUID.trim().length() > 0 ) + GrafanaDashboardResponse dashboardInfo = createDashboard(driver, String.valueOf(dataSource.getOrgId()), template); + if ( dashboardInfo != null ) { - GrafanaOrgPreferences preferences = new GrafanaOrgPreferences(); - preferences.setHomeDashboardUID(dashboardUID); - GrafanaOrgInvocator.updateOrganizationPreferences(driver, Integer.valueOf(orgId.trim()), preferences); + GrafanaOrgPreferences current = GrafanaOrgInvocator.getOrganizationPreferences(driver, dataSource.getOrgId()); + GrafanaOrgPreferences preferences = GrafanaOrgInvocator.setOrganizationPreferences(driver, + current, dashboardInfo.getId(), dashboardInfo.getUid()); + GrafanaOrgInvocator.updateOrganizationPreferences(driver, dataSource.getOrgId(), preferences); } } } diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/driver/rest/GrafanaOrgInvocator.java b/src/main/java/com/exclamationlabs/connid/base/grafana/driver/rest/GrafanaOrgInvocator.java index ae7ec54..478c23e 100644 --- a/src/main/java/com/exclamationlabs/connid/base/grafana/driver/rest/GrafanaOrgInvocator.java +++ b/src/main/java/com/exclamationlabs/connid/base/grafana/driver/rest/GrafanaOrgInvocator.java @@ -4,15 +4,11 @@ import com.exclamationlabs.connid.base.connector.driver.rest.RestResponseData; import com.exclamationlabs.connid.base.connector.results.ResultsFilter; import com.exclamationlabs.connid.base.connector.results.ResultsPaginator; -import com.exclamationlabs.connid.base.grafana.model.GrafanaDashboard; +import com.exclamationlabs.connid.base.grafana.model.GrafanaHealth; import com.exclamationlabs.connid.base.grafana.model.GrafanaOrg; import com.exclamationlabs.connid.base.grafana.model.GrafanaOrgPreferences; -import com.exclamationlabs.connid.base.grafana.model.response.GrafanaDashboardResponse; -import com.exclamationlabs.connid.base.grafana.model.response.GrafanaOrgPreferencesResponse; import com.exclamationlabs.connid.base.grafana.model.response.GrafanaSearchResponse; import com.exclamationlabs.connid.base.grafana.model.response.GrafanaStandardResponse; -import com.google.gson.Gson; -import com.google.gson.internal.LinkedHashTreeMap; import org.apache.commons.lang3.StringUtils; import org.identityconnectors.common.logging.Log; import org.identityconnectors.framework.common.exceptions.ConnectorException; @@ -164,6 +160,12 @@ public Set getAll(GrafanaDriver driver, ResultsFilter resultsFilter, return grafanaOrgs; } + /** + * @param driver + * @param org + * @param dashboardInfo + * @return + */ public List getDashboards(GrafanaDriver driver, GrafanaOrg org, List dashboardInfo) { List list = new ArrayList<>(); @@ -188,6 +190,22 @@ public List getDashboards(GrafanaDriver driver, GrafanaOrg org, List rd; + Map headers = driver.getAdminHeaders(); + rd = driver.executeGetRequest("/health", + GrafanaHealth.class, + headers); + GrafanaHealth health = rd.getResponseObject(); + return health; + } + /** * Get a Single Org from the Grafana Service * @param driver The Rest Driver for the Connector @@ -234,27 +252,15 @@ else if ( orgId > 0 ) driver.getAdminHeaders()); org = rd.getResponseObject(); } + if ( org != null ) { // Get the Org Dashboards and update the GrafanaOrg Object Type List dashboardList = findDashboards(driver, org); List dashboards = getDashboards(driver, org, dashboardList); org.setDashboards(dashboards); - // Get the Org Preferences and potentially update - GrafanaOrgPreferencesResponse current = getOrganizationPreferences(driver, org.getId()); - if ( current != null - && (current.getHomeDashboardUID() == null || current.getHomeDashboardUID().trim().length() == 0 ) - && dashboardList != null - && dashboardList.size() > 0 ) - { - GrafanaOrgPreferences preferences = new GrafanaOrgPreferences(); - preferences.setHomeDashboardUID(dashboardList.get(0).getUid()); - updateOrganizationPreferences(driver, org.getId(), preferences); - } - else if (current != null && current.getHomeDashboardUID() != null && current.getHomeDashboardUID().trim().length() > 0 ) - { - org.setHomeDashboardUID(current.getHomeDashboardUID()); - } + // Get the Org Preferences and potentially update the home dashboard + updateOrganizationPreferences(driver, org, dashboardList); } } return org; @@ -289,24 +295,12 @@ public GrafanaOrg getOneByName(GrafanaDriver driver, String name) throws Connect if ( org != null ) { + // Retrieve the dashboard list List dashboardList = findDashboards(driver, org); List dashboards = getDashboards(driver, org, dashboardList); org.setDashboards(dashboards); - // Get the Org Preferences and potentially update - GrafanaOrgPreferencesResponse current = getOrganizationPreferences(driver, org.getId()); - if ( current != null - && (current.getHomeDashboardUID() == null || current.getHomeDashboardUID().trim().length() == 0 ) - && dashboardList != null - && dashboardList.size() > 0 ) - { - GrafanaOrgPreferences preferences = new GrafanaOrgPreferences(); - preferences.setHomeDashboardUID(dashboardList.get(0).getUid()); - updateOrganizationPreferences(driver, org.getId(), preferences); - } - else if (current != null && current.getHomeDashboardUID() != null && current.getHomeDashboardUID().trim().length() > 0 ) - { - org.setHomeDashboardUID(current.getHomeDashboardUID()); - } + // Get and possibly update the home dashboard + updateOrganizationPreferences(driver, org, dashboardList); } } else @@ -322,15 +316,15 @@ else if (current != null && current.getHomeDashboardUID() != null && current.get * @param orgId The Organization whose preferences updated * @return Dashboard uid */ - public static GrafanaOrgPreferencesResponse getOrganizationPreferences(GrafanaDriver driver, Integer orgId) + public static GrafanaOrgPreferences getOrganizationPreferences(GrafanaDriver driver, Integer orgId) { - GrafanaOrgPreferencesResponse preferences = null; - RestResponseData rd; + GrafanaOrgPreferences preferences = null; + RestResponseData rd; Map headers = driver.getAdminHeaders(); headers.put(ORG_HEADER, String.valueOf(orgId)); rd = driver.executeGetRequest("/org/preferences", - GrafanaOrgPreferencesResponse.class, + GrafanaOrgPreferences.class, headers); if ( rd != null && rd.getResponseObject() != null ) { @@ -339,6 +333,41 @@ public static GrafanaOrgPreferencesResponse getOrganizationPreferences(GrafanaDr return preferences ; } + /** + * Update the current organization preferences with dashboard and timezone + * @param driver The Grafana Driver + * @param current The current Organization preferences + * @param dashboardId The Dashboard ID to be set + * @param dashboardUid the dashboard UID to be set + * @return An updated organization preferences + */ + public static GrafanaOrgPreferences setOrganizationPreferences(GrafanaDriver driver, + GrafanaOrgPreferences current, + Integer dashboardId, + String dashboardUid) + { + GrafanaOrgPreferences preferences = new GrafanaOrgPreferences(); + preferences.setHomeDashboardUID(dashboardUid); + preferences.setHomeDashboardId(dashboardId); + preferences.setTheme(current.getTheme()); + String timezone = driver.getConfiguration().getDefaultTimeZone(); + if ( current.getTimezone() == null || current.getTimezone().trim().length() == 0) + { + if ( timezone != null && timezone.trim().length() > 0 ) + { + preferences.setTimezone(timezone); + } + else + { + preferences.setTimezone("UTC"); + } + } + else + { + preferences.setTimezone(current.getTimezone()); + } + return preferences; + } /** * Updates a Grafana Organization @@ -372,25 +401,72 @@ public void update(GrafanaDriver driver, String orgId, GrafanaOrg org) throws Co * @param orgId The Organization whose preferences updated * @return Dashboard uid */ - public static void updateOrganizationPreferences(GrafanaDriver driver, Integer orgId, GrafanaOrgPreferences preferences) + public static boolean updateOrganizationPreferences(GrafanaDriver driver, Integer orgId, GrafanaOrgPreferences preferences) { + boolean success = true; RestResponseData rd; Map headers = driver.getAdminHeaders(); headers.put(ORG_HEADER, String.valueOf(orgId)); - rd = driver.executePatchRequest("/org/preferences", + rd = driver.executePutRequest("/org/preferences", GrafanaStandardResponse.class, preferences, headers); if ( rd != null && rd.getResponseStatusCode() != 200 ) { + success = false; LOG.warn("Failed to update Grafana Org {0} preferences. Returned HTTP status {1}", orgId, rd.getResponseStatusCode()); } - return; + return success; } - public static void updateOrganizationPreferences(GrafanaDriver driver, GrafanaOrg org ) + /** + * Update the organization preferences especially to set the home dashboard + * @param driver The Grafana Driver + * @param org the Grafana Organization whose preferences we are requested to update + * @param dashboardList list of available dashboards associated with the organization + */ + public void updateOrganizationPreferences(GrafanaDriver driver, GrafanaOrg org, List dashboardList ) { - + if ( org != null && dashboardList != null && dashboardList.size() > 0 ) + { + // Get the Org Preferences and potentially update + GrafanaOrgPreferences current = getOrganizationPreferences(driver, org.getId()); + if ( current != null ) + { + // this item is a dashboard + GrafanaSearchResponse item = dashboardList.get(0); + if ( current.getHomeDashboardId() == null || current.getHomeDashboardId() == 0) + { + // The Id typically set + GrafanaOrgPreferences preferences = setOrganizationPreferences(driver, current, item.getId(), item.getUid()); + if (updateOrganizationPreferences(driver, org.getId(), preferences)) + { + org.setHomeDashboardId(preferences.getHomeDashboardId()); + org.setHomeDashboardUID(preferences.getHomeDashboardUID()); + } + else + { + org.setHomeDashboardId(current.getHomeDashboardId()); + org.setHomeDashboardUID(current.getHomeDashboardUID()); + } + } + else + { + org.setHomeDashboardId(current.getHomeDashboardId()); + if ( current.getHomeDashboardUID() != null ) + { + org.setHomeDashboardUID(current.getHomeDashboardUID()); + } + else + { + // An assumption that this is the only one available + // since Version 8 does not return dashboard UID + org.setHomeDashboardUID(item.getUid()); + } + } + } + } + return; } } diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaHealth.java b/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaHealth.java new file mode 100644 index 0000000..01e1f04 --- /dev/null +++ b/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaHealth.java @@ -0,0 +1,39 @@ +package com.exclamationlabs.connid.base.grafana.model; + + +public class GrafanaHealth +{ + private String commit; + private String database; + private String version; + + public String getCommit() + { + return commit; + } + + public String getDatabase() + { + return database; + } + + public String getVersion() + { + return version; + } + + public void setCommit(String commit) + { + this.commit = commit; + } + + public void setDatabase(String database) + { + this.database = database; + } + + public void setVersion(String version) + { + this.version = version; + } +} diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaOrg.java b/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaOrg.java index 238d3ca..f17d65b 100644 --- a/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaOrg.java +++ b/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaOrg.java @@ -8,6 +8,7 @@ public class GrafanaOrg implements IdentityModel { private GrafanaOrgAddress address; private transient List dashboards; + private transient Integer homeDashboardId; private transient String homeDashboardUID; private Integer id; private String name; @@ -22,6 +23,11 @@ public List getDashboards() return dashboards; } + public Integer getHomeDashboardId() + { + return homeDashboardId; + } + public String getHomeDashboardUID() { return homeDashboardUID; @@ -59,6 +65,11 @@ public void setDashboards(List dashboards) this.dashboards = dashboards; } + public void setHomeDashboardId(Integer homeDashboardId) + { + this.homeDashboardId = homeDashboardId; + } + public void setHomeDashboardUID(String homeDashboardUID) { this.homeDashboardUID = homeDashboardUID; diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaOrgPreferences.java b/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaOrgPreferences.java index 9552049..2f13bf7 100644 --- a/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaOrgPreferences.java +++ b/src/main/java/com/exclamationlabs/connid/base/grafana/model/GrafanaOrgPreferences.java @@ -5,19 +5,21 @@ */ public class GrafanaOrgPreferences { + private Integer homeDashboardId; private String homeDashboardUID; - private String startWeek; + private String locale; private String theme; private String timezone; + private String weekStart; - public String getHomeDashboardUID() + public Integer getHomeDashboardId() { - return homeDashboardUID; + return homeDashboardId; } - public String getStartWeek() + public String getHomeDashboardUID() { - return startWeek; + return homeDashboardUID; } public String getTheme() @@ -30,14 +32,19 @@ public String getTimezone() return timezone; } - public void setHomeDashboardUID(String homeDashboardUID) + public String getWeekStart() { - this.homeDashboardUID = homeDashboardUID; + return weekStart; + } + + public void setHomeDashboardId(Integer homeDashboardId) + { + this.homeDashboardId = homeDashboardId; } - public void setStartWeek(String startWeek) + public void setHomeDashboardUID(String homeDashboardUID) { - this.startWeek = startWeek; + this.homeDashboardUID = homeDashboardUID; } public void setTheme(String theme) @@ -49,4 +56,9 @@ public void setTimezone(String timezone) { this.timezone = timezone; } + + public void setWeekStart(String weekStart) + { + this.weekStart = weekStart; + } } diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaDashboardResponse.java b/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaDashboardResponse.java index d750ba3..5b0a967 100644 --- a/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaDashboardResponse.java +++ b/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaDashboardResponse.java @@ -7,7 +7,7 @@ */ public class GrafanaDashboardResponse { - private String id; + private Integer id; private String slug; private String status; private String uid; @@ -15,7 +15,7 @@ public class GrafanaDashboardResponse private String version; - public String getId() + public Integer getId() { return id; } @@ -45,7 +45,7 @@ public String getVersion() return version; } - public void setId(String id) + public void setId(Integer id) { this.id = id; } diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaOrgPreferencesResponse.java b/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaOrgPreferencesResponse.java deleted file mode 100644 index eb10a51..0000000 --- a/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaOrgPreferencesResponse.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.exclamationlabs.connid.base.grafana.model.response; - -/** - * Class to hold the Common JSON response for a grafana dashboard request - */ -public class GrafanaOrgPreferencesResponse -{ - private String homeDashboardId; - private String homeDashboardUID; - private String locale; - private String theme; - private String timezone; - private String weekStart; - - public String getHomeDashboardId() - { - return homeDashboardId; - } - - public String getHomeDashboardUID() - { - return homeDashboardUID; - } - - public String getLocale() - { - return locale; - } - - public String getTheme() - { - return theme; - } - - public String getTimezone() - { - return timezone; - } - - public String getWeekStart() - { - return weekStart; - } - - public void setHomeDashboardId(String homeDashboardId) - { - this.homeDashboardId = homeDashboardId; - } - - public void setHomeDashboardUID(String homeDashboardUID) - { - this.homeDashboardUID = homeDashboardUID; - } - - public void setLocale(String locale) - { - this.locale = locale; - } - - public void setTheme(String theme) - { - this.theme = theme; - } - - public void setTimezone(String timezone) - { - this.timezone = timezone; - } - - public void setWeekStart(String weekStart) - { - this.weekStart = weekStart; - } -} diff --git a/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaSearchResponse.java b/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaSearchResponse.java index aee80f6..d16963f 100644 --- a/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaSearchResponse.java +++ b/src/main/java/com/exclamationlabs/connid/base/grafana/model/response/GrafanaSearchResponse.java @@ -5,7 +5,7 @@ */ public class GrafanaSearchResponse { - private String id; + private Integer id; private String slug; private String sortMeta; private String title; @@ -14,7 +14,7 @@ public class GrafanaSearchResponse private String uri; private String url; - public String getId() + public Integer getId() { return id; } @@ -54,7 +54,7 @@ public String getUrl() return url; } - public void setId(String id) + public void setId(Integer id) { this.id = id; } diff --git a/src/main/resources/com/exclamationlabs/connid/base/grafana/Messages.properties b/src/main/resources/com/exclamationlabs/connid/base/grafana/Messages.properties index 1cfe577..e8391a4 100644 --- a/src/main/resources/com/exclamationlabs/connid/base/grafana/Messages.properties +++ b/src/main/resources/com/exclamationlabs/connid/base/grafana/Messages.properties @@ -18,6 +18,9 @@ updateDashBoards.help=Specify whether the Dashboards should be updated from the defaultOrgRole.display=Default Role defaultOrgRole.help=Specify the default role a user will have in an organization (Viewer or Admin) +defaultTimeZone.display=Default timezone +defaultTimeZone.help=Specify the default organization timezone. Default value is UTC + separateOrgAssociation.display=Separate Org Association separateOrgAssociation.help=Specify whether Organization Association occurs separately from User Creation.