From e7f1848c4ed74090439938fe50db4601fb349f5b Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Fri, 2 Sep 2022 16:47:27 +0200 Subject: [PATCH 1/2] Initial draft promoting the plugin analytics api Signed-off-by: Eric Peterson Co-authored-by: Emma White <251374+ewhite1997@users.noreply.github.com> --- .../2022-09-08-fyi-plugin-analytics-api.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 microsite/blog/2022-09-08-fyi-plugin-analytics-api.md diff --git a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md new file mode 100644 index 0000000000..24304c0d10 --- /dev/null +++ b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md @@ -0,0 +1,88 @@ +--- +# prettier-ignore +title: FYI 📣 The Plugin Analytics API +author: Eric Peterson, Spotify +authorURL: https://github.com/iamEAP +authorImageURL: https://avatars.githubusercontent.com/u/3496491?v=4 +--- + +**TL;DR** If you didn't know, now you know: the Backstage plugin analytics API is here to help you understand how developers in your organization are using Backstage. + +## What is the plugin analytics API? + +The plugin analytics API is a [utility api](https://backstage.io/docs/api/utility-apis) available by default in every Backstage instance, intended to bridge the gap between the needs of Backstage integrators and plugin developers. While Backstage integrators want visibility into the plugins they’ve installed, they lack the power to instrument those plugins. And although plugin developers have the power to instrument plugins, they can’t do so without a single, vendor-agnostic way to track events. Enter: the plugin analytics API. + +While “analytics” as a concept can be broad, the goal of the API is narrowly focused: empower those deploying Backstage to understand usage of their instance. The plugin analytics API isn’t designed to solve for observability use-cases like tracing, logging, performance monitoring, error metrics, or alerting. Rather, the API is designed to capture and quantify real user interactions, which can form the basis for metrics like daily active users, top plugins, and more. + +## Start collecting data + +Backstage core (and a few other plugins) are already instrumented with [key events](https://backstage.io/docs/plugins/analytics#key-events) that are ready for you to start collecting and analyzing. + +The simplest way to get started is to use one of the [supported analytics tools](https://backstage.io/docs/plugins/analytics#supported-analytics-tools) and install its provided API implementation like you would any other utility API. For example: + +```tsx +// packages/app/src/apis.ts +import { + analyticsApiRef, + configApiRef, + identityApiRef, +} from '@backstage/core-plugin-api'; +import { GoogleAnalytics } from '@backstage/plugin-analytics-module-ga'; + +export const apis: AnyApiFactory[] = [ + // Instantiate and register the GA Analytics API Implementation. + createApiFactory({ + api: analyticsApiRef, + deps: { configApi: configApiRef, identityApi: identityApiRef }, + factory: ({ configApi, identityApi }) => + GoogleAnalytics.fromConfig(configApi, { + identityApi, + }), + }), +]; +``` + +If your chosen analytics tool doesn’t have an integration yet, you can write a custom integration by [following these instructions](https://backstage.io/docs/plugins/analytics#writing-integrations). (And if you’re integrating with a publicly available analytics service, as opposed to a custom in-house system, why not [consider contributing it back to the community](https://backstage.io/docs/plugins/create-a-plugin)?) + +## Instrument plugins + +While some key events are already instrumented, there may be important actions in open source plugins that are un-instrumented, not to mention in your custom, InnerSource plugins. Luckily, the plugin analytics API can be leveraged by open source and InnerSource plugins all the same. + +To capture an event, invoke the `useAnalytics()` react hook and call the function it returns when the user performs the action you wish to track (e.g. merging a pull request): + +```tsx +import { useAnalytics } from '@backstage/core-plugin-api'; + +const analytics = useAnalytics(); +analytics.captureEvent('merge', pullRequestName); +``` + +Don’t worry about having to stuff additional levels of detail into just the event action and subject, you can provide extra dimensional data on the `attributes` property, as well as a primary metric on the `value` property, like this: + +```tsx +analytics.captureEvent('merge', pullRequestName, { + value: pullRequestAgeInMinutes, + attributes: { + org: orgName, + repo: repoName, + }, +}); +``` + +In situations where your plugin is tracking multiple events and you want all of those events to share common dimensional data, you can use the ``. Every event captured in child components underneath this context automatically inherits the values you set: + +```tsx +import { AnalyticsContext } from '@backstage/core-plugin-api'; + + + {children} +` to automatically decorate every event with a corresponding plugin ID and an extension name in order to facilitate plugin-level analysis. + +While the above should be enough to get you going, don’t forget to check out [the complete guide to event capture](https://backstage.io/docs/plugins/analytics#capturing-events), which covers event naming considerations, testing, and more. + +## Get involved + +If you didn’t know, now you know! If you’re passionate about data and want to help push the Backstage analytics ecosystem forward, join us in the [#analytics channel on discord](https://discord.com/channels/687207715902193673/1007303347914690610), contribute [integration ideas](https://github.com/backstage/backstage/issues/new?assignees=&labels=plugin&template=plugin_template.md&title=%5BAnalytics+Module%5D+THE+ANALYTICS+TOOL+TO+INTEGRATE), or [suggest a new analytics event](https://github.com/backstage/backstage/issues/new?assignees=&labels=enhancement&template=feature_template.md&title=[Analytics%20Event]:%20THE+EVENT+TO+CAPTURE). From 2bfe26336b79486e02113ee1b00433a598368376 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 7 Sep 2022 18:11:39 +0200 Subject: [PATCH 2/2] microsite: add fold and header for analytics blog post Signed-off-by: Patrik Oldsberg --- .../blog/2022-09-08-fyi-plugin-analytics-api.md | 4 ++++ .../blog/assets/22-09-08/analytics-api-fyi.png | Bin 0 -> 30010 bytes 2 files changed, 4 insertions(+) create mode 100644 microsite/blog/assets/22-09-08/analytics-api-fyi.png diff --git a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md index 24304c0d10..4fba242e3e 100644 --- a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md +++ b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md @@ -8,6 +8,10 @@ authorImageURL: https://avatars.githubusercontent.com/u/3496491?v=4 **TL;DR** If you didn't know, now you know: the Backstage plugin analytics API is here to help you understand how developers in your organization are using Backstage. +![The Plugin Analytics API](assets/22-09-08/analytics-api-fyi.png) + + + ## What is the plugin analytics API? The plugin analytics API is a [utility api](https://backstage.io/docs/api/utility-apis) available by default in every Backstage instance, intended to bridge the gap between the needs of Backstage integrators and plugin developers. While Backstage integrators want visibility into the plugins they’ve installed, they lack the power to instrument those plugins. And although plugin developers have the power to instrument plugins, they can’t do so without a single, vendor-agnostic way to track events. Enter: the plugin analytics API. diff --git a/microsite/blog/assets/22-09-08/analytics-api-fyi.png b/microsite/blog/assets/22-09-08/analytics-api-fyi.png new file mode 100644 index 0000000000000000000000000000000000000000..444d3fa465b8d1af72503d6afe3e05f9bac3ad30 GIT binary patch literal 30010 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 PBA{_!OC=X>>hpg9nDVzv literal 0 HcmV?d00001