reduce k8 events

This commit is contained in:
Maidul Islam
2023-08-24 15:41:29 -04:00
parent 8ee6710e9b
commit 50977cf788
3 changed files with 82 additions and 54 deletions
+49 -34
View File
@@ -9,6 +9,7 @@ import {
ACTION_UPDATE_SECRETS, ACTION_UPDATE_SECRETS,
ALGORITHM_AES_256_GCM, ALGORITHM_AES_256_GCM,
ENCODING_SCHEME_UTF8, ENCODING_SCHEME_UTF8,
K8_USER_AGENT_NAME,
SECRET_PERSONAL SECRET_PERSONAL
} from "../../variables"; } from "../../variables";
import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors"; import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors";
@@ -59,7 +60,7 @@ export const batchSecrets = async (req: Request, res: Response) => {
let secretPath = req.body.secretPath as string; let secretPath = req.body.secretPath as string;
let folderId = req.body.folderId as string; let folderId = req.body.folderId as string;
const createSecrets: BatchSecret[] = []; const createSecrets: BatchSecret[] = [];
const updateSecrets: BatchSecret[] = []; const updateSecrets: BatchSecret[] = [];
const deleteSecrets: { _id: Types.ObjectId, secretName: string; }[] = []; const deleteSecrets: { _id: Types.ObjectId, secretName: string; }[] = [];
@@ -154,7 +155,7 @@ export const batchSecrets = async (req: Request, res: Response) => {
}; };
}) })
}); });
const auditLogs = await Promise.all( const auditLogs = await Promise.all(
createdSecrets.map((secret, index) => { createdSecrets.map((secret, index) => {
return EEAuditLogService.createAuditLog( return EEAuditLogService.createAuditLog(
@@ -178,7 +179,7 @@ export const batchSecrets = async (req: Request, res: Response) => {
); );
await AuditLog.insertMany(auditLogs); await AuditLog.insertMany(auditLogs);
const addAction = (await EELogService.createAction({ const addAction = (await EELogService.createAction({
name: ACTION_ADD_SECRETS, name: ACTION_ADD_SECRETS,
userId: req.user?._id, userId: req.user?._id,
@@ -280,7 +281,7 @@ export const batchSecrets = async (req: Request, res: Response) => {
$in: updateSecrets.map((u) => new Types.ObjectId(u._id)) $in: updateSecrets.map((u) => new Types.ObjectId(u._id))
} }
}); });
const auditLogs = await Promise.all( const auditLogs = await Promise.all(
updateSecrets.map((secret) => { updateSecrets.map((secret) => {
return EEAuditLogService.createAuditLog( return EEAuditLogService.createAuditLog(
@@ -332,26 +333,26 @@ export const batchSecrets = async (req: Request, res: Response) => {
// handle delete secrets // handle delete secrets
if (deleteSecrets.length > 0) { if (deleteSecrets.length > 0) {
const deleteSecretIds: Types.ObjectId[] = deleteSecrets.map((s) => s._id); const deleteSecretIds: Types.ObjectId[] = deleteSecrets.map((s) => s._id);
const deletedSecretsObj = (await Secret.find({ const deletedSecretsObj = (await Secret.find({
_id: { _id: {
$in: deleteSecretIds $in: deleteSecretIds
} }
})) }))
.reduce( .reduce(
(obj: any, secret: ISecret) => ({ (obj: any, secret: ISecret) => ({
...obj, ...obj,
[secret._id.toString()]: secret [secret._id.toString()]: secret
}), }),
{} {}
); );
await Secret.deleteMany({ await Secret.deleteMany({
_id: { _id: {
$in: deleteSecretIds $in: deleteSecretIds
} }
}); });
await EESecretService.markDeletedSecretVersions({ await EESecretService.markDeletedSecretVersions({
secretIds: deleteSecretIds secretIds: deleteSecretIds
}); });
@@ -952,7 +953,7 @@ export const getSecrets = async (req: Request, res: Response) => {
channel, channel,
ipAddress: req.realIP ipAddress: req.realIP
})); }));
await EEAuditLogService.createAuditLog( await EEAuditLogService.createAuditLog(
req.authData, req.authData,
{ {
@@ -969,22 +970,36 @@ export const getSecrets = async (req: Request, res: Response) => {
); );
const postHogClient = await TelemetryService.getPostHogClient(); const postHogClient = await TelemetryService.getPostHogClient();
// reduce the number of events captured
let shouldRecordK8Event = false
if (req.authData instanceof ServiceTokenData && req.authData.userAgent == K8_USER_AGENT_NAME) {
const randomNumber = Math.random();
if (randomNumber > 0.9) {
shouldRecordK8Event = true
}
}
if (postHogClient) { if (postHogClient) {
postHogClient.capture({ const shouldCapture = req.authData.userAgent !== K8_USER_AGENT_NAME || shouldRecordK8Event;
event: "secrets pulled", const approximateForNoneCapturedEvents = secrets.length * 10
distinctId: await TelemetryService.getDistinctId({
authData: req.authData if (shouldCapture) {
}), postHogClient.capture({
properties: { event: "secrets pulled",
numberOfSecrets: secrets.length, distinctId: await TelemetryService.getDistinctId({
environment, authData: req.authData
workspaceId, }),
channel, properties: {
folderId, numberOfSecrets: shouldRecordK8Event ? approximateForNoneCapturedEvents : secrets.length,
userAgent: req.headers?.["user-agent"] environment,
} workspaceId,
}); folderId,
channel: req.authData.userAgentType,
userAgent: req.authData.userAgent
}
});
}
} }
return res.status(200).send({ return res.status(200).send({
@@ -1091,10 +1106,10 @@ export const updateSecrets = async (req: Request, res: Response) => {
tags, tags,
...(secretCommentCiphertext !== undefined && secretCommentIV && secretCommentTag ...(secretCommentCiphertext !== undefined && secretCommentIV && secretCommentTag
? { ? {
secretCommentCiphertext, secretCommentCiphertext,
secretCommentIV, secretCommentIV,
secretCommentTag secretCommentTag
} }
: {}) : {})
} }
} }
+30 -19
View File
@@ -29,6 +29,7 @@ import {
ALGORITHM_AES_256_GCM, ALGORITHM_AES_256_GCM,
ENCODING_SCHEME_BASE64, ENCODING_SCHEME_BASE64,
ENCODING_SCHEME_UTF8, ENCODING_SCHEME_UTF8,
K8_USER_AGENT_NAME,
SECRET_PERSONAL, SECRET_PERSONAL,
SECRET_SHARED SECRET_SHARED
} from "../variables"; } from "../variables";
@@ -396,7 +397,7 @@ export const createSecretHelper = async ({
keyEncoding: ENCODING_SCHEME_UTF8, keyEncoding: ENCODING_SCHEME_UTF8,
metadata metadata
}).save(); }).save();
const secretVersion = new SecretVersion({ const secretVersion = new SecretVersion({
secret: secret._id, secret: secret._id,
version: secret.version, version: secret.version,
@@ -416,7 +417,7 @@ export const createSecretHelper = async ({
algorithm: ALGORITHM_AES_256_GCM, algorithm: ALGORITHM_AES_256_GCM,
keyEncoding: ENCODING_SCHEME_UTF8 keyEncoding: ENCODING_SCHEME_UTF8
}); });
// (EE) add version for new secret // (EE) add version for new secret
await EESecretService.addSecretVersions({ await EESecretService.addSecretVersions({
secretVersions: [secretVersion] secretVersions: [secretVersion]
@@ -567,24 +568,34 @@ export const getSecretsHelper = async ({
); );
const postHogClient = await TelemetryService.getPostHogClient(); const postHogClient = await TelemetryService.getPostHogClient();
const numberOfSignupSecrets = (secrets.filter((secret) => secret?.metadata?.source === "signup")).length;
if (postHogClient && (secrets.length - numberOfSignupSecrets > 0)) { // reduce the number of events captured
postHogClient.capture({ let shouldRecordK8Event = false
event: "secrets pulled", if (authData instanceof ServiceTokenData && authData.userAgent == K8_USER_AGENT_NAME) {
distinctId: await TelemetryService.getDistinctId({ const randomNumber = Math.random();
authData if (randomNumber > 0.9) {
}), shouldRecordK8Event = true
properties: { }
numberOfSecrets: secrets.length - numberOfSignupSecrets, }
environment,
workspaceId, if (postHogClient) {
folderId, const shouldCapture = authData.userAgent !== K8_USER_AGENT_NAME || shouldRecordK8Event;
channel: authData.userAgentType, const approximateForNoneCapturedEvents = secrets.length * 10
userAgent: authData.userAgent
} if (shouldCapture) {
}); postHogClient.capture({
event: "secrets pulled",
distinctId: await TelemetryService.getDistinctId({ authData }),
properties: {
numberOfSecrets: shouldRecordK8Event ? approximateForNoneCapturedEvents : secrets.length,
environment,
workspaceId,
folderId,
channel: authData.userAgentType,
userAgent: authData.userAgent
}
});
}
} }
return secrets; return secrets;
+3 -1
View File
@@ -2,4 +2,6 @@ export enum AuthMode {
JWT = "jwt", JWT = "jwt",
SERVICE_TOKEN = "serviceToken", SERVICE_TOKEN = "serviceToken",
API_KEY = "apiKey" API_KEY = "apiKey"
} }
export const K8_USER_AGENT_NAME = "k8-operator"