X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalytics%2FGoogleAnalytics4.java;h=ba8a9209ead89218338fb254cd7231d75d902454;hb=d27e73b6519abfe5922ae716efe9a8dcc58c7751;hp=bbbbee830652949c33c245379990114028ea9845;hpb=fecbdab721ea3f701b9c8107a5aac5371617943d;p=jalview.git diff --git a/src/jalview/analytics/GoogleAnalytics4.java b/src/jalview/analytics/GoogleAnalytics4.java index bbbbee8..ba8a920 100644 --- a/src/jalview/analytics/GoogleAnalytics4.java +++ b/src/jalview/analytics/GoogleAnalytics4.java @@ -2,6 +2,7 @@ package jalview.analytics; import java.io.IOException; import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; @@ -10,6 +11,7 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.AbstractMap; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -37,6 +39,8 @@ public class GoogleAnalytics4 private static final String BASE_URL = "https://www.google-analytics.com/mp/collect"; + private static final String DESKTOP_EVENT = "desktop_event"; + private List> queryStringValues; private List> jsonObject; @@ -49,15 +53,36 @@ public class GoogleAnalytics4 private static GoogleAnalytics4 instance = null; - private static final String appName; - - private static final String version; + private static final Map defaultParams; static { - appName = ChannelProperties.getProperty("app_name") + " Desktop"; - version = Cache.getProperty("VERSION") + "_" - + Cache.getDefault("BUILD_DATE", "unknown"); + defaultParams = new HashMap<>(); + defaultParams.put("app_name", + ChannelProperties.getProperty("app_name") + " Desktop"); + defaultParams.put("version", Cache.getProperty("VERSION")); + defaultParams.put("build_date", + Cache.getDefault("BUILD_DATE", "unknown")); + defaultParams.put("java_version", System.getProperty("java.version")); + String val = System.getProperty("sys.install4jVersion"); + if (val != null) + { + defaultParams.put("install4j_version", val); + } + val = System.getProperty("installer_template_version"); + if (val != null) + { + defaultParams.put("install4j_template_version", val); + } + val = System.getProperty("launcher_version"); + if (val != null) + { + defaultParams.put("launcher_version", val); + } + defaultParams.put("java_arch", + System.getProperty("os.arch") + " " + + System.getProperty("os.name") + " " + + System.getProperty("os.version")); } private GoogleAnalytics4() @@ -72,6 +97,27 @@ public class GoogleAnalytics4 public void sendAnalytics(String eventName, String... paramsStrings) { + sendAnalytics(eventName, false, paramsStrings); + } + + /** + * The simplest way to send an analytic event. + * + * @param eventName + * The event name. To emulate a webpage view use "page_view" and set + * a "page_location" parameter. See + * https://developers.google.com/analytics/devguides/collection/ga4/events?client_type=gtag + * @param sendDefaultParams + * Flag whether to add the default params about the application. + * @param paramsStrings + * Optional multiple Strings in key, value pairs (there should be an + * even number of paramsStrings) to be set as parameters of the + * event. To emulate a webpage view use "page_location" as the URL in + * a "page_view" event. + */ + public void sendAnalytics(String eventName, boolean sendDefaultParams, + String... paramsStrings) + { // clear out old lists this.resetLists(); @@ -81,13 +127,16 @@ public class GoogleAnalytics4 return; } Map params = new HashMap<>(); + params.put("event_category", DESKTOP_EVENT); + params.put("event_label", eventName); // add these to all events from this application instance - params.put("app_name", appName); - params.put("version", version); - params.put("TEST", "you've got to pick a pocket or twoooooo"); + if (sendDefaultParams) + { + params.putAll(defaultParams); + } - // can be overwritten by passed in params + // add (and overwrite with) the passed in params if (paramsStrings != null && paramsStrings.length > 0) { if (paramsStrings.length % 2 != 0) @@ -247,10 +296,21 @@ public class GoogleAnalytics4 { sb.append('&'); } - sb.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8)); + try + { + sb.append(URLEncoder.encode(entry.getKey(), "UTF-8")); + } catch (UnsupportedEncodingException e) + { + sb.append(entry.getKey()); + } sb.append('='); - sb.append( - URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8)); + try + { + sb.append(URLEncoder.encode(entry.getValue(), "UTF-8")); + } catch (UnsupportedEncodingException e) + { + sb.append(entry.getValue()); + } } return sb.toString(); } @@ -386,7 +446,9 @@ public class GoogleAnalytics4 } if (repeat >= 0 && whitespace != null) { - sb.append(whitespace.repeat(repeat)); + // sb.append(whitespace.repeat(repeat)); + sb.append(String.join("", Collections.nCopies(repeat, whitespace))); + } else {