From ee5173aedf213c68490a31792485b4e67e2a4f77 Mon Sep 17 00:00:00 2001
From: Tom Robinson <tlrobinson@gmail.com>
Date: Tue, 11 Oct 2016 17:28:06 -0700
Subject: [PATCH] More permissions instrumentation

---
 .../src/metabase/admin/people/components/GroupsListing.jsx | 7 +++++++
 frontend/src/metabase/admin/permissions/permissions.js     | 2 ++
 frontend/src/metabase/admin/permissions/selectors.js       | 5 +++++
 3 files changed, 14 insertions(+)

diff --git a/frontend/src/metabase/admin/people/components/GroupsListing.jsx b/frontend/src/metabase/admin/people/components/GroupsListing.jsx
index 825f9b73529..6adcb4875cc 100644
--- a/frontend/src/metabase/admin/people/components/GroupsListing.jsx
+++ b/frontend/src/metabase/admin/people/components/GroupsListing.jsx
@@ -5,6 +5,7 @@ import _ from "underscore";
 import cx from "classnames";
 
 import { AngularResourceProxy } from "metabase/lib/redux";
+import MetabaseAnalytics from "metabase/lib/analytics";
 
 import Icon from "metabase/components/Icon.jsx";
 import Input from "metabase/components/Input.jsx";
@@ -191,7 +192,9 @@ export default class GroupsListing extends Component {
         });
     }
 
+    // TODO: move this to Redux
     onAddGroupCreateButtonClicked() {
+        MetabaseAnalytics.trackEvent("People Groups", "Group Added");
         PermissionsAPI.createGroup({name: this.state.text}).then((function(newGroup) {
             const groups = this.state.groups || this.props.groups || [];
             const newGroups = sortGroups(_.union(groups, [newGroup]));
@@ -244,6 +247,7 @@ export default class GroupsListing extends Component {
         });
     }
 
+    // TODO: move this to Redux
     onEditGroupDoneClicked() {
         const groups = this.state.groups || this.props.groups || [];
         const originalGroup = _.findWhere(groups, {id: this.state.groupBeingEdited.id});
@@ -258,6 +262,7 @@ export default class GroupsListing extends Component {
         }
 
         // ok, fire off API call to change the group
+        MetabaseAnalytics.trackEvent("People Groups", "Group Updated");
         PermissionsAPI.updateGroup({id: group.id, name: group.name}).then((function (newGroup) {
             // now replace the original group with the new group and update state
             let newGroups = _.reject(groups, (g) => g.id === group.id);
@@ -274,8 +279,10 @@ export default class GroupsListing extends Component {
         });
     }
 
+    // TODO: move this to Redux
     onDeleteGroupClicked(group) {
         const groups = this.state.groups || this.props.groups || [];
+        MetabaseAnalytics.trackEvent("People Groups", "Group Deleted");
         PermissionsAPI.deleteGroup({id: group.id}).then((function () {
             const newGroups = sortGroups(_.reject(groups, (g) => g.id === group.id));
             this.setState({
diff --git a/frontend/src/metabase/admin/permissions/permissions.js b/frontend/src/metabase/admin/permissions/permissions.js
index 22d78bb600c..f17431d9e60 100644
--- a/frontend/src/metabase/admin/permissions/permissions.js
+++ b/frontend/src/metabase/admin/permissions/permissions.js
@@ -1,6 +1,7 @@
 import { createAction, createThunkAction, handleActions, combineReducers, AngularResourceProxy } from "metabase/lib/redux";
 
 import { canEditPermissions } from "metabase/lib/groups";
+import MetabaseAnalytics from "metabase/lib/analytics";
 
 const MetadataApi = new AngularResourceProxy("Metabase", ["db_list_with_tables"]);
 const PermissionsApi = new AngularResourceProxy("Permissions", ["groups", "graph", "updateGraph"]);
@@ -41,6 +42,7 @@ export const updatePermission = createThunkAction(UPDATE_PERMISSION, ({ groupId,
 const SAVE_PERMISSIONS = "metabase/admin/permissions/SAVE_PERMISSIONS";
 export const savePermissions = createThunkAction(SAVE_PERMISSIONS, () =>
     async (dispatch, getState) => {
+        MetabaseAnalytics.trackEvent("Permissions", "save");
         const { permissions, revision } = getState().permissions;
         let result = await PermissionsApi.updateGraph({
             revision: revision,
diff --git a/frontend/src/metabase/admin/permissions/selectors.js b/frontend/src/metabase/admin/permissions/selectors.js
index 6246c65825b..f12b05850a8 100644
--- a/frontend/src/metabase/admin/permissions/selectors.js
+++ b/frontend/src/metabase/admin/permissions/selectors.js
@@ -5,6 +5,7 @@ import { createSelector } from 'reselect';
 import { push } from "react-router-redux";
 
 import Metadata from "metabase/meta/metadata/Metadata";
+import MetabaseAnalytics from "metabase/lib/analytics";
 
 import type { DatabaseId } from "metabase/meta/types/Database";
 import type { SchemaName } from "metabase/meta/types/Table";
@@ -92,6 +93,7 @@ export const getTablesPermissionsGrid = createSelector(
                         return getFieldsPermission(permissions, groupId, entityId);
                     },
                     updater(groupId, entityId, value) {
+                        MetabaseAnalytics.trackEvent("Permissions", "fields", value);
                         return updateFieldsPermission(permissions, groupId, entityId, value, metadata);
                     },
                     confirm(groupId, entityId, value) {
@@ -143,6 +145,7 @@ export const getSchemasPermissionsGrid = createSelector(
                         return getTablesPermission(permissions, groupId, entityId);
                     },
                     updater(groupId, entityId, value) {
+                        MetabaseAnalytics.trackEvent("Permissions", "tables", value);
                         return updateTablesPermission(permissions, groupId, entityId, value, metadata);
                     },
                     postAction(groupId, { databaseId, schemaName }, value) {
@@ -192,6 +195,7 @@ export const getDatabasesPermissionsGrid = createSelector(
                         return getSchemasPermission(permissions, groupId, entityId);
                     },
                     updater(groupId, entityId, value) {
+                        MetabaseAnalytics.trackEvent("Permissions", "schemas", value);
                         return updateSchemasPermission(permissions, groupId, entityId, value, metadata)
                     },
                     postAction(groupId, { databaseId }, value) {
@@ -220,6 +224,7 @@ export const getDatabasesPermissionsGrid = createSelector(
                         return getNativePermission(permissions, groupId, entityId);
                     },
                     updater(groupId, entityId, value) {
+                        MetabaseAnalytics.trackEvent("Permissions", "native", value);
                         return updateNativePermission(permissions, groupId, entityId, value, metadata);
                     },
                     confirm(groupId, entityId, value) {
-- 
GitLab