New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New: Add endpoint/data contract to log telemetry to internal api #3830
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
export * from './activity'; | ||
export * from './app-insights'; | ||
export * from './telemetry-api'; | ||
export * from './hints'; |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,30 +3,23 @@ type Properties = { [key: string]: string }; | |
|
||
type TelemetryItem = { | ||
data: { | ||
baseData: { | ||
measurements: Measurements; | ||
name: string; | ||
properties: Properties; | ||
ver?: number; | ||
}; | ||
baseType: string; | ||
measurements: Measurements; | ||
name: string; | ||
properties: Properties; | ||
}; | ||
iKey: string; | ||
name: string; | ||
type: string; | ||
time: string; | ||
}; | ||
|
||
const appInsightsEndpoint = 'https://dc.services.visualstudio.com/v2/track'; | ||
const telemetryEndPoint = 'https://webhint-telemetry.azurewebsites.net/api/log'; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @hxlnt just want confirmation this is what we want: to use our Azure Function to report the telemetry to app insights so we can clean up any extra information that we do not want to store. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes. Also, we may eventually want to redirect a custom subdomain (like webhint.io/telemetry) to this endpoint to make it more official. I talked about that with Tony, but we decided that we can do that as part of another task. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. SGTM. |
||
|
||
let nameKey = ''; | ||
let sendTimeout: NodeJS.Timeout | null = null; | ||
let telemetryQueue: TelemetryItem[] = []; | ||
|
||
let options = { | ||
batchDelay: 15000, | ||
defaultProperties: {} as Properties, | ||
enabled: false, | ||
instrumentationKey: '8ef2b55b-2ce9-4c33-a09a-2c3ef605c97d', | ||
molant marked this conversation as resolved.
Show resolved
Hide resolved
|
||
post: (url: string, data: string) => { | ||
return Promise.resolve(200); | ||
} | ||
|
@@ -40,7 +33,6 @@ export const enabled = () => { | |
/** Initialize telemetry with the provided options */ | ||
export const initTelemetry = (opts: Partial<typeof options>) => { | ||
options = { ...options, ...opts }; | ||
nameKey = options.instrumentationKey.replace(/-/g, ''); | ||
}; | ||
|
||
/** Enable or disable telemetry */ | ||
|
@@ -59,7 +51,7 @@ const sendTelemetry = async () => { | |
telemetryQueue = []; | ||
|
||
try { | ||
const status = await options.post(appInsightsEndpoint, data); | ||
const status = await options.post(telemetryEndPoint, data); | ||
|
||
/* istanbul ignore next */ | ||
if (status !== 200) { | ||
|
@@ -70,24 +62,20 @@ const sendTelemetry = async () => { | |
} | ||
}; | ||
|
||
const track = async (type: string, data: TelemetryItem['data']['baseData']) => { | ||
const track = async (type: string, data: TelemetryItem['data']) => { | ||
if (!enabled()) { | ||
return; | ||
} | ||
|
||
telemetryQueue.push({ | ||
data: { | ||
baseData: { | ||
measurements: data.measurements, | ||
name: data.name, | ||
properties: { ...options.defaultProperties, ...data.properties }, | ||
ver: 2 | ||
}, | ||
baseType: `${type}Data` | ||
measurements: data.measurements, | ||
name: data.name, | ||
properties: { ...options.defaultProperties, ...data.properties } | ||
}, | ||
iKey: options.instrumentationKey, | ||
name: `Microsoft.ApplicationInsights.${nameKey}.${type}`, | ||
time: new Date().toISOString() | ||
time: new Date().toISOString(), | ||
type: `${type}Data` | ||
|
||
}); | ||
|
||
if (!options.batchDelay) { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the version added automatically when sending the telemetry? I know we have a few metrics around this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this tracking webhint version? A bunch of other places (including webhint.io) had this hardcoded to 2, so I thought this was the v2 of the app insights REST API. If you look at Line 84 of this file (before change), you will see if set to 2.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TBH, I don't know. @antross it he one that took care of the telemetry and now you so probably you know best how it works 😅
Let's get #3837 merged first and then this one, sounds good?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good ... looks like that one is merged now, is this one good to go then?