refactor(core): Decouple source control telemetry from internal hooks (no-changelog) (#10095)
This commit is contained in:
@@ -12,7 +12,7 @@ import type { SourceControlPreferences } from './types/sourceControlPreferences'
|
||||
import type { SourceControlledFile } from './types/sourceControlledFile';
|
||||
import { SOURCE_CONTROL_DEFAULT_BRANCH } from './constants';
|
||||
import type { ImportResult } from './types/importResult';
|
||||
import { InternalHooks } from '@/InternalHooks';
|
||||
import { EventRelay } from '@/eventbus/event-relay.service';
|
||||
import { getRepoType } from './sourceControlHelper.ee';
|
||||
import { SourceControlGetStatus } from './types/sourceControlGetStatus';
|
||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||
@@ -22,7 +22,7 @@ export class SourceControlController {
|
||||
constructor(
|
||||
private readonly sourceControlService: SourceControlService,
|
||||
private readonly sourceControlPreferencesService: SourceControlPreferencesService,
|
||||
private readonly internalHooks: InternalHooks,
|
||||
private readonly eventRelay: EventRelay,
|
||||
) {}
|
||||
|
||||
@Get('/preferences', { middlewares: [sourceControlLicensedMiddleware], skipAuth: true })
|
||||
@@ -83,11 +83,11 @@ export class SourceControlController {
|
||||
const resultingPreferences = this.sourceControlPreferencesService.getPreferences();
|
||||
// #region Tracking Information
|
||||
// located in controller so as to not call this multiple times when updating preferences
|
||||
void this.internalHooks.onSourceControlSettingsUpdated({
|
||||
branch_name: resultingPreferences.branchName,
|
||||
this.eventRelay.emit('source-control-settings-updated', {
|
||||
branchName: resultingPreferences.branchName,
|
||||
connected: resultingPreferences.connected,
|
||||
read_only_instance: resultingPreferences.branchReadOnly,
|
||||
repo_type: getRepoType(resultingPreferences.repositoryUrl),
|
||||
readOnlyInstance: resultingPreferences.branchReadOnly,
|
||||
repoType: getRepoType(resultingPreferences.repositoryUrl),
|
||||
});
|
||||
// #endregion
|
||||
return resultingPreferences;
|
||||
@@ -128,11 +128,11 @@ export class SourceControlController {
|
||||
}
|
||||
await this.sourceControlService.init();
|
||||
const resultingPreferences = this.sourceControlPreferencesService.getPreferences();
|
||||
void this.internalHooks.onSourceControlSettingsUpdated({
|
||||
branch_name: resultingPreferences.branchName,
|
||||
this.eventRelay.emit('source-control-settings-updated', {
|
||||
branchName: resultingPreferences.branchName,
|
||||
connected: resultingPreferences.connected,
|
||||
read_only_instance: resultingPreferences.branchReadOnly,
|
||||
repo_type: getRepoType(resultingPreferences.repositoryUrl),
|
||||
readOnlyInstance: resultingPreferences.branchReadOnly,
|
||||
repoType: getRepoType(resultingPreferences.repositoryUrl),
|
||||
});
|
||||
return resultingPreferences;
|
||||
} catch (error) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import Container, { Service } from 'typedi';
|
||||
import { Service } from 'typedi';
|
||||
import path from 'path';
|
||||
import {
|
||||
getTagsPath,
|
||||
@@ -30,7 +30,7 @@ import type { TagEntity } from '@db/entities/TagEntity';
|
||||
import type { Variables } from '@db/entities/Variables';
|
||||
import type { SourceControlWorkflowVersionId } from './types/sourceControlWorkflowVersionId';
|
||||
import type { ExportableCredential } from './types/exportableCredential';
|
||||
import { InternalHooks } from '@/InternalHooks';
|
||||
import { EventRelay } from '@/eventbus/event-relay.service';
|
||||
import { TagRepository } from '@db/repositories/tag.repository';
|
||||
import { Logger } from '@/Logger';
|
||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||
@@ -52,6 +52,7 @@ export class SourceControlService {
|
||||
private sourceControlExportService: SourceControlExportService,
|
||||
private sourceControlImportService: SourceControlImportService,
|
||||
private tagRepository: TagRepository,
|
||||
private readonly eventRelay: EventRelay,
|
||||
) {
|
||||
const { gitFolder, sshFolder, sshKeyName } = sourceControlPreferencesService;
|
||||
this.gitFolder = gitFolder;
|
||||
@@ -291,7 +292,8 @@ export class SourceControlService {
|
||||
});
|
||||
|
||||
// #region Tracking Information
|
||||
void Container.get(InternalHooks).onSourceControlUserFinishedPushUI(
|
||||
this.eventRelay.emit(
|
||||
'source-control-user-finished-push-ui',
|
||||
getTrackingInformationFromPostPushResult(statusResult),
|
||||
);
|
||||
// #endregion
|
||||
@@ -368,7 +370,8 @@ export class SourceControlService {
|
||||
}
|
||||
|
||||
// #region Tracking Information
|
||||
void Container.get(InternalHooks).onSourceControlUserFinishedPullUI(
|
||||
this.eventRelay.emit(
|
||||
'source-control-user-finished-pull-ui',
|
||||
getTrackingInformationFromPullResult(statusResult),
|
||||
);
|
||||
// #endregion
|
||||
@@ -421,11 +424,13 @@ export class SourceControlService {
|
||||
|
||||
// #region Tracking Information
|
||||
if (options.direction === 'push') {
|
||||
void Container.get(InternalHooks).onSourceControlUserStartedPushUI(
|
||||
this.eventRelay.emit(
|
||||
'source-control-user-started-push-ui',
|
||||
getTrackingInformationFromPrePushResult(sourceControlledFiles),
|
||||
);
|
||||
} else if (options.direction === 'pull') {
|
||||
void Container.get(InternalHooks).onSourceControlUserStartedPullUI(
|
||||
this.eventRelay.emit(
|
||||
'source-control-user-started-pull-ui',
|
||||
getTrackingInformationFromPullResult(sourceControlledFiles),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -121,58 +121,43 @@ function filterSourceControlledFilesUniqueIds(files: SourceControlledFile[]) {
|
||||
);
|
||||
}
|
||||
|
||||
export function getTrackingInformationFromPullResult(result: SourceControlledFile[]): {
|
||||
cred_conflicts: number;
|
||||
workflow_conflicts: number;
|
||||
workflow_updates: number;
|
||||
} {
|
||||
export function getTrackingInformationFromPullResult(result: SourceControlledFile[]) {
|
||||
const uniques = filterSourceControlledFilesUniqueIds(result);
|
||||
return {
|
||||
cred_conflicts: uniques.filter(
|
||||
credConflicts: uniques.filter(
|
||||
(file) =>
|
||||
file.type === 'credential' && file.status === 'modified' && file.location === 'local',
|
||||
).length,
|
||||
workflow_conflicts: uniques.filter(
|
||||
workflowConflicts: uniques.filter(
|
||||
(file) => file.type === 'workflow' && file.status === 'modified' && file.location === 'local',
|
||||
).length,
|
||||
workflow_updates: uniques.filter((file) => file.type === 'workflow').length,
|
||||
workflowUpdates: uniques.filter((file) => file.type === 'workflow').length,
|
||||
};
|
||||
}
|
||||
|
||||
export function getTrackingInformationFromPrePushResult(result: SourceControlledFile[]): {
|
||||
workflows_eligible: number;
|
||||
workflows_eligible_with_conflicts: number;
|
||||
creds_eligible: number;
|
||||
creds_eligible_with_conflicts: number;
|
||||
variables_eligible: number;
|
||||
} {
|
||||
export function getTrackingInformationFromPrePushResult(result: SourceControlledFile[]) {
|
||||
const uniques = filterSourceControlledFilesUniqueIds(result);
|
||||
return {
|
||||
workflows_eligible: uniques.filter((file) => file.type === 'workflow').length,
|
||||
workflows_eligible_with_conflicts: uniques.filter(
|
||||
workflowsEligible: uniques.filter((file) => file.type === 'workflow').length,
|
||||
workflowsEligibleWithConflicts: uniques.filter(
|
||||
(file) => file.type === 'workflow' && file.conflict,
|
||||
).length,
|
||||
creds_eligible: uniques.filter((file) => file.type === 'credential').length,
|
||||
creds_eligible_with_conflicts: uniques.filter(
|
||||
credsEligible: uniques.filter((file) => file.type === 'credential').length,
|
||||
credsEligibleWithConflicts: uniques.filter(
|
||||
(file) => file.type === 'credential' && file.conflict,
|
||||
).length,
|
||||
variables_eligible: uniques.filter((file) => file.type === 'variables').length,
|
||||
variablesEligible: uniques.filter((file) => file.type === 'variables').length,
|
||||
};
|
||||
}
|
||||
|
||||
export function getTrackingInformationFromPostPushResult(result: SourceControlledFile[]): {
|
||||
workflows_eligible: number;
|
||||
workflows_pushed: number;
|
||||
creds_pushed: number;
|
||||
variables_pushed: number;
|
||||
} {
|
||||
export function getTrackingInformationFromPostPushResult(result: SourceControlledFile[]) {
|
||||
const uniques = filterSourceControlledFilesUniqueIds(result);
|
||||
return {
|
||||
workflows_pushed: uniques.filter((file) => file.pushed && file.type === 'workflow').length ?? 0,
|
||||
workflows_eligible: uniques.filter((file) => file.type === 'workflow').length ?? 0,
|
||||
creds_pushed:
|
||||
workflowsPushed: uniques.filter((file) => file.pushed && file.type === 'workflow').length ?? 0,
|
||||
workflowsEligible: uniques.filter((file) => file.type === 'workflow').length ?? 0,
|
||||
credsPushed:
|
||||
uniques.filter((file) => file.pushed && file.file.startsWith('credential_stubs')).length ?? 0,
|
||||
variables_pushed:
|
||||
variablesPushed:
|
||||
uniques.filter((file) => file.pushed && file.file.startsWith('variable_stubs')).length ?? 0,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user