From 4d216bae4dc5a12e09d7a54c88d221edf4e5088c Mon Sep 17 00:00:00 2001 From: Vishal Sharma Date: Tue, 29 Apr 2025 00:12:14 +0530 Subject: [PATCH] feat: init userpilot (#7579) --- frontend/package.json | 1 + frontend/src/AppRoutes/index.tsx | 17 +++++++++++ frontend/webpack.config.js | 2 ++ frontend/webpack.config.prod.js | 2 ++ frontend/yarn.lock | 50 ++++++++++++++++++++++++++++++++ 5 files changed, 72 insertions(+) diff --git a/frontend/package.json b/frontend/package.json index b1408619fa..0afaa9ea83 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -132,6 +132,7 @@ "tsconfig-paths-webpack-plugin": "^3.5.1", "typescript": "^4.0.5", "uplot": "1.6.31", + "userpilot": "1.3.9", "uuid": "^8.3.2", "web-vitals": "^0.2.4", "webpack": "5.94.0", diff --git a/frontend/src/AppRoutes/index.tsx b/frontend/src/AppRoutes/index.tsx index 73e633a673..df9b1c996a 100644 --- a/frontend/src/AppRoutes/index.tsx +++ b/frontend/src/AppRoutes/index.tsx @@ -26,6 +26,7 @@ import { QueryBuilderProvider } from 'providers/QueryBuilder'; import { Suspense, useCallback, useEffect, useState } from 'react'; import { Route, Router, Switch } from 'react-router-dom'; import { CompatRouter } from 'react-router-dom-v5-compat'; +import { Userpilot } from 'userpilot'; import { extractDomain } from 'utils/app'; import { Home } from './pageComponents'; @@ -100,6 +101,18 @@ function App(): JSX.Element { logEvent('Domain Identified', groupTraits, 'group'); } + Userpilot.identify(email, { + email, + name, + orgName, + tenant_id: hostNameParts[0], + data_region: hostNameParts[1], + tenant_url: hostname, + company_domain: domain, + source: 'signoz-ui', + isPaidUser: !!trialInfo?.trialConvertedToSubscription, + }); + posthog?.identify(email, { email, name, @@ -276,6 +289,10 @@ function App(): JSX.Element { }); } + if (process.env.USERPILOT_KEY) { + Userpilot.initialize(process.env.USERPILOT_KEY); + } + Sentry.init({ dsn: process.env.SENTRY_DSN, tunnel: process.env.TUNNEL_URL, diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js index 8331a2d4e4..c7997b3e0c 100644 --- a/frontend/webpack.config.js +++ b/frontend/webpack.config.js @@ -24,6 +24,7 @@ const plugins = [ CUSTOMERIO_SITE_ID: process.env.CUSTOMERIO_SITE_ID, CUSTOMERIO_ID: process.env.CUSTOMERIO_ID, POSTHOG_KEY: process.env.POSTHOG_KEY, + USERPILOT_KEY: process.env.USERPILOT_KEY, SENTRY_AUTH_TOKEN: process.env.SENTRY_AUTH_TOKEN, SENTRY_ORG: process.env.SENTRY_ORG, SENTRY_PROJECT_ID: process.env.SENTRY_PROJECT_ID, @@ -43,6 +44,7 @@ const plugins = [ CUSTOMERIO_SITE_ID: process.env.CUSTOMERIO_SITE_ID, CUSTOMERIO_ID: process.env.CUSTOMERIO_ID, POSTHOG_KEY: process.env.POSTHOG_KEY, + USERPILOT_KEY: process.env.USERPILOT_KEY, SENTRY_AUTH_TOKEN: process.env.SENTRY_AUTH_TOKEN, SENTRY_ORG: process.env.SENTRY_ORG, SENTRY_PROJECT_ID: process.env.SENTRY_PROJECT_ID, diff --git a/frontend/webpack.config.prod.js b/frontend/webpack.config.prod.js index f9121c16f7..bf00f2a9d8 100644 --- a/frontend/webpack.config.prod.js +++ b/frontend/webpack.config.prod.js @@ -29,6 +29,7 @@ const plugins = [ CUSTOMERIO_SITE_ID: process.env.CUSTOMERIO_SITE_ID, CUSTOMERIO_ID: process.env.CUSTOMERIO_ID, POSTHOG_KEY: process.env.POSTHOG_KEY, + USERPILOT_KEY: process.env.USERPILOT_KEY, SENTRY_AUTH_TOKEN: process.env.SENTRY_AUTH_TOKEN, SENTRY_ORG: process.env.SENTRY_ORG, SENTRY_PROJECT_ID: process.env.SENTRY_PROJECT_ID, @@ -53,6 +54,7 @@ const plugins = [ CUSTOMERIO_SITE_ID: process.env.CUSTOMERIO_SITE_ID, CUSTOMERIO_ID: process.env.CUSTOMERIO_ID, POSTHOG_KEY: process.env.POSTHOG_KEY, + USERPILOT_KEY: process.env.USERPILOT_KEY, SENTRY_AUTH_TOKEN: process.env.SENTRY_AUTH_TOKEN, SENTRY_ORG: process.env.SENTRY_ORG, SENTRY_PROJECT_ID: process.env.SENTRY_PROJECT_ID, diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 9c5785739b..81f6bc8d80 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -3135,6 +3135,30 @@ strict-event-emitter "^0.2.4" web-encoding "^1.1.5" +"@ndhoule/each@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@ndhoule/each/-/each-2.0.1.tgz#bbed372a603e0713a3193c706a73ddebc5b426a9" + integrity sha512-wHuJw6x+rF6Q9Skgra++KccjBozCr9ymtna0FhxmV/8xT/hZ2ExGYR8SV8prg8x4AH/7mzDYErNGIVHuzHeybw== + dependencies: + "@ndhoule/keys" "^2.0.0" + +"@ndhoule/includes@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@ndhoule/includes/-/includes-2.0.1.tgz#051ff5eb042c8fa17e7158f0a8a70172e1affaa5" + integrity sha512-Q8zN6f3yIhxgBwZ5ldLozHqJlc/fRQ5+hFFsPMFeC9SJvz0nq8vG9hoRXL1c1iaNFQd7yAZIy2igQpERoFqxqg== + dependencies: + "@ndhoule/each" "^2.0.1" + +"@ndhoule/keys@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@ndhoule/keys/-/keys-2.0.0.tgz#3d64ae677c65a261747bf3a457c62eb292a4e0ce" + integrity sha512-vtCqKBC1Av6dsBA8xpAO+cgk051nfaI+PnmTZep2Px0vYrDvpUmLxv7z40COlWH5yCpu3gzNhepk+02yiQiZNw== + +"@ndhoule/pick@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@ndhoule/pick/-/pick-2.0.0.tgz#e1eb1a6ca3243eef56daa095c3a1612c74a52156" + integrity sha512-xkYtpf1pRd8egwvl5tJcdGu+GBd6ZZH3S/zoIQ9txEI+pHF9oTIlxMC9G4CB3sRugAeLgu8qYJGl3tnxWq74Qw== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -6713,6 +6737,11 @@ compare-func@^2.0.0: array-ify "^1.0.0" dot-prop "^5.1.0" +component-indexof@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-indexof/-/component-indexof-0.0.3.tgz#11d091312239eb8f32c8f25ae9cb002ffe8d3c24" + integrity sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw== + compressible@~2.0.16: version "2.0.18" resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" @@ -10742,6 +10771,11 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +is@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" + integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -13130,6 +13164,11 @@ nwsapi@^2.2.0: resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz" integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g== +obj-case@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/obj-case/-/obj-case-0.2.1.tgz#13a554d04e5ca32dfd9d566451fd2b0e11007f1a" + integrity sha512-PquYBBTy+Y6Ob/O2574XHhDtHJlV1cJHMCgW+rDRc9J5hhmRelJB3k5dTK/3cVmFVtzvAKuENeuLpoyTzMzkOg== + object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -17466,6 +17505,17 @@ use-sync-external-store@^1.0.0: resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +userpilot@1.3.9: + version "1.3.9" + resolved "https://registry.yarnpkg.com/userpilot/-/userpilot-1.3.9.tgz#6374083f3e84cbf1fc825133588b5b499054271b" + integrity sha512-V0QIuIlAJPB8s3j+qtv7BW7NKSXthlZWuowIu+IZOMGLgUbqQTaSW5m1Ct4wJviPKUNOi8kbhCXN4c4b3zcJzg== + dependencies: + "@ndhoule/includes" "^2.0.1" + "@ndhoule/pick" "^2.0.0" + component-indexof "0.0.3" + is "^3.1.0" + obj-case "^0.2.0" + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"