Skip to content
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

User agent client hints support #18

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open

Conversation

pamellix
Copy link
Contributor

@pamellix pamellix commented Jan 13, 2025

📦 Published PR as canary version: 2.0.3--canary.18.12864022629.0

✨ Test out this PR locally via:

npm install @salutejs/[email protected]
# or 
yarn add @salutejs/[email protected]

@pamellix pamellix requested a review from SeanSilke January 13, 2025 12:19
@pamellix pamellix self-assigned this Jan 13, 2025
}

export class AddonInfo implements WebTelemetryAddon<AddonInfoData & AddonInfoMetadata, {}> {
data(): AddonInfoData & AddonInfoMetadata {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Паша data синхронный метод.
А getHighEntropyValues это ассинхронная операция.
Т.е. у тебя возможен вариант когда не будет нужных данных при чтении из объекта который вернул data() .

Тут по хорошему у тебя должны были сломаться какие-то тесты. Глянь есть ли такие тесты, если нет напиши.


return highEntropyValues;
}

metadata() {
return {};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Новые данные должный сюда идти, а не в data.
Все что приходит в данные ложится в именные столбцы в таблицу.
Все, что приходит в metadata ложиться в поле metadata в виде json.
Т.е. новые поля без миграции таблиц мы добавляем в metadata

@SeanSilke SeanSilke self-requested a review January 13, 2025 12:54
Copy link
Contributor

@SeanSilke SeanSilke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pamellix Паша, у нас телеметрия не умеет работать с асинхронными аддонами.
Попробуй доработать, чтобы могла.
Но для начала нужно написать тесты, которые бы падали при добавлении асинхронности в аддоны.

Copy link
Contributor

@SeanSilke SeanSilke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Паша, просто завернуть всё в await — не вариант.
Во-первых, могут возникнуть ситуации, когда код вместо параллельного выполнения будет выполняться последовательно.
Во-вторых, теперь придётся писать await везде, включая сторонние аддоны.

Мы с тобой обсуждали другой подход.
Давай еще раз обсудим голосом.

src/WebTelemetryBase.spec.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.spec.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.spec.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.spec.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.spec.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.ts Outdated Show resolved Hide resolved
src/WebTelemetryBase.ts Outdated Show resolved Hide resolved
Copy link
Contributor

@SeanSilke SeanSilke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужны правки.
mqdefault

@@ -3,21 +3,21 @@ import { WebTelemetryBase } from './WebTelemetryBase';

class Addon1 implements WebTelemetryAddon<{ addon1Data: string }, { addon1Metadata: string }> {
data() {
return { addon1Data: 'addon1Data' };
return Promise.resolve({ addon1Data: 'addon1Data' });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не нужно. Обарачиваем в Promise.resolve на староне WebTemetryBase.

}
}

class Addon2 implements WebTelemetryAddon<{ addon2Data: string }, { addon2Metadata: string }> {
data() {
return { addon2Data: 'addon2Data' };
return Promise.resolve({ addon2Data: 'addon2Data' });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не нужно

}

metadata() {
return { addon2Metadata: 'addon2Metadata' };
return Promise.resolve({ addon2Metadata: 'addon2Metadata' });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не нужно Promise.resolve . Просто оборачивай вызов metadata в Promise.resolve, а не даныне в metadata.

@@ -26,12 +26,12 @@ class WebTelemetry<T> extends WebTelemetryBase<T, T> {
return payload;
}

protected scheduleSend() {
protected async scheduleSend() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не нужно async.

@@ -62,7 +62,8 @@ describe('WebTelemetryBase', () => {
addon2Metadata: 'addon2Metadata',
};

instance.push({ data: 'data' }, { metadata: 'metadata' });
await instance.push({ data: 'data' }, { metadata: 'metadata' });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

push у нас не ассинхронный.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если убрать await, то этот тест не сможет правильно отработать, так как getEvents()[0] вернёт undefined. Такой же тест находится на webtelemetrykv.spec.ts, на 16й строке, старался на него ориентироваться

@@ -18,7 +18,7 @@ const fakeTransport = new (class implements WebTelemetryTransport {
}

async subscribe() {
return this.subscriber;
return await this.subscriber;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не нужно await

@@ -71,11 +71,11 @@ export class AddonNavigationPerf implements WebTelemetryAddon<AddonNavigationPer
}
}

data() {
async data() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не нужно async

return { ...this.value };
}

metadata() {
async metadata() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не нужно async

}

metadata() {
return {};
private async getHighEntropyValues(): Promise<UserAgentDataValues | null> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это потом гляну. )

return {
FCP: Math.round(this.value),
};
}

metadata() {
async metadata() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не нужно async.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants