mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-26 14:22:23 +02:00
feat: Pass tracing info with websocket (#9627)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
@@ -8,7 +8,8 @@ import core, {
|
||||
DocumentUpdate,
|
||||
MeasureContext,
|
||||
Ref,
|
||||
TxOperations
|
||||
TxOperations,
|
||||
withContext
|
||||
} from '@hcengineering/core'
|
||||
import github, {
|
||||
DocSyncInfo,
|
||||
@@ -66,7 +67,6 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
externalDerivedSync = true
|
||||
|
||||
constructor (
|
||||
readonly ctx: MeasureContext,
|
||||
readonly client: TxOperations,
|
||||
readonly lq: LiveQuery
|
||||
) {}
|
||||
@@ -76,7 +76,14 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
|
||||
eventSync = new Map<string, Promise<void>>()
|
||||
async handleEvent<T>(integration: IntegrationContainer, derivedClient: TxOperations, evt: T): Promise<void> {
|
||||
|
||||
@withContext('review-threads-handleEvent')
|
||||
async handleEvent<T>(
|
||||
ctx: MeasureContext,
|
||||
integration: IntegrationContainer,
|
||||
derivedClient: TxOperations,
|
||||
evt: T
|
||||
): Promise<void> {
|
||||
await this.createCommentPromise
|
||||
const event = evt as PullRequestReviewThreadEvent
|
||||
|
||||
@@ -87,11 +94,11 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
return
|
||||
}
|
||||
}
|
||||
this.ctx.info('reviewThreads:handleEvent', { event, workspace: this.provider.getWorkspaceId() })
|
||||
ctx.info('reviewThreads:handleEvent', { event, workspace: this.provider.getWorkspaceId() })
|
||||
|
||||
const { project, repository } = await this.provider.getProjectAndRepository(event.repository.node_id)
|
||||
if (project === undefined || repository === undefined) {
|
||||
this.ctx.info('No project for repository', {
|
||||
ctx.info('No project for repository', {
|
||||
name: event.repository.name,
|
||||
workspace: this.provider.getWorkspaceId()
|
||||
})
|
||||
@@ -99,13 +106,14 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
|
||||
await this.eventSync.get(event.thread.node_id)
|
||||
const promise = this.processEvent(event, derivedClient, repository, integration)
|
||||
const promise = this.processEvent(ctx, event, derivedClient, repository, integration)
|
||||
this.eventSync.set(event.thread.node_id, promise)
|
||||
await promise
|
||||
this.eventSync.delete(event.thread.node_id)
|
||||
}
|
||||
|
||||
async handleDelete (
|
||||
ctx: MeasureContext,
|
||||
existing: Doc | undefined,
|
||||
info: DocSyncInfo,
|
||||
derivedClient: TxOperations,
|
||||
@@ -140,7 +148,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
}
|
||||
if (!cnt) {
|
||||
this.ctx.error('Error', { err })
|
||||
ctx.error('Error', { err })
|
||||
Analytics.handleError(err)
|
||||
await derivedClient.update(info, { error: errorToObj(err) })
|
||||
}
|
||||
@@ -148,7 +156,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
|
||||
if (existing !== undefined && deleteExisting) {
|
||||
await deleteObjects(this.ctx, this.client, [existing], account)
|
||||
await deleteObjects(ctx, this.client, [existing], account)
|
||||
}
|
||||
return true
|
||||
}
|
||||
@@ -158,6 +166,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
|
||||
private async processEvent (
|
||||
ctx: MeasureContext,
|
||||
event: PullRequestReviewThreadEvent,
|
||||
derivedClient: TxOperations,
|
||||
repo: GithubIntegrationRepository,
|
||||
@@ -183,7 +192,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
)
|
||||
externalData = response.node
|
||||
} catch (err: any) {
|
||||
this.ctx.error('Error', { err })
|
||||
ctx.error('Error', { err })
|
||||
Analytics.handleError(err)
|
||||
return
|
||||
}
|
||||
@@ -248,7 +257,9 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
}
|
||||
|
||||
@withContext('review-threads-sync')
|
||||
async sync (
|
||||
ctx: MeasureContext,
|
||||
existing: Doc | undefined,
|
||||
info: DocSyncInfo,
|
||||
parent: DocSyncInfo | undefined,
|
||||
@@ -270,7 +281,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
|
||||
// If no external document, we need to create it.
|
||||
this.createCommentPromise = this.createGithubReviewThread(container, existing, info, parent, derivedClient)
|
||||
this.createCommentPromise = this.createGithubReviewThread(ctx, container, existing, info, parent, derivedClient)
|
||||
return await this.createCommentPromise
|
||||
}
|
||||
const review = info.external as ReviewThreadExternalData
|
||||
@@ -303,17 +314,18 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
await syncChilds(info, this.client, derivedClient)
|
||||
return { needSync: githubSyncVersion, current: messageData }
|
||||
} catch (err: any) {
|
||||
this.ctx.error('Error', { err })
|
||||
ctx.error('Error', { err })
|
||||
Analytics.handleError(err)
|
||||
return { needSync: githubSyncVersion, error: errorToObj(err) }
|
||||
}
|
||||
} else {
|
||||
await this.handleDiffUpdate(existing, info, messageData, container, parent, review, account, derivedClient)
|
||||
await this.handleDiffUpdate(ctx, existing, info, messageData, container, parent, review, account, derivedClient)
|
||||
}
|
||||
return { current: messageData, needSync: githubSyncVersion }
|
||||
}
|
||||
|
||||
private async handleDiffUpdate (
|
||||
ctx: MeasureContext,
|
||||
existing: Doc,
|
||||
info: DocSyncInfo,
|
||||
reviewData: ReviewThreadData,
|
||||
@@ -354,7 +366,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
if (Object.keys(platformUpdate).length > 0) {
|
||||
// Check and update external
|
||||
if (platformUpdate.isResolved !== undefined && githubConfiguration.ResolveThreadSupported) {
|
||||
const okit = (await this.provider.getOctokit(account)) ?? container.container.octokit
|
||||
const okit = (await this.provider.getOctokit(ctx, account)) ?? container.container.octokit
|
||||
const q = `mutation updateReviewThread($threadID: ID!) {
|
||||
${platformUpdate.isResolved ? 'resolveReviewThread' : 'unresolveReviewThread'} (
|
||||
input: {
|
||||
@@ -375,7 +387,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
} catch (err: any) {
|
||||
update.isResolved = !platformUpdate.isResolved
|
||||
platformUpdate.isResolved = !platformUpdate.isResolved
|
||||
this.ctx.error('Error', { err })
|
||||
ctx.error('Error', { err })
|
||||
Analytics.handleError(err)
|
||||
}
|
||||
await derivedClient.update(info, { external: { ...info.external, isResolved: platformUpdate.isResolved } })
|
||||
@@ -411,6 +423,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
|
||||
async createGithubReviewThread (
|
||||
ctx: MeasureContext,
|
||||
container: ContainerFocus,
|
||||
existing: Doc | undefined,
|
||||
info: DocSyncInfo,
|
||||
@@ -428,7 +441,7 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
return {}
|
||||
}
|
||||
const existingReview = existing as GithubReviewThread
|
||||
const okit = (await this.provider.getOctokit(existingReview.modifiedBy)) ?? container.container.octokit
|
||||
const okit = (await this.provider.getOctokit(ctx, existingReview.modifiedBy)) ?? container.container.octokit
|
||||
|
||||
// No external version yet, create it.
|
||||
// Will be added into pending state.
|
||||
@@ -478,13 +491,15 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
return {}
|
||||
} catch (err: any) {
|
||||
this.ctx.error('Error', { err })
|
||||
ctx.error('Error', { err })
|
||||
Analytics.handleError(err)
|
||||
return { needSync: githubSyncVersion, error: errorToObj(err) }
|
||||
}
|
||||
}
|
||||
|
||||
@withContext('review-threads-externalSync')
|
||||
async externalSync (
|
||||
ctx: MeasureContext,
|
||||
integration: IntegrationContainer,
|
||||
derivedClient: TxOperations,
|
||||
kind: ExternalSyncField,
|
||||
@@ -550,9 +565,11 @@ export class ReviewThreadSyncManager implements DocSyncManager {
|
||||
}
|
||||
}
|
||||
|
||||
repositoryDisabled (integration: IntegrationContainer, repo: GithubIntegrationRepository): void {}
|
||||
repositoryDisabled (ctx: MeasureContext, integration: IntegrationContainer, repo: GithubIntegrationRepository): void {}
|
||||
|
||||
@withContext('review-threads-externalFullSync')
|
||||
async externalFullSync (
|
||||
ctx: MeasureContext,
|
||||
integration: IntegrationContainer,
|
||||
derivedClient: TxOperations,
|
||||
projects: GithubProject[],
|
||||
|
||||
Reference in New Issue
Block a user