Skip to content
This repository was archived by the owner on Feb 24, 2023. It is now read-only.

Commit 40f55c4

Browse files
authored
Merge pull request #100 from scale8/tracking-schema-updates
Tracking schema auto updates...
2 parents 7f5fca9 + ab9b89f commit 40f55c4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+246
-293
lines changed

api/src/accounts/AccountService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export default class AccountService {
2525
account.enabled = true;
2626
account.cancelTrial();
2727

28-
await accountRepo.save(account, 'SYSTEM', OperationOwner.SYSTEM);
28+
await accountRepo.save(account, 'SYSTEM');
2929
}
3030
}
3131

api/src/bootstrap/Scale8Setup.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export default class Scale8Setup {
6060
const foundUser = await this.repoFactory(User).findOne({ _email: user.email });
6161
if (foundUser === null) {
6262
this.logger.info(`Scale8 user '${user.email}' not found, creating new user...`).then();
63-
return this.repoFactory(User).save(user, 'SYSTEM', OperationOwner.SYSTEM);
63+
return this.repoFactory(User).save(user, 'SYSTEM');
6464
} else {
6565
this.logger.info(`Scale8 user '${user.email}' already exists...`).then();
6666
return foundUser;
@@ -112,7 +112,6 @@ export default class Scale8Setup {
112112
true,
113113
),
114114
owner,
115-
OperationOwner.USER,
116115
);
117116
} else {
118117
this.logger.info(`Scale8 platform '${name}' already exists...`).then();

api/src/express/handlers/GitHubAuth.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,7 @@ export default class GitHubAuth extends Handler {
100100
];
101101
res.redirect(
102102
`${uiUrl}/sso/success?uid=${(
103-
await this.userRepo.save(
104-
requestingUser,
105-
'SYSTEM',
106-
OperationOwner.SYSTEM,
107-
)
103+
await this.userRepo.save(requestingUser, 'SYSTEM')
108104
).id.toString()}&token=${encodeURIComponent(sessionToken)}`,
109105
);
110106
} else {
@@ -118,7 +114,7 @@ export default class GitHubAuth extends Handler {
118114
user.sessions = [new Session(sessionToken), ...user.sessions];
119115
res.redirect(
120116
`${uiUrl}/sso/success?uid=${(
121-
await this.userRepo.save(user, 'SYSTEM', OperationOwner.SYSTEM)
117+
await this.userRepo.save(user, 'SYSTEM')
122118
).id.toString()}&token=${encodeURIComponent(sessionToken)}`,
123119
);
124120
}

api/src/jobs/Job.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,20 @@ import { updateUsageJob } from './UpdateUsage';
22
import { setupChecks } from './SetupChecks';
33
import { testJob } from './TestJob';
44
import { stripeSetup } from './StripeSetup';
5+
import { trackingSchemaUpdate } from './TrackingSchemaUpdate';
56

67
export interface Job {
78
name: string;
89
job: () => void | Promise<void>;
910
}
1011

11-
export const getJobs = () => [updateUsageJob, setupChecks, testJob, stripeSetup];
12+
export const getJobs = () => [
13+
updateUsageJob,
14+
setupChecks,
15+
testJob,
16+
stripeSetup,
17+
trackingSchemaUpdate,
18+
];
1219

1320
export const findJob = (jobs: Job[], name: string): Job | undefined =>
1421
jobs.find((_) => _.name === name);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import container from '../container/IOC.config';
2+
import BaseLogger from '../backends/logging/abstractions/BaseLogger';
3+
import TYPES from '../container/IOC.types';
4+
import RepoFromModelFactory from '../container/factoryTypes/RepoFromModelFactory';
5+
import App from '../mongo/models/tag/App';
6+
import { getAppUsageSchema } from '../utils/AppUtils';
7+
import Hash from '../core/Hash';
8+
import { updateUsageEndpointEnvironment } from '../utils/IngestEndpointEnvironmentUtils';
9+
import IngestEndpointEnvironment from '../mongo/models/data/IngestEndpointEnvironment';
10+
11+
const repoFactory = container.get<RepoFromModelFactory>(TYPES.RepoFromModelFactory);
12+
const logger = container.get<BaseLogger>(TYPES.BackendLogger);
13+
14+
export const trackingSchemaUpdate = {
15+
name: 'TrackingSchemaUpdate',
16+
job: async () => {
17+
const apps = repoFactory(App).findIterator({});
18+
19+
const appTrackingSchema = getAppUsageSchema();
20+
const appTrackingSchemaHash = Hash.hashString(JSON.stringify(appTrackingSchema));
21+
22+
logger.info(`Current app usage schema hash: ${appTrackingSchemaHash}`).then();
23+
24+
for await (const app of apps) {
25+
if (app.usageIngestEndpointEnvironmentId !== undefined) {
26+
const ingestEndpointEnvironment = await repoFactory(
27+
IngestEndpointEnvironment,
28+
).findByIdThrows(app.usageIngestEndpointEnvironmentId);
29+
if (app.usageSchemaHash != appTrackingSchemaHash) {
30+
logger.info(`App is not running the latest schema, updating it...`).then();
31+
await updateUsageEndpointEnvironment(
32+
'SYSTEM',
33+
ingestEndpointEnvironment,
34+
appTrackingSchema,
35+
);
36+
}
37+
}
38+
}
39+
},
40+
};

api/src/jobs/UpdateUsage.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,10 @@ const updateTagManagerUsage = async () => {
6161
});
6262
if (usage === null) {
6363
//create a reference...
64-
await repoFactory(Usage).save(
65-
new Usage(account, day, value),
66-
'SYSTEM',
67-
OperationOwner.SYSTEM,
68-
);
64+
await repoFactory(Usage).save(new Usage(account, day, value), 'SYSTEM');
6965
} else {
7066
usage.requests = value;
71-
await repoFactory(Usage).save(usage, 'SYSTEM', OperationOwner.SYSTEM);
67+
await repoFactory(Usage).save(usage, 'SYSTEM');
7268
}
7369
}),
7470
);
@@ -140,12 +136,11 @@ const updateDataManagerUsage = async () => {
140136
await repoFactory(Usage).save(
141137
new Usage(account, day, value.requests, value.bytes),
142138
'SYSTEM',
143-
OperationOwner.SYSTEM,
144139
);
145140
} else {
146141
usage.requests = value.requests;
147142
usage.bytes = value.bytes;
148-
await repoFactory(Usage).save(usage, 'SYSTEM', OperationOwner.SYSTEM);
143+
await repoFactory(Usage).save(usage, 'SYSTEM');
149144
}
150145
}),
151146
);

api/src/managers/OrgManager.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,6 @@ export default class OrgManager extends Manager<Org> {
680680
true,
681681
),
682682
'SYSTEM',
683-
OperationOwner.SYSTEM,
684683
);
685684
return (
686685
await createOrg(
@@ -704,7 +703,7 @@ export default class OrgManager extends Manager<Org> {
704703
).getFromOrg(org);
705704
account.enabled = true;
706705
account.startTrial();
707-
await this.repoFactory(TagManagerAccount).save(account, me, OperationOwner.USER, {
706+
await this.repoFactory(TagManagerAccount).save(account, me, {
708707
gqlMethod: GQLMethod.CREATE,
709708
});
710709
return account.toGQLType();
@@ -721,7 +720,7 @@ export default class OrgManager extends Manager<Org> {
721720
).getFromOrg(org);
722721
account.enabled = true;
723722
account.startTrial();
724-
await this.repoFactory(DataManagerAccount).save(account, me, OperationOwner.USER, {
723+
await this.repoFactory(DataManagerAccount).save(account, me, {
725724
gqlMethod: GQLMethod.CREATE,
726725
});
727726
return account.toGQLType();
@@ -1025,7 +1024,7 @@ export default class OrgManager extends Manager<Org> {
10251024
return await this.orgAuth.asUserWithEditAccess(ctx, orgId, async (me) => {
10261025
const org = await fetchOrg(orgId);
10271026
org.bulkGQLSet(args.orgUpdateInput, ['name']);
1028-
await this.repoFactory(Org).save(org, me, OperationOwner.USER, {
1027+
await this.repoFactory(Org).save(org, me, {
10291028
gqlMethod: GQLMethod.UPDATE_PROPERTIES,
10301029
userComments: args.orgUpdateInput.comments,
10311030
});
@@ -1038,7 +1037,6 @@ export default class OrgManager extends Manager<Org> {
10381037
await this.repoFactory(Org).delete(
10391038
org,
10401039
me,
1041-
OperationOwner.USER,
10421040
GQLMethod.DELETE,
10431041
args.orgDeleteInput.comments,
10441042
);
@@ -1151,7 +1149,7 @@ export default class OrgManager extends Manager<Org> {
11511149
const accountRepository = this.repoFactory(accountType);
11521150

11531151
const deleteAccount = async () => {
1154-
await accountRepository.delete(account, 'SYSTEM', OperationOwner.SYSTEM);
1152+
await accountRepository.delete(account, 'SYSTEM');
11551153
// generate a new inactive account
11561154
// todo... this is bad.... FIX IT. Data manager is breaking here for obvious reasons.
11571155
const buildNewAccount = () => {
@@ -1174,7 +1172,6 @@ export default class OrgManager extends Manager<Org> {
11741172
await accountRepository.save(
11751173
buildNewAccount(),
11761174
'SYSTEM',
1177-
OperationOwner.SYSTEM,
11781175
{
11791176
gqlMethod: GQLMethod.CREATE,
11801177
},

api/src/managers/UserManager.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import PasswordReset from '../mongo/models/PasswordReset';
1212
import TYPES from '../container/IOC.types';
1313
import GenericError from '../errors/GenericError';
1414
import { authenticator } from 'otplib';
15-
import OperationOwner from '../enums/OperationOwner';
1615
import UserNotificationManager from './UserNotificationManager';
1716
import userMessages from '../errors/UserMessages';
1817
import GQLError from '../errors/GQLError';
@@ -497,7 +496,7 @@ export default class UserManager extends Manager<User> {
497496
resetAPIToken: async (parent: any, args: any, ctx: CTX) => {
498497
return await this.userAuth.asUser(ctx, async (me) => {
499498
me.resetAPIToken(await this.config.getEncryptionSalt());
500-
await this.repoFactory(User).save(me, 'SYSTEM', OperationOwner.SYSTEM);
499+
await this.repoFactory(User).save(me, 'SYSTEM');
501500
return me.apiToken;
502501
});
503502
},
@@ -587,7 +586,7 @@ export default class UserManager extends Manager<User> {
587586
);
588587
}
589588
me.twoFactorAuth = true;
590-
await this.repoFactory(User).save(me, 'SYSTEM', OperationOwner.SYSTEM);
589+
await this.repoFactory(User).save(me, 'SYSTEM');
591590
return true;
592591
});
593592
},
@@ -608,7 +607,7 @@ export default class UserManager extends Manager<User> {
608607
);
609608
}
610609
me.twoFactorAuth = false;
611-
await this.repoFactory(User).save(me, 'SYSTEM', OperationOwner.SYSTEM);
610+
await this.repoFactory(User).save(me, 'SYSTEM');
612611
return true;
613612
});
614613
},
@@ -628,14 +627,14 @@ export default class UserManager extends Manager<User> {
628627
args.changePasswordInput.new_password,
629628
await this.config.getEncryptionSalt(),
630629
);
631-
await this.repoFactory(User).save(user, 'SYSTEM', OperationOwner.SYSTEM);
630+
await this.repoFactory(User).save(user, 'SYSTEM');
632631
return true;
633632
});
634633
},
635634
removeGitHubLink: async (parent: any, args: any, ctx: CTX) => {
636635
return await this.userAuth.asUser(ctx, async (me) => {
637636
me.github = undefined;
638-
await this.repoFactory(User).save(me, 'SYSTEM', OperationOwner.SYSTEM);
637+
await this.repoFactory(User).save(me, 'SYSTEM');
639638

640639
return true;
641640
});
@@ -655,7 +654,7 @@ export default class UserManager extends Manager<User> {
655654
}
656655
}
657656
me.bulkGQLSet(args.meUpdateInput);
658-
await this.repoFactory(User).save(me, 'SYSTEM', OperationOwner.SYSTEM);
657+
await this.repoFactory(User).save(me, 'SYSTEM');
659658
return true;
660659
});
661660
},
@@ -691,7 +690,7 @@ export default class UserManager extends Manager<User> {
691690
// Remove github link
692691
me.github = undefined;
693692

694-
await this.repoFactory(User).save(me, 'SYSTEM', OperationOwner.SYSTEM);
693+
await this.repoFactory(User).save(me, 'SYSTEM');
695694

696695
await this.repoFactory(User).delete(me, me);
697696
return true;
@@ -714,7 +713,6 @@ export default class UserManager extends Manager<User> {
714713
const reset = await this.repoFactory(PasswordReset).save(
715714
new PasswordReset(user),
716715
'SYSTEM',
717-
OperationOwner.SYSTEM,
718716
);
719717
//send email...
720718
await this.mailer.sendEmail(user.email, 'Password Reset', 'PasswordReset.twig', {
@@ -747,7 +745,7 @@ export default class UserManager extends Manager<User> {
747745
await this.config.getEncryptionSalt(),
748746
);
749747
user.twoFactorAuth = false;
750-
await this.repoFactory(User).save(user, 'SYSTEM', OperationOwner.SYSTEM);
748+
await this.repoFactory(User).save(user, 'SYSTEM');
751749
//send email
752750
await this.mailer.sendEmail(user.email, 'Password Changed', 'PasswordChanged.twig', {
753751
firstName: user.firstName,

api/src/managers/tag/ActionGroupDistributionManager.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import ActionGroupDistribution from '../../mongo/models/tag/ActionGroupDistribut
88
import Rule from '../../mongo/models/tag/Rule';
99
import Revision from '../../mongo/models/tag/Revision';
1010
import GQLError from '../../errors/GQLError';
11-
import OperationOwner from '../../enums/OperationOwner';
1211
import GQLMethod from '../../enums/GQLMethod';
1312
import userMessages from '../../errors/UserMessages';
1413
import {
@@ -235,7 +234,6 @@ export default class ActionGroupDistributionManager extends Manager<ActionGroupD
235234
await this.repoFactory(ActionGroupDistribution).save(
236235
actionGroupDistribution,
237236
me,
238-
OperationOwner.USER,
239237
{
240238
gqlMethod: GQLMethod.REORDER_LINKED_ENTITIES,
241239
opConnectedModels: await this.repoFactory(ActionGroup).findByIds(
@@ -306,7 +304,7 @@ export default class ActionGroupDistributionManager extends Manager<ActionGroupD
306304
(_) => !_.id.equals(actionGroupDistribution.id),
307305
),
308306
);
309-
await this.repoFactory(Rule).save(rule, me, OperationOwner.USER, {
307+
await this.repoFactory(Rule).save(rule, me, {
310308
gqlMethod: GQLMethod.DELETE_LINKED_ENTITY,
311309
userComments: data.comments,
312310
opConnectedModels: [actionGroupDistribution],
@@ -333,7 +331,6 @@ export default class ActionGroupDistributionManager extends Manager<ActionGroupD
333331
await this.repoFactory(ActionGroupDistribution).save(
334332
actionGroupDistribution,
335333
me,
336-
OperationOwner.USER,
337334
{
338335
gqlMethod: GQLMethod.UPDATE_PROPERTIES,
339336
userComments: data.comments,
@@ -392,15 +389,10 @@ export default class ActionGroupDistributionManager extends Manager<ActionGroupD
392389
);
393390
duplicate.name = data.name;
394391
return (
395-
await this.repoFactory(ActionGroupDistribution).save(
396-
duplicate,
397-
me,
398-
OperationOwner.USER,
399-
{
400-
gqlMethod: GQLMethod.UPDATE_PROPERTIES,
401-
userComments: `Updated name to ${duplicate.name}`,
402-
},
403-
)
392+
await this.repoFactory(ActionGroupDistribution).save(duplicate, me, {
393+
gqlMethod: GQLMethod.UPDATE_PROPERTIES,
394+
userComments: `Updated name to ${duplicate.name}`,
395+
})
404396
).toGQLType();
405397
},
406398
);

0 commit comments

Comments
 (0)